version 7.9


On this page On other pages
What is Saxon?
Technical Support
Historical Note
Conditions of Use
Changes in this release
Using XSLT Stylesheets
Using XQuery
XSLT Elements
XPath 2.0 Expression syntax
XPath 2.0 Functions
XSLT Pattern syntax
Standards Conformance
Saxon Extensions
The SQL Extension
Extensibility mechanisms
Java API Overview
Sample applications

Please note: a copy of the documentation on this site is also included in the download file. On occasions the on-line version may be more up-to-date. The download file also includes full API documentation, which is not present on the web site: see the doc/api directory.

Saxon 7.9 fixes bugs, implements a number of features from the Working Drafts that were previously omitted, and prepares the ground for the release of a schema-aware version of the product.

Release 7.9 is the latest installment of my progressive implementation of the new XPath 2.0, XSLT 2.0, and XQuery 1.0 specifications.

The product is aligned with the working drafts published on 12 November 2003, though a few features are not yet implemented. This version is designed to act as a basic (non-schema-aware) XSLT and XQuery processor. A schema-aware version of the product is planned: this will be a commercial product available from Saxonica Limited.

As always, changes are listed in changes.html

Saxon 7.x is now used for production applications by many users. The code is proving stable and reliable. However, you need to be aware that the specifications are still subject to change, and that new Saxon releases will track the changing specifications with no concessions to backwards compatibility.

If you are looking for complete stability, the preferred version for production use is Saxon 6.5.3, which implements XSLT 1.0 and XPath 1.0.

Saxon 7.9 appears to be around 25% faster than Saxon 6.5.2, though the results vary widely for different stylesheets.

Saxon 7.9 requires Java JDK 1.4

I now use the IDEA development environment from IntelliJ for Saxon development. Many thanks to IntelliJ for sponsoring this, and I can thoroughly recommend the product.

What is Saxon?

The Saxon package is a collection of tools for processing XML documents. The main components are:

So you can use Saxon by writing XSLT stylesheets, by writing XQuery queries by writing Java applications, or by combinations of the approaches.

Saxon implements the XSLT 1.0 recommendation, including XPath 1.0, in its entirety. Saxon 7.x also implements most of the features defined in the XSLT 2.0, XPath 2.0, and XQuery 1.0 working drafts, in particular:

Saxon does not yet implement all of XSLT 2.0, XPath 2.0, or XQuery 1.0. The most notable omission is support for XML Schema data typing. Most of the important built-in types are supported, but not user-defined types. Development of a schema-aware version of Saxon is well advanced; this will be available as a commercial product from Saxonica Limited.

In addition, Saxon provides an extensive library of extension elements and extension functions, all implemented in conformance with the XSLT Recommendation to ensure that portable stylesheets can be written. These include the EXSLT extension libraries common, sets, math, and dates-and-times. Many of these extensions were pioneered in Saxon and have since become available in other products.

These functions are in general accessible from XQuery as well as XSLT, except where they depend on stylesheet information.

Saxon also provides an API allowing a Java application to execute XPath and XQuery expressions and process the results. The XPath API is modelled on the proposed DOM Level 3 API, but adapted to the requirements of XPath 2.0. A separate API is available for XQuery 1.0, reflecting differences in the way the context is set up.

Historical Note

Saxon is essentially a one-man project: I have done almost all the development myself, except for a small number of routines which I "borrowed" from other open source products, and a few add-ons contributed by users.

I originally wrote Saxon to support an internal project in ICL, and ICL continued to sponsor development of Saxon until my departure from the company in January 2001. However, it was never a supported ICL product. From 2001 through 2003 I worked for Software AG, who continued to sponsor the development of Saxon as an open source product.

In March 2004 I founded Saxonica Limited to provide ongoing development and support of Saxon as a commercial venture. My intent is to continue to produce the basic (non-schema-aware) version of Saxon as an open source product, while at the same time delivering professional services and additional modules (including a schema-aware processor) as commercial offerings.

This version of Saxon is available entirely without support or warranty, and with no commitments to any future releases.

The name Saxon was chosen because originally it was a layer on top of SAX. Also, it originally used the Ælfred parser (among others); Ælfred of course was a Saxon king...

Please read the Conditions of Use.

Technical Support

Saxon comes with no warranty and no formal technical support service.

If you have questions, however, you can usually get an answer by raising them on the Saxon discussion list at http://lists.sourceforge.net/lists/listinfo/saxon-help.

Once registered, you can post messages to saxon-help@lists.sourceforge.net.

If you hit something that looks like a bug, please check the known errors on the Saxon project pages at SourceForge. Also check the list archives.

If the query relates to the XSLT/XPath language rather than Saxon itself, it is better to use the XSL-list: check first that the query isn't already covered in the FAQ. Other useful sites for XSLT information are www.xslt.com, www.xmlsoftware.com and www.jenitennison.com.

Help forums for XQuery are less active at the moment, for details see the XQuery home page at http://www.w3.org/XML/Query


Please see the file changes.html for details of all changes in this release.

The full Saxon distribution includes source and object code, documentation, and sample applications.

To install the product, all you need to do is to unzip the supplied distribution file into a suitable directory.

Saxon can be used either from the command line, or from a Java application, using the JAXP 1.2 API which is included as a standard feature of JDK 1.4. Object code is issued as a JAR file, saxon7.jar, which you must include on your class path.

Saxon no longer includes a built-in XML parser: by default it uses the XML parser supplied with the Java VM. But you can use it with a different XML parser if you wish. To do this from the command line, specify the required parser using the -x or -y options; from the Java API, set the name of the parser class as an attribute of the TransformerFactory object.

User documentation, covering both the XSLT and Java interfaces, is included in the download in the form of extensive javadoc specifications. Be sure to read the package summaries, which give an overview in the form of a user guide. In addition there is an introductory overview.


The following software must be installed separately, it is not included with the Saxon download.

Saxon has been tested successfully in the past with a wide variety of parsers including Xerces, Lark, SUN Project X, Crimson, Piccolo, Oracle XML, xerces, xml4j, and xp. Use of a SAX2-compliant parser is now mandatory. All the relevant classes must be installed on your Java CLASSPATH.

Saxon's DOM interface has been tested with the Crimson parser included as standard in Sun's JDK 1.4 platform and with the Xerces 2.5.0 DOM implementation.

Because Saxon is run from the command line, you might find it useful (under Microsoft Windows) to have a text editor with better command-line support than the standard DOS window. I use jEdit, which is an open source product with a wide-selection of optional plug-ins.


An index of all currently-available versions of Saxon is on the home page at SourceForge: see http://saxon.sf.net/

Michael H. Kay
7 March 2004

Personal home page: http://homepage.ntlworld.com/michael.h.kay

My home page displays an email address which can be used to bypass my spam filters