rcaseNameAndTypeOK too restrictive about restrictions

I believe, http://www.w3.org/TR/xmlschema-1/#rcase-NameAndTypeOK clause 1 is
too restrictive:

1  The declarations' {name}s and {target namespace}s are the same.

Consider an example:

   <xs:complexType name="B">
     <xs:sequence>
       <xs:element name="contents" type="xs:anyType" minOccurs="0"
maxOccurs="5"/>
     </xs:sequence>
   </xs:complexType>
   <xs:element name="B" type="B"/>
   <xs:complexType name="D">
     <xs:complexContent>
       <xs:restriction base="B">
         <xs:sequence>
           <xs:element name="contents" type="xs:anyType" minOccurs="0"
maxOccurs="3"/>
         </xs:sequence>
       </xs:restriction>
     </xs:complexContent>
   </xs:complexType>
   <xs:element name="D" type="D" substitutionGroup="B"/>
   <xs:complexType name="b">
     <xs:sequence>
       <xs:element ref="B"/>
     </xs:sequence>
   </xs:complexType>
   <xs:complexType name="r">
     <xs:complexContent>
       <xs:restriction base="b">
         <xs:sequence>
           <xs:element ref="D"/>
         </xs:sequence>
       </xs:restriction>
     </xs:complexContent>
   </xs:complexType>

The type "r" is not a valid restriction of the type "b" as clause 1 is
violated - there is an element "D", instead of "B".
However, "D" is an element within the substitution group for "B"; "b" will
validate any of them.
A type that would validate only "D" could be called a restriction of "b", in
the sense that any instance valid as per that type should be valid as per
"b" (but the opposite is not true).

I think, clause 1 should be rewritten to allow such restrictions:

1  One of the following must be true:
   1.1  The declarations' {name}s and {target namespace}s are the same.
   1.2  R is in the substitution group of B. 

Received on Friday, 6 June 2003 00:29:39 UTC