Saxonica: Saxon product feature matrix

Saxon 12 product comparison (feature matrix)

This chart describes the features present in each edition of Saxon 12 available for Java, .NET, and C/C++, PHP and Python, and the latest release of SaxonJS.

Full Product descriptions are also available to download below.

For features in older versions of the products, see the relevant Feature Matrix:
Saxon 11, Saxon 10, Saxon 9.9, Saxon 9.8, Saxon 9.7, Saxon 9.6.

The table below lists product features and indicates which features are available for products on the different platforms. (See the "Product packages" box on the right for the definitions of these packages and platform availability.) If the feature is restricted to certain packages on a platform, then the table shows the minimal product package(s) required. The product packages are ordered as: PE ⊂ EEV ⊂ (EET | EEQ) ⊂ EE. For instance, this means all PE and EEV features are available with all EE packages.

'●' means the feature is available for all editions on that platform.

XSLT Features Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
XSLT 3.0 Basic Processor

XSLT 3.0 Basic Processor

Provides all mandatory features from the XSLT 3.0 specification (including try/catch, iterate, accumulators, maps, named modes, content value templates, and extended patterns, as well as features retained from XSLT 2.0).

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XSLT 3.0 Schema Awareness

XSLT 3.0 Schema Awareness

Provides a schema-aware XSLT 3.0 processor: specifically, the ability to import an XSD schema when compiling a stylesheet, to use this for type-checking, and to process and create schema-validated instance documents.

Further info: XSLT 3.0 conformance

XSLT 3.0 Recommendation (08 June 2017)

EET

EET

EET

 

XSLT 3.0 Serialization

XSLT 3.0 Serialization

Provides the serialization feature: specifically, the ability to convert the result trees produced as output of an XSLT transformation to lexical XML, or other formats including HTML, JSON, and plain text, under the control of serialization parameters defined in the stylesheet or via an external API.

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XSLT 3.0 Compatibility

XSLT 3.0 Compatibility

Provides XSLT 1.0 compatibility mode as defined in the XSLT 3.0 specification. If a stylesheet specifies version="1.0", this causes certain constructs to behave in a way that retains the XSLT 1.0 behavior.

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XSLT 3.0 Streaming

XSLT 3.0 Streaming

Includes additional features of the XSLT 3.0 specification that enable streaming (processing of documents that are too large to fit in memory).

Further info: XSLT 3.0 conformance

XSLT 3.0 Recommendation (08 June 2017)

EET

EET

EET

 

XSLT 3.0 Dynamic Evaluation

XSLT 3.0 Dynamic Evaluation

Provides use of the XSLT 3.0 instruction xsl:evaluate, which allows dynamic evaluation of XPath expressions.

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XSLT 3.0 XPath 3.1 Feature

XSLT 3.0 XPath 3.1 Feature

Provides full use of XPath 3.1 features, including XPath 3.1 functions, and maps and arrays.

Note: Saxon supports XPath 3.1 unconditionally in XSLT 3.0 stylesheets, it does not offer a processing mode in which XPath is restricted to version 3.0.

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XSLT 3.0 Higher-Order Functions

XSLT 3.0 Higher-Order Functions

Provides higher-order functions: specifically, the ability to use functions as values, including dynamic function calls, inline functions, partial function application, and the standard higher-order functions defined in the XPath 3.1 function library.

Further info: XSLT 3.0 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XSLT 3.0 Recommendation (08 June 2017)

XPath Features Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
XPath 3.1 Basic

XPath 3.1 Basic

Provides all XPath 3.1 features which do not require schema-awareness or higher-order functions. This includes an implementation of maps and arrays, and support for JSON, as well as language constructs retained from earlier XPath versions.

Further info: XPath 3.1 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XPath 3.1 Recommendation (21 March 2017)

XPath 3.1 Schema Aware

XPath 3.1 Schema Aware

Provides schema-awareness: specifically, any use of source documents with type annotations, and any use of XPath expressions that contain the names of schema components such as element declarations and types, other than the built-in types.

Further info: XPath 3.1 conformance

XPath 3.1 Recommendation (21 March 2017)

EEV

EEV

 

XPath 3.1 Higher-Order Functions

XPath 3.1 Higher-Order Functions

Provides higher-order functions: specifically, the ability to use functions as values, including dynamic function calls, inline functions, partial function application, and a library of built-in higher-order functions.

Further info: XPath 3.1 conformance

SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance

XPath 3.1 Recommendation (21 March 2017)

XQuery Features Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
XQuery 3.1 Minimal Conformance

XQuery 3.1 Minimal Conformance

Provides Minimal Conformance (including try/catch and "group-by", as well as language features retained from earlier XQuery versions) as defined in section 5 of the XQuery 3.1 specification.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

 

XQuery 3.1 Schema Aware

XQuery 3.1 Schema Aware

