2013-05-06 4 views
1

Я хочу, чтобы иметь возможность проверять атрибут в элементе на основе значения другого атрибута. Что-то вроде этого.XML Schema - проверка одного атрибута на основе значения другого

<Root> 
    <Vehicle type="Unicycle" numWheels="1" /> 
    <Vehicle type="Bicycle" numWheels="2" /> 
</Root> 

Требование было бы, что если типы транспортных средств является «Моноцикл», то numWheels должен быть 1. В противном случае я не волнует, сколько колес у него есть.

У меня есть что-то подобное в качестве отправной точки для типа, где я хочу наложить ограничение.

<!-- Number of Wheels restrictions --> 
<xsd:simpleType name="NumberOfWheelsType"> 
    <xsd:restriction base="xsd:integer"> 
     <xsd:minInclusive value="1"/> 
    </xsd:restriction> 
</xsd:simpleType> 

Должен признаться, я не совсем уверен, с чего начать создавать ограничение, которое я хочу, поэтому любое руководство будет оценено по достоинству.

Я использую xmllint для проверки схемы, которая, как я думаю, ограничит меня XML-схемой 1.0 (исправьте меня, если я ошибаюсь, потому что я не могу доказать это так или иначе).

ответ

2

Перекрестные ограничения по значениям атрибутов требуют XSD 1.1, и, как вы правильно догадались, xmllint поддерживает только XSD 1.0. Вам нужно будет добавить в ваш трубопровод еще одну технологию проверки: либо XSD 1.1, либо Schematron, либо пользовательский валидатор, написанный в XSLT.

+0

Я скорее пришел к выводу, что мне может потребоваться перейти к XSD 1.1. Предполагая, что я могу это сделать, что мне нужно для достижения своей цели? – Nerdio

+0

Ищите информацию об утверждениях в XSD 1.1. –