Saxonica: Latest releases

Saxon 9.9

Saxon 9.9.0.2 maintenance release for Java, released 7 November 2018.

Saxon 9.9.0.1, the first release in this series for Java, released 27 September 2018.

Product Headlines

Saxon 9.9 is the first major release for 15 months. For the first time, there are no new W3C standards to chase, though we've inevitably found a few forgotten corners where conformance work was needed. On the whole though, this release has given us an opportunity to think about what users need other than W3C conformance. There's a long list of enhancements in the change log at Change History, but here are what we consider the top ten:

  1. There's a significant extension of the s9api interface to provide XDM tree navigation. Under the hood, this takes advantage of Java 8 streams. As an alternative to using XPath expressions such as XdmValue selectedBooks = xpath.evaluate("//book[author='" + key + "']", doc); you can now write doc.select(descendant("book").where(eq(child("author"), key)).asXdmValue();

    There's a usability benefit because you're only using one language (Java) rather than two (Java+XPath), and there's a performance benefit because it cuts out the expensive XPath parsing stage. It also reduces the risk of injection attacks, and is likely to detect more programming errors at compile time. To make this work, we're now requiring a baseline of Java 8.

  2. Tuple types extend the XPath type system to provide better type checking of complex data structures. If you're representing employee data as a map, then instead of declaring it as map(xs:string, item()*), you can now declare it as tuple(empNr: xs:string, dob: xs:date, name: element(personalName)). The result is more readable code, better type checking (meaning faster debugging), and better performance. The extension has been implemented in such a way that it can be used without compromising the portability of your code to other XSLT 3.0 processors.

  3. Arrays, like maps, now have an internal implementation that means updates to individual entries in the array don't require the whole array to be copied, giving substantial performance improvements for applications that use arrays heavily.

  4. Improvements have been implemented to the TinyTree data structure to further reduce memory usage, and to enable zero-cost copying of subtrees from one tree to another in the course of a transformation.

  5. A number of powerful new extension instructions and functions are provided to enable easier query and update of the trees of maps and arrays that typically arise when processing JSON input. For example, the instruction <saxon:deep-update root="json-doc('empData.json')" select="?*[?customer='Jones']?orders" action="array:append($order)"/> reads and parses a JSON file, adds a new order for a selected customer, and returns a data structure representing the modified data set, which can then be serialized using the JSON output method.

  6. Streamed accumulators, as defined in the XSLT 3.0 Recommendation, are extended with a new feature: by annotating an accumulator rule with the attribute saxon:capture="yes", an entire element from the source document can be captured as the value of the accumulator. For example this can be used to capture the header section at the start of a document and make it available for reference while the rest of the document is processed using pure streaming.

  7. The updating primitives of the XQuery Update specification are now available for use in XSLT via Saxon-defined extension instructions. These make many simple updates (such as "delete all comments") easier to express and faster in execution, without sacrificing the declarative nature of the XSLT language. For a future release we are thinking about new data structures that make such updates very efficient, avoiding the need to copy all the data in the source document that has not changed.

  8. The XPath lookup operator "?" has been exploited to provide easier call-out from XSLT and XQuery to Java code. For example, if the variable $connection holds a SQL database connection obtained using the sql:connect() extension function, then the expression $connection?isClosed() calls the Java method isClosed defined on the underlying connection object.

  9. The ability for an XSLT stylesheet to produce "raw" output (for example, a sequence of integers rather than an XML document), as envisaged in the XSLT 3.0 specification, is now much better supported in the Saxon API. A new RawDestination is available to define the destination of a transformation. Internally, there has been a significant tidying-up of the interface between the transformation engine and a destination such as a Serializer.

  10. There have been further improvements to diagnostics on type errors. This applies especially when passing complex data structures between templates and functions using maps. In general, instead of telling you that the expected type was X but the supplied value V was an instance of Y, the message now tells you in what way V fails to conform to the type X: for example, if X is map{xs:string, node()} and V contains an entry whose key is of type xs:untypedAtomic, then the error message in 9.8 would tell you that V is an instance of map{xs:anyAtomicType, node()}, while 9.9 will tell you that V is not an instance of map{xs:string, node()} because it contains a key whose type is xs:untypedAtomic and whose value is (say) "Idaho".