Provides the Schema Aware feature. This enables a query to import an XSD schema and use it for type checking, and to validate instance documents.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

EEQ

EEQ

EEQ

 

XQuery 3.1 Typed Data

XQuery 3.1 Typed Data

Provides the Typed Data feature. This enables a query to accept input data that has been validated against a schema.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

EEQ

EEQ

EEQ

 

XQuery 3.1 Static Typing

XQuery 3.1 Static Typing

Saxon does not implement the Static Typing feature.

The static typing feature treats an expression as an error unless it is guaranteed type-safe at compile time. Without this feature, type checking is performed dynamically at run time. Saxon does compile time analysis to minimize the amount of dynamic checking that is needed.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

 

 

 

 

XQuery 3.1 Modules

XQuery 3.1 Modules

Provides the Module feature, which allows a query to be made up of multiple modules.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

 

XQuery 3.1 Serialization

XQuery 3.1 Serialization

Provides the Serialization feature. This allows the output of a query to be serialized as lexical XML, or in other formats including HTML, JSON, and plain text, under the control of serialization parameters contained either in the query itself, or supplied externally.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

 

XQuery 3.1 Higher-Order Functions

XQuery 3.1 Higher-Order Functions

Provides the Higher-Order Function feature. This provides the ability to use functions as values, including dynamic function calls, inline functions, partial function application, and a library of built-in higher-order functions.

Further info: XQuery 3.1 conformance

XQuery 3.1 Recommendation (21 March 2017)

 

XQuery Update 1.0

XQuery Update 1.0

Saxon provides all the features defined in the XQuery Update 1.0 specification. The implementation allows XQuery Update 1.0 syntax to be mixed with XQuery 3.1 syntax.

XQuery Update in SaxonCS is offered "as is": the feature is present, but has not been extensively tested.

Further info: XQuery Update 1.0 conformance

XQuery Update 1.0 Recommendation (17 March 2011)

EEQ

EEQ

EEQ

 

XML Schema Features Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
XML Schema 1.0 Validation

XML Schema 1.0 Validation

Saxon includes a complete implementation of XML Schema 1.0. This provides the ability to process XSD 1.0 schema documents and use them to validate instance documents. Note that Saxon does not expose the full PSVI, as required by the conformance rules in the XSD 1.0 Recommendation. Also includes Saxon extension functions to provide access to a compiled schema.

From Saxon 10, the Saxon schema processor accepts XSD 1.1 syntax unconditionally. XSD 1.0 schemas are processed according to the rules of the XSD 1.1 specification. This offers a very high level of backwards compatibility, except in a few areas where the XSD 1.0 rules were unclear and have been clarified in the XSD 1.1 recommendation.

Further info: XML Schema 1.0 conformance

XML Schema 1.0 Recommendation (28 October 2004)

EEV

EEV

 

XML Schema 1.1 Validation

XML Schema 1.1 Validation

Saxon includes a complete implementation of XML Schema 1.1. This provides the ability to process schema documents that use the new features of XSD 1.1, and use them to validate instance documents. More specifically, in the language of section 2.4 of the specification, it is a General-Purpose Web-Aware Validator. Also includes Saxon extension functions to provide access to a compiled schema.

Further info: XML Schema 1.1 conformance

XML Schema 1.1 Recommendation (05 April 2012)

EEV

EEV

 

Performance Features Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
Document projection

Document projection

This feature performs static analysis of a query and uses this to filter a document during loading, so that the only parts held in memory are those parts needed to answer the query. For simple queries on large documents this can give substantial memory savings.

Further info: Document projection

EEQ

EEQ

EEQ

 

Export stylesheet packages

Export stylesheet packages

XSLT 3.0 packaging allows stylesheet modules to be independently compiled and distributed, and provides much more "software engineering" control over public and private interfaces, and the like. The ability to save packages in compiled form ("stylesheet export file", SEF) gives much faster loading of frequently used stylesheets, and also enables in-browser execution using SaxonJS.

Further info: Compiling a stylesheet

SaxonJS further info: Exporting stylesheets for SaxonJS

EET

EET

EET

Import stylesheet packages

Import stylesheet packages

Allows the importing of stylesheet packages in compiled form. Possible with all editions provided the package only uses features available in that edition.

Further info: Compiling a stylesheet

SaxonJS further info: Exporting stylesheets for SaxonJS

Multi-threading (XPath)

Multi-threading (XPath)

Takes advantage of multi-core CPUs by providing automatic parallel execution of the collection() function.

EEV

EEV

 

Multi-threading (XSLT)

Multi-threading (XSLT)

Takes advantage of multi-core CPUs by providing automatic parallel execution of the xsl:result-document instruction; plus an extension attribute saxon:threads to allow multi-threaded execution of xsl:for-each instructions under the control of the stylesheet author.

EET

EET

