Учитывая такой формат XML, я пытаюсь создать схему XSD для его проверки.
<RootNode>
<ChildA />
<ChildC />
<ChildB />
<ChildB />
<ChildA />
</RootNode>
Требования следующие:
- ChildA, ChildB и ChildC могут встречаться в любом порядке. (
<xs:sequence>
неподходящий) - ChildA обязательный, но может происходить несколько раз.
- ChildB является необязательным и может возникать несколько раз.
- ChildC является необязательным и может встречаться только один раз.
Техника, которую я обычно использую для создания неупорядоченного списка узлов, заключается в использовании <xs:choice maxOccurs="unbounded">
с каждым возможным node в списке, однако я не могу создать ограничение minOccurs="1"
для ChildA и maxOccurs="1"
запрет на ChildC. (Количество вариантов выбора имеет приоритет над элементами элементов здесь).
<xs:element name="RootNode">
<xs:complexType>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="ChildA" minOccurs="1"/>
<xs:element name="ChildB" />
<xs:element name="ChildC" maxOccurs="1"/>
</xs:choice>
</xs:complexType>
</xs:element>