org.z3950.zing.cql
Class CQLParser

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

public class CQLParser
extends java.lang.Object

Compiles CQL strings into parse trees of CQLNode subtypes.

Version:
$Id: CQLParser.java,v 1.39 2007-08-06 15:54:48 mike Exp $
See Also:
http://zing.z3950.org/cql/index.html

Field Summary
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.
 
Method Summary
static void main(java.lang.String[] args)
          Simple test-harness for the CQLParser class.
 CQLNode parse(java.lang.String cql)
          Compiles a CQL query.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

V1POINT1

public static int V1POINT1

V1POINT2

public static int V1POINT2

V1POINT1SORT

public static int V1POINT1SORT
Constructor Detail

CQLParser

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


CQLParser

public CQLParser()
The new parser implements CQL 1.2

Method Detail

parse

public CQLNode parse(java.lang.String cql)
              throws CQLParseException,
                     java.io.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
java.io.IOException

main

public static void main(java.lang.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.