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>

最も簡単な解決策は、「all」の代わりに「sequence」を使用することですが、私の場合、要素の順序が保証されていないため、これはオプションではありません。次のようなものです。

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

要素の順序が間違っているため無効になりますが、すべての要素が存在するため、無効になるべきではありません。

4

1 に答える 1

1

あなたの例は、先週勧告になったXSD 1.1で合法です。XSD 1.1 は、Xerces と Saxon で実装されています。

于 2012-04-21T23:07:58.047 に答える