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

RE: Yet another stupid namespace question...

From: Ronald Bourret <rbourret@ito.tu-darmstadt.de>
Date: Fri, 16 Jul 1999 15:31:48 +0200
Message-ID: <01BECFA0.522FE4A0@grappa.ito.tu-darmstadt.de>
To: "'XML-DEV'" <xml-dev@ic.ac.uk>, "'www-xml-schema-comments@w3.org'" <www-xml-schema-comments@w3.org>
Ron Bourret wrote:

> A partial solution is as follows:
>
> 1) When reading the schema(s), keep a list of all element declarations 
that
> declare defaults for xmlns and xmlns:xxx attributes along with the 
prefixes
> and namespace URIs they use.
>
> 2) For each element you encounter, check if its base (unprefixed) name
> appears in this list. Note that a single name may occur multiple times in 
> the list.
>
> 3) If the element is in the list, check if its prefix (or lack thereof)
> matches any of the prefixes stored in the list for that element.
> a) If so, get the relevant namespace URI, construct the qualified name, 
and
> proceed normally.
> b) If not, then the element belongs to the namespace according to the
> current value of its prefix (or lack thereof). If there is no match for 
the
> prefix (or lack thereof), then an error occurs, as this is a
> must-use-schemas scenario and no schema can be located because we don't
> have a namespace URI.

On further reflection, I've realized that this solution is broken. For 
example, suppose I define an element A which sets the default namespace to 
http://foo and that I define an element B in the content of element A. Now 
suppose you like my element A and incorporate it into your element C, which 
has a different element B in its content.  Suppose also that your element B 
defines the default namespace as http://bar.

Written with explicit namespace declarations, I can tell the difference 
between my B and your B:

<C>
   <A xmlns="http://foo">
      <B><!--This is my B --></B>
   </A>
   <B xmlns="http://bar"><!-- This is your B --></B>
</C>

Written with implicit namespace declarations (see below), my algorithm 
breaks: when the processor encounters my B, it will search the list of 
elements that declare default namespaces, find your B, and mistakenly 
report an error.

<C>
   <A>
      <B><!--This is my B --></B>
   </A>
   <B><!-- This is your B --></B>
</C>

Note that it is not possible to write a DTD for the implicit case, as it 
requires two different definitions for element B. (I believe it is possible 
to write a schema for this case.)

-- Ron Bourret
Received on Friday, 16 July 1999 09:29:08 GMT

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