[xquery-talk] Question on expected XQuery return per standards

Ronald Bourret rpbourret at rpbourret.com
Fri Mar 27 13:52:58 PST 2009


Pavel Minaev wrote:
> On Fri, Mar 27, 2009 at 12:06 PM, Ronald Bourret
> <rpbourret at rpbourret.com> wrote:
>> Hmmm. I would have thought that, in each case, only p2 is returned.
>>
>> According to the spec, "For each item in the input sequence, the predicate
>> expression is evaluated using an inner focus, defined as follows: The
>> context item is the item currently being tested against the predicate. The
>> context size is the number of items in the input sequence. The context
>> position is the position of the context item within the input sequence."
>>
>> In each case, the input sequence is the result of $xml//p, which is a
>> sequence of four p elements. Since the position is the position within this
>> sequence, only p2 is in the second position.
> 
> But it isn't. The standard is very clear that $xml//p expands to
> $xml/descendant-or-self::node()/p. The ordering is also very clear:
> 
>   "Each non-initial occurrence of "//" in a path expression is
> expanded as described in 3.2.4 Abbreviated Syntax, leaving a sequence
> of steps separated by "/". This sequence of steps is then evaluated
> from left to right."
> 
> and, obviously, in $xml/descendant-or-self::node()/p[2], 2 is the
> position within the sequence of child nodes of the parent of p, not
> the expression as a whole.

Thanks for the clarification. I had to think about it a bit -- the 
parent isn't obviously involved until you realize that the parent is a 
descendant of $xml -- but that now makes sense.

-- Ron


More information about the talk mailing list