- From: <bugzilla@jessica.w3.org>
- Date: Mon, 14 Jul 2014 12:53:52 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=26328 Bug ID: 26328 Summary: Streamable and non-streamable accumulators in grounded postures Product: XPath / XQuery / XSLT Version: Last Call drafts Hardware: PC OS: Windows NT Status: NEW Severity: normal Priority: P2 Component: XSLT 3.0 Assignee: mike@saxonica.com Reporter: abel.braaksma@xs4all.nl QA Contact: public-qt-comments@w3.org We briefly discussed this during the latest telcon of the WG. The issue is the following, suppose you have the following in your stylesheet: <xsl:mode streamable="yes" /> <xsl:mode name="non-streamable" /> <!-- counting nodes --> <xsl:accumulator name="acc" initial-value="()" streamable="yes"> <xsl:accumulator-rule match="node()" phase="start" new-value="$value + 1" /> </xsl:accumulator> <!-- counting nodes non-streamable --> <xsl:accumulator name="acc-ns" initial-value="()" streamable="no"> <xsl:accumulator-rule match="node()" phase="start" new-value="$value + 1" /> </xsl:accumulator> <xsl:template match="*"> <xsl:value-of select="accumulator-before('acc')" /> <xsl:choose> <xsl:when test=". instance of text()"> <xsl:apply-templates select="copy-of(.)" mode="non-streamable" /> </xsl:when> <xsl:when> <xsl:for-each select="copy-of(comment())"> <!-- streamable accumulator? --> <xsl:value-of select="accumulator-before('acc')" /> <!-- or non-streamable accumulator? --> <xsl:value-of select="accumulator-before('acc-ns')" /> </xsl:for-each> </xsl:when> </xsl:choose> </xsl:template> <xsl:template match="text()" mode="non-streamable"> <!-- streamable accumulator? --> <xsl:value-of select="accumulator-before('acc')" /> <!-- or non-streamable accumulator? --> <xsl:value-of select="accumulator-before('acc-ns')" /> </xsl:template> Streamable accumulators are defined such that they can only be used in streamable contexts. The example above is a demonstration of the questions that arise. I am unsure whether the current rules either prevent, or allow the use of accumulators in grouned context or non-streamable modes called with copies of nodes from a streamable document. I recognize the following situations: 1) calling a streamable accumulator when a streamed node, not copied, is the context node (first call above). 2) calling a streamable accumulator when a copy of a streamed node is the context node (inside the for-each above). 3) calling a streamable accumulator when a copy of a streamed node is the context node and the construct is inside a declaration that is outside the scope of streamability analysis (the last matching template above). 4) calling a non-streamable accumulator when a copy of a streamed node is the context node (inside the for-each above) 5) calling a non-streamable accumulator when a copy of a streamed node is the context node and the construct is inside a declaration that is outside the scope of streamability analysis (the last matching template above). In the specification (internal draft) we currently say under 18.2.1: "An accumulator is applicable to a particular document if the pattern supplied in the applies-to attribute matches the first element node in the document [...]" We don't say anything, I think, about temporary documents. If we create a copy of a node, are the accumulated values reset? Do both streaming and non-streaming accumulators apply to it? Or should they turn up empty? Or does the copy of a node include the accumulated values that have been calculated for the in-scope nodes? -- You are receiving this mail because: You are the QA Contact for the bug.
Received on Monday, 14 July 2014 12:53:53 UTC