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 ProcessorProvides 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 Schema Awareness
XSLT 3.0 Schema AwarenessProvides 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 |
EET |
EET |
EET |
|
XSLT 3.0 Serialization
XSLT 3.0 SerializationProvides 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 Compatibility
XSLT 3.0 CompatibilityProvides XSLT 1.0 compatibility mode as defined in the XSLT 3.0 specification. If
a stylesheet
specifies Further info: XSLT 3.0 conformance SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance |
● |
● |
● |
● |
XSLT 3.0 Streaming
XSLT 3.0 StreamingIncludes 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 |
EET |
EET |
EET |
|
XSLT 3.0 Dynamic Evaluation
XSLT 3.0 Dynamic EvaluationProvides use of the XSLT 3.0 instruction Further info: XSLT 3.0 conformance SaxonJS further info: XSLT 3.0 and XPath 3.1 conformance |
● |
● |
● |
● |
XSLT 3.0 XPath 3.1 Feature
XSLT 3.0 XPath 3.1 FeatureProvides 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 Higher-Order Functions
XSLT 3.0 Higher-Order FunctionsProvides 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 |
● |
● |
● |
● |
XPath Features | Java SaxonJ | .NET SaxonCS | Native SaxonC | JavaScript SaxonJS |
XPath 3.1 Basic
XPath 3.1 BasicProvides 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 Schema Aware
XPath 3.1 Schema AwareProvides 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 |
EEV |
● |
EEV |
|
XPath 3.1 Higher-Order Functions
XPath 3.1 Higher-Order FunctionsProvides 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 |
● |
● |
● |
● |
XQuery Features | Java SaxonJ | .NET SaxonCS | Native SaxonC | JavaScript SaxonJS |
XQuery 3.1 Minimal Conformance
XQuery 3.1 Minimal ConformanceProvides 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 Schema Aware
XQuery 3.1 Schema AwareProvides 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 |
EEQ |
EEQ |
EEQ |
|
XQuery 3.1 Typed Data
XQuery 3.1 Typed DataProvides 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 |
EEQ |
EEQ |
EEQ |
|
XQuery 3.1 Static Typing
XQuery 3.1 Static TypingSaxon 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 Modules
XQuery 3.1 ModulesProvides the Module feature, which allows a query to be made up of multiple modules. Further info: XQuery 3.1 conformance |
● |
● |
● |
|
XQuery 3.1 Serialization
XQuery 3.1 SerializationProvides 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 Higher-Order Functions
XQuery 3.1 Higher-Order FunctionsProvides 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 Update 1.0
XQuery Update 1.0Saxon 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 |
EEQ |
EEQ |
EEQ |
|
XML Schema Features | Java SaxonJ | .NET SaxonCS | Native SaxonC | JavaScript SaxonJS |
XML Schema 1.0 Validation
XML Schema 1.0 ValidationSaxon 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 |
EEV |
● |
EEV |
|
XML Schema 1.1 Validation
XML Schema 1.1 ValidationSaxon 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 |
EEV |
● |
EEV |
|
Performance Features | Java SaxonJ | .NET SaxonCS | Native SaxonC | JavaScript SaxonJS |
Document projection
Document projectionThis 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 packagesXSLT 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 packagesAllows 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
|
EEV |
● |
EEV |
|
Multi-threading (XSLT)
Multi-threading (XSLT)Takes advantage of multi-core CPUs by providing automatic parallel execution of the
|
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 DTDsThe 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 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 functionsA 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 Further info: EXSLT extensions |
PE |
● |
PE |
|
EXPath extension functions
EXPath extension functionsA 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 classesAbility 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 extensionsAbility 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:
Further info: Saxon extension functions SaxonJS further info: Saxon extensions |
EEV |
● |
EEV |
|
SQL extension
SQL extensionXSLT extension functions and instructions providing access to SQL databases. Further info: Saxon SQL extension |
PE |
|
|
|
XSLT element extensibility
XSLT element extensibilityAbility 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 EnglishNumbers can be formatted as words in English. Further info: Formatting numbers |
● |
|
● |
|
Formatting dates in English
Formatting dates in EnglishDates can be formatted as words in English. Further info: Formatting dates |
● |
● |
● |
● |
Formatting numbers and dates for select languages
Formatting numbers and dates for select languagesA 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 ICUFull 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 ICUFull 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 localesSupport 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 ICUSupport 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 APISupport for sorting and comparison of strings using the Unicode Collation Algorithm
uses the
collation facilities available from the |
|
|
|
● |
Interfaces, APIs | Java SaxonJ | .NET SaxonCS | Native SaxonC | JavaScript SaxonJS |
S9API API
S9API APISaxonJ's native interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on Java. |
● |
|
|
|
.NET API
.NET APISaxonCS's interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on .NET. Further info: Saxon API for .NET |
|
● |
|
|
C++ API
C++ APISaxonC's interface for processing XSLT, XQuery, XPath, and (with Saxon-EE) XML Schema, on C++. |
|
|
● |
|
JAXP API
JAXP APIImplementations 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 APIImplementations 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 extensionInterface module that allows SaxonC to be invoked from PHP applications. |
|
|
● |
|
Python extension
Python extensionInterface module that allows SaxonC to be invoked from Python applications. |
|
|
● |
|
Support for DOM
Support for DOMAbility 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 DOMIndexing 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 XOMAbility 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 |
|
|
|
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 |
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.
Editions available for SaxonJ and SaxonC:
Enterprise Edition packages for SaxonJ, SaxonCS, and SaxonC: