From mike@miketaylor.org.uk Mon Nov 4 10:29:39 2002 Date: Sun, 3 Nov 2002 20:58:27 GMT From: Mike Taylor To: mike@seatbooker.net Subject: cql-java 0.1 released! Dear ZINGers, I'm pleased to announce the initial release of "cql-java", a suite of Free-as-in-freedom tools for handling CQL queries in Java. It provides a whole bunch of classes within the org.z3950.zing.cql package, including: * CQLNode and subclasses which together represent parse trees * CQLCompiler which is what it says, and returns a parse tree * A back-end that renders a parse-tree as XCQL * Another back-end that renders back into CQL (i.e. a decompiler) * CQLGenerator, which generates random CQL parse trees. (This latter is useful for testing: for example, running a sequence of 1000 random "CQLgenerate | CQLParse"s has told me, among other things, that the software correctly parses: (((("foo>bar" = "") and ((((("foo>bar" = "the complete dinosaur") not (dc.author = "")) and ((("foo>bar" >= "frog fish") not (dc.subject any "frog fish")) or ("foo>bar" all xml:element))) or (dc.title >= "")) and (bath.subject = comp.os.linux))) not (((bath.subject = "frog fish") not (bath.subject >= "")) and (dc.subject = "frog fish"))) not (dc.author <> xml:element)) not (((((((((dc.subject = comp.os.linux) and (dc.author = "frog fish")) not ((bath.author = comp.os.linux) and (bath.title <> ""))) not (bath.subject = "frog fish")) or ((((bath.author = "") or (bath.author = "frog fish")) or (bath.subject = xml:element)) and (dc.subject <> foo*bar))) not (dc.author <> "")) and (bath.title any "the complete dinosaur")) not (dc.title = comp.os.linux)) or (bath.subject = comp.os.linux)) ... and you never know when that's going to come in useful :-) The distribution also includes a rudimentary test-suite, intended not only for this compiler, but for comparing the behaviour of any set of CQL compilers. (Mine and Adam's seem to be pretty much in agreement on most things, except that his parses and then discards proximity parameters, not yet generating any XCQL for them. But mine has much better diagnostics :-) The software's home is at http://zing.z3950.org/cql/java/ where you can download version 0.1, or read the README file or javadoc'd API documentation on-line. I consider this release to be "alpha" quality -- that is, it's petty much complete, tested and believed to be working (apart from one rather subtle bug which is Hard to fix), but you'd not necessarily be advised to use it in mission-critical applications yet. Where it's no doubt weak is in the area of portability. So far, it's only ever been built and run under what I use, which is Sun's JDK 1.3 with IBM's Jikes compiler. Please try it on other platforms -- both running against the supplied jar-file, and compiling the source -- and let me know what I need in the way of portability tweaks. Thanks are due to everyone who's contributed to the development of the CQL spec., and particularly to Adam and Rob, whose trailblazing efforts with their own CQL compilers has prodded me into action where inertia might otherwise have reigned. That's it -- download, unpack, play, and send me feedback! I'd like to get this up to "1.0" level, releasable to the wider world, as soon as possible. _/|_ _______________________________________________________________ /o ) \/ Mike Taylor www.miketaylor.org.uk )_v__/\ "If any of the opposing players dance about or gesticulate [...] it shall be deemed ungentlemanly conduct" -- FIFA law 15, FA board decision 3.