我想为XML定义一个Schema,我可以通过定义它的head,fletching或两者来定义一个箭头。如何创建具有有限内部项目的序列,同时限制每个项目类型的最大出现次数? 我的实际版本没有检测到箭头定义何时不包含任何元素:
<xs:element name="Arrow">
<xs:annotation>
<xs:documentation>Arrow with fletching, head or both.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="2">
<xs:element minOccurs="0" name="Fletching" maxOccurs="1">
</xs:element>
<xs:element minOccurs="0" name="Head" maxOccurs="1">
</xs:element>
</xs:sequence>
[...]
使用此Schema,我希望验证:
<Arrow>
<Head/>
</Arrow>
<Arrow>
<Fletching/>
</Arrow>
<Arrow>
<Head/>
<Fletching/>
</Arrow>
好的。
和
<Arrow/>
或
<Arror>
</Arrow>
不行。
答案 0 :(得分:1)
你可以用
获得你想要的东西<choice>
<sequence>
<element ref="Fletching"/>
<element ref="Head" minOccurs="0"/>
</sequence>
<sequence>
<element ref="Head"/>
<element ref="Fletching" minOccurs="0"/>
</sequence>
</choice>
如果集合中有两个以上的元素,处理订单通常更简单(除非订单传达了一些信息):
<choice>
<sequence>
<element ref="Fletching"/>
<element ref="Head" minOccurs="0"/>
</sequence>
<sequence>
<element ref="Head"/>
</sequence>
</choice>
在XSD 1.1中,人们也可以使用xsd:all,断言父母至少有一个孩子。