- From: Michael Kay <mhk@mhk.me.uk>
- Date: Mon, 2 Aug 2004 12:18:24 +0100
- To: "'David Carlisle'" <davidc@nag.co.uk>, <public-qt-comments@w3.org>
Thanks David. You may or may not be aware that there is a conversation going
on about this topic on the internal xsl-query list at the moment.
Michael Kay
> -----Original Message-----
> From: public-qt-comments-request@w3.org
> [mailto:public-qt-comments-request@w3.org] On Behalf Of David Carlisle
> Sent: 02 August 2004 10:54
> To: public-qt-comments@w3.org
> Subject: [Xquery] 3.9 Ordered and Unordered Expressions
>
>
>
> A query about the semantics of unordered.
>
> Firstly a comment that unordered{} does seem very strange.
> Xpath 1 had a
> very elegant model for unordered collections of nodes: "node sets"
> which was jettisoned in Xpath2/Xquery for ordered sequences, and now
> unordered collections apparently need to have been brought back in
> this rather ad hoc mechanism of "implemenation defined" ordered
> sequences.
>
> However leaving that aside, my real comment is about the notes in 3.9
>
>
> The fn:unordered function can operate on any sequence, whereas an
> unordered expression affects the ordering only of node
> sequences (not
> sequences of atomic values).
>
> This does not seem to follow from any of the previous discussion of
> unordered{} where it is described as applying to Path expresions and
> FLWOR.
>
> so
>
> unordered {for $i in 1 to 10 return $i}
>
> would (without this note) apparently be legal and be some
> permutation of
> 1 .. 10.
>
> If this comment is intended to be a normative constraint rather than a
> descriptive summary of an earlier definition it should probably be
> phrased differently. Also it only mentions node sequences (affected)
> and sequences of atomic values (not affected) and doesn't say what
> happens about mixed sequences of nodes and atomic values. Whether
> mixed sequnces are or are not affected by unordered{} it seems that
> a system can't know (if its not using static typing) until it has
> constructed an entire sequnce whether it is a node sequence or an
> ataomic sequence or a mix, and so it can't know whether unordered{}
> applies until after it has constructed the whole sequence
> which probably
> interferes with much of the optimisation gains that one might hope to
> have.
>
>
>
> In a region of the query where ordering mode is unordered, certain
> functions that depend on the ordering of node sequences may return
> nondeterministic results. These functions include
> fn:position, fn:last,
> fn:index-of, fn:insert-before, fn:remove, fn:reverse, and
> fn:subsequence
>
> This note is I think misleading as it implies something special about
> "certain" functions. In fact _all_ functions that (potentially) return
> a sequence of 2 or more items are affected by unordered{}, as
> a function call is a path expression.
>
> PathExpr
> RelativePathExpr
> StepExpr
> FilterExpr
> PrimaryExpr
> FunctionCall
>
>
>
> For example, in an ordered region, the path expression
> //a/b[5] will
> return the fifth qualifying b-element in document order. In an
> unordered region, the same expression will return an
> implementation-dependent qualifying b-element.
>
>
> implies that //a/b[5] will typically just return a single b
> node "_the_
> fifth" but of course it will normally return many b nodes, the fifth b
> child of each a. When unordered{} is in effect it will return one b
> child for each a that has 5 or more b's, but which b's are
> returned, and
> in which order, will be unspecified.
>
>
>
> David
>
>
> ______________________________________________________________
> __________
> This e-mail has been scanned for all viruses by Star Internet. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ______________________________________________________________
> __________
>
>
Received on Monday, 2 August 2004 07:19:04 UTC