- From: merlin <merlin@baltimore.ie>
- Date: Tue, 04 Jun 2002 15:47:21 -0400
- To: Joseph Reagle <reagle@w3.org>
- Cc: w3c-ietf-xmldsig@w3.org
r/reagle@w3.org/2002.06.04/ > On Tuesday 04 June 2002 12:03 pm, merlin wrote: > > 1) Bug in the Specification > > > > Consider the following document: > > <A xmlns="http://example.org/"> > > <b:B xmlns:b="http://example.org/b" xmlns=""> > > <C xmlns="http://example.org/"> > > </b:B> > > </A> > > You're missing a clsoing "/" in C. I noted that because when I ran it > through my code it complained of it, and once fixed output the intuitive > result that you suggest: You're right. > > This is wrong (C is now in the wrong namespace). It should > > be rendered: > > <A xmlns="http://example.org/"> > > <b:B xmlns:b="http://example.org/b"> > > <C></C> > > </b:B> > > </A> > > So now we're presented with a situation in which many of us incorecctly > read the speak to produce correct and intuitive results by the (false) > assumption that 'xmlns=""' is processed like the namespace declarations. That is correct. > > The following addition to the Specification would correct > > this: > > > > 4. If the token representing the default namespace is > > not present in InclusiveNamespace.PrefixList, then > > xmlns="" is rendered with a namespace axis iff: > > 1. The element E that owns the namespace axis is in the > > node set, visibly utilizes the default namespace, and > > has no default namespace node in the node set > > 2. The nearest output ancestor of E that visibly > > utilizes the default namespace has a default namespace > > node in the node set. > > Step 3 is written as *any* of the subsequent conditions permit the > namespace to be ignored. You are proposing an *any* too (I think, or is > it *and*) for rendering, it'd be easier to understand if it was also > written as an ignore. (It's an exception to c14n.) I'm thinking this > because I'm wondering if we can address this issue by simply saying: I mean *and*; it could be written as just one long run-on sentence. > A namespace node N (or the empty default namespace > declaration xmlns="") with a prefix (or default namespace token) > that does not appear in the InclusiveNamespacePrefix List is ignored > if any of the following conditions are met: > > To rewrite 4 in light of that: > 4. If the default namespace declaration is present and the token > representing the default namespace is not present in > InclusiveNamespace.PrefixList, then it is ignored if any of the > following conditions are met: > 1. The parent element E is not in the node set, > 2. The default namespace is not visibly utilized. > 3. The nearest output ancestor of E that visibly > utilizes the default namespace has the same value. I'm not sure this is right; we're not interested in making a special case of default namespace declarations, just its undeclaration. > So that's pretty close to the wording in 3. (If I did this correctly.) > So it might be possible to say to include this in step 3 ...? I'd like this to be the case. However, if we preclude the inherited c14n behaviour from emitting the xmlns="" at the 'wrong' point, it will not emit it at the 'right' point; for example: <A xmlns="http://example.org/"> <b:B xmlns:b="http://example.org/b" xmlns=""> <C /> </b:B> </A> If we suppress xmlns="" on b:B then it will not get placed on C in the exc-c14n form so we'll get: <A xmlns="http://example.org/"> <b:B xmlns:b="http://example.org/b"> <C></C> </b:B> </A> It seems to me that we have no alternative but to override the c14n xmlns="" behaviour: 4. If the token representing the default namespace is not present in InclusiveNamespace.PrefixList, then the rules for generation of xmlns="" are changed as follows: When canonicalizing the namespace axis of an element E that is in the node set, output xmlns="" iff E visibly utilizes the default namespace (i.e., it has no namespace prefix), and it has no default namespace node in the node set, and the nearest output ancestor of E that visibly utilizes the default namespace has a default namespace node in the node set. This special case is necessary because xmlns="" is not represented in the XPath info set as a namespace node, but instead as the absence of a namespace node; see [C14N] §4.7. I'm sure it's possible to write this more clearly. Merlin
Received on Tuesday, 4 June 2002 15:47:57 UTC