带有标题的XML模式,然后选择项目

时间:2013-09-02 02:04:10

标签: xsd

我想创建一个XML模式,强制标题后跟几个项目中的任何一个。换句话说,这是有效的。 <header>必须始终是第一项,但A和B可以按任何顺序排列。

<root>
  <header/>
  <A/>
  <B/>
  <A/>
  <B/>
</root>

我的理解是,我可以允许A和B按以下顺序排列。

<xs:element name="root">
  <xs:complexType>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="A"/>
      <xs:element ref="B"/>
    </xs:choice>
  </xs:complexType>
</xs:element>

但是如何强制第一个元素为<header>

1 个答案:

答案 0 :(得分:0)

组可以嵌套在内容模型中,就像括号表达式可以嵌套在正则表达式中一样。在外层,您需要header元素,后跟混合的AB元素。因此,使用xs:sequence指定该序列。

<xs:complexType>
  <xs:sequence>
    <xs:element ref="root"/>
    <xs:choice maxOccurs="unbounded">
      <xs:element ref="A"/>
      <xs:element ref="B"/>
    </xs:choice>
  </xs:sequence>
</xs:complexType>