Subject: Re: [xsl] Does the count() function require access to the whole subtree? From: "Costello, Roger L." <costello@xxxxxxxxx> Date: Wed, 15 Jan 2014 10:48:33 +0000 |
A couple days ago Michael Kay wrote: count(//x) is streamable, but data(//x) is not. Here //x is a "crawling" expression - one that selects nodes which may overlap each other. When an expression returns (potentially) overlapping nodes, the W3C spec says you can apply inspection operations like count() to those nodes, but you cannot apply absorption expressions like data(), because doing so would require buffering. I'm getting hung up on terminology: crawling, inspection, absorption, overlap. Even though (I think) that I now understand those terms, I still don't understand why one expression is streamable while another is not. For example, why is count(//x) streamable whereas data(//x) is not? I don't want to remember a bunch of definitions and rules (which I will quickly forget). I want to understand the concepts (which I won't forget). I understand best with examples. Consider this XML: <Document> <x> <x>A</x> B </x> </Document> This XPath expression: //x returns a sequence of two subtrees: <x> <x>A</x> B </x> <x>A</x> Michael, would you take us (conceptually) through the process an XSLT processor would go through - as it incrementally steps through the XML document - to count the number of <x> elements? And would you explain why the data(//x) operation would require buffering and is therefore not streamable, please? /Roger
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Does the count() function, Piotr Bański | Thread | Re: [xsl] Does the count() function, David Carlisle |
Re: [xsl] Does the count() function, davep | Date | Re: [xsl] Does the count() function, David Carlisle |
Month |