On 17 Aug 2013, at 17:53, Hans-Juergen Rennau wrote:
Is there no way how we can lift the map model of XDM *into* the node model?
Only if you break the constraint that every element node in XDM can be losslessly serialized as an element in XML. (Well, "losslessly" except for the type annotation...).
XDM has some fundamental non-orthogonalities built into it, all derived from non-orthogonalities in XML.
For example:
* attributes cannot hold any value, they can only hold strings
* elements cannot contain any value, they can only contain sequences of certain kinds of nodes
For maps we wanted the value part of a (key-value) pair to be ANY value, and to achieve that using element nodes would require an extension of XDM element nodes to the point where they bore little relationship to elements in XML. You could make map (and map-entry) into new kinds of node, and we considered that option, but then you would burden them with identity and parentage which we didn't want. Part of the reason for that is that with immutable data, we wanted creation of a new map by adding an entry to an existing map to be a cheap operation, and that's hard to achieve if every existing "node" in the old map has to acquire a new identity. Currently with XSLT it's very expensive to construct a document that
differs in a very small way from an existing document: the cost is typically proportional to the size of the existing document; that's because it's required that every node in the new document has a distinct identity from the corresponding node in the old document, which is hard to achieve (though I dare say it might be possible if one tried harder) without making a physical copy.
It's worth recalling here the problems with using the node model for namespace nodes. Many implementors have complained about the cost of implementation of the namespace node model (which is why it wasn't carried over into XQuery). You either implement it naively, which is very inefficient because there are such large numbers of nodes, or you devise some kind of scheme for virtual nodes that are instantiated on demand (as Saxon does) which is very complex to implement. The complexities are only there because namespace nodes have identity and parentage,
yet infinitessimally few applications actually depend on the identity and parentage of namespace nodes. Implementing them as a (prefix->URI) map would have been far simpler.
Michael Kay
Saxonica