For further details, see the Saxon 9.9 Feature Matrix.

Upgrading

Saxon-EE and Saxon-PE licenses issued after will work with the current maintenance release. For those with earlier licenses, simply enter the existing license number when you reorder, and we will refund its residual value, based on when it was purchased (see Upgrades for more details).

Changes and fixes

Changes in the functionality of the product in successive releases are documented in the Change History section of the documentation. Bug fixes are documented in the bug tracker database; you can search for bugs cleared in a particular maintenance release.

Saxon 9.8

Saxon 9.8.0.15 maintenance release for Java and .NET, released 6 November 2018.

Saxon 9.8.0.14 maintenance release for Java and .NET, released 25 July 2018.

Saxon 9.8.0.12 maintenance release for Java and .NET, released 9 May 2018.

Saxon 9.8.0.11 maintenance release for Java and .NET, released 19 March 2018.

Saxon 9.8.0.10 maintenance release for Java and .NET, released 16 March 2018.

Saxon 9.8.0.8 maintenance release for Java and .NET, released 5 February 2018.

Saxon 9.8.0.7 maintenance release for Java and .NET, released 20 December 2017.

Saxon 9.8.0.6 maintenance release for Java and .NET, released 30 October 2017.

Saxon 9.8.0.5 maintenance release for Java and .NET, released 5 October 2017.

Saxon 9.8.0.4 maintenance release for Java and .NET, released 16 August 2017.

Saxon 9.8.0.3 maintenance release for Java and .NET, released 6 July 2017.

Saxon 9.8.0.2 maintenance release for Java and .NET, released 21 June 2017.

Saxon 9.8.0.1, the first release in this series for Java and .NET, released 8 June 2017.

Product Headlines

For further details, see the Saxon 9.8 Feature Matrix.

Saxon 9.7

Saxon 9.7.0.21 maintenance release for Java and .NET, released 5 December 2017.

Saxon 9.7.0.20 maintenance release for Java and .NET, released 28 July 2017.

Saxon 9.7.0.19 maintenance release for Java and .NET, released 7 July 2017.

Saxon 9.7.0.18 maintenance release for Java and .NET, released 5 April 2017.

Saxon 9.7.0.15 maintenance release for Java and .NET, released 7 February 2017.

Saxon 9.7.0.14 maintenance release for Java and .NET, released 2 December 2016.

Saxon 9.7.0.13 maintenance release for Java and .NET, released 28 November 2016.

Saxon 9.7.0.12 maintenance release for Java and .NET, released 22 November 2016.

Saxon 9.7.0.11 maintenance release for Java and .NET, released 2 November 2016.

Saxon 9.7.0.10 maintenance release for Java and .NET, released 21 October 2016.

Saxon 9.7.0.8 maintenance release for Java and .NET, released 1 September 2016.

Saxon 9.7.0.7 maintenance release for Java and .NET, released 15 July 2016.

Saxon 9.7.0.6 maintenance release for Java and .NET, released 17 June 2016.

Saxon 9.7.0.5 maintenance release for Java and .NET, released 12 May 2016.

Saxon 9.7.0.4 maintenance release for Java and .NET, released 11 March 2016.

Saxon 9.7.0.3 maintenance release for Java, released 18 February 2016.

Saxon 9.7.0.2 maintenance release for Java, released 19 January 2016.

The first release in this series, Saxon 9.7.0.1 for Java, was issued 27 November 2015.

Product Headlines

For further details, see the Saxon 9.7 Feature Matrix.

Saxon 9.6

Saxon 9.6.0.10 maintenance release for Java and .NET, released 2 December 2016.

Saxon 9.6.0.9 maintenance release for Java and .NET, released 26 May 2016.

Saxon 9.6.0.8 maintenance release for Java and .NET, released 10 December 2015.

Saxon 9.6.0.7 maintenance release for Java and .NET, released 5 August 2015.

Saxon 9.6.0.6 maintenance release for Java and .NET, released 5 June 2015.

Saxon 9.6.0.5 maintenance release for Java and .NET, released 27 March 2015.

Saxon 9.6.0.4 maintenance release for Java and .NET, released 14 January 2015.

Saxon 9.6.0.3 maintenance release for Java and .NET, released 2 December 2014.

