在 XML Schema (XSD 1.0) 中,我对四个元素有以下要求:
- element1总是首先出现,minOccurs = 0 和 maxOccurs = 1
- element2将出现 minOccurs = 0 和 maxOccurs = 1
- element3将出现 minOccurs = 0 和 maxOccurs = unbounded
- element2和element3将按任意顺序出现(在 element1 之后和 element4 之前)
- element4将始终以 minOccurs = 0 和 maxOccurs = unbounded 出现在最后
- 所有这些元素都是parent_element的子元素,并且它们的 minOccurs = 0,但至少有 1 个元素应该存在于父元素中。
我创建了一个满足除#2和#6之外的所有要求的方案。在我的架构中 element2 和 element3 可以以任何顺序出现,但我无法限制 element2 只出现一次。此外,我无法确保parent_element中至少存在 1 个元素。
在下面查看我的架构并建议更新以满足上述所有要求。
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" type="type1" />
<xs:element name="element3" type="type1" />
</xs:choice>
<xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
为了满足要求#2,我尝试了一个maxOccurs="1"
与 element2 一起使用(内部选择)的技巧,但它不起作用,并且 element2 仍然能够以任何顺序与 element3 重复多次。
<xs:element name="parent_element">
<xs:complexType>
<xs:sequence>
<xs:element name="element1" type="type1" minOccurs="0" maxOccurs="1" />
<xs:choice minOccurs="0" maxOccurs="unbounded" >
<xs:element name="element2" type="type1" maxOccurs="1" />
<xs:element name="element3" type="type1" />
</xs:choice>
<xs:element name="element4" type="type2" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>