- From: Wang, Zhuo <zhuo.wang@intel.com>
- Date: Thu, 7 Dec 2006 10:41:34 +0800
- To: "Michael Kay" <mike@saxonica.com>, <xmlschema-dev@w3.org>
- Cc: "Moog, Thomas H" <thomas.h.moog@intel.com>, "Wang, Zhuo" <zhuo.wang@intel.com>
- Message-ID: <7B2CABB47D5B094AAACC8A1E001B82F5227FE8@pdsmsx411.ccr.corp.intel.com>
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 14:42:51 UTC