[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] General rule for designing XPath expressions to return items in document order?


Subject: Re: [xsl] General rule for designing XPath expressions to return items in document order?
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Thu, 9 Jan 2014 11:21:32 +0000

> I haven't checked the streaming rules in detail but I would expect //head to
be streamable. (You might not be able to access any of the
> child nodes in a streamable way but for example count(//head) ought to be
able to count all the head in the document in a single pass.
>>

That's a fair summary. //head is "consuming" (it reads the input stream), and
"crawling" (it accesses all the nodes in the subtree). When you get an
expression that is consuming and crawling, you are allowed to do "inspection"
operations on the result, for example count(), exists(), or name(), but you
are not allowed to do "absorption" operations such as string() or data() or
copy-of(). Inspection operations on an element are operations that can be
performed while positioned at the start tag, while absorption operations are
operations that require access to the whole subtree.

By contrast, /html/head is consuming and "striding" (the nodes it returns are
peers - none is an ancestor of any other). With a striding expression, you can
perform both inspection and absorption operations. So /html/head/string() is
allowed, but //head/string() is not.

This is horribly technical. Abel Braaksma and I will both be at XML Prague
next month trying to explain it.

Michael Kay
Saxonica


Current Thread
Keywords
xml