Reputation: 12207
I have this XML:
<Base>
<ElementInBase />
<OtherElementInBase />
</Base>
<Derived>
<ElementInChildren />
<ElementInBase />
<OtherElementInBase />
</Derived>
So basically i want to allow another sequence in Derived
to be appear before the sequence from parent Base
.
Currently i have this schema:
<xs:complexType name="Base">
<xs:sequence >
<xs:element ref="ElementInBase" minOccurs="0" maxOccurs="1" />
<xs:element ref="OtherElementInBase " minOccurs="0" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="Derived">
<xs:complexContent>
<xs:extension base="Base">
<xs:sequence>
<xs:element name="ElementInChildren" minOccurs="0" maxOccurs="1"></xs:element>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
But this only allows ElementInChildren
to be after elements from Base
.
Upvotes: 0
Views: 48
Reputation: 2531
You simply need to define your Base
as an element group and reference to it in your Derived
complexType:
<xs:group name="Base">
<xs:sequence>
<xs:element ref="ElementInBase" minOccurs="0" maxOccurs="1"/>
<xs:element ref="OtherElementInBase " minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:group>
<xs:complexType name="Derived">
<xs:sequence>
<xs:element name="ElementInChildren" minOccurs="0" maxOccurs="1"></xs:element>
<xs:group ref="Base"/>
</xs:sequence>
</xs:complexType>
That will place the ElementInChildren
before the content defined in Base
.
Read also my answer here: In XML Schema, why does an element group tag even exist?
Upvotes: 1