Add classes for visitor traversal
[cql-java-moved-to-github.git] / Changes
1
2 Revision history for the CQL-Java package.
3 See the bottom of this file for a list of things still to do.
4
5 The work for releases 1.0, 1.2 and 1.2.1 was sponsored by the National
6 Library of Australia, whose help we gratefully acknowledge.
7
8 1.12 Mon 17 Mar 2014 16:16:16 CET
9   - rewrite the CQL lexer to better conform to CQL spec 
10   (e.g retain escapes for wildcards, etc)
11   - add jUnit test cases
12   - align list of terms (non-compliant) handling with Yaz CQL parser
13
14 1.11 Tue  5 Mar 2013 13:38:18 CET
15   - Fix problem with parsing unquoted terms that begin with a '.'
16   - Fix problem with parsing unquoted terms that contain a '@'
17   - allow registration of custom relations
18   - optional flag to set strict-but-not-compliant mode that prohibits
19   unqouted keywords to be used as terms
20
21 1.8  Fri Jul 22 18:02:41 CEST 2011
22     - API changes: removed direct access to internal state and introduced 
23     getters, removed usages of obsolete collections (Vector, Hashtable),
24     simplified method signatues (toXCQL), modified constants to be
25     read-only
26     - implemented faster XCQL serialization, using pure StringBuilder
27
28 1.7  Tue Jul 27 17:35:25 BST 2010
29         - Patch from Ralph LeVan to recognise
30           "qualifier.dc.creator"-like properties as well as
31           "index.dc.creator" -- backwards compatible with version
32           prior to 1.0 as well as those subsequent.
33         - Reinstate the "exact" relation even when v1.2 is in effect
34           (the default), despite its removal from v1.2 of CQL.  In
35           practice, it seems to be in fairly widespread use, and
36           little real purpose is served in removing it.
37
38 1.6  Thu Jun 17 10:56:24 BST 2010
39         - Fix the bug where "9x" is lexed as two tokens, a TT_NUMBER
40           followed by a TT_WORD, making unquoted search-terms such as
41           2010-06-17 syntax errors.  Thanks to Erik Hetzner
42           <erik.hetzner@ucop.edu> for the patch.
43
44 1.5  Tue May 25 16:44:35 CEST 2010
45         - Fix recognition of word-relations to correctly match what is
46           specified in the CQL v1.1 and v1.2 documents.  In
47           particular, "encloses" and "within" are recognised, so that
48           Masterkey's use of "encloses" for IP range authentication
49           works again.
50         - Update regression tests accordingly.
51         - Extend test/random/ to emit summary line of successful
52           recompilations.
53
54 1.4  Thu May 20 00:38:40 BST 2010
55         - Add support for interpreting sequences of non-keywords as a
56           single multi-word term rather than a broken INDEX RELATION
57           TERM triplet.  This means that "oxford street" is a valid
58           query rather than a syntax error, and "tottenham court road"
59           is what it looks like rather than a search for the word
60           "court" related by the relation "court" to the index
61           "tottenham".  Note that the word-formed relations "any",
62           "all", "exact" and (for CQL v1.2) "scr" are still treated
63           specially, as are profiled relations in context sets, of the
64           form <set>.<name>.
65
66 1.3  Wed May 28 11:02:00 BST 2008
67         - Add getSortIndexes() to CQLSortNode, as suggested by Marcel
68           Versteeg <Marcel.Versteeg@KB.nl>
69
70 1.2.1  Mon Aug  6 16:54:54 BST 2007
71         - Contructors for the CQLParser class are made public (as they
72           should have been all along).
73
74 1.2  Tue Jul  3 17:53:28 BST 2007
75         - Support for CQL version 1.2 as described at
76                 http://www.loc.gov/standards/sru/next-version.html
77           The most significant part of the v1.2 change is support for
78           sorting, but as of this writing (29th June) the official SRU
79           maintenance agency web site at  
80                 http://www.loc.gov/standards/sru/index.html
81           does not include any specification for CQL sorting.
82           Therefore the original proposal at
83                 http://zing.z3950.org/cql/sorting.html
84           is still considered canonical.
85
86 1.0 Fri Jun 29 14:10:28 BST 2007
87         - Support for version 1.1 as described at
88                 http://www.loc.gov/standards/sru/specs/cql.html
89           Since this is a significant leap forward, the version
90           numbering increases to the next major version.
91         - "Qualifiers" renamed as "indexes" throughout, to match what
92           is now universal CQL terminology.
93
94         PLEASE NOTE THE FOLLOWING INCOMPATIBLE API CHANGES
95         - The class UnknownQualifierException is replaced by
96           UnknownIndexException.
97         - The CQLTermNode method getQualifier() is replaced by
98           getIndex().
99
100 0.7  Thu Sep  4 22:51:11 2003
101         - Support for profiled relations and relation modifiers:
102           recognise any non-key word as a relation or modifier, 
103           rejecting those that are not of the form <prefix>.<name>
104           since these must be explicitly tied to a "context" (what
105           used to be called a qualifier-set or index-set).
106
107 0.6  Tue Jul 29 23:33:56 2003
108         - Include Ralph's fix for CQLTermNode::toType1BER() to prevent
109           it surrounding multi-word terms in quotes when encoded into
110           BER packet.
111
112 0.5  Wed Feb  5 15:50:57 2003
113         - Add an extra back-end method,
114                 byte[] toType1BER(Properties config)
115           which generates an opaque BER-encoded PDU suitable for
116           forwarding to Z39.50 server as a pasrt of a searchRequest
117           APDU.  This was contributed by Ralph Levan <levan@oclc.org>
118         - Add srw.resultSet support to the toPFQ() method.
119         - Add new resultSetName() method to CQLNode and its
120           subclasses, returning the name of the referenced result-set
121           for a node that is just a result-set reference, and null for
122           anything else.
123         - Change regression-test rules for Adam's compiler to use his
124           new front-end cql2xcql instead of the old cqlparse3.
125         - Change the names of the anchoring properties in
126           etc/pqf.properties and the CQLTermNode code that examines
127           them, in accordance with Adam's PQF-renderer's behaviour.
128           This gives more flexibility in terms of generating
129           attributes for end-of-field anchoring.  Various other minor
130           tweaks to the pqf.properties file, mostly to the comments.
131         - Change the capitalisation of the project name from
132           "cql-java" to "CQL-Java".  That doesn't really make any
133           difference to anything: in particular, file-names such as
134           "cql-java.jar" remain the same.
135
136 0.4  Thu Nov 21 10:09:26 2002
137         - Add support for the new "phonetic" relation modifier,
138           including its mapping in "etc/pqf.properties".
139         - Make prefix-maps bind loosely, so that ``>dc=x a and b''
140           applies the dc=x binding to both the ``a'' and ``b''
141           sub-queries.
142         - Change the XCQL output to include the nasty (but official)
143           <leftOperand> and <rightOperand> wrapper elements.
144         - Change the XCQL output to use the nasty (but official)
145           rendition of prefix-mapping: a <prefixes> element,
146           containing one of more <prefix>es may appear at the top
147           of either a <searchClause> or a <triple>.
148         - Include test/regression/xmlpp.pl in the distribution: this
149           may now be used for testing whether a CQL compiler produces
150           _equivalent_ XCQL to what's in the regression test, rather
151           than requiring byte-identical output.
152         - Include the reference XCQL output in the distribution, for
153           the regression test suite to run against.
154         - Change build process so that javadoc documentation is built
155           by "make" in the "docs" directory.  There's now a top-level
156           makefile that builds the source, runs the test suite and
157           creates the documentation.
158         - Write javadoc comments for CQLRelation and ModifierSet.
159         - Other improvements to javadoc comments (e.g. describe the
160           `config' parameter to the toPQF() method.)
161         - Sort out the licence: I've settled on the LGPL.
162         - Remove the redundant and misleading etc/Grammar file.
163         - Fix up various Maintenance Agency web addresses that have
164           moved in the great ZING-release shake-up.
165
166 0.3  Fri Nov 15 12:04:04 2002
167         - Allow keywords to be used unquoted as search terms.
168         - Add support for serverChoiceRelation (scr).
169         - Add support for prefix-mapping, as in
170                 >dc="http://www.loc.gov/zing/cql/dc-indexes/" dc.title=fish
171           and
172                 >"http://www.loc.gov/zing/cql/dc-indexes/" dc.title=fish
173           The XCQL generated corresponds to Adam's suggested format
174           rather than Rob's, not so much because I prefer it (although
175           I do) as because it's what fell out when I just Coded What
176           Comes Natur'ly.  That may need to change, depending on the
177           result of the ZNG list's deliberations.
178         - Fix the parser to normalise relation modifiers to lower case.
179         - Fix the CQLParser test harness not to emit an extraneous
180           blank line at end of XCQL output.
181         - Fix CQLNode documentation to contain a link to YAZ's
182           documentation of Prefix Query Format (PQF) rather than
183           containing a rather unhelpful chunk of BNF.
184         - Change the test/regression Makefile so that "make clean" now
185           does what "make distclean" used to do - the distinction
186           between them is pointless.
187         - Fix a few typos in the documentation.
188         - Move the README file's old "THINGS TO DO" section to the end
189           of this file, the new "Still to do" section.
190
191 0.2  Wed Nov  6 23:05:54 2002
192         - Fix the order of proximity parameters in accordance with the
193           updated official grammar, which now specifies proximity
194           operators of the form
195                 prox/<relation>/<distance>/<unit>/<ordering>
196           as in ``foo prox/<=/3/sentence bar''.
197         - Make the necessary parts of the CQLNode class and its
198           subclasses public.  This means that client code can now walk
199           through parse-trees and so implement its own back-end
200           (e.g. to build BER-friendly data structures using whatever
201           Z39.50 toolkit is preferred.)
202         - Add the toPQF(Properties p) method to CQLNode and its
203           subclasses.  This produces a query in YAZ-style Prefix Query
204           Format, which can be trivially translated into a Z39.50
205           Type-1 query (see, for example, JZKit's code to do so).
206         - Add etc/pqf.properties to configure the toPQF() method.
207         - Add "-p <props-file>" option to the CQLParser test-harness,
208           indicating that the parsed tree is to be rendered to PQF.
209         - Add PQFTranslationException and its subclasses
210           UnknownQualifierException, UnknownRelationException,
211           UnknownRelationModifierException and
212           UnknownPositionException.
213         - Rename ParameterMissingException to MissingParameterException.
214         - Add javadoc comments for CQLNode and its subclasses.
215
216 0.1  Sun Nov  3 20:58:27 2002
217         - First public release.
218
219 --
220
221 ### Still to do
222         - Test-harness option to use Type1 BER back-end.
223         - Case-insensitive matching for serverChoice and any other
224           special-case qualifiers.  (Are the configured qualifiers
225           matched case-insensitively?  They should be.)
226         - Prefix-aware matching for serverChoice, so that
227           >x="http://www.loc.gov/zing/srw/dc-indexes/v1.0/" x.resultSet=foo
228           does the right thing.
229         - Extend test-suite for PQF and BER renderers.
230         - Additional test-suite entries for things like
231           case-sensitivity.
232         - Add a new configuration file that allows arbitrary new
233           relations and relation modifiers to be defined.
234         - Fix term-to-PQF translation to omit empty properties
235           (for the broken Korean server)
236         - Write "package.html" file for the javadoc documentation.
237         - Some niceties for the cql-decompiling back-end:
238           * Don't emit redundant parentheses.
239           * Don't put spaces around relations that don't need them.
240         - Many refinements to the random query generator:
241           * Generate relation modifiers
242           * Proximity support
243           * Don't always generate qualifier/relation for terms
244           * Better selection of qualifier (configurable?)
245           * Better selection of terms (from a dictionary file?)
246           * Introduce wildcard characters into generated terms
247           * Generate multi-word terms
248           * Generate prefix-mappings
249
250