是否可以在具有可变元素顺序的xsd中使用继承?

时间:2012-04-21 22:12:43

标签: xml xsd

是否可以在具有可变元素顺序的xsd中使用继承?

基本上,这样的东西不起作用,因为“扩展”中不允许“全部”:

<xs:complexType name="root">
    <xs:complexContent>
          <xs:all>
              <xs:element name="A" type="xs:string"/>
              <xs:element name="B" type="xs:string"/>
          </xs:all>
    </xs:complexContent>
</xs:complexType>

<xs:complexType name="extended">
    <xs:complexContent>
        <xs:extension base="root"> 
            <xs:all>
              <xs:element name="C" type="xs:string"/>
              <xs:element name="D" type="xs:string"/>
            </xs:all>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

最简单的解决方案就是使用“sequence”而不是“all”,但在我的情况下,这不是一个选项,因为元素顺序不能保证,所以像这样:

<obj>
  <B/>
  <C/>
  <D/>
  <A/>
</obj>

因元素顺序错误而无效,但不应该是因为所有元素都存在。

1 个答案:

答案 0 :(得分:1)

您的示例在XSD 1.1中是合法的,上周成为推荐标准。 XSD 1.1在Xerces和Saxon中实现。