                   Apache VXQuery

What is it?
===========

Apache VXQuery aims to be a standards compliant XML Query processor
implemented in Java. The focus is on the evaluation of queries on large
amounts of XML data. Specifically the goal is to evaluate queries on large
collections of relatively small XML documents. To achieve this, queries are
evaluated on a cluster of shared nothing machines. VXQuery levarages the
runtime facilities provided by Hyracks (http://hyracks.org) and the algebraic
framework provided by Algebricks.


Building
========

Requirements
------------
1. JDK >= 1.6
2. Apache Maven >= 2.0

Setup
-----
VXQuery is currently only located in SVN. The following instructions are to
check out the active version under active development. 

1. Create a folder for all the VXQuery files. 

$ mkdir /path/to/VXQuery
$ cd /path/to/VXQuery

2. Download and install the Apache VXQuery Incubating.

$ svn checkout https://svn.apache.org/repos/asf/incubator/vxquery/trunk/ apache_vxquery_incubating
(Accept the certificate information for *.apache.org.)
$ cd apache_vxquery_incubating/vxquery
$ mvn package -DskipTests
$ cd ../..


Running
=======

There are two ways to run VXQuery:
Note: shell scripts exist for running VXQuery for Un*x like systems.

1. Command line client (vxq)

Run 
$ sh apache_vxquery_incubating/vxquery/vxquery-cli/target/appassembler/bin/vxq
without any arguments for help on executing the command line client.

2. XQTS test driver (xtest)

The xtest test driver can be used to execute XQuery tests from the XQTS suite.

Run
$ sh apache_vxquery_incubating/vxquery/vxquery-xtest/target/appassembler/bin/xtest
without any arguments for help on executing xtest.

Typically the test suite will need extra memory to run and output can be
written in html for easy viewing. Sample Test Command: 
$ JAVA_OPTS="-Xmx1024m -Djava.util.logging.config.file=/path/to/logging.properties" sh apache_vxquery_incubating/vxquery/vxquery-xtest/target/appassembler/bin/xtest -xqtsbase apache_vxquery_incubating/testsuites/XQTS/ -htmlreport /tmp/full_report.html
The result can be viewed at /tmp/full_report.html

Note: XQTS test suite is set up as part of the Apache VXQuery setup process.
