[Bug 25316] [XSLT 3.0] Streamabilty and numeric predicates

https://www.w3.org/Bugs/Public/show_bug.cgi?id=25316

Abel Braaksma <abel.braaksma@xs4all.nl> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |abel.braaksma@xs4all.nl

--- Comment #4 from Abel Braaksma <abel.braaksma@xs4all.nl> ---
Some observations:

1) I think this new rule, and the existing rule, has an error. We say "If B is
crawling ....<set of rules>... then crawling and consuming". As written, this
rule has no effect. Because the result is a single node, the resulting posture
should be striding.

2) "... and consuming". I can't think of a crawling expression that is
motionless, it could happen in xsl:for-each, but there a crawling expression
cannot be the focus setting expression.

3) We do allow position() in a predicate, except that than the result of
B[position()] is crawling (this follows from the next rule in that section).

4) "that has F as its focus-setting container" >> I think you mean "that has B
as its focus-setting container. F already includes P, so I don't think the
whole expression can be its own focus-setting container.

5) "other than last();" >> the last() function is already prohibited in a
filter expression, unless in a nested filter expression with climbing posture,
but these rules rule other path expressions out.

It appears to me that the rules are meant to allow such expressions as:
(foo//bar)[12 + $count]
(foo//bar)[(1, 2, 3)[last()]]
(foo//bar)[(3, 4, 5)[position() = $pos]]
(foo//bar)[count($param)]

And to disallow (in fact, leave result as crawling):
(foo//bar)[position()]
(foo//bar)[@graph = 10]
(foo//bar)[position() = 12]
(foo//bar)[number(parent::*[2]/@age) + 10]

Handy: the new (and existing) rules can turn a crawling expr into striding, if
you expect zero-or-one results:
(foo//bar)[@graph = 10][1]
(foo//bar)[number(parent::*[2]/@age) + 10][1]
(foo//bar)[position()][ancestor::name[@age]][1]

6) We have a rule under 19.8.7.7 (axis steps) that is almost the same:

"4. If the context posture is striding, and the axis is descendant or
descendant-or-self, and there is a predicate in the PredicateList that is
either a numeric literal or a variable reference whose static type is a subtype
of U{xs:decimal, xs:double, xs:float} (for example, descendant::title[1]), then
striding and consuming;"

Should we apply these new rules there as well (or reference it to have them in
one place)?

-- 
You are receiving this mail because:
You are the QA Contact for the bug.

Received on Tuesday, 15 July 2014 01:18:19 UTC