У меня есть XML-схема (XSD), который определяет элемент как обязательный (назовите его родителем); этот родитель имеет, позволяет, говорят, пять дочерних элементов, которые могут все быть дополнительными, НО ПО КРАЙНЕЙ МЕРЕ ОДИН дочерний элемент должен произойти.
Как я могу указать это в xsd?
Разъясниться: дети являются различными элементами и дополнительный. Например.
<Parent>
<Child1>contents are different to other siblings and arbitrary</Child1>
<Child2>can be text, a simple element, or another complex element</Child2>
<Child3>etc.. etc</Child3>
</Parent>
<xs:complexType name="Parent">
<xs:sequence>
<xs:element minOccurs="0" name="Child1" type="xs:string"/>
<xs:element minOccurs="0" name="Child2" />
<xs:element minOccurs="0" name="Child3" />
</xs:sequence>
</xs:complexType>
Даже при том, что каждый ребенок является дополнительным, родитель должен иметь по крайней мере одного ребенка.
Всегда есть прямой подход:
<xs:complexType name="Parent">
<xs:choice>
<xs:sequence>
<xs:element name="Child1"/>
<xs:element name="Child2" minOccurs="0"/>
<xs:element name="Child3" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Child2"/>
<xs:element name="Child3" minOccurs="0"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Child3"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
Используйте minOccurs, например
<xsd:complexType name="Parent">
<xsd:sequence>
<xsd:element minOccurs="1" maxOccurs="5" name="Child" type="q10:string"/>
</xsd:sequence>
</xsd:complexType>
Вы можете создать группу подстановки, которая включает все ваши дочерние элементы. Для этого вы используете атрибут minOccurs
, чтобы указать, что в документе должен присутствовать хотя бы один элемент группы.