RE: [xsl] Find the node with maximum elements

Subject: RE: [xsl] Find the node with maximum elements
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Sun, 4 Nov 2007 14:52:13 -0000
> And I'm assuming that since the expression 
> "max(/Sample/*/count(Car))" is based on an absolute XPath 
> address, there is an opportunity for processor optimization 
> because the value will never change for the entire execution 
> of the stylesheet.

That's actually not a sufficient condition. The term "absolute path
expression" is very misleading from this point of view. Given an expression

$exp[count(Car) = max(/Sample/*/count(Car))]

you can move the max() call out of the loop only if you know that $exp is a
single-document nodeset - that is, all nodes in $exp will come from the same
document. This is the strategy Saxon uses, and it works in this case because
static analysis shows that /Sample/* is indeed a single-document nodeset.

Another optmization strategy would be, at run-time, to evaluate
max(/Sample/*/count(Car)) once for each document represented in $exp, so if
$exp returned a set of 100 nodes taken from three documents, the max()
function would be evaluated thrice. This isn't a strategy Saxon uses...

The big difficulty when coding in XSLT or other declarative languages is of
course that you don't know which "opportunities for optimization" the
processor is going to take advantage of.

Michael Kay

Current Thread