当元素的顺序很重要时,如何在xsd中使用扩展名

时间:2014-01-23 13:50:35

标签: xsd

我有一些complexType元素,它是某个元素的父元素:

<xs:complexType name="elementParent">
    <xs:sequence>
        <xs:element name="b" type="xs:String" />
        <xs:element name="c" type="xs:String" />
</xs:complexType>

现在我想创建anothex复杂类型,它将是我父母的扩展。问题是有序的。第一个元素应该是a然后是b然后是c。我只知道这个选项,订单将是b c a我不想要的:

<xs:complexType name="elementChild">
    <xs:complexContent>
        <xs:extension base="elementParent">
            <xs:sequence>
                <xs:element name="a" type="xs:String" />
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

1 个答案:

答案 0 :(得分:3)

<xs:extension>创建一个类型,该类型首先包含基类型,然后是<xs:extension>中定义的显式内容。如果您只想在另一个类型的元素之前添加新元素,则可以将公共元素定义为<xs:group>,然后在两个类型定义中引用该组。

这样的事情:

<!-- common elements defined as a group -->
<xs:group name="elementGroup">
  <xs:sequence>
    <xs:element name="b" type="xs:string" />
    <xs:element name="c" type="xs:string" />
  </xs:sequence>
</xs:group>
<!-- group is referred to in element type definitions -->
<xs:element name="elementParent">
  <xs:complexType>
    <xs:sequence>
      <xs:group ref="elementGroup" />
    </xs:sequence>
  </xs:complexType>
</xs:element>
<xs:element name="elementChild">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="a" type="xs:string" />
      <xs:group ref="elementGroup" />
    </xs:sequence>
  </xs:complexType>
</xs:element>