[Bug 4467] Context determined type for complex type with simple content

http://www.w3.org/Bugs/Public/show_bug.cgi?id=4467

           Summary: Context determined type for complex type with simple
                    content
           Product: XML Schema
           Version: 1.1 only
          Platform: All
               URL: http://lists.w3.org/Archives/Member/w3c-xml-schema-
                    wg/2007Apr/0010.html
        OS/Version: All
            Status: NEW
          Keywords: unclassified
          Severity: normal
          Priority: P2
         Component: Structures: XSD Part 1
        AssignedTo: cmsmcq@w3.org
        ReportedBy: sandygao@ca.ibm.com
         QAContact: www-xml-schema-comments@w3.org


<xs:complexType name="B" mixed="true">
  <xs:sequence>
    <xs:element name="e" type="xs:int" minOccurs="0"/>
  </xs:sequence>
</xs:complexType>

<xs:complexType name="R">
  <xs:simpleContent>
    <xs:restriction base="B">
      <xs:simpleType>
        <xs:restriction base="xs:string"/>
      </xs:simpleType>
    </xs:restriction>
  </xs:simpleContent>
</xs:complexType>

The CDT for "e" in "B" is "xs:int". What's the CDT for "e" in "R". 
Currently it's "absent". Question: should it also be "xs:int" (i.e. 
inherit from "B")?

Some WG members, during the F2F, felt that it should inherit from "B". 
This can be "fixed" by removing "or CTD's {content type} has simple 
{variety}". This is where my Action item came from. We wanted to make sure 
such change wouldn't have any negative impact.

Because one can not derive from a complex type with simple content and add 
element children to it (i.e. go from simple content to complex content), 
whether simple content use absent or inherit doesn't make any difference 
in most cases. The only case it affects (that I can think of now) is the 
following. Consider the above complex types and the following instance:

<p xsi:type="R">
  <e>abc</e>
</p>

Obviously <p> is invalid, because "R" has simple content and doesn't allow 
<e>. But what happens to <e>?

If "R" uses "absent" as CDT for <e>, then as a consequence <e> doesn't 
have a governing type definition. It will be laxly assessed using 
xs:anyType.

But if "R" inherits CDT from "B", then <e> has xs:int as its CDT and 
governing type, and will be flagged invalid because its content "abc" is 
not a valid int.

Which is the right behavior? (I'm leaning a little toward inherit. i.e. 
make the change suggested by this action item.)

[1] 
http://www.w3.org/XML/Group/2004/06/xmlschema-1/structures.html#key-cdt
[2] http://www.w3.org/XML/Group/2007/01/xml-schema-ftf-minutes#fripm.vm3

Received on Friday, 13 April 2007 15:16:13 UTC