XQuery from the command line
A command is available to run a query contained in a file.
The form of command on the Java platform is:
java net.sf.saxon.Query [options] [ params...]For SaxonCS, there are two ways of running queries from the command line. If you download SaxonCS as an executable application from the Saxonica download page, then you can run a query with the command:
SaxonCS query [options] [ params...]But if you install SaxonCS as a nuget package then you need to prefix the
command with dotnet
, like this:
For SaxonC, the query
executable file must first be built. To do this, compile
the Query.c
C command line program by running the batch script
./build64-linux.sh
on Linux,
./build64-mac.sh
on MacOS, or
build-windows.bat
on Windows.
Then the command takes the form:
./query [options] [ params...]The options will generally include either -q:queryFile
which takes the query from a file,
or -qs:query
in which the query appears directly in the command line (usually in quotes).
The options must come first, then the parameters. If the last option before the parameters
has no leading hyphen and option letter then it is recognized as the -q
option.
Command line options
The options are as follows (in any order). Square brackets indicate an optional value.
-backup:(on|off) |
Only relevant when |
-catalog:filenames |
filenames is either a file name or a list of file names separated by semicolons; the files are OASIS XML catalogs used to define how public identifiers and system identifiers (URIs) used in a source document, query, or schema are to be redirected, typically to resources available locally. For more details see Using XML catalogs. |
-config:filename |
Indicates that configuration information should be taken from the supplied configuration file. Any options supplied on the command line override options specified in the configuration file. |
-dtd:(on|off|recover) |
Setting |
-expand:(on|off) |
Normally, if validation using a DTD or schema is requested, any fixed or default
values defined in the DTD or schema will be expanded. Specifying
|
-explain[:filename] |
Display a query execution plan. This is a representation of the expression tree after rewriting by the optimizer. If no file name is specified the output is sent to the standard error stream. The output is a tree in XML format. |
-ext:(on|off) |
If |
-init:initializer |
The value identifies user-supplied code that is called during the initialization process, and may be used to set any options required on the Saxon configuration. For SaxonJ, the value is the name of a user-supplied class that implements the interface Initializer. The class must be on the classpath. For SaxonCS, the value is the filename of a user-written assembly that contains an implementation
of the interface |
-json:file-name |
Selects a JSON file to act as the primary input of the query. The file is
parsed (typically producing a map or array) following the rules of the This option cannot be combined with |
-l[:(on|off)] |
If |
-mr:classname |
Use the specified |
-ns:(uri|##any|##html5) |
Defines the handling of unprefixed element names appearing as name tests in path expressions.
|
-now:yyyy-mm-ddThh:mm:ss+hh:mm |
Sets the value of |
-o:filename |
Send output to named file. In the absence of this option, the results go to
standard output. The output format depends on whether the |
-opt:[-]flags |
Allows individual optimizations to be enabled or disabled selectively. There is a set of single-letter flags identifying particular optimizations:
A value such as |
-outval:(recover|fatal) |
Normally, if validation of result documents is requested, a validation error is
fatal. Setting the option |
-p[:(on|off)] |
Enable recognition of query parameters (such as |
-projection:(on|off) |
Use (or don't use) document projection. Document projection is a mechanism that analyzes a query to determine what parts of a document it can potentially access, and then while building a tree to represent the document, leaves out those parts of the tree that cannot make any difference to the result of the query. Requires Saxon-EE. |
-q:queryfile |
Identifies the file containing the query. If this is the last option then the
|
-qs:querystring |
Allows the query to be specified inline (if it contains spaces, you will need
quotes around the expression to keep the command line processor happy). The static base
URI of the query is taken from the current working directory. So, for
example, |
-quit:(on|off) |
With the default setting, |
-qversion:(3.1|4.0) |
Defines the XQuery specification version to be used, in the absence of a version
declaration in the query itself. The default is |
-r:classname |
Use the specified |
-repeat:integer |
Performs the transformation N times, where N is the specified integer. This option is useful for performance measurement, since timings for the first few runs of the query are often dominated by Java warm-up time. |
-s:filename-or-URI |
Take input from the specified file. If the |
-sa |
Invoke a schema-aware query. Requires Saxon-EE to be installed. |
-scmin:filename |
Loads a precompiled schema component model from the given file. The file should be
generated in a previous run using the This option is retained for compatibility. From Saxon 9.7, SCM files can also be
supplied in the |
-stream:(on|off) |
Use (or don't use) streaming. Streaming allows simple queries to be executed while the source document is being read, avoiding the need to build a tree representation of the document in memory. For information about the kind of queries that can be streamed, see Streaming XQuery. If the query cannot be streamed, execution will fail with diagnostic errors. Requires Saxon-EE. |
-strip:(all|none|ignorable) |
Specifies what whitespace is to be stripped from source documents (applies both to
the principal source document and to any documents loaded for example using the
|
-t |
Display version and timing information to the standard error output. The output also traces the files that are read and written, and extension modules that are loaded. |
-T[:classname] |
Notify query tracing information. Also switches line numbering on for the source
document. If a classname is specified, it is a user-defined class, which must
implement TraceListener. If the classname is omitted, a system-supplied trace
listener is used. This traces execution of function calls to the standard error
output. For performance profiling, set
classname to |
-TJ |
Switches on tracing of the binding of calls to external Java methods. This is useful when analyzing why Saxon fails to find a Java method to match an extension function call in the query, or why it chooses one method over another when several are available. |
-Tlevel:none|low|normal|high |
Controls the level of detail of the tracing produced by the
|
-Tout:filename |
Directs the output of tracing to a specified file (assuming that |
-TP:filename |
This is equivalent to setting
|
-TPxsl:filename |
Supplies a stylesheet for formatting the performance data generated by the
|
-traceout:filename |
Indicates that the output of the |
-tree:(linked|tiny|tinyc) |
Selects the implementation of the internal tree model. |
-u |
Indicates that the name of the source document is a URI; otherwise it is taken as
a filename, unless it starts with |
-update:(on|off|discard) |
Indicates whether XQuery Update syntax is accepted. This option requires Saxon-EE.
The value |
-val[:(strict|lax)] |
Requests schema-based validation of the source file and of any files read using
the |
-wrap |
Wraps the result sequence in an XML element structure that indicates the type of
each node or atomic value in the query result. This format can handle any type of
query result. In the absence of this option, the command effectively wraps a
|
-x:classname |
Use the specified SAX parser for the source file and any files loaded using the
|
-xi:(on|off) |
Apply XInclude processing to all XML documents.
This relies on XInclude support in the XML parser. The option affects documents read
using functions such as |
-xmlversion:(1.0|1.1) |
If |
-xsd:file1;file2;file3... |
Loads additional schema documents. The declarations in these schema documents are
available when validating source documents (or for use by the
|
-xsdversion:(1.0|1.1) |
If |
-xsiloc:(on|off) |
If set to |
--feature:value |
Set a feature defined in the |
-? |
Display command syntax. Note: under some shell languages, this needs to be escaped as |
--? |
Display a list of features that are available using the Note: under some shell languages, this needs to be escaped as |
Command line parameters
A param takes the form name=value
, name being the name of the
parameter, and value the value of the parameter. These parameters are accessible
within the query as external variables, using the $name
syntax, provided they
are declared in the query prolog. If there is no such declaration, the supplied parameter
value is silently ignored.
A param preceded by a leading question mark (?
) is interpreted as an
XPath expression. For example, ?time=current-dateTime()
sets the value of the
external variable $time
to the value of the current date and time, as an
instance of xs:dateTime
, while ?debug=false()
sets the value of
the variable $debug
to the boolean value false
. If the parameter
has a required type (for example declare variable $p as xs:date external;
),
then the supplied value must be compatible with this type according to the standard rules
for converting function arguments (it doesn't need to satisfy the stricter rules that apply
to variable initialization). The static context for the XPath expression includes only the
standard namespaces conventionally bound to the prefixes xs
, fn
,
xsi
, and saxon
. The static base URI (used when calling the
doc()
function) is the current directory. The dynamic context contains no
context item, position, or size, and no variables.
A param preceded by a leading plus sign (+
) is interpreted as a
filename or directory. The content of the file is parsed as XML, and the resulting document
node is passed to the stylesheet as the value of the parameter. If the parameter value is a
directory, then all the immediately contained files are parsed as XML, and the resulting
sequence of document nodes is passed as the value of the parameter. For example,
+lookup=lookup.xml
sets the value of the external variable
lookup
to the document node at the root of the tree representing the parsed
contents of the file lookup.xml
.
A param preceded by a leading exclamation mark (!
) is interpreted as a
serialization parameter. For example, !indent=yes
requests indented output,
and !encoding=iso-8859-1
requests that the serialized output be in ISO 8859/1
encoding. This is equivalent to specifying the option declaration declare option
saxon:output "indent=yes";
or declare option saxon:output
"encoding=iso-8859-1";
in the query prolog.
Under Windows, and some other operating systems, it is possible to supply a value
containing spaces by enclosing it in double quotes, for example name="John
Smith"
. This is a feature of the operating system shell, not something Saxon
does, so it may not work the same way under every operating system.
If the parameter name is in a non-null namespace, the parameter can be given a value using
the syntax {uri}localname=value
. Here uri
is the namespace URI of
the parameter's name, and localname
is the local part of the name.
This applies also to output parameters. For example, you can set the indentation level to 4
by using the parameter !{http://saxon.sf.net/}indent-spaces=4
. In this case,
however, lexical QNames using the prefix saxon
are also recognized, for
example !saxon:indent-spaces=4
. For the extended set of output parameters
supported by Saxon, see Additional
serialization parameters.