Saxon-JS Release Notes
Maintenance release 1.1.0
9 May 2018
Bug fixing maintenance release.
In general for use with Saxon-JS 1.x SEFs should be produced with Saxon-EE 220.127.116.11 or
later, though to be able to use all new features of Saxon-JS 1.1 it is recommended that
SEFs are produced with Saxon-EE 18.104.22.168 or later (beware the
ixsl:schedule-action/@wait bug #3734 in 22.214.171.124 and 126.96.36.199).
See the Change History
section of the documentation for full details. Below is a summary:
Type Conversion and Supplying
stylesheet parameters for up to date details.
Serialization to JSON is implemented (with some restrictions).
Added two ways to set the logging level for warnings, processing messages, or full
tracing, using the Saxon-JS API: the API method SaxonJS.setLogLevel,
and the SaxonJS.transform
Additions to the SaxonJS.transform
tunnelParams to allow
parameters to be supplied for call-template invocation.
The extension instruction ixsl:schedule-action
has been updated to allow document fetches and HTTP requests to be terminated:
either using a timeout, or by user initiated abort. Requires Saxon-EE 188.8.131.52
or later at compile time. See HTTP
request termination for more information and examples.
Some Saxon extension functions are now available in Saxon-JS (see Saxon
#3378: result-document doesn't handle AVT for method
#3379: regex-group() value is not maintained through calls of xsl:apply-templates and
#3381: Spurious "unmatched ')'" error in regular expression
#3475: Problem with SEF generated using Oxygen 19.1 "Compile XSLT Saxon 9.8" add-on
#3499: Keys should be invalidated if the (relevant part of the) HTML page is updated
#3500: ixsl:event() does not correctly return an empty sequence when there is no current
#3501: Error when object supplied to ixsl:get() is null
#3502: ixsl:source() does not correctly return an empty sequence when there is no global
#3544: Third argument of ixsl:call() is an array, documentation is inconsistent
#3545: Inconsistencies using map functions on JS objects
#3564: Check that context item is an element for ixsl:set-attribute and
#3568: Add a way to cancel a scheduled action
#3571: Have some equivalent of saxon:discard-document
#3596: current-date and current-dateTime does not give the instant date/time stamp
#3611: Handle error responses from HTTP requests
#3670: Implement more transform options
#3676: Implement serialization to JSON
#3689: Problem with apply-templates in "#current" mode
#3704: Issues with ixsl:style()
#3718: Mishandling null, undefined, and array results from ixsl functions
#3727: Edge browser problem for script elements dynamically added to page
#3738: Cannot set properties to null using ixsl:set-property
#3741: Allow users to configure message logs
#3756: Stack overflow in base64_decode()
Maintenance release 1.0.2
5 October 2017
Bug fixing maintenance release.
In general for use with Saxon-JS 1.0 SEFs should be produced with Saxon-EE 184.108.40.206 or
later, though a number of features introduced in Saxon-JS 1.0.1 require SEFs produced
with Saxon-EE 9.8 (see the documentation for details).
- A space-separated list can now be supplied in the
document attribute of
ixsl:schedule-action, to fetch
multiple documents before the contained call is invoked.
#2889: Missing error trapping in Calculate
#3268: Saxon-JS documentation app problems in Safari on iPad (and other handheld
#3362: reverse() modifies its argument
#3369: Incorrect test for node identity in p.genNode pattern matching
#3370: currentGroup / currentGroupingKey
#3377: HTML base tag ignored in stylesheetLocation and sourceLocation
#3380: xsl:analyze-string with a regex that matches a zero-length string
#3383: General Comparison in 1.0 compatibliity mode: cannot compare xs:string with
#3386: deep-equal() fails comparing attributes
#3393: "<" treated as entity characters within XPath.evaluate()
#3417: unparsed-text-lines() incorrect behaviour with blank lines
#3419: format-number() rounding issues
#3431: non-default exponentSeparator character not interpolated
#3440: Handling asynchronous document fetch failures
#3441: Asynchronous fetch for a list of documents
#3442: Problems reusing parameters after ixsl:schedule-action
#3454: Documentation for ixsl:schedule-action/@http-request
#3470: SaxonJS 1.0.1 fails when calling the key() function; SaxonJS 1.0.0 works well
Also includes a patch for a known Edge bug related to regular expressions used in reading XML
resources (see Forum issue #6873).
Maintenance release 1.0.1
21 July 2017
Maintenance release for use on web browsers. A number of new features require SEFs
produced with Saxon-EE 9.8 (in general SEFs should be produced with Saxon-EE 220.127.116.11 or
later for use with Saxon-JS 1.0).
- Many more XSLT 3.0 features are now implemented. Some require Saxon 9.8 at compile time.
for full details. Newly implemented features include:
xsl:where-populated, xsl:on-empty, xsl:on-non-empty, xsl:fork
- use of initial mode
- accumulators (requires Saxon 9.8)
collection() (requires Saxon 9.8)
- merging (requires Saxon 9.8)
- multiple packages (requires Saxon 9.8)
xsl:source-document in non-streaming mode (requires Saxon 9.8)
xsl:context-item (requires Saxon 9.8)
- Support for collations has been extended to XSLT instructions as well as XPath
- Regex character class subtraction
- Fixes for
xsl:evaluate (default XPath namespace; support for
@as result type restriction; support for
in addition to
- Additions to the
function-params to allow function call
collations to supply collations;
to supply collections.
initial-mode set to
"#unnamed" can be used to force use of the unnamed mode. If
is not set, then the default-mode specified in
xsl:package) is used, defaulting to the unnamed mode.
- Added interactive XSLT mechanism for making asynchronous HTTP requests directly from the
stylesheet - using the new
http-request attribute on
(requires Saxon 9.8). See HTTP
messages for more information.
- Using Saxon 1.0.0 or earlier, URIs in the
doc() function and in the
document attribute of
ixsl:schedule-action were always
interpreted relative to the SEF's location. In Saxon-JS 1.0.1, the behaviour depends on
whether the SEF is relocatable, since this will determine the
static-base-uri(). From Saxon 9.8, a relocatable SEF can be produced by
setting the Transform command line option
-relocate:on at compile time. If
the SEF is relocatable, then
static-base-uri() is the base URI of the SEF;
otherwise it is the location of the XSLT stylesheet at compile time. For full details
see the section about relative URIs at Source
#3004: Support for HTTP POST/PUT
#3036: Saxon-JS documentation app problems in Chrome on computers with touch screens
#3066: Specialist name() treatment of XHTML elements
#3130: Source document has a non-absolute base-uri()
#3131: XPath.evaluate - incorrect comparison typing for xs:QName
#3133: xs:numeric cast not preserving value type
#3134: map:get() key not being atomised
#3139: Complex Content incorrectly handing text-nodes
#3140: XPath.evaluate should check initial context-item cardinality
#3146: system-property("xsl:supports-dynamic-evaluation") returns "no"
#3148: xsl:evaluate doesn't support use of user-defined functions
#3149: Constructed element node lacks xmlns="" undeclaration
#3161: || operator in dynamic XPath does no type checking
#3167: Problems with QName hash-codes in trieWithCollation()
#3170: Attributes with no prefix in name get assigned 'ns'
#3203: Default namespace XHTML not appearing in namespace-uri-from-prefix()
#3216: Error QNames are not ordered
#3221: p.genPos pattern not implemented in Saxon-JS
#3231: Default treatment of Atomic items in text-only-copy incorrect
#3335: Lazy evaluation of sequence constructors - instructions with side effects evaluated
Major release 1.0.0
7 February 2017
First major release, for use on web browsers. For use with Saxon-JS 1.0, SEFs should be
produced with Saxon-EE 18.104.22.168 or later.
- For use with Saxon-JS 1.0, SEFs should be produced with Saxon-EE 22.214.171.124 or later. (Most
SEFs produced by older versions of Saxon-EE will run as before, but some will fail with an
error directing the user to regenerate the SEF.)
- Added Dynamic
for use with
xsl:evaluate, and directly via the XPath
- The use of collations in XPath functions is now implemented, see Conformance
for details (and restrictions).
- Known performance issues have been addressed.
#3071: Bad performance of xsl:result-document with deeply nested output content
#3095: XPath.evaluate requires platform initialisation
#3098: Supplied value "..." is not a valid xs:base64
Maintenance beta release 0.9.1.1
12 December 2016
Maintenance release for use on web browsers.
#3067: Specialist name() treatment of XHTML elements
Maintenance beta release 0.9.1
9 December 2016
Maintenance beta release for use on web browsers (Safari, Firefox, Chrome, Opera, Internet
Explorer, and Edge). This release can be used with SEFs produced by Saxon-EE 126.96.36.199 or
later, but for all the latest features use Saxon-EE 188.8.131.52 or later.
- The form
<xsl:result-document href="?."> can now be used to specify the
current context as the target for inserting generated HTML fragments, see Result
- Added support for the transform options
sourceText, see SaxonJS.transform.
- Values for stylesheet parameters with type
can now be supplied using the transform option
Saxon-EE 184.108.40.206 or later). See Supplying stylesheet parameters.
- The interactive XSLT function
ixsl:apply() is added (requires Saxon-EE
220.127.116.11 or later).
- The XSLT 3.0
xsl:evaluate instructions are now
implemented (requires Saxon-EE 18.104.22.168 or later).
- The third-party URI.js library is no longer used.
- Extended browser support: Saxon-JS 0.9 tested with current versions of Safari, Firefox and
Chrome; Saxon-JS 0.9.1 also tested with Internet Explorer, Edge and Opera.
#2752: JS: nashorn references in core (browser) code
#2796: JS: xs:date() can modify timezone for pure dates
#2833: JS: anomalous descendant behaviour under ixsl:page()
#2884: Registering event listeners for objects outside DOM
#2885: Use of URI.js
#2886: Converting JS Objects to XDM maps
#2888: Static base-uri for in-browser exported stylesheets.
#2890: document.createAttributeNS() deprecated - warning in Firefox
#2891: Checksum in SEF file
#2913: http://www.saxonica.com/saxon-js/documentation/ does not work with Edge
#2923: Incorrect comparison for xs:numeric and NaN
#2941: Crash when there is no context item
#2942: Failure to specify -target:JS
#2944: Use of xsl:sequence within copy situations is node-destructive
#2945: for-each-group context not being preserved over context-altering steps
#2947: Cities List example
#2948: SEF metadata
#2992: treat as not testing sequence cardinality
#3007: sourceNode or sourceText property of options argument of transform method not
#3008: ixsl:query-params() does not allow for multiple values associated with a single
#3012: In browser, do not always produce HTML elements in result documents when they
should be produced
#3020: _APPLY() construct has not been implemented in Saxon-JS
First beta release 0.9
28 July 2016
First beta release for use on web browsers with SEFs produced by Saxon-EE 22.214.171.124 or later.