XQuery 1.0 implementation
The syntax for declare option saxon:output "parameter=value"
now allows the value to be zero-length.
The default serialization options have been changed to align with the defaults in Appendix C.3 of the W3C specification:
specifically, the default for indent
is now "no". The old default of "yes" can be achieved by setting the value
from the command line, from the Java API, from the Query prolog, or from the Saxon configuration file.
For the two serialization parameters doctype-system
and doctype-public
,
supplying "" (a zero-length string) as the value of the parameter is taken as setting the parameter to "absent". This is equivalent
to omitting the parameter. For example, this allows a value set
in the query prolog to be overridden from the API or from the command line (where the syntax is simply
!doctype-system=
).
The doc-available()
function, when it returns false, now ensures that the document remains unavailable
for the rest of the query: previously, if called repeatedly it would check repeatedly, and therefore could
return different results on different calls. Also, once doc-available()
has returned false, subsequent
calls on doc()
are now guaranteed to fail. A call on doc-available()
that returns false does not prevent the document being created using put()
, but any such
document will not be available during the same query.
The new function element-with-id()
, introduced in the errata for Functions and Operators, is available.
It behaves the same as the id()
function, except in the case of ID-valued elements, where it returns the
parent of the element having the is-ID
property, rather than the element itself.
A query that does not use an import schema
declaration is now (by default) compiled with
schema-awareness disabled. This means that it will not be able to handle schema-typed input documents, or to
validate temporary trees created within the query, though it can still validate the final output tree. This
is for performance reasons: generating code to handle typed input data when it will not be encountered
adds to the execution cost. It is possible to override this setting from the s9api API on Java or from the Saxon.Api
on .NET, or from the configuration file. From the command line, schema-awareness is set automatically if the -sa option
or any other option implying schema-awareness is used (for example -val:strict
). With XQJ, schema-awareness is set automatically
if Saxon-EE is loaded.
The amount of compile-time checking when schema-awareness is used has been further increased. In particular, if the expected type of a constructed element is known, Saxon now attempts to check (a) that the sequence constructor delivering the content of the element is capable of delivering a sequence of elements that matches the content model (previously it only checked that each child element could legitimately belong to the content model), and (b) that the sequence constructor is capable of creating each mandatory attribute required by the complex type of the element.