ng5000
ng5000

Reputation: 12560

Include Elements in XSD Complex Type Without New Element

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.

Upvotes: 6

Views: 1975

Answers (2)

skaffman
skaffman

Reputation: 403441

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>

Upvotes: 7

MikeD
MikeD

Reputation: 8941

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

Upvotes: 1

Related Questions