- From: Michael Kay <mike@saxonica.com>
- Date: Thu, 7 Dec 2006 04:03:38 -0000
- To: "'Wang, Zhuo'" <zhuo.wang@intel.com>, <xmlschema-dev@w3.org>
- Cc: "'Moog, Thomas H'" <thomas.h.moog@intel.com>
- Message-ID: <005501c719b4$ae94bf20$4c10000a@turtle>
Running the new schema test suite last week revealed a bug in this area: http://sourceforge.net/tracker/index.php?func=detail <http://sourceforge.net/tracker/index.php?func=detail&aid=1602527&group_id=2 9872&atid=397617> &aid=1602527&group_id=29872&atid=397617 I think this bug is fixed in the latest patch release http://www.saxonica.com/download/patched/saxon-saj-8804.zip However, this bug affects instance validation, whereas you seem to be concerned only with which schemas are valid. The case where Saxon differs from Xerces is that Saxon apparently allows an attribute to be required on a derived type when it is prohibited on the parent type. This clearly should not be allowed, so you seem to have found a bug. Michael Kay http://www.saxonica.com/ _____ From: Wang, Zhuo [mailto:zhuo.wang@intel.com] Sent: 07 December 2006 02:42 To: Michael Kay; xmlschema-dev@w3.org Cc: Moog, Thomas H; Wang, Zhuo Subject: Different behavior between saxon and xerces-j on the attribute use derivation mechanism Hi Mike, I'm ambiguous about the attribute use derivation mechanism according to the schema spec one. >From spec we know that the attribute use include "required" and "optional", all the attribute not give out the use will be treat as "optional". But I don't know what "prohibited" will do. So, I write the following cases: Case 1: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="One"> <xs:sequence> <xs:element name="elem1" minOccurs="0"/> <xs:element name="elem2" minOccurs="0" /> </xs:sequence> <xs:attribute name="att1" use="prohibited"/> <xs:attribute name="att2" use="prohibited"/> <xs:attribute name="att3" use="prohibited"/> </xs:complexType> <xs:complexType name="Two"> <xs:complexContent> <xs:restriction base="One"> <xs:attribute name="att1" use="prohibited"/> <xs:attribute name="att2" use="required"/> <xs:attribute name="att3" use="optional"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:schema> Case 2: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="One"> <xs:sequence> <xs:element name="elem1" minOccurs="0"/> <xs:element name="elem2" minOccurs="0" /> </xs:sequence> <xs:attribute name="att1" use="optional"/> <xs:attribute name="att2" use="optional"/> <xs:attribute name="att3" use="optional"/> </xs:complexType> <xs:complexType name="Two"> <xs:complexContent> <xs:restriction base="One"> <xs:attribute name="att1" use="prohibited"/> <xs:attribute name="att2" use="required"/> <xs:attribute name="att3" use="optional"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:schema> Case 3: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:complexType name="One"> <xs:sequence> <xs:element name="elem1" minOccurs="0"/> <xs:element name="elem2" minOccurs="0" /> </xs:sequence> <xs:attribute name="att1" use="required"/> <xs:attribute name="att2" use="required"/> <xs:attribute name="att3" use="required"/> </xs:complexType> <xs:complexType name="Two"> <xs:complexContent> <xs:restriction base="One"> <xs:attribute name="att1" use="required"/> <xs:attribute name="att2" use="prohibited"/> <xs:attribute name="att3" use="optional"/> </xs:restriction> </xs:complexContent> </xs:complexType> </xs:schema> The case1 and case2 pass the saxon validation but case3 failed. I also use xerces to validate the cases: For case1, xerces-j failed. It only allows the prohibited to prohibited. For case2, it pass. For case3, it failed. It only allows required to required. I then try all kind of situation as following: (1) The xerces result: Base type: Sub type extension derivate from a base type directly extension to opt to req to prohibited ============================================================================ =================== Base Type Attribute Use Original value = optional ok no ok Base Type Attribute Use Original value = required no ok ok Base Type Attribute Use Original value = prohibited no no ok Base type: Sub type restriction derivate from a base type directly restriction to opt to req to prohibited ============================================================================ == Original value = optional ok ok ok Original value = required no ok no Original value = prohibited no no ok Restriction: Sub type extension derivate from a restriction type extension to opt to req to prohibited ============================================================================ Original value = optional ok no ok Original value = required no ok ok Original value = prohibited ok ok ok Restriction: Sub type restriction derivate from a restriction type restriction to opt to req to prohibited ============================================================================ Original value = optional ok ok ok Original value = required no ok no Original value = prohibited no no ok (2) The saxon result: Directly from base type: extension opt req prohibited ========================================================== optional ok no no required no ok no prohibited no no ok restriction opt req prohibited ========================================================== optional ok ok ok required no ok no prohibited ok ok ok Derivate from restriction: extension opt req prohibited ========================================================== optional ok no no required no ok no prohibited ok ok ok restriction opt req prohibited ========================================================== optional ok ok ok required no ok no prohibited no no no I can't get the confirmative answer from the result, xeces2-8-1-j and saxonsa8-8j's behavior is much different. What exact answer about the matrix as above? I just want to make clear the rules about the attribute use derivation between base and sub types. Can you give me some suggestion about this? Thanks and Regards, -Wang Zhuo ~~~~~~~~~~~~~~~~~~~~~~~~ Intel Asia-Pacific R&D Ltd. ~~~~~~~~~~~~~~~~~~~~~~~~
Received on Thursday, 7 December 2006 04:04:03 UTC