← Prev in month ← Prev in thread

C14n namespaces

From
Tim Bray <>
To
Date
2004-03-11T17:50:15Z
ID
<>
Thread
C14n namespaces
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
← Prev in month ← Prev in thread