拡張機能がある場合、派生要素が基本クラス要素の前にあることをどのように保証できますか? デフォルトは逆です。を使用したかったall
のですが、それが不可能であることはわかっています。
<xs:complexType name="BaseClass">
<xs:sequence>
<xs:element name="foo" type="xs:string/>
<xs:element name="bar" type="xs:string/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="DerivedClass">
<xs:complexContent>
<xs:extension base="BaseClass">
<xs:sequence>
<!-- This makes the order foo, bar, cheese, tomato -->
<!-- But I need cheese, tomato, foo, bar -->
<xs:element name="cheese" type="xs:string/>
<xs:element name="tomato" type="xs:string/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="BaseClass" type="BaseClass"/>
<xs:element name="DerivedClass" type="DerivedClass" substitutionGroup="BaseClass"/>
受け入れたいxmlは次のようになります。
<mylist>
<BaseClass>
<foo>lala</foo>
<bar>lala</bar>
</BaseClass>
<DerivedClass>
<cheese>cheddar</cheese>
<tomato>red</tomato>
<foo>lala</foo>
<bar>lala</bar>
</DerivedClass>
</mylist>
現時点では、すべての要素をコピーすることも考えてBaseClass
いDerivedClass
ますが、置換グループで何が起こるのか、何が起こらないのかわかりません。