- From: Jim Davies <jdavies@neocore.com>
- Date: Tue, 19 Nov 2002 16:03:36 -0500 (EST)
- To: "Jonathan Robie" <jonathan.robie@datadirect-technologies.com>, "Bas de Bakker" <bas@x-hive.com>, <public-qt-comments@w3.org>
- Message-ID: <C5BF7C2C6ADF24448763CC46235FB3A60F0CA0@ulysses.neocore.com>
I wrote: I don't see it stated explicitly, but I suspect that the motivation for going to "order by" is to allow easy mapping of XQuery expressions onto an underlying relational database. Would you say that this is the case? Jonathan responds: Not only onto relational databases, but also indexes in native XML databases. FWIW, I have worked for three different companies that do native XML databases, and I care about implementability on both native XML and relational stores. My response: I, too, am currently working on a native XML database. In our implementation, the sorting facility doesn't rely on indexing, so I guess I don't see why there should be a connection. Won't any XQuery implementation need to have a general-purpose sorting facility (for either "sort by" or "order by")? And if that is the case, aren't we just arguing about syntax? Consider this degenerate case: (<word>this</word>, <word>that</word>) sort by(.) If you express this as for $x in (<word>this</word>, <word>that</word>) order by ($x) return $x then an implementation won't be able to use indexing to perform the sort anyway. And if you don't support this particular usage, are you supporting the entire XQuery language? I wrote: And is that a good rationale for designing a language feature? Jonathan responds: Efficient implementability in the range of environments where we expect our language to be deployed? Yes, I would say that's a good rationale. My response: See the above example. Not all expressions can be ordered by using indexes. I wrote: I found "sortby" (or "sort by") to be intuitively pretty simple, and more general than "order by". The latter complicates simple queries; I can't say document("mystuff.xml")//name sortby(.) Jonathan responds: Right, you would say: for $n in document("mystuff.xml")//name order by $n/name return $n My response: I agree that it's possible. What I don't agree is that this is a "concise and easily understood" way to express this. It is more familiar to a SQL programmer, perhaps, if that's a design goal. Jonathan writes: This was discussed at length, and we examined quite a few queries along these lines. One proposal was to retain both sort by () and the order by clause, defining the one in terms of the other. When the vote came, people seemed to prefer having only one way to sort. Let me make sure I understand your position - would you prefer having two, or would you prefer that we remove 'order by' altogether? My response: I would prefer the removal of "order by". I think it's less general than "sort by", more verbose and harder to understand in simple cases, and doesn't add any functionality (unless I've overlooked something, you can always apply a separate "sort by" to each "for" expression in nested FLWR statements to get the same result as a multi-level "order by"; or you can sort the output of the FLWR, which you can't with "order by"). It is possible that my opinion is colored by the fact that my company has a released product that implements "sortby" (not "sort by", that wasn't in the August draft), and that I don't want to have to re-work it (or, especially, to rewrite the manuals :-). But I'm not convinced that making XQuery more SQL-like really serves any higher design purpose; this language is fundamentally based around sequences, not tuples created by joins, and sorting a sequence seems very natural. Forcing the programmer to iterate over the sequence, when all he wants to do is to sort it, does not. I appreciate your comments, -- Jim Davies (jdavies@neocore.com)
Received on Tuesday, 19 November 2002 17:06:34 UTC