- From: David Carlisle <davidc@nag.co.uk>
- Date: Mon, 2 Aug 2004 10:54:29 +0100
- To: public-qt-comments@w3.org
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 06:28:56 UTC