扩展类型 - 继承元素排序

时间:2012-02-21 06:16:38

标签: xml xsd

我在XSD中使用扩展类型来处理多种类型的常见元素序列。但是,我想控制继承元素放入序列的顺序。这就是我所拥有的:

<xs:complexType name="subType">
  <xs:complexContent>
    <xs:extension base="baseType">
      <xs:sequence>
        <xs:element name="name" type="xs:string"/>
      </xs:sequence>
    </xs:extension>
  </xs:complexContent>
</xs:complexType>

<xs:complexType name="baseType">
  <xs:sequence>
    <xs:element name="element1" type="xs:string"/>
    <xs:element name="element2" type="xs:string"/>
  </xs:sequence>
</xs:complexType>

这是最终的排序:

<subType>
  <element1>element1</element1>
  <element2>element2</element2>
  <name>name</name>
</subType>

我希望subType中定义的序列首先出现在序列中,以实现:

<subType>
  <name>name</name>
  <element1>element1</element1>
  <element2>element2</element2>
</subType>

这可能吗?我理解总的来说,它表示的是相同的数据,但我想控制顺序,以便尽可能让它变得直观。

1 个答案:

答案 0 :(得分:1)

在同一个编译集中,不可能实现这样的目标。如果重用位于列表的顶部(与面向对象相反),那么您可以通过&lt; xs:group /&gt;来实现内容的重用,即group1将具有&lt; element1 /&gt;和&lt; element2 /&gt;,group2将有&lt; name /&gt ;;在不同的类型中,您可以更改group1和group2的相对位置以满足您的需求。

在不同的集合中,您可以通过使用重新定义(两个重新定义)来实现变化。但是,即使在这种情况下,基本类型内容也会显示在子类型之前。我不推荐这个麻烦,只是因为大多数使用XSD来编码绑定的工具都不适用于&lt; xs:redefine /&gt; s。