SaxonJS release notes
Preview release 3.0.0-beta1
18 December 2024
First preview release for the major release 3.0.
SaxonJS 3 is a major upgrade from the previous SaxonJS 2 releases. The first release
in
December 2024 is a preview release of the free Home Edition product, available on
Node.js and the browser. An Enterprise Edition for Node.js with advanced features
is
also in the works.
The most significant changes are:
- On Node.js, SaxonJS 3 is available in two editions: Home and Enterprise. The
Enterprise Edition will provide advanced features, and requires a valid license.
- The IXSL extensions for asynchronous processing have been updated to be more
promise-like; making this more extensible, and better integrated with JavaScript.
- New APIs are introduced enabling extension functions to be defined in JavaScript
which can then be called directly from XPath.
Other smaller changes and improvements include:
- Support XPath expressions (other than ".") after ? in
xsl:result-document/@href
- New methods on
xsl:result-document
: ixsl:replace-element
,
ixsl:insert-before
, and ixsl:insert-after
- Improved support for following HTTP redirects
- Improved support for accessing JavaScript objects with
ixsl:set-property
, ixsl:json-parse
, ixsl:new
,
ixsl:apply
, ixsl:call
, ixsl:eval
, and
ixsl:get
- Support the
escape-solidus
option when generating JSON.
To be able to use all the new features of SaxonJS 3, SEFs must be produced with Saxon-EE
12.5 or later (specifying -target:JS3
on the command line), or compiled
using the internal compiler in SaxonJS 3 on Node.js. SaxonJS 3 will still run SEFs
produced using earlier versions of Saxon-EE (from 10.0 onwards).
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Bug
#4815: Conversion of XDM maps to JS objects
- Bug
#4829: Static variable initialised to node values cause run-time failure
- Feature
#5057: Constructing JS objects
- Support
#5225: While using xslt 3.0 function "xml-to-json" would like to avoid escaping
'/'
- Bug
#5535: Improve documentation for exposed node properties
- Bug
#5543: Add the ability to insert before/after an element
- Bug
#5558: Allow clients of SaxonJS to supply a map of custom XPath functions with arbitrary
names
- Feature
#5596: IXSL construct for Promises.all
- Bug
#5654: SaxonJS restriction: don't check parameters are supplied if they aren't used
- Bug
#5656: XDM array is not converted to a true JS array?
- Feature
#6303: xsl:result-document method that replaces outerHTML
- Feature
#6355: A new instruction that makes a document available by the document()
function
- Bug
#6447: Async version of ixsl:call?
- Bug
#6506: Passing a buffer as the sourceText to SaxonJS.transform gives a nasty error
Maintenance release 2.7
17 October 2024
Bug fixing maintenance release.
For use with SaxonJS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in SaxonJS 2 on Node.js.
If using Saxon-EE 11, please use 11.3 or later, as a number of bugs in compiling to
SEF were
fixed in the 11.3 maintenance release.
Note: Saxon-EE 12.5 won't create SEFs that can be used with SaxonJS 2.x.
This is a known bug that will be fixed in Saxon 12.6. SEFs for SaxonJS 2.x
can be created using Saxon-EE 12.4 and earlier versions.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Feature
#4991: Do indentation of JSON with xml-to-json($json-xml, map { 'indent' : true()
})
- Bug
#5540: Namespace context should be reset at the beginning of an XSLT stylesheet
- Bug
#5743: Expand text interacts badly with try/catch
- Bug
#6234: map call with sequence of more than one item as argument doesn't give an error
- Bug
#6318: replace with curly braces in second argument gives error "Error FORX0002: Invalid
XPath regular expression: '{' not allowed here"
- Bug
#6352: Reduced performance of SaxonJS 2.6 compared to 2.4
- Bug
#6393: XSLT 1.0: Comparison of string-valued nodeset and number fails
- Bug
#6417: Using xsl:mode on-no-match="skip" gives error Error XTDE0555 but should give
XTSE0020
- Bug
#6418: IXSL extensions which are not available on Node.js
- Bug
#6506: Passing a buffer as the sourceText to SaxonJS.transform gives a nasty error
- Bug
#6516: Expression `/[x]` is not accepted
Maintenance release 2.6
13 October 2023
Bug fixing maintenance release.
For use with SaxonJS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in SaxonJS 2 on Node.js.
If using Saxon-EE 11, please use 11.3 or later, as a number of bugs in compiling to
SEF were
fixed in the 11.3 maintenance release.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Bug
#5597: ixsl:schedule-action fails without xsl:call-template
- Bug
#5713: ixsl:source() from asynchronous transform with no source document
- Bug
#5714: Update documentation to mention the backtick escaping mechanism for all the
effected functions
- Bug
#5739: Space in string in text template not output as element content
- Bug
#5761: fn:transform called from XPath with simplified stylesheet gives error XTTE0590 in
XSLT-SEF-compiler.xsl
- Bug
#5855: map:merge with duplicates=combine gives wrong answer
- Bug
#5925: Performance: dynamic function lookup runs very slowly under SaxonJS
- Bug
#5974: SaxonJS documentation does not address namespaces
- Bug
#6037: ixsl:schedule-action return objects
- Bug
#6096: XSLT 3 with accumulator-rule match pattern using variables in predicate causes
Internal error
- Bug
#6107: Can't use namespaced attributes on the root element of the body of a SaxonJS
http-request
- Bug
#6134: Partial function application call to function in ixsl namespace fails
- Feature
#6216: base-uri() value empty for documents async-loaded with
ixsl:schedule-action/@http-request
- Bug
#6219: base-uri(ixsl:page()) returns empty value
Maintenance release 2.5
4 October 2022
Bug fixing maintenance release.
For use with SaxonJS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in SaxonJS 2 on Node.js.
If using Saxon-EE 11, please use 11.3 or later, as a number of bugs in compiling to
SEF were
fixed in the 11.3 maintenance release.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Bug
#4704: parse-xml fails in browser on string that has XML declaration in CDATA section
- Feature
#5083: SaxonJS in the browser should support data: and blob: URLs
- Bug
#5389: Test case attribute-1301 fails
- Bug
#5490: SaxonJS 2.4 fails to run Schxslt pipeline XSLT
- Bug
#5493: Problems with transform result output.resultDocuments
- Bug
#5494: Properties of attribute nodes have internal names which change from one release
to
another
- Bug
#5544: Using the SaxonJS.transform logLevel option sets the log level globally
- Bug
#5554: Some initialization errors for asynchronous transforms are not handled
correctly
- Bug
#5560: intersect doesn't seem to work correctly for attributes
- Bug
#5563: SaxonJS allows elements in supposedly empty xsl:copy-of instruction
- Bug
#5597: ixsl:schedule-action fails without xsl:call-template
- Bug
#5653: In xsl:where-populated, an empty array is not "deemed empty" for the purposes of
this instruction
- Bug
#5662: Uncaught TypeError: this.al is not a function in today's XPathle when using the
"use stats" button
- Bug
#5667: ixsl:eval argument starting with a newline fails to evaluate
- Bug
#5673: ixsl:set-property and URLs in property names
- Bug
#5677: Required cardinality of first argument of t:commonType() is one or more; supplied
value is empty
- Bug
#5695: Unexpected sort order in Firefox
- Bug
#5698: Changes for system-property()
Maintenance release 2.4
12 May 2022
Bug fixing maintenance release.
For use with SaxonJS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in SaxonJS 2 on Node.js.
If using Saxon-EE 11, please use 11.3 or later, as a number of bugs in compiling to
SEF were
fixed in the 11.3 maintenance release.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Bug
#4755: Pattern x/(a|b) is rejected
- Bug
#5036: key() doesn't work on ixsl:page() after ixsl:replace-content?
- Bug
#5039: Chaining two XSLTs where the first creates a fragment with two element children
works under Node.js but not in the browser
- Bug
#5042: xslt3 fails to identify that function with type declaration as="element()" returns
an empty sequence
- Bug
#5066: Element.localName is not implemented in saxon-js 2.3
- Bug
#5074: "XML Parsing Error" when loading SEF file with SaxonJS 2.3
- Bug
#5079: resolve-uri doesn't take static-base-uri of included module into account, even with
relocate:off Saxon EE compiled/exported XSLT
- Bug
#5081: Result of serialize($someElement, map{}) contains XML declaration although function
spec suggest default value is to omit-xml-declaration
- Bug
#5132: Misleading error message
- Bug
#5162: Failure when using collations in SaxonJS.XPath.evaluate
- Bug
#5190: xsl:iterate problem where the name of an xsl:iterate parameter duplicates the name
of a local variable
- Bug
#5193: $nodes => fold-left((), function($all, $this) {$all, $this except $all}) call
gives error "Supplied value element <a> does not match required type xs:error in dynamic
call of anonymous function (arity 2)"
- Bug
#5198: NodeJS run from command-line with '-it:main' arg results in error when using
mode="#current"
- Bug
#5230: Difficulty using xsl:xpath-default-namespace in conjunction with the key attribute
of xsl:map-entry
- Bug
#5338: XX Compiler reports "Unknown accumulator NNNNN" when an accumulator-before or
-after call occurs in a global variable
- Bug
#5387: Adaptive serialization only escapes the first quotation mark in a string
- Bug
#5389: Test case attribute-1301 fails
- Bug
#5390: document() doesn't remove duplicates
- Bug
#5391: fn:snapshot applied to namespace and attribute nodes
- Bug
#5407: XX compiler outputs its own location on an error
- Bug
#5408: Test case message-0312 fails (with either compiler)
- Bug
#5409: xsl:message document is not available as $err:value
- Bug
#5413: Test case accept-0903 crashes (when compiled with XJ)
- Bug
#5414: SaxonJS 2.3 doesn't reject xsl:map-entry key="()"
- Bug
#5419: XX compiler version message is wrong
- Bug
#5430: Use of deliverResultDocument in SaxonJS.transform options causes error "Unsupported
result-document destination undefined"
- Bug
#5458: Trying to replace contents of HTML document's root element html with
xsl:result-document href="?." method="ixsl:replace-content" creates or leaves duplicated/empty
head/body elements
- Feature
#5462: Add "-relocate" command line option for XX compiler (xslt3 package)
- Bug
#5464: unparsed-text() with an empty file throws a TypeError
- Bug
#5471: Results object from asynchronous SaxonJS.transform does not contain
stylesheetInternal
Maintenance release 2.3
20 August 2021
Bug fixing maintenance release.
For use with Saxon-JS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in Saxon-JS 2 on Node.js.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Feature
#4748: Option to supply Accept header in SaxonJS.getResource()
- Bug #5008:
SaxonJS: Import XSLT2 from XSLT2 error
- Bug #5010:
Static base URI missing trailing slash for -xp command line option
- Bug #5017:
Fix Accept header value sent by document()
- Bug #5019:
Invalid local name: 'xml:lang'
- Feature
#5021: Option to supply base URI of the source text in SaxonJS.getResource() for
Node.js
- Bug #5024:
XSLT 3 main module with expand-text="yes" sets that too for imported XSLT 2 module
- Bug #5031:
ixsl:set-property: ... not found for supplied object
- Bug #5037:
empty AVT causes error "Cannot read property 'value' of null"
- Bug #5038:
Getting error XTTE0590 'Required cardinality of value of parameter $stylesheet-base-uri
is
exactly one; supplied value is empty' when calling fn:transform with stylesheet-node
created
from fn:parse-xml
- Bug #5046:
Handling null and undefined objects in ixsl:get() and ixsl:set-property
- Bug #5058:
Document.createElementNS not implemented in saxon-js 2.2
Maintenance release 2.2
11 May 2021
Bug fixing maintenance release.
For use with Saxon-JS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in Saxon-JS 2 on Node.js.
Changes
See the Change history
section of the documentation for full details.
The most significant change in this release is that Saxon-JS running on Node.js no longer
creates a “SaxonJS
” global object. This has two consequences:
- Saxon-JS works better in environments where the global object space is managed
more strictly. In particular, it will work with Electron (see bug
4639) and tools like
Webpack (bug 4669).
- If your Node.js application relies on the implicit creation of the
SaxonJS
global object,
you will need to make a few minor changes to your application.
Bug fixes
- Bug #4639:
SaxonJS in Electron appears non-standard
- Bug #4641:
xpath-default-namespace not being honoured on ixsl:*/@object
- Bug #4669:
SaxonJS object is empty using Webpack
- Bug #4768:
fn:transform(): source-node and global context item
- Bug #4913:
Documentation/code discrepancy in regex flag for using the JavaScript RE engine
- Bug #4923:
The -xp option on xslt3.js should also support -json
- Bug #4925:
The -s option resolves spaces incorrectly in filenames
- Bug #4958:
saxon-js 2.1: Crash in Saxon.XPath.evaluate with certain predicates
- Bug #4963:
Missing namespace prefix in imported stylesheet is not detected
- Bug #4978:
a.ha is not a function
Maintenance release 2.1
2 March 2021
Bug fixing maintenance release.
For use with Saxon-JS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in Saxon-JS 2 on Node.js.
Changes
See the Change history
section of the documentation for full details.
The following new features have been added:
- In the
SaxonJS.transform()
API, it is now possible to
supply the principal input as a JSON document, rather than an XML document. The new
option,
sourceType
, should be used to indicate that the supplied source is JSON.
- Correspondingly, on Node.js, the command line option
-json
has been added as an alternative to
-s
. It allows the principal input to be a JSON document.
- On Node.js, the
-xp
command line option has been added somewhat experimentally to allow an
XPath expression to be evaluated directly over an XML document.
- On the browser, the set of Window events that an XSLT event handler can respond to
has been extended to
include the
resize
and focus
events (see also bug #4728.)
Bug fixes
- Bug #4583: Failed to compile
"('0', 0)[1] ! xs:integer(.)"
- Bug #4584: document-uri()
applied to initial source document gives no result
- Bug #4587: use of undefined
system property like system-property('product') gives Internal error: bad input to
string constructor
- Bug #4588:
xsl:initial-template seems to be executed by fn:transform called from SaxonJS.XPath.evaluate
although options set
initial-match-selection and global-context-item
- Bug #4589: Command line with
no -o option: files written to parent of working directory
- Bug #4590: xsl:result-document
writing to file containing spaces
- Bug #4596: XML output has
empty line between XML declaration and root element
- Feature #4598: Recognize
exslt:node-set() extension function
- Bug #4601: Problem with
namespaces containing "="
- Bug #4603: format-number() -
grouping separator before any digit character
- Bug #4607: Transformation
failure from XX-compiled SEF for Saxon-Forms
- Bug #4608: Reading JSON
resource over HTTP: TypeError: c.codePointAt is not a function
- Bug #4611: XPath expression
"function(){'x'}()" crashes with TypeError: this.closureContext.localVars.slice is
not a function
- Bug #4612: XPath expression
"function($x){true()}(17)" crashes "$elaborate$$ is not a function"
- Bug #4613: Map is not
substitutable for Function
- Bug #4616:
default-collation
- Bug #4619: XX Compiler failure
with static parameters whose type has an occurrence indicator
- Bug #4622: Adaptive serializer
fails when outputting a single attribute node
- Bug #4624: Matching with
namespaces in SaxonJS / NodeJS
- Bug #4625: Representation of
xs:base64Binary and xs:hexBinary
- Bug #4629: Failure in key()
function (originally from David Carlisle's HTML parser)
- Bug #4634: In regular
expressions, \W matches 'a'
- Bug #4660: Incorrect
xpath-default-namespace on included files with XX compiler
- Bug #4681: namespace
declaration not honored: error XTDE1390 undeclared prefix: saxon
- Bug #4686: XSLT 3 using
fold-left fails in Saxon-JS 2 with error Expected mode, found function
- Bug #4690: generate-id problem
when chaining stylesheets and storing intermediary results as a tree
- Bug #4702: CR (x13) under
node.js
- Bug #4723: XSLT 3 using
function-lookup gives TypeError: h is not a function
- Bug #4725: Saxon-JS 2 fails to
compile XSLT stylesheet giving error "Required cardinality of value of parameter $static-base-uri
is exactly one;
supplied value is empty"
- Bug #4728: Coverage for event
handling
- Bug #4734: SaxonJS.transform
nonInteractive option does not work
- Bug #4742: innermost() - nodes
missing from result
- Bug #4743: Performance:
substring() and subsequence()
- Feature #4748: Option to
supply Accept header in SaxonJS.getResource()
- Bug #4754: xs:decimal idiv
operator (suspicious code)
- Bug #4756: Failure XTTE3090
with on-no-match=deep-skip
- Bug #4757: Casting from
xs:date to xs:dateTimeStamp
- Bug #4758: Casting large
xs:decimal values to xs:integer
- Bug #4762: Function conversion
rules in option parameters conventions
- Bug #4767: xsl:with-param
value evaluation in xsl:call-template in ixsl:schedule-action
- Bug #4776: Arithmetic in
backwards compatibility mode
- Bug #4777: Shadow attribute
xsl:include/@href
- Bug #4778: snapshot() function
applied to a namespace node fails with internal error
- Bug #4779: Bad command line
parameters cause internal error and stack trace
- Bug #4780: UntypedAtomic to
xs:double conversion does not happen for a dynamic call to fn:abs#1
- Bug #4781: Higher-order
functions: No failure reported when supplied function doesn't match required signature
- Bug #4783: Incorrect results
when comment node is created as child of document node
- Bug #4785: fn:path() for
parentless element node gives /Q{}foo[1]
- Bug #4787: Map failures with
temporal keys using timezones under advanced closure compilation
- Bug #4802: Overzealous
optimization
- Bug #4804: Failure in XX
compiler, incorrect type inferencing
- Bug #4805: Command line: -s
option with HTTP or FILE uri
- Feature #4806: Transforming
JSON input
- Bug #4818: fn:sort with three
arguments gives error TypeError: d.compareTo is not a function
- Bug #4830: HTML response from
ixsl:schedule-action is parsed as XML, causing failure
- Bug #4843:
js:history.pushState() has no effect?
- Feature #4844: Could 'resize'
be added to the list of windowEvents?
- Bug #4852: SaxonJS incorrectly
URI encodes 'value' attributes on 'input' elements
- Bug #4863: If the root element
is an empty element, it is not serialized correctly
- Bug #4877: AssertionError:
TypeError [ERR_INVALID_ARG_TYPE]: The "data" argument must be of type string or an
instance of Buffer, TypedArray,
or DataView. Received an instance of Array
Major release 2.0
12 June 2020
Saxon-JS 2 is a major upgrade from the previous Saxon-JS 1 releases. The most obvious
changes are:
- The product is now available on Node.js as well as in the browser.
- The product now includes an XSLT compiler as well as a run-time, so it is no longer
restricted to users who have purchased a Saxon-EE license.
But there's also a vast number of smaller changes:
- A serializer with a very high level of conformance to the W3C specifications.
- A richer JavaScript API both for XSLT transformations and XPath evaluation.
- Support for higher-order functions.
- General filling in of remaining conformance gaps, taking us to 99.9% coverage of
XSLT 3.0 and XPath 3.1.
- Significant performance enhancements.
We're very excited by the potential of this product. Node.js has become a very popular
platform for high-performance web services, and until now it has had rather poor support
for XML technologies generally, and XSLT in particular. Saxon-JS on Node.js is
effectively a brand new XSLT processor, which can now operate completely independently
of the Java product. Our initial performance results are very encouraging indeed.
For use with Saxon-JS 2, SEFs must be produced with Saxon-EE 10.0 or
later, or compiled using the internal compiler in Saxon-JS 2 on Node.js.
Changes
See the Change history
section of the documentation for full details.
Bug fixes
- Bug
#3132: Composite keys in xsl:key not implemented
- Feature
#3238: Non-interactive stylesheets
- Bug
#3387: Inverse character ranges in regular expressions
- Bug
#3413: Test accumulator-014 fails "Invalid local name"
- Feature
#3420: xsl:global-context-item is not implemented
- Bug
#3422: Failure to report XTDE3052
- Bug
#3423: Incorrect binding to modes by name
- Bug
#3424: Two keys with same name in different packages
- Bug
#3425: Cannot handle more than two packages
- Bug
#3435: Function call to xsl:original() is not supported
- Bug
#3436: Two accumulators with same name in different packages
- Bug
#3461: Asynchronous fetch for other external resources
- Feature
#3462: Asynchronous fetch for internal resources
- Bug
#3535: initial-function parameters are not type-checked
- Bug
#3561: generate-id() on attribute and namespace nodes may produce a non-ASCII string
- Feature
#3569: Test if a Javascript property exists before calling ixsl:get()
- Feature
#3570: Add a function or instruction like ixsl:remove-property
- Feature
#3572: Have an extra attribute for ixsl:set-attribute to select the element to be
affected
- Feature
#3589: Saxon-JS should depend only upon JavaScript, not web browsers
- Bug
#3899: Incorrect handling of mixed backward-compatibility xsl:key
- Bug
#4103: Saxon-JS dynamic loading errors - it won't run on Tizen OS in a webapp browser (on
Smartwatches and TVs)
- Bug
#4116: Cannot load SEF stylesheet under NW.js
- Bug
#4174: No response body from HTTP request when http.status >= 400
- Bug
#4176: parse-xml() in Saxon-JS loses html namespace
- Bug
#4191: Saxon-JS error on null Content-Type
- Bug
#4424: Arithmetic with large integers
Maintenance release 1.2.0
5 October 2018
Bug fixing maintenance release. Primarily fixes to allow Saxon-JS to work correctly
with SEFs produced with
Saxon 9.9.
In general for use with Saxon-JS 1.x, SEFs should be produced with Saxon-EE 9.7.0.15
or
later, though to be able to use all new features since Saxon-JS 1.1 it is recommended
that
SEFs are produced with Saxon-EE 9.8.0.12 or later.
Changes
- SEFs produced using Saxon-EE 9.9 require Saxon-JS 1.2.
Bug fixes
- Bug #3783: Incorrect
evaluation of ?* on arrays
- Bug #3790: Saxon-JS
documentation app search problems
- Bug #3813: Should add
err=http://www.w3.org/2005/xqt-errors to the list of conventional namespace bindings
- Bug #3833: Problems using
fn:replace() with special characters in replacement string
- Bug #3865: Issues running 9.9
SEFs with Saxon-JS 1.1.0
- Bug #3869: Missing run time
type check for value comparisons for xs:qname and xs:duration
- Bug #3870: Mishandled
"undefined" in code for filter expression
- Bug #3910: Error using
fn:replace() with "q" flag when search string contains "-" character
- Bug #3944: fn:innermost()
expects input sequence to be in document order
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 9.7.0.15
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 9.8.0.12 or later (beware the ixsl:schedule-action/@wait
bug #3734 in 9.8.0.10 and 9.8.0.11).
Changes
See the Change history
section of the documentation for full details. Below is a summary:
-
Changes have been made to the way that JavaScript objects are converted to XDM, and
the way
that XDM maps are converted to JavaScript. See JS/XDM
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
option logLevel
.
-
Additions to the SaxonJS.transform
API: templateParams
and 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 9.8.0.10
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
extensions): saxon:discard-document()
and
saxon:timestamp()
.
Bug fixes
- Bug
#3223: Supplying Document objects to JavaScript global functions
- Bug
#3378: result-document doesn't handle AVT for method
- Bug
#3379: regex-group() value is not maintained through calls of xsl:apply-templates and
xsl:apply-imports
- Bug
#3381: Spurious "unmatched ')'" error in regular expression
- Bug
#3475: Problem with SEF generated using Oxygen 19.1 "Compile XSLT Saxon 9.8" add-on
- Bug
#3499: Keys should be invalidated if the (relevant part of the) HTML page is updated
- Bug
#3500: ixsl:event() does not correctly return an empty sequence when there is no current
event
- Bug
#3501: Error when object supplied to ixsl:get() is null
- Bug
#3502: ixsl:source() does not correctly return an empty sequence when there is no global
context item
- Bug
#3544: Third argument of ixsl:call() is an array, documentation is inconsistent
- Bug
#3545: Inconsistencies using map functions on JS objects
- Bug
#3564: Check that context item is an element for ixsl:set-attribute and
ixsl:remove-attribute
- Feature
#3568: Add a way to cancel a scheduled action
- Feature
#3571: Have some equivalent of saxon:discard-document
- Bug
#3596: current-date and current-dateTime does not give the instant date/time stamp
- Bug
#3611: Handle error responses from HTTP requests
- Bug
#3670: Implement more transform options
- Bug
#3676: Implement serialization to JSON
- Bug
#3689: Problem with apply-templates in "#current" mode
- Bug
#3704: Issues with ixsl:style()
- Bug
#3718: Mishandling null, undefined, and array results from ixsl functions
- Bug
#3727: Edge browser problem for script elements dynamically added to page
- Bug
#3738: Cannot set properties to null using ixsl:set-property
- Feature
#3741: Allow users to configure message logs
- Bug
#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 9.7.0.15
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).
Changes
- 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.
Bug fixes
- Feature
#2889: Missing error trapping in Calculate
- Bug
#3268: Saxon-JS documentation app problems in Safari on iPad (and other handheld
devices)
- Bug
#3362: reverse() modifies its argument
- Bug
#3369: Incorrect test for node identity in p.genNode pattern matching
- Bug
#3370: currentGroup / currentGroupingKey
- Bug
#3377: HTML base tag ignored in stylesheetLocation and sourceLocation
- Bug
#3380: xsl:analyze-string with a regex that matches a zero-length string
- Bug
#3383: General Comparison in 1.0 compatibliity mode: cannot compare xs:string with
xs:integer
- Bug
#3386: deep-equal() fails comparing attributes
- Bug
#3393: "<" treated as entity characters within XPath.evaluate()
- Bug
#3417: unparsed-text-lines() incorrect behaviour with blank lines
- Bug
#3419: format-number() rounding issues
- Bug
#3431: non-default exponentSeparator character not interpolated
- Bug
#3440: Handling asynchronous document fetch failures
- Feature
#3441: Asynchronous fetch for a list of documents
- Bug
#3442: Problems reusing parameters after ixsl:schedule-action
- Bug
#3454: Documentation for ixsl:schedule-action/@http-request
- Bug
#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 9.7.0.15
or
later for use with Saxon-JS 1.0).
Changes
- Many more XSLT 3.0 features are now implemented. Some require Saxon 9.8 at compile
time.
See conformance
for full details. Newly implemented features include:
-
xsl:where-populated, xsl:on-empty, xsl:on-non-empty, xsl:fork
-
snapshot(), available-system-properties()
- use of initial mode
"#unnamed"
- 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
functions
- Regex character class subtraction
- Fixes for
xsl:evaluate
(default XPath namespace; support for
@as
result type restriction; support for xsl:with-param
in addition to @with-params
)
- Additions to the
SaxonJS.transform
API:
initial-function
and function-params
to allow function call
invocation; collations
to supply collations; collectionFinder
to supply collections.
- The
SaxonJS.transform()
option initial-mode
set to
"#unnamed"
can be used to force use of the unnamed mode. If initial-mode
is not set, then the default-mode specified in xsl:stylesheet
(or
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
ixsl:schedule-action
(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
documents.
Bug fixes
- Feature
#3004: Support for HTTP POST/PUT
- Bug
#3036: Saxon-JS documentation app problems in Chrome on computers with touch screens
- Bug
#3066: Specialist name() treatment of XHTML elements
- Bug
#3130: Source document has a non-absolute base-uri()
- Bug
#3131: XPath.evaluate - incorrect comparison typing for xs:QName
- Bug
#3133: xs:numeric cast not preserving value type
- Bug
#3134: map:get() key not being atomised
- Bug
#3139: Complex Content incorrectly handing text-nodes
- Bug
#3140: XPath.evaluate should check initial context-item cardinality
- Bug
#3146: system-property("xsl:supports-dynamic-evaluation") returns "no"
- Bug
#3148: xsl:evaluate doesn't support use of user-defined functions
- Bug
#3149: Constructed element node lacks xmlns="" undeclaration
- Bug
#3161: || operator in dynamic XPath does no type checking
- Bug
#3167: Problems with QName hash-codes in trieWithCollation()
- Bug
#3170: Attributes with no prefix in name get assigned 'ns'
- Bug
#3187: Printing
- Bug
#3203: Default namespace XHTML not appearing in namespace-uri-from-prefix()
- Bug
#3216: Error QNames are not ordered
- Bug
#3221: p.genPos pattern not implemented in Saxon-JS
- Bug
#3231: Default treatment of Atomic items in text-only-copy incorrect
- Bug
#3335: Lazy evaluation of sequence constructors - instructions with side effects evaluated
early
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 9.7.0.15 or later.
Changes
- For use with Saxon-JS 1.0, SEFs should be produced with Saxon-EE 9.7.0.15 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
XPath evaluation
for use with
xsl:evaluate
, and directly via the XPath
API.
- The use of collations in XPath functions is now implemented, see Conformance
for details (and restrictions).
- Known performance issues have been addressed.
Bug fixes
- Bug
#3071: Bad performance of xsl:result-document with deeply nested output content
- Bug
#3095: XPath.evaluate requires platform initialisation
- Bug
#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.
Bug fixes:
- Bug
#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 9.7.0.7
or
later, but for all the latest features use Saxon-EE 9.7.0.14 or later.
Changes
- 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
documents.
- Added support for the transform options
sourceNode
and
sourceText
, see SaxonJS.transform.
- Values for stylesheet parameters with type
map(*)
and array(*)
can now be supplied using the transform option stylesheetParams
(requires
Saxon-EE 9.7.0.14 or later). See Supplying stylesheet parameters.
- The interactive XSLT function
ixsl:apply()
is added (requires Saxon-EE
9.7.0.12 or later).
- The XSLT 3.0
xsl:iterate
and xsl:evaluate
instructions are now
implemented (requires Saxon-EE 9.7.0.12 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.
Bug fixes
- Bug
#2752: JS: nashorn references in core (browser) code
- Bug
#2796: JS: xs:date() can modify timezone for pure dates
- Bug
#2833: JS: anomalous descendant behaviour under ixsl:page()
- Bug
#2884: Registering event listeners for objects outside DOM
- Bug
#2885: Use of URI.js
- Feature
#2886: Converting JS Objects to XDM maps
- Bug
#2888: Static base-uri for in-browser exported stylesheets.
- Bug
#2890: document.createAttributeNS() deprecated - warning in Firefox
- Bug
#2891: Checksum in SEF file
- Bug
#2913: http://www.saxonica.com/saxon-js/documentation/ does not work with Edge
- Bug
#2923: Incorrect comparison for xs:numeric and NaN
- Bug
#2941: Crash when there is no context item
- Bug
#2942: Failure to specify -target:JS
- Bug
#2944: Use of xsl:sequence within copy situations is node-destructive
- Bug
#2945: for-each-group context not being preserved over context-altering steps
- Bug
#2947: Cities List example
- Bug
#2948: SEF metadata
- Feature
#2966: xsl:iterate
- Bug
#2992: treat as not testing sequence cardinality
- Bug
#3007: sourceNode or sourceText property of options argument of transform method not
used
- Bug
#3008: ixsl:query-params() does not allow for multiple values associated with a single
field
- Bug
#3012: In browser, do not always produce HTML elements in result documents when they
should be produced
- Bug
#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 9.7.0.7
or later.