WonderCsabo
WonderCsabo

Reputation: 12207

Add sequence before base sequence

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

Answers (1)

ColdFusion
ColdFusion

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

Related Questions