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 BourretReceived on Friday, 16 July 1999 09:29:08 GMT
This archive was generated by hypermail 2.2.0+W3C-0.50 : Tuesday, 23 October 2007 06:13:15 GMT