W3C home > Mailing lists > Public > www-xml-schema-comments@w3.org > July to September 2001

RE: Restrictions and element namespaces

From: Schwarzhoff, Kelly <kelly.schwarzhoff@commerceone.com>
Date: Thu, 6 Sep 2001 09:08:19 -0700
Message-ID: <C1E0143CD365A445A4417083BF6F42CC979EE0@C1plenaexm07.commerceone.com>
To: "'ht@cogsci.ed.ac.uk'" <ht@cogsci.ed.ac.uk>
Cc: "'www-xml-schema-comments@w3.org'" <www-xml-schema-comments@w3.org>
More comments below in KLS tags...

-----Original Message-----
From: ht@cogsci.ed.ac.uk [mailto:ht@cogsci.ed.ac.uk]
Sent: Thursday, September 06, 2001 1:35 AM
To: Schwarzhoff, Kelly
Cc: 'www-xml-schema-comments@w3.org'
Subject: Re: Restrictions and element namespaces


"Schwarzhoff, Kelly" <kelly.schwarzhoff@commerceone.com> writes:

> I am writing a few schemas using restrictions features, and there seems to
> be an ambiguity w.r.t. what the namespace is of local elements. Consider a
> schema:
> 
> ===============================
> <?xml version="1.0"?>
> <schema xmlns="http://www.w3.org/2001/XMLSchema"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://localhost/kelly"
> xmlns:sns="http://localhost/kelly"
> elementFormDefault="qualified"
> >
> 
> 
>   <element name="RootTag" type="sns:MainType"/>
> 
>   <complexType name="MainType">
>     <sequence>
>       <xsd:element name="shipTo" type="sns:ShipType" minOccurs="0" 
> maxOccurs="unbounded"/>
>       <xsd:element name="billTo" type="xsd:string" minOccurs="0"/>
>     </sequence>
>     <attribute name="currency" type="xsd:string"/>
>   </complexType>
> 
>   <complexType name="ShipType">
>     <sequence>
>       <element name="Shipper" type="xsd:string"/>
>     </sequence>
>   </complexType>
> 
> </schema>
> =========================
> 
> Then, in a seperate namespace, we restrict the root type
> 
> =========================
> <schema xmlns="http://www.w3.org/2001/XMLSchema"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"
> targetNamespace="http://localhost/two"
> xmlns:sns="http://localhost/kelly"
> xmlns:tns="http://localhost/two"
> elementFormDefault="qualified"
> >
> 
> 
>   <complexType name="NewShipType">
>     <complexContent>
>       <extension base="sns:ShipType">
>         <sequence>
>           <element name="City" type="xsd:string"/>
>         </sequence>
>       </extension>
>     </complexContent>
>   </complexType>
> 
>   <complexType name="RMainType">
>     <complexContent>
>       <restriction base="sns:MainType">
>         <sequence>
>           <xsd:element name="shipTo" type="tns:NewShipType" minOccurs="0" 
> maxOccurs="unbounded"/>
>           <xsd:element name="billTo" type="xsd:string" minOccurs="0"/>
>         </sequence>
>       </restriction>
>     </complexContent>
>   </complexType>
> </schema>
> =========================

The tns:RMainType definition is broken, for two reasons:

1) The sns:MainType definition allows sequences (sns:shipTo*,sns:billTo?).
   The tns:RMainType definition allows sequences (tns:shipTo*,tns:billTo?).
   But renaming of elements is not an allowed part of restriction.

2) Even if you changed to form="unqualified", which would solve _that_ 
   problem, tns:newShipType is not a restriction of sns:ShipType, it's an 
   extension, which is not allowed.
<KLS>
The spec seems to say otherwise.

The rules for element restriction are under the section, "Schema Component
Constraint: Particle Restriction OK (Elt:Elt -- NameAndTypeOK)". In
particular, the rules for restraining types are:
"R's {type definition} is validly derived given {extension, list, union}
from B's {type definition} as defined by Type Derivation OK (Complex)
(3.4.6) or Type Derivation OK (Simple) (3.14.6), as appropriate. "
And, following the link for "Type Derivation OK (Complex)", we see it says,
"2 One of the following must be true:"..."2.2 B must be D's {base type
definition}. "

So, in the case below, sns:ShipType is the basetype of tns:newShipType, so
the "One of the following must be true" is fulfilled, which means the "Type
Derivation OK" is fulfilled.
</KLS>

> What is the namespace of the locally declared elements (ex, "billTo"),
which
> are used in elements of the runtime type
{namespace="http://localhost/two",
> localname="RMainType"}? 

The REC is perfectly clear: http://localhost/two.

The element declaration is what it is, regardless of what its
enclosing type definition may be based on.  Consider the alternative
-- you wouldn't know whether City was in sns or tns until you knew
whether it was being used to extend or restrict.

ht
-- 
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2001, part-time member of W3C Team
     2 Buccleuch Place, Edinburgh EH8 9LW, SCOTLAND -- (44) 131 650-4440
	    Fax: (44) 131 650-4587, e-mail: ht@cogsci.ed.ac.uk
		     URL: http://www.ltg.ed.ac.uk/~ht/
Received on Thursday, 6 September 2001 12:06:34 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Sunday, 6 December 2009 18:12:51 GMT