Schema-aware XSLT and XQuery processing
Schema-awareness is now a property of a compiled query, stylesheet, or XPath expression. By default, these executables
are schema-aware if they contain an import schema declaration in the source code, or if a schema was imported
programmatically into the static context for the compilation. If the executable is not schema-aware, then all the data
supplied at run-time must be untyped. The reason for this is that there is a considerable performance penalty if it is not
known statically whether data will be typed or untyped; therefore, code that is not explicitly declared to be schema-aware
is now compiled to handle untyped data only. (This allows the type annotations xs:untyped
, xs:anyType
,
and xs:untypedAtomic
. Of these, xs:anyType
will appear only in nodes constructed from within a
query, and only when construction mode is "preserve".)
For XSLT a transformation can be set to be schema-aware, even if it does not import a schema, by setting the Configuration
property FeatureKeys.XSLT_SCHEMA_AWARE
to true. For XQuery, the same effect can be achieved by setting the Configuration
property FeatureKeys.XQUERY_SCHEMA_AWARE
.
The command-line interfaces Transform
and Query
will now load an enterprise configuration if they
can (that is, if Saxon-EE and a valid license file can be located). The -sa
option is now needed only to enable
schema-awareness in a transformation or query that does not import a schema. This might be needed, for example, if the
transformation or query uses untyped input but validates its output. The option is no longer needed to enable other
Saxon-EE features such as advanced optimization or streaming.