XQuery 1.0 Conformance
This release of Saxon implements the full XQuery 1.0 language as defined in the Second Edition Recommendation of 14 December 2010. The restrictions noted with respect to XPath 2.0 apply equally to Saxon's support for XQuery 1.0.
XQuery conformance levels are described in Section 5 of the XQuery specification.
Saxon-HE and Saxon-PE provide Minimal Conformance plus the following Optional Features:
-
Full Axis Feature
-
Module Feature
-
Serialization Feature
Saxon-EE provides Minimal Conformance plus the following Optional Features:
-
Schema Import Feature
-
Schema Validation Feature
-
Full Axis Feature
-
Module Feature
-
Serialization Feature
None of the Saxon products supports the Static Typing Feature, and there are no plans to do so.
There are some known non-conformances if the product is used in particular ways:
-
In pull mode (
-pull
on the command line) there is a restriction that namespace undeclaration is not supported; this means that the query prolog optioncopy-namespaces no-inherit
has no effect. -
Under .NET, if the
System.Xml
parser is selected, attributes declared in the DTD as being of typeID
are not accessible using theid()
function. This is because theSystem.Xml
parser does not make the DTD-defined attribute type available to the application.
Conformance Tests
Saxonica has submitted results for the published W3C XQuery Test suite. W3C has published both summary and detail reports from the results; at the time of submission Saxon-EE was the only product to achieve a 100% pass rate.
The test driver used to measure these results is included in the Saxon distribution as part
of the saxon-resources-9.n
download.
Checklist of Implementation-Defined Items
Appendix D of the XQuery specification lists a number of features whose behavior is implementation-defined. For Saxon, the behavior is as follows:
-
The version of Unicode that is used to construct expressions.
For details of Saxon Unicode support, see XSLT 2.0 Conformance.
-
The statically-known collations.
Collation URIs of the form
http://saxon.sf.net/collation?param=value;param=value...
are always available: these map to the collations offered by the locales available within the Java VM in use. Additional collation URIs may be implemented by users and registered with the Saxon configuration via the Java API. -
The implicit timezone.
The implicit timezone is normally taken from the system clock. This may, however, be overridden via the Java API.
-
The circumstances in which warnings are raised, and the ways in which warnings are handled.
Warnings are raised for a variety of conditions. Compile time warnings include:
-
Use of a path expression that can never select anything (for example
@a/@b
) -
Use of an expression that can only succeed if one or more operands are empty sequences
-
Use of a string literal in a PITest that is not a valid NCName
Warnings may also be raised at run-time, for example if the
collection()
function fails to load a document and recovery has been requested.Compile-time warnings are sent to the JAXP
ErrorListener
registered with theConfiguration
; the defaultErrorListener
displays them as messages onSystem.err
. Run-time warnings are sent to the JAXPErrorListener
registered with theController
; the default is the same. -
-
The method by which errors are reported to the external processing environment.
Compile-time errors are sent to the JAXP
ErrorListener
registered with theConfiguration
; the defaultErrorListener
displays them as messages onSystem.err
. Run-time errors are sent to the JAXPErrorListener
registered with theController
; the default is the same. When queries are invoked from a Java application, any error will also be notified by throwing an exception. -
Whether the implementation is based on the rules of [XML 1.0] and [XML Names] or the rules of [XML 1.1] and [XML Names 1.1]. One of these sets of rules must be applied consistently by all aspects of the implementation.
Saxon gives the user the choice: see Saxon and XML 1.1. Note that since Saxon allows the user to select which XML parser to use on a per-document basis, achievement of consistency across "all aspects of the implementation" is in part a user responsibility. Saxon will not reject any attempt to use an XML 1.1 parser in a 1.0 configuration, or vice versa.
Since Saxon 9.4, all operations in Saxon itself (as distinct from the underlying parser) that depend on the rules for XML Names use the rules that are defined in XML 1.0 fifth edition and in XML 1.1, rather than the rules defined in earlier XML 1.0 editions.
-
Any components of the static context or dynamic context that are overwritten or augmented by the implementation.
The following table shows the components of the static context. For each component, the second column shows whether the component is overwritten or augmented by Saxon itself. The third column shows whether it may be overwritten or augmented by an application, through facilities in the Java API.
Component
Overritten or augmented by Saxon?
Can be set from Java API?
XPath 1.0 Compatibility Mode
no
no
Statically known namespaces
no
yes
Default element/type namespace
no
yes
Default function namespace
no
no
In-scope schema types
yes: types corresponding to Java classes for use in extension functions
no
In-scope element declarations
no
no
In-scope attribute declarations
no
no
In-scope variables
no
no
Context item static type
no
no
Function signatures
yes: any Java method on the classpath can be referenced
yes: there is a plug-in mechanism
Statically known collations
yes: collations of the form http://saxon.sf.net/collation?params
yes
Default collation
no
yes
Construction mode
no
no
Ordering mode
no
no
Default order for empty sequences
no
no
Boundary-space policy
no
no
Copy-namespaces mode
no
no
Base URI
yes: inferred from the location of the query
yes
Statically known documents
no
no
Statically known collections
no
no
Statically known default collection type
no
no
For the dynamic context, the corresponding settings are:
Component
Overritten or augmented by Saxon?
Can be set from Java API?
Context item
no
yes
Context position
no
no
Context size
no
no
Variable values
no
only for declared external variables
Function implementations
no
yes (extension functions)
Current dateTime
yes (from system clock)
yes
Implicit timezone
yes (from system clock)
yes
Available documents
yes (all documents reachable using Java URL connections)
yes (URIResolver)
Available collections
no
yes (CollectionResolver/catalog)
Default collection
no
yes (CollectionResolver/catalog)
-
Which of the optional axes are supported by the implementation, if the Full-Axis Feature is not supported.
The Full-Axis features is supported.
-
The default handling of empty sequences returned by an ordering key (sortspec) in an order by clause (empty least or empty greatest).
Empty least.
-
The names and semantics of any extension expressions (pragmas) recognized by the implementation.
Saxon-EE recognizes one pragma:
saxon:validate-type
. For details, see XQuery Extensions. -
The names and semantics of any option declarations recognized by the implementation.
See XQuery Extensibility.
-
Protocols (if any) by which parameters can be passed to an external function, and the result of the function can be returned to the invoking query.
Java methods can be called as Extension Functions.
-
How the implementation handles location hints in module imports, if the Module Feature is supported.
The location hint is interpreted as a relative URI, relative to the base URI of the referencing module. It is then dereferenced using the Java URL mechanisms, unless the user has nominated a
ModuleURIResolver
, in which case the interpretation is under user control. -
Any static typing extensions supported by the implementation, if the Static Typing Feature is supported.
Not applicable.
-
The means by which serialization is invoked, if the Serialization Feature is supported.
Serialization may be invoked from the command line or from the Java or .NET API. Serialization parameters may be supplied on the command line, from the Java or .NET API, or through option declarations in the query prolog.
-
The default values for the byte-order-mark, encoding, media-type, normalization-form, omit-xml-declaration, standalone, and version parameters, if the Serialization Feature is supported.
As specified in Appendix C.3 of the XQuery specification.