Use this tag for questions specific to XSL Transformations version 3.0 and no other version.
News: Since June 8th, 2017, XSLT 3.0 is a W3C Recommendation, implemented by Saxon since the release 9.8 the same week and subsequently by the releases Saxon 9.9 and Saxon 10.8 on the Java and .NET framework platform as well as by the now stable Saxon 11.5 release now available as Saxon Java 11.5 for Java, SaxonC 11.5 for C++/C, Python, PHP and as SaxonCS 11.5 for the .NET Core 6 or 7 platform and finally since 2023 in the latest Saxon 12.0 releases for Java (HE, PE, EE), C/C++, PHP, Python (SaxonC 12.0 HE, PE, EE as well as PyPi packages saxonche, saxoncpe, saxonche). XSLT 3.0 is also largely (except streaming) implemented by the current release of Altova (XMLSpy, Raptor version since 2017 release 3 or any later release).
XSLT 3.0 introduces the following new features via elements, attributes, and expressions:
xsl:package: allows separate compilation of modular stylesheets
xsl:mode streamable="yes"/xsl:source-document streamable="yes": reads and processes a source document in streaming mode
accumulators to allow a value to be computed progressively during streamed processing of a document
xsl:iterate: iterates over the items in a sequence
xsl:merge: merges multiple input streams into a single output stream
xsl:fork: performs multiple computations in a single scan of the input data
xsl:evaluate: parses dynamically constructed strings as XPath expressions (supported by the commercial editions PE and EE of Saxon 9.8 and 9.9 but since Saxon 10 also by the open-source HE edition)
xsl:global-context-item: defines constraints on the existence and type of the global scope
xsl:assert: declares an expected result of an assertion
support for maps and for JSON<-->XML processing and transformation
support for XPath 3.0/XPath 3.0 functions and optionally for XPath 3.1/XPath 3.1 functions
Variables can now be bound in XPath using the
let
expressionFunctions are now first class values (if optional https://www.w3.org/TR/xslt-30/#hof-feature is supported, as done by the commercial editions PE and EE of Saxon 9.8 and 9.9 and then all editions of Saxon 10, 11, 12 as well as SaxonJS 2)
parse-xml, parse-xml-fragment and serialize convert between lexical and tree representations of XML
References
- XSL Transformations (XSLT) Version 3.0 Specification
- W3C XPath 3.1 Functions and Operators Specification
- Compact XPath 3.1, 3.0 and 2.0 Function Reference
XSLT 3 processors
- Saxon 9.8, 9.9, 10, 11, 12 by Saxonica, exists in the free, open-source HE edition and the commercial PE and EE editions, for 9.8 all editions are available for Java or .NET framework or C/C++, the current stable releases 10.8 and 11.5 are available for Java and .NET framework; Saxon 11.5 also for as SaxonC 11.5 for C/C++/PHP/Python. The 9.9 release Java has been cross-compiled as Saxon-C 1.2 for C/C++ with bindings to be used as a PHP extension and as a Python 3 module. The latest stable Saxon releases 10 and 11 available for Java and C/C++/Python/PHP as well as via SaxonCS for .NET 5/6/7 make
xsl:evaluate
and functions expressions and higher-order functions available in all editions. The newest release in 2022 was Saxon 11, the first for .NET Core 5 or .NET 6, using an XSLT 3.0 based transpiler approach to convert the Java code base into C# code to be compiled and built for .NET Core 5. Unfortunately SaxonCS 11 is currently only available as the EE edition. The C/C++/Python/PHP SaxonC 11.5 and the latest Java Saxon 11.5 release have been published in February 2023. The newest release is 12.0 available since January 2023 for Java, .NET 6/7 as SaxonCS, SaxonC for C/C++/PHP/Python as well as on PyPi.org for Python 3. - Altova Raptor, Altova XMLSpy (the XSLT 3.0 implementation in Altova products supports the W3C recommendations of XSLT 3.0 and XPath 3.1, except streaming in XSLT 3)
- Saxon-JS 2 is available for Node.js (
npm install saxon-js
,npm install xslt3
) and the browser - Saxon HE 11 Java has also been successfully cross-compiled with the latest IKVM to .NET 6 to be usable from .NET 6 or 7 code
Online Editors
- https://xsltfiddle.liberty-development.net/ allows testing XSLT 3 snippets using Saxon 10.6 HE and saving/sharing them.
- https://martin-honnen.github.io/xslt3fiddle/ allows testing XSLT 3 snippets using Saxon-JS 2
XSLT 3.0 support in editors and IDEs
- XSLT/XPath for Visual Studio Code
- XQuery IntelliJ Plugin
- oXygen XML Eclipse plugin
- oXygen XML editor
- Altova XMLSpy
Tuturials
Online Training
"What's New in XSLT 3.0: Part 1" -- A Pluralsight video-course (5.5h), by Dimitre Novatchev
"The Evolution of XPath: What’s New in XPath 3.0" -- A Pluralsight video-course (4.5h), by Dimitre Novatchev