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

Re: [xsl] Does the count() function require access to the whole subtree?

Subject: Re: [xsl] Does the count() function require access to the whole subtree?
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Mon, 13 Jan 2014 12:53:22 +0000

> My first question in other words: Is count( x ) always streamable, no
> matter what x (or a $x or...) is?

No. Counter-example: count(following-sibling::x) is not streamable.

More specifically, count(X) is streamable (more specifically, its posture is
grounded) if the posture of X is grounded, climbing, striding, or crawling,
but not if it is roaming.

Sorry - I know that's a lot of new jargon to absorb on a Monday morning!

Michael Kay

> The "positioned" was referring to a quote from Roger, see his post, please.
> -W
> On 13/01/2014, Michael Kay <mike@xxxxxxxxxxxx> wrote:
>> On 13 Jan 2014, at 11:59, Wolfgang Laun <wolfgang.laun@xxxxxxxxx> wrote:
>>> With growing insecurity ;-)
>>> My understanding is that count($x) may be called on the construction
>>> of a sequence which (the construction) is not streamable, and that
>>> calling count(...) on it does not make it streamable.
>>> Another thing: calling count(...) doesn't require to be positioned
>>> anywhere.
>> Sorry, but I'm afraid I don't even understand what you're saying/asking
>> here. What do you mean by an expression being positioned?
>> What we are discussing, is in simplified terms, the fact that count(//x)
>> streamable, but data(//x) is not. Here //x is a "crawling" expression -
>> that selects nodes which may overlap each other. When an expression
>> (potentially) overlapping nodes, the W3C spec says you can apply
>> operations like count() to those nodes, but you cannot apply absorption
>> expressions like data(), because doing so would require buffering.
>> Michael Kay
>> Saxonica

Current Thread