[英]XSD unlimited list of 2 different elements, at least one of either, any order
[英]XSD schema for multiple XML elements with at least one present, in any order
这是我的XML:
<animals>
<cat/>
<dog/>
<cat/>
<cat/>
</animals>
<cat/>
和<dog/>
元素可以按任何顺序排列,并且可以有任意数量。 但我确实需要确保至少有一个<cat/>
和至少一个<dog/>
。 我不明白XSD的外观。
这是我尝试的:
<xs:complexType name="animals">
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="cat" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="dog" minOccurs="1" maxOccurs="unbounded"/>
</xs:choice>
</xs:complexType>
例如,当没有<cat/>
,它不会显示任何错误。
使用XSD 1.1,它应该很简单:
<xs:complexType name="animals">
<xs:all>
<xs:element name="cat" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="dog" minOccurs="1" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
使用XSD 1.0时,会有些棘手。 但是,我们可以观察到<animals>
任何有效序列都必须以<cat>
或<dog>
元素开头。 第一个元素可能会重复,但是在某一点上,必须是另一个元素的第一个实例。 因此,这提供了两个可能序列的选择。 在确保至少有一个<cat>
和一个<dog>
元素之后,可以有任意数量的其他元素:
<xs:complexType name="animals">
<xs:sequence>
<xs:choice>
<!-- At least one <cat> followed by one <dog> -->
<xs:sequence>
<xs:element name="cat" maxOccurs="unbounded"/>
<xs:element name="dog"/>
</xs:sequence>
<!-- At least one <dog> followed by one <cat> -->
<xs:sequence>
<xs:element name="dog" maxOccurs="unbounded"/>
<xs:element name="cat"/>
</xs:sequence>
</xs:choice>
<!-- Any remaining number of <cat> and <dog> -->
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="cat"/>
<xs:element name="dog"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
对于更复杂的元素类型,建议先声明一次元素,然后在复杂类型中使用<xs:element ref="elementName"/>
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.