$Id: README,v 1.11 2002-11-03 17:37:14 mike Exp $ cql-java - a free CQL compiler, and other CQL tools, for Java INTRODUCTION ------------ cql-java is a Free Software project that provides: * A set of classes for representing a CQL parse tree (a base CQLNode class, CQLBooleanNode and its subclasses, CQLTermNode, etc.) * A CQLCompiler class (and its lexer) which builds a parse tree given a CQL query as input. * A selection of compiler back-ends to render out the parse tree as: * XCQL (the standard XML representation) * CQL (i.e. decompiling the parse-tree) * PQF (Yaz-style Prefix Query Format) [### NOT YET] * A random query generator, useful for testing. CQL is "Common Query Language", a new query language designed under the umbrella of the ZING initiative (Z39.59-International Next Generation). More information at http://zing.z3950.org/cql/index.html XCQL is "XML CQL", a representation of CQL-equivalent queries in XML which is supposed to be easier to parse. More information at http://www.loc.gov/z3950/agency/zing/srwu/xcql.html (not much more, though) But if you didn't know that, why are you even reading this? :-) What's what in this distribution? README This file VERSION The version-number of this distribution src Source-code for the cql-java library lib The compiled library file, "cql-java.jar" bin Simple shell-scripts to invoke the test-harnesses docs Documentation automatically generated by "javadoc" test Various testing and sanity-checking frameworks etc Other files: CQL Grammar, generator properties, etc. "Installation" of this package would consist of putting the bin directory on your PATH and the lib directory on your CLASSPATH. SYNOPSIS -------- Using the test-harnesses: $ CQLParser 'title=foo and author=(bar or baz)' $ CQLLexer 'title=foo and author=(bar or baz)' (not very interesting unless you're debugging) $ CQLGenerator etc/generate.properties seed 18 Using the library in your own applications: import org.z3950.zing.cql.* // Building a parse-tree by hand CQLNode n1 = new CQLTermNode("dc.author", new CQLRelation("="), "kernighan"); CQLNode n2 = new CQLTermNode("dc.title", new CQLRelation("all"), "elements style"); CQLNode root = new CQLAndNode(n1, n2); System.out.println(root.toXCQL(0)); // Parsing a CQL query CQLParser parser = new CQLParser(); CQLNode root = parser.parse("title=dinosaur"); System.out.print(root.toXCQL(0)); System.out.println(root.toCQL()); System.out.println(root.toPQF(qualSet)); // ... where `qualSet' specifies CQL-qualfier => Z-attr mapping DESCRIPTION ----------- See the automatically generated class documentation in the "doc" subdirectory. (It's not all there yet, but it's coming.) AUTHOR ------ All code and documentation by Mike Taylor http://www.miketaylor.org.uk Please email me with bug-reports, wishlist items, patches, deployment stories and, of course, large cash donations. LICENCE ------- This software is Open Source, but I've not yet decided exactly what licence to use. Be good. Assume I'm going with the GPL (most restrictive) until I say otherwise. For what it's worth, I think the most likely licence is the LGPL (GNU's Lesser General Public Licence) which lets you deploy cql-java as a part of a non-free larger work. SEE ALSO -------- Adam Dickmeiss's CQL compiler, written in C. Rob Sanderson's CQL compiler, written in Python. All the other free CQL compilers everyone's going to write :-) THINGS TO DO ------------ * ### Fix bug where "9x" is parsed as two tokens, a TT_NUMBER followed by a TT_WORD. The problem here is that I don't think it's actually possible to fix this without throwing out StreakTokenizer and rolling our own, which we absolutely _don't_ want to do. * Some niceties for the cql-decompiling back-end: * don't emit redundant parentheses. * don't put spaces around relations that don't need them. * Write the PQN-generating back-end. This will need to be driven from a configuation file specifying how to represent the qualifiers, relations, relation modifiers and wildcard characters as z39.50 attributes. I think Ray has such a thing, though perhaps not yet in a form sufficiently rigorous to be computer-readable. * Consider the utility of yet another back-end that translates a CQLNode tree into a Type-1 query tree using the JZKit data structures. That would be nice so that CQL could become a JZKit query-type; but you could achieve the same effect by generating PQN, and running that through JZKit's existing PQN-to-Type-1 compiler. * Many refinements to the random query generator: * Generate relation modifiers * Proximity support * Don't always generate qualifier/relation for terms * Better selection of qualifier (configurable?) * Better selection of terms (from a dictionary file?) * Introduce wildcard characters into generated terms * Generate multi-word terms * Write fuller "javadoc" comments.