xsl-list
[Top] [All Lists]

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

2014-01-09 05:21:44

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


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


<Prev in Thread] Current Thread [Next in Thread>