- From: Henry Zongaro <zongaro@ca.ibm.com>
- Date: Tue, 16 Nov 2004 10:22:17 -0500
- To: www-dom@w3.org
Hello. Appendix B of DOM L3 Core describes algorithms for namespace normalization [1] and namespace prefix lookup.[2] The two algorithms differ in their treatment of prefixes on attributes. The namespace normalization algorithm will ensure namespace declaration attributes exist for any element prefix or attribute prefix. However, the namespace prefix lookup algorithm will only return an implicitly-declared prefix that is used in the name of an element, but not one that is used in the name of an attribute. To be more concrete, the following Java example Element e = doc.createElementNS("http://ex.org", "org:elem"); Attr a = doc.createAttributeNS("http://ex.com", "com:att"); a.setValue("abc"); doc.appendChild(e); e.setAttributeNode(a); System.out.println("Before normalization:"); System.out.println("Prefix associated with ex.org: " + e.lookupPrefix("http://ex.org")); System.out.println("Prefix associated with ex.com: " + e.lookupPrefix("http://ex.com")); System.out.println(); doc.normalizeDocument(); System.out.println("After normalization:"); System.out.println("Prefix associated with ex.org: " + e.lookupPrefix("http://ex.org")); System.out.println("Prefix associated with com: " + e.lookupPrefix("http://ex.com")); will produce the following output: Before normalization: Prefix associated with ex.org: org Prefix associated with ex.com: null After normalization: Prefix associated with ex.org: org Prefix associated with ex.com: com It's not clear why the prefix lookup algorithm ignores prefixes that are used on attribute nodes. Was it an oversight? The documentation of the algorithm doesn't explicitly point out this surprising fact, so it's not clear that this was a conscious decision. In a similar vein, according to section 1.2.3 of the W3C Note on DOM L3 XPath:[3] << The set of in-scope namespaces of an element is the default xml namespace combined with the contributions of namespace attributes of the current and all ancestor elements. In addition to explicit namespace attributes, any element has an implicit declaration of its own prefix, if any, or if no prefix then of the default namespace, which is enforced during namespace serialization, fixup, and lookup, which must be added to the set of in-scope namespaces when generating namespace nodes for an element. This causes the set of namespace nodes to be consistent with serialization, fixup, and lookup of namespaces in DOM Level 3. >> That text ensures that an element will have a namespace node that declares its own namespace. However, there is no requirement that there be implicit declarations of namespaces for that element's attributes. The last sentence I've quoted from [3] indicates the set of namespaces will be consistent with fixup [1] and lookup of namespaces [2] in DOM Level 3. It's not clear how the definition in [3] can be consistent with [1] and [2], when [1] and [2] are not consistent with one another. Thanks, Henry [1] http://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#normalizeDocumentAlgo [2] http://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo [3] http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/xpath.html#NamespaceNodes ------------------------------------------------------------------ Henry Zongaro Xalan development IBM SWS Toronto Lab T/L 969-6044; Phone +1 905 413-6044 mailto:zongaro@ca.ibm.com
Received on Tuesday, 16 November 2004 15:22:46 UTC