- From: <bugzilla@jessica.w3.org>
- Date: Sat, 30 Apr 2016 10:20:23 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=29604
Bug ID: 29604
Summary: [XSLT30] Request for clarification of statement in
section https://www.w3.org/TR/xslt-30/#stream-examples
Product: XPath / XQuery / XSLT
Version: Candidate Recommendation
Hardware: PC
OS: Windows NT
Status: NEW
Severity: normal
Priority: P2
Component: XSLT 3.0
Assignee: mike@saxonica.com
Reporter: martin.honnen@gmx.de
QA Contact: public-qt-comments@w3.org
Target Milestone: ---
The section https://www.w3.org/TR/xslt-30/#stream-examples shows two uses of
xsl:stream with the accumulator functions count and max and the examples work
fine for me with Saxon 9.7. However that sections ends with the statement "To
compute both the count and the maximum value in a single pass over the input,
it is possible to use two variables.". I would like to see an example that does
that as it appears the naive approach of
<xsl:template name="xsl:initial-template">
<xsl:stream href="transactions.xml">
<xsl:variable name="count"
select="count(transactions/transaction)"/>
<xsl:variable name="max"
select="max(transactions/transaction/xs:decimal(@value))"/>
<count>
<xsl:value-of select="$count"/>
</count>
<maxValue>
<xsl:value-of select="$max"/>
</maxValue>
</xsl:stream>
</xsl:template>
does not work with Saxon, it complains
Static error in xsl:stream/@href on line 10 column 41 of test201604300104.xsl:
XTSE3430: The body of the xsl:stream instruction is not streamable
* There is more than one consuming operand: {count(...)} on line 11, and
{let $max :=
...} on line 10
What I got to work is an example using a map
<xsl:template name="xsl:initial-template">
<xsl:stream href="transactions.xml">
<xsl:variable name="map" as="map(xs:string,
xs:decimal)"
select="map{'count':
count(transactions/transaction),
'max':
max(transactions/transaction/xs:decimal(@value))}"/>
<count>
<xsl:value-of select="$map('count')"/>
</count>
<maxValue>
<xsl:value-of select="$map('max')"/>
</maxValue>
</xsl:stream>
</xsl:template>
but that is no a use of two variables.
So I hope the comment "To compute both the count and the maximum value in a
single pass over the input, it is possible to use two variables." could be
accompanied by an example that shows how to do that.
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Saturday, 30 April 2016 10:20:25 UTC