EET

 

Optimizer (Basic)

Optimizer (Basic)

The Basic optimizer provided with all Saxon editions provides a wide range of static and dynamic optimizations including full pipelining of list operations, lazy evaluation of variables, elimination of redundant sorting operations, etc.

Optimizer (Advanced)

Optimizer (Advanced)

The Advanced optimizer provides the wide range of static and dynamic optimizations featured in the Basic optimizer - including full pipelining of list operations, lazy evaluation of variables, elimination of redundant sorting operations, etc. - and additionally provides join optimization, inlining of variables and functions, just-in-time compilation of template rules, and optimized searching of large sets of template rules, where feasible.

EET EEQ

EET EEQ

EET EEQ

 

Reading W3C schemas and DTDs

Reading W3C schemas and DTDs

The W3C web server routinely rejects requests for commonly-referenced files such as the DTD for XHTML, causing parsing failures. In response to this, Saxon now includes copies of these documents within the issued JAR/DLL file, and recognizes requests for these documents, satisfying the request using the local copy.

 

Streaming (XPath and XQuery)

Streaming (XPath and XQuery)

Provides saxon:stream(), an extension function to allow large documents to be processed without holding the whole document in memory.

Further info: Streaming XML documents

EEV

EEV

 

Streaming (XSLT)

Streaming (XSLT)

Allows large documents to be processed without holding the whole document in memory. Provides the streaming features of the XSLT 3.0 specification.

Further info: Streaming XML documents

EET

EET

EET

 

Extensibility Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
EXSLT extension functions

EXSLT extension functions

A selection of EXSLT extension functions are provided (in the modules Common, Dates and Times, Math, Random, and Sets), as listed in the documentation.

Only the exslt:node-set function is available in SaxonCS.

Further info: EXSLT extensions

PE

PE

 

EXPath extension functions

EXPath extension functions

A selection of EXPath extension functions are provided (in the modules Archive, Binary, and File), as listed in the documentation.

Further info: EXPath extensions

PE

PE

 

Extensibility using custom classes

Extensibility using custom classes

Ability to write extension functions (for use in XSLT, XQuery, or XPath) by implementing a Saxon-defined interface and registering the implementation with the Saxon Configuration.

Further info: Extensibility

 

 

Extensibility using reflexion (Java)

Extensibility using reflexion (Java)

Ability to access existing Java methods dynamically and invoke them as extension functions by means of dynamic loading and reflexion.

Further info: Extensibility

PE

 

 

 

Extensibility using reflexion (JavaScript)

Extensibility using reflexion (JavaScript)

Ability to access existing JavaScript objects and functions dynamically.

SaxonJS further info: Saxon interactive extensions

 

 

 

Event handling extensions

Event handling extensions

Ability to write template rules which respond to user interaction events in the browser.

SaxonJS further info: Handling user input events

 

 

 

Saxon extension functions (Basic)

Saxon extension functions (Basic)

Extension functions, as listed in the documentation, in the Saxon namespace. The Basic level excludes extension functions that depend on streaming or schema-awareness.

Further info: Saxon extension functions

SaxonJS further info: Saxon extensions

PE

PE

Saxon extension functions (Advanced)

Saxon extension functions (Advanced)

Extension functions, as listed in the documentation, in the Saxon namespace. The Advanced level includes those that depend on streaming or schema-awareness: saxon:schema(), saxon:stream(), and saxon:validate().

Further info: Saxon extension functions

SaxonJS further info: Saxon extensions

EEV

EEV

 

SQL extension

SQL extension

XSLT extension functions and instructions providing access to SQL databases.

Further info: Saxon SQL extension

PE

 

 

 

XSLT element extensibility

XSLT element extensibility

Ability to implement XSLT extension instructions by implementing a Saxon-defined interface and registering the implementation with the Saxon Configuration.

Further info: Writing XSLT extension instructions

PE

 

 

 

Localization Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
Formatting numbers in English

Formatting numbers in English

Numbers can be formatted as words in English.

Further info: Formatting numbers

 

 

Formatting dates in English

Formatting dates in English

Dates can be formatted as words in English.

Further info: Formatting dates

Formatting numbers and dates for select languages

Formatting numbers and dates for select languages

A set of numberers provide support for formatting numbers and dates as words in some other European languages: Danish (da), German (de), French (fr), Belgium French (fr-BE), Italian (it), Dutch (nl), Belgium Flemish (nl-BE), and Swedish (sv). These numberers are included in Saxon-PE/EE, and are available as installable plug-ins for SaxonJ-HE.

Further info: Numberings for selected languages

 

 

 

Formatting numbers using ICU

Formatting numbers using ICU

Full support for formatting numbers as words in different languages is provided using the ICU4J library.

Further info: Numbers and dates from ICU

PE

 

 

 

Formatting dates using ICU

