- From: Eddie Robertsson <erobertsson@allette.com.au>
- Date: Wed, 10 Apr 2002 18:02:05 +1000
- To: XSD <xmlschema-dev@w3.org>
Hi all, Since the schema at http://www.w3.org/2001/XMLSchema.xsd can't be used directly for validation I've rewritten it so that it now can be used to validate an XML Schema document. Most changes involved the removal of the type definitions for the built-in primitive datatypes but I also had to modify some of the complexTypes since they wouldn't pass validation. These complexTypes are: * complexRestrictionType AND simpleRestrictionType * groupRef AND attributeGroupRef * all Different validators give me different results so I'd appreciate your comments before reporting this as a bug in any of the validators. complexRestrictionType AND simpleRestrictionType ----------------------------------------------------- Both these types are very similar so I'll illustrate with complexRestrictionType. The relevant types in the XMLSchema.xsd file are: <xs:complexType name="openAttrs"> <xs:complexContent> <xs:restriction base="xs:anyType"> <xs:anyAttribute namespace="##other" processContents="lax"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="annotated"> <xs:complexContent> <xs:extension base="xs:openAttrs"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="restrictionType"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:sequence> <xs:choice> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:simpleRestrictionModel" minOccurs="0"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="complexRestrictionType"> <xs:complexContent> <xs:restriction base="xs:restrictionType"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> Most schema validators give me an error saying that the last derivation by restriction is not valid. However, it feels to me that this derivation step should be valid since the resolved xs:restrictionType would be: <xs:complexType name="restrictionType_resolved"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:sequence> <xs:choice> <xs:group ref="xs:typeDefParticle" minOccurs="0"/> <xs:group ref="xs:simpleRestrictionModel" minOccurs="0"/> </xs:choice> <xs:group ref="xs:attrDecls"/> </xs:sequence> </xs:sequence> <xs:attribute name="base" type="xs:QName" use="required"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> It seems to me that xs:complexRestrictionType is a valid restriction of this type. groupRef AND attributeGroupRef ----------------------------------- Again these two types are similar in their derivation chain so I'll use groupRef to illustrate. The relevant types are (+ annotated and openAttrs above): <xs:complexType name="group" abstract="true"> <xs:complexContent> <xs:extension base="xs:annotated"> <xs:group ref="xs:particle" minOccurs="0" maxOccurs="unbounded"/> <xs:attributeGroup ref="xs:defRef"/> <xs:attributeGroup ref="xs:occurs"/> </xs:extension> </xs:complexContent> </xs:complexType> <xs:complexType name="realGroup"> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:choice minOccurs="0" maxOccurs="1"> <xs:element ref="xs:all"/> <xs:element ref="xs:choice"/> <xs:element ref="xs:sequence"/> </xs:choice> </xs:sequence> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="groupRef"> <xs:complexContent> <xs:restriction base="xs:realGroup"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> </xs:sequence> <xs:attribute name="ref" use="required" type="xs:QName"/> <xs:attribute name="name" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> The situation is similar to the previous, some validators give an error in the last derivation step saying that groupRef is not a valid restriction of realGroup. Again I think that this restriction is fine. all --- All validators I've tried with give me an error on this derivation chain. The types involved are: <xs:complexType name="explicitGroup"> <xs:complexContent> <xs:restriction base="xs:group"> <xs:sequence> <xs:element ref="xs:annotation" minOccurs="0"/> <xs:group ref="xs:nestedParticle" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" type="xs:NCName" use="prohibited"/> <xs:attribute name="ref" type="xs:QName" use="prohibited"/> </xs:restriction> </xs:complexContent> </xs:complexType> <xs:complexType name="all"> <xs:complexContent> <xs:restriction base="xs:explicitGroup"> <xs:group ref="xs:allModel"/> <xs:attribute name="minOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:nonNegativeInteger"> <xs:enumeration value="0"/> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="maxOccurs" use="optional" default="1"> <xs:simpleType> <xs:restriction base="xs:allNNI"> <xs:enumeration value="1"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:restriction> </xs:complexContent> </xs:complexType> In this case I agree with the validators since in the "all" complexType restriction the group xs:allModel is referenced without being declared in the the base type. I'd appreciate any comments you might have about this. Cheers, /Eddie
Received on Wednesday, 10 April 2002 03:49:51 UTC