Re: What is lost if xsd:choice is jettisoned?
Mukul Gandhi <[email protected]>
| Newsgroups | gmane.text.xml.schema.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Roger,
In your 2nd example using substitutionGroup, the schema as a side
effect would also allow following documents as valid.
[1]
<train>..</train>
,
<plane>..</plane>
and
<automobile>..</automobile>
(i.e your 2nd schema would also allow above elements as top most
element of the XML document)
But it looks like that your intention is to have a schema for
following document structure,
<transportation>
<train>..</train>
</transportation>
etc
Therefore if you want to avoid the above side effect [1], the example
using choice would be more appropriate.
On Tue, Mar 8, 2011 at 8:06 PM, Costello, Roger L. <[email protected]> wrote:
> 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
--
Regards,
Mukul Gandhi