Reputation: 658
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
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