SAXONICA

Saxon Documentation
Full Contents
About Saxon
Changes in this Release
Notices
Using XSLT 2.0
Using XQuery
| Introduction
| Running XQuery from the Command Line
» | Running Queries from a Java Application
| Using XQuery Update
| Calling XQuery Functions from Java
| Result Format
| Compiling Queries to Java code
| Extensibility
| Extensions
| Use Cases
Handling Source Documents
XML Schema Processing
XPath API for Java
Saxon on .NET
Extensibility
Saxon Extensions
Sample Saxon Applications
The Saxon SQL Extension
XSLT Elements
XPath 2.0 Expression Syntax
Function Library
Standards Conformance

# Using s9api for XQuery

You can perform a query using the s9api interface as follows:

1. Create a Processor (`net.sf.saxon.s9api.Processor`) and set any global configuration options on the Processor.

2. Optionally, build the source document by calling `newDocumentBuilder()` to create a document builder, setting appropriate options, and then calling the `build()` method. This returns an `XdmNode` which can be supplied as input to the query either as the context item, or as the value of an external variable.

3. Call `newXQueryCompiler()` to create an XQuery Compiler. Then set any options that are local to a specific compilation (for example, the destination of error messages, the base URI, or the character encoding of the query text).

4. Call one of the `compile()` methods to compile a query. The result is an `XQueryExecutable`, which can be used as often as you like in the same thread or in different threads.

5. To run a query, call the `load()` method on the `XQueryExecutable`. This creates an `XQueryEvaluator`. The `XQueryEvaluator` can be serially reused, but it must not be shared across multiple threads. Set any options required for the specific query execution (for example, the initial context node, the valus of external variables, and the destination for the query result), and then call either the `iterator()` or the `run()` method to execute the query.

6. Because the `XQueryEvaluator` is an `Iterable`, it is possible to iterate over the results directly using the Java 5 "for-each" construct.

The output of the query may be retrieved as an iterator over a sequence of items, or it may is specified as a `Destination` object, which allows a wide range of possibilities: you can send the output to a serializer, or to a SAX ContentHandler. You can build a tree either in Saxon's native format (represented by the s9api class `XdmNode`) or as a DOM. You can send the output to be validated against a schema by nominating a `SchemaValidator` as the destination, or you can pipe it through an XSLT transformation, because `XsltTransformer` also implements the `Destination` interface.

Examples of s9api queries are included in the Saxon resources file, see module S9APIExamples.java.

Next