W3C home > Mailing lists > Public > xmlschema-dev@w3.org > June 2001

Question about Chameleon schemas

From: Roger L. Costello <costello@mitre.org>
Date: Fri, 22 Jun 2001 17:38:53 -0400
Message-ID: <3B33BAED.8118C10A@mitre.org>
To: xmlschema-dev@w3.org, costello@mitre.org, mail@jenitennison.com
There is so much confusion about Chameleon components.  I want to make
absolutely certain that I am not misunderstanding anything.

Let's take an example.  Here's a no-namespace schema:

BookCatalogue.xsd
------------------------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            elementFormDefault="qualified">
    <xsd:complexType name="CardCatalogueEntry">
        <xsd:sequence>
            <xsd:element name="Title" 
                         type="xsd:string"/>
            <xsd:element name="Author" 
                         type="xsd:string"/>
            <xsd:element name="Date" 
                         type="xsd:string"/>
            <xsd:element name="ISBN" 
                         type="xsd:string"/>
            <xsd:element name="Publisher"
                         type="xsd:string" />
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="Book" 
                 type="CardCatalogueEntry"/>
</xsd:schema>
------------------------------------------------------

Note that this schema has two components - a Book element and a
CardCatalogueEntry type - which are coupled, that is, Book references
CardCatalogueEntry:

          Book --> CardCatalogueEntry

Below is a schema with a targetNamespace, which <include>s the above
no-namespace schema:

Library.xsd
------------------------------------------------------
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.library.org"
            xmlns="http://www.library.org"
            elementFormDefault="qualified">
    <xsd:include schemaLocation="BookCatalogue.xsd"/>
    <xsd:element name="Library">
        <xsd:complexType>
             <xsd:sequence>
                 <xsd:element name="BookCatalogue">
                     <xsd:complexType>
                         <xsd:sequence>
                             <xsd:element ref="Book"
                                 maxOccurs="unbounded"/>
                         </xsd:sequence>
                     </xsd:complexType>
                 </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>
------------------------------------------------------

Here's my understanding of what happens when this schema <include>s the
no-namespace schema:

[1] The two global components in the no-namespace schema are
namespace-coerced to the <include>ing schema's targetNamespace, i.e, 

    {Absent}Book --> {http://www.library.org}Book

    {Absent}CardCatalogueEntry --> 
          {http://www.library.org}CardCatalogueEntry
 
[2] The reference in the declaration of Book changes from:

   Book --> {Absent}CardCatalogueEntry

to
   Book -->{http://www.library.org}CardCatalogueEntry

Consequently, as long as the <include>ing schema's default namespace is
the targetNamespace then Book's reference to CardCatalogueEntry will
resolve correctly.  If the default namespace is XMLSchema then the
reference will fail (since there is no CardCatalogueEntry in the
XMLSchema namespace).

Is this correct?

There is a statment in the spec which makes me a bit nervous.  In
section 4.2.1 it has a Note which says:

"NOTE: As discussed in Missing Sub-components (§5.3), ˇQNameˇs in XML
representations may fail to ˇresolveˇ, rendering components incomplete
and unusable because of missing subcomponents. During schema
construction, implementations are likely to retain ˇQNameˇ values for
such references, in case subsequent processing provides a referent.
ˇAbsentˇ target ˇnamespace nameˇs of such as-yet unresolved reference
ˇQNameˇs in <include>d components **should** also be converted if clause
3.2 is satisfied."

As I read it, the last sentence here is saying that if an unqualified
reference is made within the
Chameleon schema then the namespace URI used in resolving the reference
is the target namespace of the including schema.

What makes me nervous is that it says "should".  It does not say
"must".  Am I to assume then that some implementations may not resolve
unqualified references within the Chameleon schema to the target
namespace of the including schema?  /Roger
Received on Friday, 22 June 2001 17:39:27 GMT

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