views:

274

answers:

2

Hi

I have this complex type:

<xsd:complexType name="Identifier">
    <xsd:sequence>
     <xsd:element name="Id" type="xsd:string"/>
     <xsd:element name="Version" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>

Now I want to include this in another complex type and I've been doing that like this:

<xsd:complexType>
    <xsd:sequence>
     <xsd:element name="Id" type="Identifier"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

This isn't what I really want though. I want to include the Identifier type's elements directly in my second complex type without creating a new element. E.g. the same as just doing this:

<xsd:complexType>
    <xsd:sequence>
     <xsd:element name="Id" type="xsd:string"/>
     <xsd:element name="Version" type="xsd:string"/>
              <!-- More elements here -->
    </xsd:sequence>
</xsd:complexType>

Hope that makes sense.

Thanks in advance.

+1  A: 

this complex type will always resolve to

<Identifier>
   <Id>string</Id>
   <Version>string</Version>
</Identifier>

if you don't want a child structure, you could define Id and Version as elements and reference them using

<xsd:element ref="Id"/>
<xsd:element ref="Version"/>

later on. But then you don't have the guarantee that they both occur

You can also make Id and Version attributes to the Identifier element in a complex type

good luck Mike

MikeD
+1  A: 

You can extend types, like this:

<xsd:complexType name="MySubType">
 <xsd:complexContent>
  <xsd:extension base="Identifier">
                       <xsd:sequence>
                   <!-- More elements here -->
                       </xsd:sequence>
  </xsd:extension>
 </xsd:complexContent>
</xsd:complexType>
skaffman
Perfect - thanks. Do you know how to include multiple extensions in a single complex type?
ng5000
Found the answer. What I wanted was multiple inheritance, which can be achieved using xsd:group.
ng5000
Aye, groups are very handy things, although they can get confusing if you over-do it.
skaffman