W3C home > Mailing lists > Public > xmlschema-dev@w3.org > January 2007

Re: Interaction of explicit attributes and wildcards

From: Pete Cordell <petexmldev@tech-know-ware.com>
Date: Wed, 24 Jan 2007 12:16:47 -0000
Message-ID: <000701c73fb1$8765de70$8f00a8c0@Codalogic>
To: "srinivasarao vegunta" <mukalsin@lycos.com>, <xmlschema-dev@w3.org>

Original Message From: "srinivasarao vegunta" <mukalsin@lycos.com>
>      According to several schema processors, (Saxon, Xerces, MS .NET), the
>      following instance:
>
>      <e att1="banana"/>
>
>      is valid against the following schema:
>
>      <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>      elementFormDefault="qualified" attributeFormDefault="unqualified">
>
>      <xs:complexType name="B">
>      <xs:sequence/>
>      <xs:attribute name="att1" use="optional" type="xs:decimal"/>
>      <xs:anyAttribute namespace="##local"
>      processContents="skip"/>
>      </xs:complexType>
>
>      <xs:complexType name="R">
>      <xs:complexContent>
>      <xs:restriction base="B">
>      <xs:attribute name="att1" use="prohibited"/>
>      <xs:anyAttribute namespace="##local"
>      processContents="skip"/>
>      </xs:restriction>
>      </xs:complexContent>
>      </xs:complexType>
>
>      <xs:element name="e" type="R"/>
>      </xs:schema>
>
>      But change the element declaration to <xs:element name="e" 
> type="B"/>, and
>      validation fails, saying that "banana" is not a valid xs:decimal (the 
> same
>      set of schema processors agree on this).
>
>      Surely the element cannot be a valid instance of R unless it is also 
> a valid
>      instance of B?

>From memory, the terminology in the spec for an attribute with 
use="prohibited" is to say that the declaration should be treated as if it 
does not exist.  So there is effectively no mention of the attribute att1 in 
type R, rather than a statement that att1 must not exist.  As a result, the 
xs:anyAttribute is picking up the occurrence of att1 when e is of type R.

When handling complex type restriction, the rules for attributes are 
different to the rules for elements.  For example, if you removed the att1 
definition in type R, your first example would become invalid.  This is 
because attributes in the base type are referred to if they are not 
mentioned in the derived type.  This arrangement does not mirror how 
elements are handled.

HTH,

Pete.
--
=============================================
Pete Cordell
Tech-Know-Ware Ltd
for XML to C++ data binding visit
http://www.tech-know-ware.com/lmx
(or http://www.xml2cpp.com)
=============================================
Received on Wednesday, 24 January 2007 12:17:10 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 11 January 2011 00:14:57 GMT