我在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>
这可能吗?我理解总的来说,它表示的是相同的数据,但我想控制顺序,以便尽可能让它变得直观。
答案 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。