xsl-list
[Top] [All Lists]

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

2014-01-12 14:58:28
Hi,

I think the confusion here is because we are talking about two different counts.

Within the context of node $n, count($n) would be an inspection
operation. Dimitre points out that we know the answer would be 1
(statically), but this isn't always the case, for example, for
count($n[expr]. If expr can also be found by inspection -- say in the
case of count($n[starts-with(local-name(),'c'))], we are okay.

It's traversing the subtree rooted at $n that's not an inspection
operation; this requires access to the nodes under $n, so it would be
an absorption operation. So from context $n, count($n/some/path) is
not going to be streamable unless we allow it to "absorb" $n in doing
so -- not because of the count(), but because of the traversal.

Just winging it here, but this makes sense doesn't it?

Cheers, Wendell

BTW, Dimitre, remember that for some nodes, count(..) returns 0..,. :-)
Wendell Piez | http://www.wendellpiez.com
XML | XSLT | electronic publishing
Eat Your Vegetables
_____oo_________o_o___ooooo____ooooooo_^


On Sun, Jan 12, 2014 at 2:27 PM, Michael Kay <mike(_at_)saxonica(_dot_)com> 
wrote:


Michael, doesn't the count() function require access to the whole subtree? 
How would a count be conducted by sitting at the top of a subtree? Perhaps 
you meant to say that the count() function is an absorption operation?


If you are evaluating count() or exists() on a sequence of nodes S, then when 
you encounter a node N that is a member of this sequence you know its impact 
on the result as soon as you see its start tag; you do not need to look at 
its subtree. This makes it different from, say, sum() or "=". This means that 
the existence of overlapping nodes within S is no problem for count() or 
exists(), whereas it is a problem for sum() or "=".

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>
--~--


--~------------------------------------------------------------------
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>