W3C home > Mailing lists > Public > xmlschema-dev@w3.org > March 2011

What is lost if xsd:choice is jettisoned?

From: Costello, Roger L. <costello@mitre.org>
Date: Tue, 8 Mar 2011 09:36:53 -0500
To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
Message-ID: <9E51F88D5247B648908850C35A3BBB50052E73F6F7@IMCMBX3.MITRE.ORG>
Hi Folks,

Here is an example of using xsd:choice. The content of <transportation> is a choice of either <train>, <plane>, or <automobile>.

    <xsd:element name="transportation">
        <xsd:complexType>
            <xsd:choice>
                <xsd:element name="train" type="xsd:string"/>
                <xsd:element name="plane" type="xsd:string"/>
                <xsd:element name="automobile" type="xsd:string"/>
            </xsd:choice>
        </xsd:complexType>
    </xsd:element>

Rather than using xsd:choice, the schema could be designed using xsd:sequence. The sequence consists of an element that ref's to an abstract mode-of-transportation element. The train, plane, and automobile elements are globally declared and are substitutable with mode-of-transportation.

    <xsd:element name="transportation">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="mode-of-transportation" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    
    <xsd:element name="mode-of-transportation" abstract="true" type="xsd:string" />

    <xsd:element name="train" substitutionGroup="mode-of-transportation"/>
    <xsd:element name="plane" substitutionGroup="mode-of-transportation"/>
    <xsd:element name="automobile" substitutionGroup="mode-of-transportation"/>

I believe that the two designs produce identical results.

Suppose the xsd:choice element were jettisoned from the XML Schema specification. Would there be any loss of functionality? Put another way, can you provide a real-world, compelling example of a schema that uses xsd:choice which cannot be expressed using abstract element plus substitution groups?

/Roger
Received on Tuesday, 8 March 2011 14:37:28 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 8 March 2011 14:37:29 GMT