SAXON10.SAXONQ(1)
π SAXON10.SAXONQ(1) π
okay bestie, so this is the manual page for saxon10q β that's the Saxon XQuery 3.0 processor, living in the User Commands section of the manual, and it's literally about to be your new fave. grab a snack, we're going in π
β¨ NAME β¨
saxon10q β the Saxon XQuery 3.0 processor, no cap π
π¦ SYNOPSIS π¦
saxon10q [options] [params]
like, that's it. options, then params, in that order. slay π
πΈ DESCRIPTION πΈ
It's a command to run a query contained in a file. simple as that, and yet so powerful π«Ά
Saxon 9.8 and later releases implement the XQuery 3.1 Recommendation dated 18 April 2017. and because XQuery 3.1 is backwards compatible with XQuery 1.0 and XQuery 3.0, Saxon will also execute queries written according to the 1.0 or 3.0 versions of the specification. iconic behavior honestly. but β and this is the part where you go "wait what" β Saxon no longer has a mode to execute as an XQuery 1.0 or 3.0 processor (that is, to reject constructs that were not present in earlier versions of the language). so she's not gonna gatekeep old syntax at you. for information about the conformance of Saxon to the XQuery 3.1 specification, and about the handling of implementation-defined features of the specification, see Conformance <https://www.saxonica.com/documentation10/index.html#!conformance>. β¨
Saxon uses the same run-time engine to support both XQuery and XSLT, reflecting the fact that the two languages have very similar semantics. most of the compile-time code (in particular, the type checking logic and the optimizer) is also common. the XQuery support in Saxon consists essentially of an XQuery parser (which is itself an extension of the XPath parser); the parser generates the same internal interpretable code as the XSLT processor. there are also some constructs in the internal expression tree that will only be generated from XQuery source rather than XSLT source β the examples being the XQuery order by and group by clauses, which have no direct XSLT equivalent. main character energy, honestly π
The XQuery processor may be invoked either from the operating system command line, or via an API from a user-written application. There is no graphical user interface provided. ngl, terminal girlies stay winning π
Saxon is an in-memory processor. unless you can take advantage of streaming, Saxon is designed to process source documents that fit in memory. she's been used successfully to process source documents of 100Mbytes or more without streaming, but if you attempt anything this large, you need to be aware (a) that you will need to allocate sufficient memory to the Java VM (at least 5 times the size of the source document), and (b) that complex FLWOR expressions may be very time-consuming to execute. (in this scenario, Saxon-EE is recommended, because it has a more powerful optimizer for complex joins.) so likeβ¦ feed her memory or she WILL stress π
π OPTIONS π
-backup:(on|off)β Only relevant when-update:onis specified. Default ison. When backup is enabled, any file that is updated by the query will be preserved in its original state by renaming it, adding.bakto the original filename. If backup is disabled, updated files will be silently overwritten. π so maybe keep it on unless you're feeling chaotic-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 <https://www.saxonica.com/documentation10/index.html#!sourcedocs/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. command line stays on top, periodt π-dtd:(on|off|recover)β Setting-dtd:onrequests DTD-based validation of the source file and of any files read using thedoc()function. Requires an XML parser that supports validation. The setting-dtd:off(which is the default) suppresses DTD validation. The setting-dtd:recoverperforms DTD validation but treats the error as non-fatal if it fails. Note that any external DTD is likely to be read even if not used for validation, because DTDs can contain definitions of entities. lowkey sneaky of them but okay π-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-expand:offsuppresses this. (In the case of DTD-defined defaults, this might not work with all XML parsers. It does work with the Xerces parser (default for Java) and the Microsoft parser (default for .NET).) π§-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. it's giving behind the scenes and we love that π₯-ext:(on|off)β If-ext:offis specified, suppress calls on dynamically-loaded external Java functions. This does not affect calls on integrated extension functions, including Saxon and EXSLT extension functions. This option is useful when loading an untrusted query, perhaps from a remote site using anhttp://URL; it ensures that the query cannot call arbitrary Java methods and thereby gain privileged access to resources on your machine. π¨ okay so this one is genuinely a safety girlie β use it, fr fr-init:initializerβ The value is the name of a user-supplied class that implements the interfaceInitializer; this initializer will be called during the initialization process, and may be used to set any options required on theConfigurationprogrammatically. π«Ά-l[:(on|off)]β If-lor-l:onis specified, causes line and column numbers to be maintained for source documents. These are accessible using the extension functionssaxon:line-number()andsaxon:column-number(). Line numbers are useful when the purpose of the query is to find errors or anomalies in the source XML file. Without this option, line numbers are available while source documents are being parsed and validated, but they are not retained in the tree representation of the document. detective mode: activated π-mr:classnameβ Use the specifiedModuleURIResolverto process all query module URIs. TheModuleURIResolveris a user-defined class that implements theModuleURIResolverinterface. It is invoked to process URIs used in theimport moduledeclaration in the query prolog, and (if-uis also specified, or if the file name begins withhttp:,https:,file:orclasspath:) to process the URI of the query source file provided on the command line. π-now:yyyy-mm-ddThh:mm:ss+hh:mmβ Sets the value ofcurrent-dateTime()(andimplicit-timezone()) for the query. This is designed for testing, to enable repeatable results to be obtained for comparison with reference results, or to test that queries can handle significant dates and times such as end-of-year processing. time travel but make it QA β¨-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-wrapoption is present. The file is created if it does not already exist; any necessary directories will also be created. If the file does exist, it is overwritten (even if the query fails). β οΈ even if the query fails, bestie β she is not asking permission, so double-check that filename-opt:[-]flagsβ Allows individual optimizations to be enabled or disabled selectively. There is a set of single-letter flags identifying particular optimizations:c: generate bytecoded: detect void path expressionse: cache regular expressionsf: inline functionsg: extract global variablesj: just-in-time compilation of template rules (currently XSLT-only)k: create keysl: loop liftingm: miscellaneousn: constant foldingr: template rule-sets (not relevant to XQuery)s: extract common subexpressionst: tail call optimizationv: inline variablesw: create switch statementsx: index predicates
A value such as -opt:gs runs with only the selected optimizations; -opt:-gs runs with the selected optimizations disabled and all others enabled. The value -opt:0 suppresses all optimizations. The default is full optimization; this feature allows optimization to be suppressed in cases where reducing compile time is important, or where optimization gets in the way of debugging, or causes extension functions with side-effects to behave unpredictably. (Note however, that even with no optimization, lazy evaluation may still cause the evaluation order to be not as expected.) so yeah, turning optimization off doesn't fully turn off the chaos π
-outval:(recover|fatal)β Normally, if validation of result documents is requested, a validation error is fatal. Setting the option-outval:recovercauses such validation failures to be treated as warnings. The validation message is written both to the standard error stream, and (where possible) as a comment in the result document itself. gentle parenting your errors, love that for you πΈ-p[:(on|off)]β Enable recognition of query parameters (such asxinclude=yes) in theStandardURIResolver. This option is available in Saxon-PE and Saxon-EE only. It cannot be used in conjunction with the-roption, and it automatically switches on the-uand-saoptions. The effect is that Saxon-specific query parameters are recognized in a URI. One query parameter that is recognized isval. This may take the valuesstrict,lax, orstrip. For example,source.xml?val=strictloads a document with strict schema validation. π-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. she literally leaves out what doesn't matter β we stan an efficient queen π-q:queryfileβ Identifies the file containing the query. If this is the last option then the-q:prefix may be omitted. The file can be specified as-to read the query from standard input: in this case the base URI is that of the current directory. π¦-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,java net.sf.saxon.Query -qs:doc('a.xml')//p[1]selects elements within the filea.xmlin the current directory. inline queries are such a flex π₯-quit:(on|off)β With the default setting,on, the command will quit the Java VM and return an exit code if a failure occurs. This is useful when running from an operating system shell. With the setting-quit:offthe command instead throws aRunTimeException, which is more useful when the command is invoked from another Java application such as Ant. pick your exit strategy bestie π
-r:classnameβ ok so this one lets you plug in your own URIResolver, no cap. It's a user-defined class that implements theURIResolverinterface from JAXP β its whole job is: take a URI handed to it as a string, hand back a SAXInputSource. Saxon calls it for URIs used in thedoc()function, and (if you also passed-u) for the URI of the source file you gave on the command line. π-repeat:integerβ runs the transformation N times, where N is the integer you typed. Honestly iconic for performance measurement, because the timings for the first few runs of the query are usually dominated by Java warm-up time. π-s:filename-or-URIβ this is your input, bestie. Takes input from the specified file. If the-uoption is specified, or if the name begins withfile:orhttp:, then the name is assumed to be a URI rather than a filename. The file must contain an XML document, and the document node of that document is what your query gets as the context item. Bonus: you can pass the filename as-to read the source document from standard input β in that case the base URI is that of the current directory. π¦-saβ invokes a schema-aware query. Requires Saxon-EE to be installed, so likeβ¦ check you actually have it before you come for me. π-scmin:filenameβ loads a precompiled schema component model from the given file. That file should have been generated in a previous run using the-exportoption. When you use this option, the-xsdoption should not be present. Schemas loaded from an SCM file are assumed to be valid β without checking. π
Heads up though: this option is retained for compatibility. From Saxon 9.7, SCM files can also be supplied in the -xsd option. So it's giving legacy, iykyk.
-stream:(on|off)β use (or don't use) streaming, periodt. 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 info about the kind of queries that can be streamed, see Streaming XQueryhttps://www.saxonica.com/documentation10/index.html#!sourcedocs/streaming/streamed-query. π«Ά
If the query can't be streamed, execution will fail with diagnostic errors. Also it requires Saxon-EE. No soft-launch, just failure. π
-strip:(all|none|ignorable)β specifies what whitespace is to be stripped from source documents (and yes, it applies both to the principal source document and to any documents loaded, for example using thedoc()function). The default isnone: no whitespace stripping. β¨-tβ display version and timing information to the standard error output. It also traces the files that are read and written, and extension modules that are loaded. Lowkey the most useful little flag ever. π₯-T[:classname]β notify query tracing information. Also switches line numbering on for the source document. If aclassnameis specified, it's a user-defined class which must implementTraceListener. If theclassnameis 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 net.sf.saxon.trace.TimingTraceListener. That creates an output file giving timings for each instruction executed, and that output file can subsequently be analyzed to give an execution time profile for the query. See Performance Analysis https://www.saxonica.com/documentation10/index.html#!using-xquery/performanceanalysis.
-TB:filenameβ monitors generation of hot-spot bytecode and produces an XML report on the given filename, giving β for each expression that was a candidate for bytecode generation and that was actually executed β data about the number of times and speed of execution in the interpreter, the number of times and speed of execution in compiled form, and the cost of compilation. π
Note that if an expression A contains an expression B and both are candidates for bytecode generation, then the statistics for B relate only to the time before A was compiled in its own right. Nested stats, she's complicated. π
-TJβ switches on tracing of the binding of calls to external Java methods. 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. Detective mode fr fr. π-Tlevel:(none|low|normal|high)β controls the level of detail of the tracing produced by the-Toption. The values are:noneβ effectively switches tracing off.lowβ traces function calls.normalβ traces execution of significant expressions such as element constructors.highβ traces execution of finer-grained expressions such as the clauses of a FLWOR expression.
-Tout:filenameβ directs the output of tracing to a specified file (assuming that-Tis enabled). π-TP:filenameβ this is equivalent to setting-T:net.sf.saxon.trace.TimedTraceListenerand-traceout:filename; that is, it causes trace profile information to be set to the specified file. This output file can subsequently be analyzed to give an execution time profile for the query. See Performance Analysishttps://www.saxonica.com/documentation10/index.html#!using-xquery/performanceanalysis. β¨-traceout:filenameβ indicates that the output of theCtrace()function should be directed to a specified file. Alternatively, specify#outto direct the output toSystem.out,#errto send it toSystem.err(the default), or#nullto have it discarded. π
This option is ignored when a trace listener is in use: in that case, trace() output goes to the registered trace listener. So pick a lane, bestie.
-tree:(linked|tiny|tinyc)β selects the implementation of the internal tree model.tinyselects the "tiny tree" model (the default),linkedselects the linked tree model, andtinycselects the "condensed tiny tree" model. See Choosing a tree modelhttps://www.saxonica.com/documentation10/index.html#!sourcedocs/choosingmodel. πΈ-uβ indicates that the name of the source document is a URI; otherwise it's taken as a filename, unless it starts withhttp:,https:,file:orclasspath:, in which case it's taken as a URL. Slay, flexible. π-update:(on|off|discard)β indicates whether XQuery Update syntax is accepted. Requires Saxon-EE. Let's break it down:onenables XQuery update; any eligible files updated by the query are written back to filestore. A file is eligible for updating if it was read using thedoc()orcollection()functions using a URI that represents an updateable location. The context document supplied using the-soption is not eligible for updating.off(the default) disables update β any use of XQuery update syntax is an error.discardallows XQuery Update syntax, but modifications made to files are not saved in filestore. If the document supplied in the-soption is updated, the updated document is serialized as the result of the query (writing it to the-odestination); updates to any other documents are simply discarded.
Use of the -t option is recommended: it gives feedback on which files have been updated by the query. Genuinely, don't fly blind on this one. π«Ά
-val[:(strict|lax)]β requests schema-based validation of the source file and of any files read using thedoc()function. Available only with Saxon-EE, and it automatically switches on the-saoption. Specify-valor-val:strictto request strict validation, or-val:laxfor lax validation. π-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. π
Without this option, the command effectively wraps a document{} constructor around the supplied query, so the result is a single XML document, which is then serialized. That will fail if the query result includes constructs that cannot be added to a document node in this way β notably free-standing attribute nodes. So likeβ¦ know your output. π
-x:classnameβ use the specified SAX parser for the source file and any files loaded using thedoc()function. The parser must be the fully-qualified class name of a Java class that implements theorg.xml.sax.XMLReaderorjavax.xml.parsers.SAXParserFactoryinterface, and it must be instantiable using a zero-argument public constructor. No weird constructors, ok? π-xi:(on|off)β apply XInclude processing to all source XML documents (but not to schema documents). Currently this only works when documents are parsed using the Xerces parser, which is the default in JDK 1.5 and later. π¦-xmlversion:(1.0|1.1)β if-xmlversion:1.1is specified, allows XML 1.1 and XML Namespaces 1.1 constructs. This option must be set if source documents using XML 1.1 are to be read, or if result documents are to be serialized as XML 1.1. It also enables use of XML 1.1 constructs within the query itself. β-xsd:file1;file2;file3β¦β loads additional schema documents. The declarations in these schema documents are available when validating source documents (or for use by thevalidate{}expression). This option may also be used to supply the locations of schema documents that are imported into the query, in the case where the import schema declaration gives the target namespace of the schema but not its location. π-xsdversion:(1.0|1.1)β if-xsdversion:1.1is specified (the default), allows schema documents using XML Schema 1.1 to be read, and XML Schema 1.1 constructs such as assertions. β¨-xsiloc:(on|off)β if set toon(the default) the schema processor attempts to load any schema documents referenced inxsi:schemaLocationandxsi:noNamespaceSchemaLocationattributes in the instance document, unless a schema for the specified namespace (or non-namespace) is already available. If set tooff, these attributes are ignored. π--feature:valueβ set a feature defined in theConfigurationinterface. The names of features are defined in the Javadoc for classFeature(alternatively see Configuration Featureshttps://www.saxonica.com/documentation10/index.html#!configuration/config-features): the value used here is the part of the name after the last/, for example--allow-external-functions:off. π
Only features accepting a string or boolean may be set; for booleans the valuestrue/false,on/off,yes/no, and1/0are recognized. Pick your fave. π
-?β display command syntax. Simple. Iconic. β¨--?β display a list of features that are available using the--feature:valuesyntax. The cheat sheet you didn't know you needed. π
π¬ COMMAND LINE PARAMETERS π¬
okay so a param is literally just name=value β name is the parameterβs name, and value is the parameterβs value. Inside your query these pop up as external variables using the $name syntax, but only if you declared them in the query prolog. No declaration? Then the supplied parameter value is silently ignored β no error, no drama. π
- leading
?β bestie, this is an XPath expression. So?time=current-dateTime()sets the external variable$timeto the current date and time as anxs:dateTimeinstance, while?debug=false()sets$debugto the boolean valuefalse. If the parameter has a required type (for exampledeclare variable $p as xs:date external;), then the supplied value must be compatible with that type according to the standard rules for converting function arguments β it does not 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 prefixesxs,fn,xsi, andsaxon. The static base URI (used when callingdoc()) is the current directory. The dynamic context contains no context item, no position, no size, and no variables. π«Ά - leading
+β this one is 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. Example:+lookup=lookup.xmlsets the external variablelookupto the document node at the root of the tree representing the parsed contents of the filelookup.xml. β¨ - leading
!β this is interpreted as a serialization parameter. For example,!indent=yesrequests indented output, and!encoding=iso-8859-1requests that the serialized output be in ISO 8859/1 encoding. This is equivalent to specifying the option declarationdeclare option saxon:output "indent=yes";ordeclare option saxon:output "encoding=iso-8859-1";in the query prolog. If you are using thebashshell, you will need to escape!as\!. π
bash bestie alert: that ! escape is real, donβt skip it π«
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: https://www.saxonica.com/documentation10/index.html#!extensions/output-extras. π
π SEE ALSO π
π AUTHOR π
Michael H. Kay <mike@saxonica.com>
xoxo, this was SAXON10.SAXONQ(1) from saxon10 10.9, dated 2023-09-27 β go pass those params, bestie π
β¨
π¦ where this page comes from
- opensuse-leap 16.0: saxon10-scripts 10.9-160000.2.2 Β· Apache-2.0 AND MPL-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms