org.z3950.zing.cql
Class CQLParser

java.lang.Object
  extended by org.z3950.zing.cql.CQLParser

public class CQLParser
extends Object

Compiles CQL strings into parse trees of CQLNode subtypes.

See Also:
http://zing.z3950.org/cql/index.html

Field Summary
 boolean allowKeywordTerms
           
static int V1POINT1
           
static int V1POINT1SORT
           
static int V1POINT2
           
 
Constructor Summary
CQLParser()
          The new parser implements CQL 1.2
CQLParser(int compat)
          The new parser implements a dialect of CQL specified by the compat argument: V1POINT1 - CQL version 1.1 V1POINT2 - CQL version 1.2 V1POINT1SORT - CQL version 1.1 but including sortby as specified for CQL 1.2.
CQLParser(int compat, boolean allowKeywordTerms)
          Official CQL grammar allows registered keywords like 'and/or/not/sortby/prox' to be used unquoted in terms.
 
Method Summary
static void main(String[] args)
          Simple test-harness for the CQLParser class.
 CQLNode parse(String cql)
          Compiles a CQL query.
 boolean registerCustomRelation(String relation)
          Registers custom relation in this parser.
 boolean unregisterCustomRelation(String relation)
          Unregisters previously registered custom relation in this instance of the parser.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

V1POINT1

public static final int V1POINT1
See Also:
Constant Field Values

V1POINT2

public static final int V1POINT2
See Also:
Constant Field Values

V1POINT1SORT

public static final int V1POINT1SORT
See Also:
Constant Field Values

allowKeywordTerms

public final boolean allowKeywordTerms
Constructor Detail

CQLParser

public CQLParser(int compat)
The new parser implements a dialect of CQL specified by the compat argument:


CQLParser

public CQLParser(int compat,
                 boolean allowKeywordTerms)
Official CQL grammar allows registered keywords like 'and/or/not/sortby/prox' to be used unquoted in terms. This constructor allows to create an instance of a parser that prohibits this behavior while sacrificing compatibility.

Parameters:
compat - CQL version compatibility
allowKeywordTerms - when false registered keywords are disallowed in unquoted terms

CQLParser

public CQLParser()
The new parser implements CQL 1.2

Method Detail

registerCustomRelation

public boolean registerCustomRelation(String relation)
Registers custom relation in this parser. Note that when a custom relation is registered the parser is no longer strictly compliant with the chosen spec.

Parameters:
relation -
Returns:
true if custom relation has not been registered already

unregisterCustomRelation

public boolean unregisterCustomRelation(String relation)
Unregisters previously registered custom relation in this instance of the parser.

Parameters:
relation -
Returns:
true is relation has been previously registered

parse

public CQLNode parse(String cql)
              throws CQLParseException,
                     IOException
Compiles a CQL query.

The resulting parse tree may be further processed by hand (see the individual node-types' documentation for details on the data structure) or, more often, simply rendered out in the desired form using one of the back-ends. toCQL() returns a decompiled CQL query equivalent to the one that was compiled in the first place; toXCQL() returns an XML snippet representing the query; and toPQF() returns the query rendered in Index Data's Prefix Query Format.

Parameters:
cql - The query
Returns:
A CQLNode object which is the root of a parse tree representing the query.
Throws:
CQLParseException
IOException

main

public static void main(String[] args)
Simple test-harness for the CQLParser class.

Reads a CQL query either from its command-line argument, if there is one, or standard input otherwise. So these two invocations are equivalent:

  CQLParser 'au=(Kerninghan or Ritchie) and ti=Unix'
  echo au=(Kerninghan or Ritchie) and ti=Unix | CQLParser
 
The test-harness parses the supplied query and renders is as XCQL, so that both of the invocations above produce the following output:
        <triple>
          <boolean>
            <value>and</value>
          </boolean>
          <triple>
            <boolean>
              <value>or</value>
            </boolean>
            <searchClause>
              <index>au</index>
              <relation>
                <value>=</value>
              </relation>
              <term>Kerninghan</term>
            </searchClause>
            <searchClause>
              <index>au</index>
              <relation>
                <value>=</value>
              </relation>
              <term>Ritchie</term>
            </searchClause>
          </triple>
          <searchClause>
            <index>ti</index>
            <relation>
              <value>=</value>
            </relation>
            <term>Unix</term>
          </searchClause>
        </triple>
 

Parameters:
-1 - CQL version 1.1 (default version 1.2)
-d - Debug mode: extra output written to stderr.
-c - Causes the output to be written in CQL rather than XCQL - that is, a query equivalent to that which was input, is output. In effect, the test harness acts as a query canonicaliser.


Copyright © 2008-2014 Index Data. All Rights Reserved.