- From: Ronald Bourret <rbourret@ito.tu-darmstadt.de>
- Date: Fri, 16 Jul 1999 15:31:48 +0200
- 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 UTC