The Domino Tree Model

The Domino tree model is introduced in Saxon 9.8 and is available in Saxon-EE only. It is a new approach to the handling of DOM source trees.

The Domino data structure is essentially a combination of the DOM and parts of the TinyTree. It takes the unchanged DOM tree, and indexes it with vectors containing information (for each DOM node) about the node kind, node name, and level in the document. These vectors are exactly the same as those used in the TinyTree; the difference is that there is no text content, or attributes; these are replaced by references to the DOM nodes. All navigation around the tree is done purely using the index vectors, while retrieval of the string value of text and attribute nodes is done by reference to the DOM structure. The effect is that navigation is almost as fast as using the TinyTree, but queries are still able to return the original DOM Nodes.

Overall, queries and transformations using the Domino model take about double the time of the same query using the TinyTree, compared with 5 to 10 times longer using the DOM Wrapper model. There is an initial overhead in building the indexes, but this is incurred once only.

The Domino model must not be used with a DOM tree that is subject to update, other than changes to the values of attribute or text nodes, which might work (but are still best avoided). Saxon has no way of preventing or detecting updates, so these will generally cause catastrophic failure.