W3C home > Mailing lists > Public > www-xml-schema-comments@w3.org > October to December 2002

RE: Feature incompatiblity in XML Schema 1.0

From: Matthew Fuchs <matt@westbridgetech.com>
Date: Thu, 5 Dec 2002 10:19:41 -0800
To: "Henry S. Thompson" <ht@cogsci.ed.ac.uk>, <w3c-xml-schema-ig@w3.org>
Cc: <www-xml-schema-comments@w3.org>
Message-ID: <MNELKPFAIFJKHNJLJDOIMEHMCPAA.matt@westbridgetech.com>

Welcome to the club - better late than never.  Of course, one of the points
of the original NUN proposal was that the prefix to the local name was the
namespace.   Also, nested definitions allow us to get rid of anonymous types
and allow much better control of restriction/extension.  It would be good to
discuss this issue _before_ we decide on a SCD syntax, as it allows a
cleaner syntax where a name is always 0 or more type names followed by 0 or
1 element or attribute name.  For example:

<xs:schema targetNamespace="schema1">
  <xs:complexType name="foo">
     <xs:complexType name="bar">
       <xs:sequence>
          <xs:element name="x" type="xs:int" minOccurs="0"/>
          <xs:element name="y" type="xs:int" maxOccurs="10"/>
       </xs:sequence>
     </xs:complexType>
     <xs:element name="locFoo" type="bar"/>
     <xs:sequence>
       <xs:element ref="locFoo"/>
       <xs:element name="z" type="xs:int" minOccurs="0"/>
     </xs:sequence>
  </xs:complexType>
  <xs:element name="foo" type="foo"/>
  <xs:complexType name="restrictFoo">
     <xs:complexContent>
        <xs:restriction base="foo" xs:foo="namespace of local foo above">
           <xs:complexType name="restrictBar">
              <xs:complexContent>
                 <xs:restriction base="foo:bar">
                    <xs:sequence>
                       <xs:element ref="foo:y" maxOccurs="5"/>
                    </xs:sequence>
                 </xs:restriction>
              </xs:complexContent>
           </xs:complexType>
           <xs:element name="locFoo" type="restrictBar"
substitutionGroup="foo:locFoo"/>
           <xs:sequence>
              <xs:element ref="locFoo"/>
           </xs:sequence>
        </xs:restriction>
     </xs:complexContent>
   </xs:complexType>
</xs:schema>

Note that all elements are reached through a trail of complexTypes, so
complexTypes can be treated as namespaces - the current alternation syntax
makes that very muddy.  This also allows us to treat namespaces as coming in
two flavors - ordered and unordered.  The example of an unordered namespace
is a schema, and complexTypes are the ordered ones.  Which is to say that
all namespaces are of a nested structure containing element and attribute
names.

But if a local element is in the namespace of its complexType, given your
syntax below, then surely as a logical consequence:

<a:BE xmlns:a="urn:a:aaa"
xmlns:base="a.xsd#xsucd(ct::a:Base)"><base:x>1</base:x><base:y>2</base:y></a
:BE>

is valid because it puts x and y in their actual namespace and:

<a:BE xmlns:a="urn:a:aaa"><a:x>a</a:x><a:y>2</a:y></a:BE>

is not because it doesn't.

Note that if we make the change that puts local elements in the namespace of
their enclosing type - as is being suggested - then a definition that had
local elements unqualified, eg:

  <xs:complexType name="Base" >
    <xs:sequence>
      <xs:element name="x" type="xs:int"/>
      <xs:element name="y" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

which would be the current version of your complexType would have an
instance looking like:

<a:BE xmlns:a="urn:a:aaa"><x>1</x><y>2</y></a:BE>

which could be brought up to snuff by injecting some xmlns default
attributes:

<a:BE xmlns="a.xsd#xsucd(ct::a:Base)"><x>1</x><y>2</y></a:BE>

which could be easily accomplished with a perl script and wreak much less
havoc on existing applications than would be the case for a schema with
qualified attributes.

Matthew

-----Original Message-----
From: www-xml-schema-comments-request@w3.org
[mailto:www-xml-schema-comments-request@w3.org]On Behalf Of Henry S.
Thompson
Sent: Thursday, December 05, 2002 1:52 AM
To: Don Box
Cc: www-xml-schema-comments@w3.org; Ashok Malhotra; Martin Gudgin; Allen
Brown
Subject: Re: Feature incompatiblity in XML Schema 1.0

The one change being considered for version 1.1 which would make this
work no matter what, without requiring the intervening stub, is the
move from local declaration within content models to local declaration
within types.  Combined with UCDs, this would allow something like
this:

a.xsd:
<xs:schema targetNamespace="urn:a:aaa"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:a="urn:a:aaa" >
  <xs:complexType name="Base" >
      <xs:element name="x" type="xs:int" form="qualified" />
      <xs:element name="y" type="xs:int" form="qualified"/>
    <xs:sequence>
      <xs:element ref="x" />
      <xs:element ref="y" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
  <xs:element name="BE" type="a:Base" />
</xs:schema>

<xs:schema targetNamespace="urn:b:bbb"
  xmlns:a="urn:a:aaa"
  xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xs:import namespace="urn:a:aaa" schemaLocation="a.xsd"/>
  <xs:complexType name="Derived">
    <xs:complexContent>
      <xs:restriction base="a:Base"
                      xmlns:aBase="a.xsd#xsucd(ct::a:Base)">
        <xs:sequence>
          <xs:element ref="aBase:x" />
          <xs:element name="aBase:y" minOccurs="1" />
        </xs:sequence>
      </xs:restriction>
    </xs:complexContent>
  </xs:complexType>
</xs:schema>

I actually rather like the idea of treating complex type definitions
as namespaces within which the names of their local element
declarations sit.

ht
[1]
http://lists.w3.org/Archives/Public/www-xml-schema-comments/2002OctDec/0087.
html
--
  Henry S. Thompson, HCRC Language Technology Group, University of Edinburgh
          W3C Fellow 1999--2002, 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/
 [mail really from me _always_ has this .sig -- mail without it is forged
spam]
Received on Thursday, 5 December 2002 13:20:16 GMT

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