[Home] [By Thread] [By Date] [Recent Entries]
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
|

Cart



