具有1或2个内部元素的XML序列

时间:2016-05-10 08:55:20

标签: xml xsd schema sequence

我想为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>

不行。

1 个答案:

答案 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,断言父母至少有一个孩子。