Yet another stupid namespace question...

Ronald Bourret rbourret at ito.tu-darmstadt.de
Fri Jul 16 15:26:33 BST 1999


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


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)





More information about the Xml-dev mailing list