What is lost if xsd:choice is jettisoned?
"Costello, Roger L." <[email protected]>
| Newsgroups | gmane.text.xml.schema.devel |
|---|---|
| Message-ID | <[email protected]> |
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