- From: Xavier Franc <xfranc@online.fr>
- Date: Wed, 22 Oct 2003 13:16:10 +0200
- To: www-ql@w3.org
Per Bothner wrote: > * Each element has a "namespace mapping", which maps prefixes to uris, > and which can be implemented as a hash-table or a vector (propery-list). > (Since the namespace mapping is primarily used for serialization, it > makes more sense to use a space-efficient vector.) > * Once created a namespace mapping is immutable, and so can be shared > between element nodes. > * When parsing an XML document, if an element has no namespace > attributes we re-use the namespace mapping of its parent. If it has > namespace attributes, we create a new namespace mapping which is the > combination of the parent's namespace mapping with the new namespace > attributes. > * When serializing an element, we print all the namespaces in the > element's namespace mapping, except for ones that are redundant because > they have already been serialized in an enclosing element. > * When an element is constructed, its namespace mapping includes all the > "active namespaces nodes" (in the sense of the specification) plus any > of the namespaces in the prologue or predefined that are referenced in > the current element *or* (if this is a direct element constructor) in > any enclosed direct element constructors. (This rule is meant to > minimize the number of distinct namespace mapping we have to create. > The implemengtatin may need to be a little bit clever here.) > * When an element is (conceptually) copied (re-parented), we use its > existing namespace mapping. We do *not* create a new namespace mapping > to incorporate any namespace in the parent. > this is roughly speaking the way it works in Qizx (my own engine), and probably in others. some remarks: - when copying an existing node into a constructed tree, there is a choice about copying in-scope prefix/ns mappings (aka "namespace nodes"): 1- copy all in-scope mappings: more verbose output but better chances to avoid creating synthetic namespace declarations (something like xmlns:ns1="...") required by missing mappings. 2- copy only mappings defined on the node itself: more concise 3- copy no mappings at all: wont result in nice serialization 4- copy only if used in sub-tree: best but not efficient currently Qizx takes the option 2, but now I think it would be better to switch to the 1. - namespace/prefix pairs defined in the prologue are not actually copied onto nodes but they are used as hints or "preferred prefixes" for serialization. -- Xavier FRANC
Received on Wednesday, 22 October 2003 07:14:49 UTC