RE: [XQuery] 3.2 Order of nodes constructed in a path

> Well no, it's not. Consider:
>      let $source := <foo>
> 	<a><b/></a>
> 	<a><b/></a>
>      </foo>
>      return $source/a/b/text{ position() }
> which creates two "1" text nodes, as opposed to your example which 
> would create "1", "2".

The expression:

   $source/a/b/text{ position() }

parses as

   (($source/a)/b)  /  (text{position()})

The value of (($source/a)/b) is a node-sequence containing two nodes.
The expression text{position()} is evaluated once for each node in this
node-sequence, with the positions of these nodes being 1 and 2.

So I think it creates two text nodes containing "1" and "2"
respectively.

I actually proposed recently that position() and last() on the rhs of
"/" should always be one, because I did not think that there were any
cases where the current definition was useful, and because it prevented
"/" being associative. But the proposal didn't gain support from the WG.


> 
> However, I feel like we're getting off track. The issue at 
> hand is not 
> whether there's some way of reproducing position(). Being able to 
> construct nodes within a path (whether directly or via a 
> function) is a 
> powerful feature. Assuming it remains, the issue is how to define the 
> order of the elements created.
> 

Well, I would tend to argue the other way: it is not a powerful feature,
because the order of the nodes is undefined, and I for one don't see any
sensible way of defining the order.

Michael Kay

Received on Friday, 6 February 2004 13:47:56 UTC