Indexation of rule comparison predicates

A common form of template rule pattern predication is pattern[expr=value], such as

*[@type='xs:string'], *[@type='xs:double'] ....

In cases where there are very large numbers of such rules, Saxon can build indexes to decrease the rule pattern matching time. This involves searching for sets of rules which have predicates that are equality comparisons and collecting together sets with a common LHS of the comparison and 'base pattern'. (Rules with patterns *[@type='xs:string'] and foo/*[@type='xs:double'] would be indexed together to lookup via @type - if the latter rule was a candidate (@type='xs:double') a further test parent::foo would then be applied.). An index is built for any set of rules, with a common indexation base, larger than index.minUses in size. The comparisons are performed under the default collation for the given template ( @default-collation ) - thus two templates with identical base patterns and comparison LHS, but differing collations, will be indexed separately.

This technique is experimental and should be used only after testing representative documents for correctness by comparing outputs with this indexation feature enabled and disabled. Invoking Saxon-EE through the class com.saxonica.StatsTransform can be used to help and can give indications of the level of any performance improvement to be anticipated. For more details of this analysis tool, see Detailed Pattern-Matching Statistics.