Saxon extensions to the W3C XSLT/XQuery specifications
A new extension function saxon:adjust-to-civil-time()
is available. This adjusts a date/time value
to its equivalent in the civil time of a named timezone, taking account of summer time (daylight savings time) changes.
For example
adjust-to-civil-time(xs:dateTime('2008-07-10T12:00:00Z', 'America/New_York')
returns 2008-07-10T08:00:00-04:00
Two new XSLT extension instructions are available (in Saxon-EE only): <saxon:try>
and
<saxon:catch>
. These complement the existing saxon:try()
extension function, but
are more powerful, and more convenient in many cases because they catch errors at the XSLT level.
For details see saxon:try.
A new extension function saxon:parse-html()
is available. This works in the same way
as saxon:parse()
, but it assumes the input is HTML rather than XML. The TagSoup parser must
be available on the classpath for this to work.
The extension functions saxon:file-last-modified()
and saxon:last-modified()
have been changed. There is now only one function, saxon:last-modified()
, and it takes a URI as its
argument. It can now be a relative or absolute URI (if relative, it is resolved against the base URI from the
static context). To get the last-modified date of the file from which a particular node was loaded, use
saxon:last-modified(document-uri(/))
. The function now throws a dynamic error if given an
invalid URI or a URI that cannot be resolved or dereferenced; this can be caught using try/catch if needed.
The function returns an empty sequence if the resource can be retrieved but no date/time is available.
In the saxon:try()
extension function, the ability to supply a function as the second
parameter (to be called if evaluation of the first parameter fails) is withdrawn. The second argument is now
always evaluated directly.
The support for the EXSLT date-and-time library has been updated. Some new methods are available
(add(), difference(), seconds(), duration(), sum()), and implementations of existing functions have been upgraded to conform
more closely to the spec, in particular by checking for erroneous input. One change that may be noticed is that
the function date()
, with no arguments, now returns the current date with a timezone.
The extension function saxon:function()
has changed so the argument can now be a system function
as well as a user-defined function. If the function name is unprefixed, it is now assumed to be in the default
function namespace.
The extension functions saxon:highest()
, saxon:lowest()
, saxon:sort()
,
and saxon:leading()
have been reworked to take advantage of higher-order functions. The second argument (if present) is now a function
item rather than a dynamic expression.
The extension function saxon:after()
, which has been undocumented for many years, is finally
dropped from the code.
The extension functions saxon:index()
and saxon:find()
now impose the same comparison rules
as value comparisons: for example, if the value indexed is untyped atomic, then supplying an integer as the argument to
saxon:find()
results in a type error. Previously, it resulted in a "no match" (typically, saxon:find()
returned an empty sequence).
The extension function saxon:type-annotation()
, when applied to a document node, now returns xs:anyType
if the document has been schema-validated, or xs:untyped
otherwise. Previously it return xs:untypedAtomic
.
For comment, processing-instruction, and namespace nodes it now returns xs:string
.
The XSLT extension instruction saxon:script
is dropped. It suffered a major design problem: the bindings it declared were
global (applying to a Configuration as a whole, and in part to all Configurations in the Java VM, rather than to a particular
stylesheet), and the cost of fixing this problem would not be justified by the level of usage of this legacy feature.
Equivalent facilities are now available via the configuration file, or using the Configuration API.