[
Lists Home |
Date Index |
Thread Index
]
So, I'm trying to fix up Genx to do the right thing with namespace
declarations with respect to C14n. The summary says "Superfluous
namespace declarations are removed from each element" which I had
naively taken to mean that if you saw
<a xmlns:foo="a:b" xmlns:bar="c:d"><foo:x/><y/></a>
You'd rewrite that as
<a> <foo:x xmlns:foo="a:b"></foo:x> <y></y> </a>
Removing the declaration of foo: from the root because it's
*superfluous* there, and removing the declaration of bar: entirely
because it's superfluous in the whole document. This is what Genx
currently does. Sigh.
I leapt to this conclusion because, since non-editor applications don't
care about namespace declarations, the two forms above are effectively
identical for the purposes of nearly all applications, and the second
form is easily computed stream-wise given any XML as input.
On closer reading, I now think that you'd rewrite that as
<a xmlns:foo="a:b" xmlns:bar="c:d"><foo:x></foo:x><y></y></a>, i.e.
just putting in the end-tags.
Per this understanding, per Canonical XML, the following two XML docs
are distinct:
<x xmlns:foo="a:b"/>
<x xmlns:bar="c:d"/>
Which seems like complete craziness to me... except for I guess you
have to do this because there may be some qnames lurking in the
content; precisely the problem that Simon Fell ran across.
Unless someone tells me I'm wrong, I'm off to significantly simplify
Genx. -Tim
|