$Id: Changes,v 1.46 2008-05-28 10:03:53 mike Exp $ Revision history for the CQL-Java package. See the bottom of this file for a list of things still to do. The work for releases 1.0, 1.2 and 1.2.1 was sponsored by the National Library of Australia, whose help we gratefully acknowledge. 1.3 Wed May 28 11:02:00 BST 2008 - Add getSortIndexes() to CQLSortNode, as suggested by Marcel Versteeg 1.2.1 Mon Aug 6 16:54:54 BST 2007 - Contructors for the CQLParser class are made public (as they should have been all along). 1.2 Tue Jul 3 17:53:28 BST 2007 - Support for CQL version 1.2 as described at http://www.loc.gov/standards/sru/next-version.html The most significant part of the v1.2 change is support for sorting, but as of this writing (29th June) the official SRU maintenance agency web site at http://www.loc.gov/standards/sru/index.html does not include any specification for CQL sorting. Therefore the original proposal at http://zing.z3950.org/cql/sorting.html is still considered canonical. 1.0 Fri Jun 29 14:10:28 BST 2007 - Support for version 1.1 as described at http://www.loc.gov/standards/sru/specs/cql.html Since this is a significant leap forward, the version numbering increases to the next major version. - "Qualifiers" renamed as "indexes" throughout, to match what is now universal CQL terminology. PLEASE NOTE THE FOLLOWING INCOMPATIBLE API CHANGES - The class UnknownQualifierException is replaced by UnknownIndexException. - The CQLTermNode method getQualifier() is replaced by getIndex(). 0.7 Thu Sep 4 22:51:11 2003 - Support for profiled relations and relation modifiers: recognise any non-key word as a relation or modifier, rejecting those that are not of the form . since these must be explicitly tied to a "context" (what used to be called a qualifier-set or index-set). 0.6 Tue Jul 29 23:33:56 2003 - Include Ralph's fix for CQLTermNode::toType1BER() to prevent it surrounding multi-word terms in quotes when encoded into BER packet. 0.5 Wed Feb 5 15:50:57 2003 - Add an extra back-end method, byte[] toType1BER(Properties config) which generates an opaque BER-encoded PDU suitable for forwarding to Z39.50 server as a pasrt of a searchRequest APDU. This was contributed by Ralph Levan - Add srw.resultSet support to the toPFQ() method. - Add new resultSetName() method to CQLNode and its subclasses, returning the name of the referenced result-set for a node that is just a result-set reference, and null for anything else. - Change regression-test rules for Adam's compiler to use his new front-end cql2xcql instead of the old cqlparse3. - Change the names of the anchoring properties in etc/pqf.properties and the CQLTermNode code that examines them, in accordance with Adam's PQF-renderer's behaviour. This gives more flexibility in terms of generating attributes for end-of-field anchoring. Various other minor tweaks to the pqf.properties file, mostly to the comments. - Change the capitalisation of the project name from "cql-java" to "CQL-Java". That doesn't really make any difference to anything: in particular, file-names such as "cql-java.jar" remain the same. 0.4 Thu Nov 21 10:09:26 2002 - Add support for the new "phonetic" relation modifier, including its mapping in "etc/pqf.properties". - Make prefix-maps bind loosely, so that ``>dc=x a and b'' applies the dc=x binding to both the ``a'' and ``b'' sub-queries. - Change the XCQL output to include the nasty (but official) and wrapper elements. - Change the XCQL output to use the nasty (but official) rendition of prefix-mapping: a element, containing one of more es may appear at the top of either a or a . - Include test/regression/xmlpp.pl in the distribution: this may now be used for testing whether a CQL compiler produces _equivalent_ XCQL to what's in the regression test, rather than requiring byte-identical output. - Include the reference XCQL output in the distribution, for the regression test suite to run against. - Change build process so that javadoc documentation is built by "make" in the "docs" directory. There's now a top-level makefile that builds the source, runs the test suite and creates the documentation. - Write javadoc comments for CQLRelation and ModifierSet. - Other improvements to javadoc comments (e.g. describe the `config' parameter to the toPQF() method.) - Sort out the licence: I've settled on the LGPL. - Remove the redundant and misleading etc/Grammar file. - Fix up various Maintenance Agency web addresses that have moved in the great ZING-release shake-up. 0.3 Fri Nov 15 12:04:04 2002 - Allow keywords to be used unquoted as search terms. - Add support for serverChoiceRelation (scr). - Add support for prefix-mapping, as in >dc="http://www.loc.gov/zing/cql/dc-indexes/" dc.title=fish and >"http://www.loc.gov/zing/cql/dc-indexes/" dc.title=fish The XCQL generated corresponds to Adam's suggested format rather than Rob's, not so much because I prefer it (although I do) as because it's what fell out when I just Coded What Comes Natur'ly. That may need to change, depending on the result of the ZNG list's deliberations. - Fix the parser to normalise relation modifiers to lower case. - Fix the CQLParser test harness not to emit an extraneous blank line at end of XCQL output. - Fix CQLNode documentation to contain a link to YAZ's documentation of Prefix Query Format (PQF) rather than containing a rather unhelpful chunk of BNF. - Change the test/regression Makefile so that "make clean" now does what "make distclean" used to do - the distinction between them is pointless. - Fix a few typos in the documentation. - Move the README file's old "THINGS TO DO" section to the end of this file, the new "Still to do" section. 0.2 Wed Nov 6 23:05:54 2002 - Fix the order of proximity parameters in accordance with the updated official grammar, which now specifies proximity operators of the form prox//// as in ``foo prox/<=/3/sentence bar''. - Make the necessary parts of the CQLNode class and its subclasses public. This means that client code can now walk through parse-trees and so implement its own back-end (e.g. to build BER-friendly data structures using whatever Z39.50 toolkit is preferred.) - Add the toPQF(Properties p) method to CQLNode and its subclasses. This produces a query in YAZ-style Prefix Query Format, which can be trivially translated into a Z39.50 Type-1 query (see, for example, JZKit's code to do so). - Add etc/pqf.properties to configure the toPQF() method. - Add "-p " option to the CQLParser test-harness, indicating that the parsed tree is to be rendered to PQF. - Add PQFTranslationException and its subclasses UnknownQualifierException, UnknownRelationException, UnknownRelationModifierException and UnknownPositionException. - Rename ParameterMissingException to MissingParameterException. - Add javadoc comments for CQLNode and its subclasses. 0.1 Sun Nov 3 20:58:27 2002 - First public release. -- ### Still to do - Test-harness option to use Type1 BER back-end. - Case-insensitive matching for serverChoice and any other special-case qualifiers. (Are the configured qualifiers matched case-insensitively? They should be.) - Prefix-aware matching for serverChoice, so that >x="http://www.loc.gov/zing/srw/dc-indexes/v1.0/" x.resultSet=foo does the right thing. - Extend test-suite for PQF and BER renderers. - Additional test-suite entries for things like case-sensitivity. - Add a new configuration file that allows arbitrary new relations and relation modifiers to be defined. - Fix the 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 StreamTokenizer and rolling our own, which we absolutely - Fix term-to-PQF translation to omit empty properties (for the broken Korean server) - Write "package.html" file for the javadoc documentation. - Some niceties for the cql-decompiling back-end: * Don't emit redundant parentheses. * Don't put spaces around relations that don't need them. - 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 * Generate prefix-mappings