Saxon 9.6.0.2 maintenance release for Java and .NET, released 13 November 2014.

The first release in this series, Saxon 9.6.0.1 for Java, was issued 2 October 2014.

Product Headlines

For further details, see the Saxon 9.6 Feature Matrix.

Saxon 9.5

Saxon 9.5.1.10 maintenance release for Java and .NET, released 15 April 2015.

Saxon 9.5.1.8 maintenance release for Java and .NET, released 31 October 2014.

Saxon 9.5.1.6 maintenance release for Java and .NET, released 10 July 2014.

The first release in this series, 9.5.0.1, was issued 16 April 2013.

Product Headlines

Saxon/C 1.1

Saxon/C 1.1.0, the first release in this series for C/C++/PHP platforms, released 27 September 2017.

APIs are available to run XSLT 3.0, XQuery 3.1, XPath 3.1, and Schema Validation from C/C++ or PHP applications. Saxon/C 1.1.0 is built from the Saxon 9.8.0.4 Java product using the Excelsior JET tool (version 11.3 MP1).

Saxon-C is available in the standard Saxon range of editions: the open-source product Saxon-HE/C, and the commercial products Saxon-PE/C and Saxon-EE/C. Separate downloads are available to run on Linux, Mac OS X, and Windows. For further information see Saxon/C.

Saxon/C 1.0

Saxon/C 1.0.2 maintenance release for C/C++ platforms, released 5 August 2016.

Saxon/C 1.0.1 maintenance release for C/C++ platforms, released 7 April 2016.

Saxon/C 1.0.0 first major release for C/C++ platforms, released 5 February 2016.

APIs are available to run XSLT 2.0/3.0, XQuery 1.0/3.0, XPath 2.0/3.0 and Schema Validation from C/C++ or PHP applications. Saxon/C 1.0 is built from the Saxon 9.6.0.9 Java product using the Excelsior JET tool (version 11 MP3).

Saxon-C 1.0 is available in the standard Saxon range of editions: the open-source product Saxon-HE/C, and the commercial products Saxon-PE/C and Saxon-EE/C.

Saxon-JS

Saxon-JS 1.2.0 maintenance release 5 October 2018.

Saxon-JS 1.1.0 maintenance release 9 May 2018.

Saxon-JS 1.0.2 maintenance release 5 October 2017.

Saxon-JS 1.0.1 maintenance release 21 July 2017.

Saxon-JS 1.0 first full release 7 February 2017.

Saxon-JS allows execution of XSLT 3.0 stylesheets in the browser. It is a run-time only product; you first need to compile the stylesheet using Saxon-EE (9.7.0.15 or later). The compiled form (called a "stylesheet export file") is an XML document in a Saxon-specific format, so you can prepare the stylesheet on a development workstation and then deploy it anywhere on the web.

Saxon-JS is a replacement for Saxon-CE. It shares with Saxon-CE the ability to write interactive applications, where template rules with modes such as "ixsl:onclick" respond to user interaction. Unlike Saxon-CE, it's a new product written in pure JavaScript, which makes it much smaller and more manageable.

Saxon-JS at its first release has almost complete coverage of XPath 3.1 (including maps, arrays, and JSON), plus support for many XSLT 3.0 features such as try/catch and text value templates. To keep it small, it omits most optional features including schema awareness, streaming, and higher order functions.

For further information see Saxon-JS.

Saxon Client Edition 1.1

Note: Saxon-CE is no longer in development. As of 2017, the product has been superseded by Saxon-JS, the XSLT 3.0 run-time in JavaScript.

Saxon-CE 1.1 is open-source, released 22 February 2013.

Saxon Client Edition achieved its first production release 1.0 in June 2012, marking the culmination of effort in porting and then wrapping the Saxon XSLT 2.0 processor core into a product fit and ready for the browser, in the era of HTML5 and the dynamic web.

Saxon-CE features interactive event-driven templates and works in any modern browser with JavaScript enabled - including mobile devices.

In February 2013 Saxonica announced that the product would be made open-source, in the hope that this would enable the technology to become mainstream, allowing every developer to produce the same kind of quality interactive applications that pioneer users of the 1.0 release have shown to be possible.

For further information see Saxon-CE.

Quick links:


On this page: