2

是否可以在具有可变元素顺序的 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>

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

4

1 回答 1

1

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

于 2012-04-21T23:07:58.047 回答