SAXON home page

SAXON: History up to version 5.0

For changes since version 5.0, see changes.html

Changes in version 5.0 (1999-12-01)

XSL changes

The following changes are all made to achieve conformance with the XSLT and XPath specifications:

The following changes affect SAXON extensions:

New extension functions

The following extension functions are implemented. The conventional prefix sxf must be mapped to a namespace URI ending in "/com.icl.saxon.functions.Extensions"

Other extensions

Java API changes

Internal changes

There are changes to the package structure.

All the handling of path expressions and nodesets has been changed to use a pipelined approach rather than allocating temporary nodesets in memory. The pipeline only needs to be broken when a sort is required, or when the last() function is executed. This change has little impact on the execution time for typical stylesheets, but should greatly reduce the memory requirement for handling complex stylesheets or large documents, and also eases the load on the garbage collector in a continuous-running environment.

A new sort routine, which is faster and uses less memory, has been introduced.

The Bindery, which holds variable values at run-time, has been changed to identify variables by means of a Binding object (typically the stylesheet node containing the declaration) rather than by name.

Defects in version 4.7

4.7/001 The sample servlet ShowScene makes a call on OutputDetails.setXMLDeclaration(); this method was present in version 4.6 but is replaced in 4.7 by setOmitDeclaration(). Fix: delete the offending line (line 58) of and recompile.
4.7/002 An attribute node has a null SystemId (URI). This manifests itself when calling the document() function with the first argument being a nodeset containing an attribute node (e.g. "document(@href)"). Circumvention: assign the attribute value to a variable, or convert it to a string using the string() function. Fixed in 4.7.1
4.7/003 In the document() function, relative URLs in general do not work. Circumvention: supply an absolute URL. Fixed in 4.7.1
4.7/004 When the node set expression .//x is evaluated, the nodes are not returned in document order, but rather sorted by the document order of the parent node as major key, and the document order of the child node as minor key. This is incorrect, because it is possible for the parent of X to precede the parent of Y in document order even if X follows Y in document order. Fixed in 4.7.1
4.7/005 When there is no xsl:output element, or no xsl:output element specifies a method attribute, and the first thing output is a text node with no containing element, SAXON defaults to output method="text". The XSLT spec says it should default to XML, and output a well-formed external general parsed entity.
4.7/006 When xsl:element or xsl:attribute is used and the name includes a namespace prefix and no namespace attribute is specified, the output namespace is incorrect.
4.7/007 It is possible using xsl:attribute to create several attributes on the same output element that use the same namespace prefix to refer to different namespace URIs. This will generate illegal XML. The fix for this bug replaces the requested prefix with a synthetic one when the situation is detected.
4.7/008 In the sample extension element sql:connect, the database connection parameters are wrong. This will affect the ability to connect to any database that checks the user name and password.
4.7/009 In XML output, characters in the range x10000 to x10FFFF (surrogate pairs) are output incorrectly as two surrogate characters: this is not legal XML.
4.7/010 With the format-number() function, the localized characters for decimal-separator, grouping-separator, etc, are used in the output string but they cannot be used in the pattern. Further, the per-mille attribute name must be written as "permill".
4.7/011 A null pointer exception occurs if the second argument to the document() function is an empty node-set. (The spec doesn't say what should happen here; the fix treats it as if the second argument were omitted.)
4.7/012 If a comment or processing instruction is generated before the start of the document element, and if there is no xsl:output method defined, the comment or processing instruction is discarded and does not appear in the result document.
4.7/013 When a stylesheet is prepared once and then used repeatedly to process multiple source documents, a failure occurs if it uses global variables or parameters.

Changes in version 4.7.1 (1999-10-29)

Fixes bugs 4.7/002, 4.7/003, and 4.7/004

Changes in version 4.7 (1999-10-12)

XSL changes

Changes in version 4.6 (1999-10-08)

This version was not released, as it was completed just as the 8 October 1999 specification was released.

XSL changes

Java API changes

There are numerous changes to support the new XSL facilities. These are not listed individually.

Miscellaneous changes

Defects in version 4.5

The following bugs are fixed in version 4.6, except where stated:

4.5/001 In attribute value templates, the use of '{{' to represent an escaped '{' does not work. SAXON reports a syntax error. (Note that the use of '}}' to represent an escaped '}' was not supported in version 4.5 either, but this was by design.)
4.5/002 If the file cannot be found, SAXON reports an unspecific null pointer exception.
4.5/003 The built-in template for attribute nodes ignores the attribute rather than copying it to the output tree.
4.5/004 The standard element handler ElementCopier writes a newline to the output file after writing the element end tag.
4.5/005 SAXON 4.5 is not thread-safe. (I have made changes that fix known problems in this area, but I cannot guarantee that everything concerned with threads is now OK.)
4.5/006 The sample file play.xsl, mentioned in the documentation, was missing from the distribution. ** changes not yet applied **
4.5/007 The document() function does not work when used in a select expression in a global variable or parameter declaration
4.5/008 The "ns" (namespace) attribute of saxon:functions has no effect: extension functions must be referenced without a namespace prefix
4.5/009 If a step in a path expression contains more than one filter, and one of the filters removes all elements of the nodeset, and a subsequent filter is numeric, then an ArrayIndexOutOfBoudsException occurs at com.icl.saxon.expr.Step.applyFilters(
4.5/010 SAXON gives the wrong result when comparing a nodeset NS with a boolean B. The semantics assumed by SAXON are "exists X in NS where boolean(X) = B", whereas the correct semantics are "(exists X in NS) = B"
4.5/011 If there are several templates with the same name, xsl:call-templates chooses the first on rather than the last. The same applies to named attribute sets.
4.5/012 The use of xml:space="preserve" on a node prevents white space being stripped not only from the descendants of that node, but also from subsequent siblings of that node and their descendants.
4.5/013 The issued sample file books.xml is not valid. It contains an IDREF attribute (CODE="U") for which there is no corresponding ID attribute. A validating parser will therefore reject this document. Also, the sample stylesheet books.xsl attempts to process this attribute using the "default" attribute of xsl:value-of, which is no longer supported in SAXON 4.5

Changes in version 4.5 (1999-07-28)

Please note that many of these changes require changes to stylesheets or applications. Sorry! This is all in the interests of improved conformance with the standards.

XSL changes

Java API changes

There has been some radical surgery of parts of the code not needed for XSL: I have removed Distributor, Wanderer, support for the DOM, and the associated node implementations. Also removed Renderer, and setItemRendition() etc from Controller.

This is all in the interests of reducing complexity: this code does things that can now be done more easily using XSL.

I hope to reintroduce serial processing in a later version, in amended form.

Defects in version 4.4

The following bugs are fixed in version 4.5, except where stated:

4.4/001 generate-id() fails (null pointer exception) when applied to the document root.
4.4/002 Filter expressions using predicates at the outer level (not as part of a step) fail, with the error "Unexpected token "[" in expression". (Example: "$test[1]")
4.4/003 When using the XSL compiler, when a number is used in a boolean context (e.g. <xsl:if test="2">), the boolean condition is evaluated the wrong way round: zero is taken as true, and non-zero as false.
4.4/004 A class cast exception occurs when the argument to the count() function is not a node set.
4.4/005 After an xsl:pi element, all subsequent text is output without escaping special characters such as "&" and "<".
4.4/006 Conversion of a result tree fragment to a string does not discard the markup as it should. Conversion of result tree fragments to numbers or booleans is also incorrect.
4.4/007 The class org/ccil/cowan/sax/ParserFilter.class was omitted from saxon.jar (It can be downloaded separately John Cowan's web site, or created by compiling the source which is included in (This class is not needed with SAXON 4.5)
4.4/008 The xml:space attribute on a stylesheet node has no effect.

Changes in version 4.4 (1999-07-12)

This is a performance release: there are very few changes in functionality. The majority of changes are purely internal. Detailed changes to methods provided primarily for internal use are not listed here.

Applications should be recompiled.

Changes to XSL stylesheets

Changes to the Java API

Miscellaneous changes

Defects in version 4.3

The following bugs are fixed in version 4.4:

4.3/001 The XSL interpreter ignores xsl:strip-space and xsl:preserve-space elements
4.3/002 In xsl:attribute the name attribute cannot be an attribute value template

Future changes expected

There is no commitment to produce any future release of SAXON. However, the following changes are under consideration:

Changes in version 4.3 (1999-06-14)

Changes to expression and pattern syntax

Incompatible changes

A number of incompatible changes have been introduced to reflect the latest XSL working draft. These include:

New features in expressions and patterns

See the April 21 XSLT specification for full details. Changes include:

Changes to XSL stylesheets

Incompatible changes to XSL stylesheets

Newly-implemented XSL features

See the XSLT specification for further details. Changes include:

Changes to the Java API

Incompatible changes in the Java API

A number of incompatible changes have been made in the interests of XSL conformance.

New features in the Java API

These are largely methods that support the new XSL features.

Miscellaneous changes (environment, internal code changes)

Defects in version 4.2

The following bugs are fixed in version 4.3:

4.2/001 XSL Compiler generates "include" statements for servlet API even when servlet="N" is specified. This causes the compilation to fail under JDK 1.1.

Changes in version 4.2 (1999-04-23)

Changes to XSL stylesheets

Incompatible changes to XSL stylesheets

New XSL features

Changes to the Java API

Incompatible changes in the Java API

A number of incompatible changes have been made in the interests of XSL conformance.

New features in the Java API

These are largely methods that support the new XSL features.

Miscellaneous changes (environment, internal code changes)

Defects in version 4.1

The following bugs are fixed in version 4.2:

4.1/001 After executing xsl:for-each, the current source element is not reset, so a subsequent xsl:for-each (for example) will process the wrong element.
4.1/002 Where a qualifier is used of the form "[s1=s2]", a null pointer exception occurs if the second value is null.
4.1/003 If a template in a serial style sheet does not contain xsl:apply-templates, processing hangs indefinitely.
4.1/004 For an element that is the same element type as its previous sibling, the Distributor assumes that it can use the same element handler. This is not true if the match pattern depends on attribute values.
4.1/005 The DTDGenerator sample application fails (array index out of bounds) if it encounters a zero-length attribute

Changes in version 4.1 (1999-03-12)

Limitations of this release

I have given up trying to test each new SAXON release with every possible SAX parser and DOM implementation: there are too many, with many new releases, and on the whole the level of conformance is good. Most of the time I use either the SUN XML library, or the xp parser and Docuverse DOM. I have had problems with the latest IBM xml4j version 2, (2_0_0 and 2_0_3), I understand this is due to a parser bug and a fix is available but I haven't tried to install it. I haven't been able to download the latest ORACLE parser because of broken links on ORACLE's web site, plus excessive registration hassle.

This does mean that the IBMDOMDriver and ORACLEDOMDriver classes (now located in the com.icl.saxon.drivers package) are untested against the latest IBM and ORACLE DOM implementations.

Please let me know what parsers you are using successfully with SAXON, especially if you have to make any changes to the file or to the DOM drivers.

Changes in version 4.01 (1999-02-18)

This is an error-correction release

Please note the following restrictions:

Changes in version 4.0 (1999-02-12)

Changes in version 3.1 (1998-10-15)

Changes in version 3.03 (1998-08-27)

Changes in version 3.01

Changes in version 3.0 (1998-07-26)

Changes in version 2.0 (1998-06-16)

Michael H. Kay
2 December 1999