Bastien
Bastien

Reputation: 658

XSD complex type extension with another complex type

I would like to define an XSD complex type using another complex type.

<xs:complexType name="A">
   <!-- sequence with some elements -->
</xs:complexType>

<xs:complexType name="B">
   <!-- sequence with some elements -->
</xs:complexType>

<xs:complexType name="C">       
    <xs:complexContent>             
        <xs:extension base="A">
            <!-- ??? reference to complex type B ??? -->
        </xs:extension>
    </xs:complexContent>            
</xs:complexType>

Is there a way to do it without declaring a new element of type B?

EDIT:

Now that I think of it, type extension with another type is probably not permitted in order to forbid self-extension.

As RCB suggested, one can use a group as a workaround.

<xs:complexType name="A">
   <!-- sequence with some elements -->
</xs:complexType>

<xs:group name="B">
   <!-- sequence with some elements -->
</xs:group>

<xs:complexType name="B">
   <xs:group ref="B"/>
</xs:complexType>

<xs:complexType name="C">       
    <xs:complexContent>             
        <xs:extension base="A">
            <xs:group ref="B"/>
        </xs:extension>
    </xs:complexContent>            
</xs:complexType>

Upvotes: 2

Views: 1215

Answers (1)

RCB
RCB

Reputation: 845

If you are able to change B from a complexType to a group, then you could do:

<xs:group name="B">
    <xs:sequence>
        <!-- Some elements -->
    </xs:sequence>
</xs:group>

<xs:complexType name="C">
    <xs:complexContent>
        <xs:extension base="A">
            <xs:group ref="B"/>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>

Upvotes: 1

Related Questions