- From: <bugzilla@jessica.w3.org>
- Date: Wed, 26 Mar 2014 17:27:55 +0000
- To: public-qt-comments@w3.org
https://www.w3.org/Bugs/Public/show_bug.cgi?id=25160
Bug ID: 25160
Summary: [XSLT 3.0] a//c with striding CP is roaming by the
rules, though we strove to make it streamable
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
Under [1] we write that // must be rewritten as /descendant-or-self::node()/
and an omitted axis x to child::x. Following the rules we get, given a context
posture of striding:
1. rewrite a//c as child::a/descendant-or-self::node()/child::c
2. rewrite for associativity as (child::a/descendant-or-self::node())/child::c
3. determine LH posture and sweep
a. assess child::a/descendant-or-self::node()
b. determine LH posture and sweep
i. assess child::a with CP striding
ii. table under 19.8.7.7 gives result posture striding, sweep consuming
c. determine RH posture and sweep
i. assess descendant-or-self::node() with CP striding
ii. table under 19.8.7.7 gives result posture crawling, sweep consuming
4. determine RH posture and sweep
a. assess child::c with CP crawling
b. table under 19.8.7.7 gives result posture roaming, sweep free-ranging
5. result of a//c is roaming and free-ranging
The problem in the rules is with the rewriting of // into
/descendant-or-self::node()/, which introduces an extra step. Were we to
rewrite a//c as a/descendant-or-self::c, the problem would not arise.
I propose to augment the rule for rewriting // as follows:
//x and //child::x into /descendant::x
//otheraxis::x into /descendant-or-self::node()/otheraxis::x
//otherexpr into /descendant-or-self::node()/otherexpr
Note also that we say very explicitly that a//c should be streamable (well,
crawling, so streamable in certain contexts, like xsl:for-each) in the second
bullet point under Examples of 19.8.7.6:
"If the context posture is striding, then the posture of the expression a//c is
crawling, because a descendant axis step evaluated with striding posture
creates a new crawling posture."
--
You are receiving this mail because:
You are the QA Contact for the bug.
Received on Wednesday, 26 March 2014 17:27:56 UTC