W3C home > Mailing lists > Public > xmlschema-dev@w3.org > August 2012

[ XML Schema 1.1 Quiz ] What's the data type of an element that does not specify a type and is a member of multiple substitution groups?

From: Costello, Roger L. <costello@mitre.org>
Date: Wed, 29 Aug 2012 15:09:28 +0000
To: "xmlschema-dev@w3.org" <xmlschema-dev@w3.org>
Message-ID: <B5FEE00B53CF054AA8439027E8FE17751E631A78@IMCMBX04.MITRE.ORG>
Folks, Hello,

In XML Schema 1.1 you can declare an element to be substitutable for multiple elements, e.g.,

     <element name="Example" substitutionGroup="A B C" ...>

Recall that in XML Schema 1.0 if you declared an element and didn't provide a type, then it inherits the type of its head element, e.g.,

    <xs:element name="Subway" type="xs:string" />
    
    <xs:element name="Metro" substitutionGroup="Subway" />

Note that Metro does not specify a type so it inherits Subway's type. Thus the type of Metro is xs:string.

But in XML Schema 1.1 there can be multiple head elements, so what type would the element inherit?

Example: The Comment element is substitutable for Subway (xs:string), isHardcover (xs:boolean), and TodaysDate (xs:date):

    <xs:element name="Subway" type="xs:string" />
    
    <xs:element name="Metro" substitutionGroup="Subway" />
    
    <xs:element name="isHardcover" type="xs:boolean" />
    
    <xs:element name="TodaysDate" type="xs:date" />
    
    <xs:element name="Comment" substitutionGroup="Subway isHardcover TodaysDate" />

Also notice that Comment does not specify a type.

So what is Comment's data type?

Scroll down to see the answer ....


























Answer: Comment inherits the data type of the first head element listed. In this case Subway is listed first, so Comment has the xs:string data type.

Suppose that Comment was declared like this: 
    
    <xs:element name="Comment" substitutionGroup=" isHardcover Subway TodaysDate" />

Now isHardcover is listed first, so Comment has the xs:boolean data type.

Here is the relevant section from the XML Schema 1.1 specification:

    An <element> with no referenced or included type definition 
    will correspond to an element declaration which has the same 
    type definition as the *first* substitution-group head named in 
    the substitutionGroup

LESSON LEARNED: THE ORDER OF ELEMENTS LISTED IN A SUBSTITUTIONGROUP IS EXTREMELY IMPORTANT.
Received on Wednesday, 29 August 2012 15:10:04 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Wednesday, 29 August 2012 15:10:05 GMT