Я довольно новичок в проверке XSD, поэтому может быть что-то важное, чего мне не хватает, но я немного огляделся и, похоже, не могу найти подходящего решения.
Я пытаюсь сделать что-то вроде этого:
Рассмотрим этот пример XML, я вынужден использовать (упрощенно)
.
.
.
<categories>
<orange id="1" value="10">...</orange>
<orange id="2" value="10">...</orange>
<brown id="1" value="10">...</brown>
<brown id="2" value="10">...</brown>
<brown id="3" value="10">...</brown>
.
.
.
</categories>
В основном я хочучтобы гарантировать, что идентификатор уникален для всех оранжевых и коричневых категорий, но не уникален в целом.
Мой первоначальный XSD будет выглядеть примерно так:
.
.
.
<xs:element name="categories">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="orange">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" use="required"/>
<xs:attribute name="value" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="brown ">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" use="required"/>
<xs:attribute name="value" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
<xs:key name="catKeys">
<xs:selector xpath="/*" />
<xs:field xpath="@id" />
</xs:key>
</xs:element>
Над XSD проверяется уникальность идентификаторапо всем категориям -> XML не будет проверяться.