Formatting dates using ICU

Full support for formatting dates as words in different languages is provided using the ICU library for the relevant platform (ICU4J for SaxonJ, and ICU4N for SaxonCS).

Further info: Numbers and dates from ICU

PE

 

 

Sorting and collations using JDK locales

Sorting and collations using JDK locales

Support for sorting and comparison of strings using the Unicode Collation Algorithm uses the collation facilities available directly from the JDK.

Further info: Sorting and collations

 

 

Sorting and collations using ICU

Sorting and collations using ICU

Support for sorting and comparison of strings using the Unicode Collation Algorithm uses the collation facilities available from the ICU library for the relevant platform (ICU4J for SaxonJ, and ICU4N for SaxonCS).

Further info: Unicode Collation Algorithm

PE

 

 

Sorting and collations using JavaScript API

Sorting and collations using JavaScript API

Support for sorting and comparison of strings using the Unicode Collation Algorithm uses the collation facilities available from the Intl.Collator JavaScript API.

 

 

 

Interfaces, APIs Java SaxonJ .NET SaxonCS Native SaxonC JavaScript SaxonJS
S9API API

S9API API

SaxonJ's native interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on Java.

 

 

 

.NET API

.NET API

SaxonCS's interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on .NET.

Further info: Saxon API for .NET

 

 

 

C++ API

C++ API

SaxonC's interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on C++.

 

 

 

JAXP API

JAXP API

Implementations of the standard JAXP interfaces for XSLT transformation, XPath evaluation, and (with Saxon-EE) XML Schema validation.

Further info: JAXP API conformance

 

 

 

XQJ API

XQJ API

Implementations of the standard XQJ interfaces for XQuery processing. Note that the XQJ interfaces have been removed from the standard download of Saxon-HE because the Oracle specification license is not open source, but they are available on request.

Further info: XQJ API conformance

PE

 

 

 

PHP extension

PHP extension

Interface module that allows SaxonC to be invoked from PHP applications.

 

 

 

Python extension

Python extension

Interface module that allows SaxonC to be invoked from Python applications.

 

 

 

Support for DOM

Support for DOM

Ability to use a DOM (Document Object Model) for the input and output of transformations and queries. On the .NET platform this includes the System.Xml DOM classes.

Further info: Object models

SaxonJS further info: Nodes

 

Optimized support for DOM

Optimized support for DOM

Indexing of a supplied DOM tree to provide fast navigation (the Domino Model).

Further info: Domino tree model

EEV

 

 

 

Support for JDOM2, AXIOM, DOM4J, and XOM

Support for JDOM2, AXIOM, DOM4J, and XOM

Ability to use a JDOM2, AXIOM, DOM4J, and XOM for the input or output of transformations and queries. Note that the code for these interfaces is open source and can be compiled to work with Saxon-HE, but it does not come packaged with the Saxon-HE download.

Further info: Object models

PE

 

 

 

Product descriptions

The table below contains links to the full product descriptions for each edition of Saxon 12 available for Java, .NET, and C/C++, PHP and Python, and the latest release of SaxonJS.

Edition Java .NET Native JavaScript
HE
SaxonJ-HE 12
SaxonC-HE 12
SaxonJS 2
PE
SaxonJ-PE 12
SaxonC-PE 12
EE
SaxonJ-EE 12
SaxonCS-EE 12
SaxonC-EE 12
EET
SaxonJ-EET 12
SaxonCS-EET 12
SaxonC-EET 12
EEQ
SaxonJ-EEQ 12
SaxonCS-EEQ 12
SaxonC-EEQ 12
EEV
SaxonJ-EEV 12
SaxonCS-EEV 12
SaxonC-EEV 12

Packages by platform

Java: SaxonJ 12 first released Jan 2023.

.NET: SaxonCS 12 for .NET 6 available only as the Enterprise Edition, first released Jan 2023.

Native: SaxonC 12 first released Jan 2023, built from SaxonJ 12.

JavaScript: SaxonJS 2 does not require a commercial license.

Product packages

Editions available for SaxonJ and SaxonC:

  • HE: Saxon Home Edition (open source)
  • PE: Saxon Professional Edition

Enterprise Edition packages for SaxonJ, SaxonCS, and SaxonC:

  • EE: Saxon Enterprise Edition
  • EET: Enterprise Edition Transformation package - includes enterprise features for XSLT and Schema processing only. No XQuery enterprise features. (In the online shop, select the "No XQuery" language option.)
  • EEQ: Enterprise Edition Query package - includes enterprise features for XQuery and Schema processing only. No XSLT enterprise features. (In the online shop, select the "No XSLT" language option.)
  • EEV: Enterprise Edition Validation package - includes enterprise features for Schema processing only. No XSLT and XQuery enterprise features. (In the online shop, select the "No XSLT" and "No XQuery" language options.)