SAXON home page

SAXON: Change History

For changes up to version 5.0, see history.html

Changes in version 5.3.2 (2000-05-12)

This is an error-clearance release: it clears defects found in version 5.3.1

Other changes:

Defects in version 5.3.1

5.3.1/001 When stylesheet output is directed to a DocumentHandler or ContentHandler, the content of all output documents other than the first is not notified. This may happen when multiple output files are generated using saxon:output, or when the same PreparedStyleSheet is executed more than once. FIXED in 5.3.2
5.3.1/002 Text content may be lost when xsl:copy-of is used to copy from a result tree fragment to an output destination defined with method="html" indent="yes". FIXED in 5.3.2
5.3.1/003 Under certain conditions passing a parameter in xsl:with-param that is a node-set-expression containing a variable reference will fail when the parameter value is referenced. FIXED in 5.3.2
5.3.1/004 When a template calls itself recursively within an xsl:for-each instruction, tail recursion is invoked but doesn't work correctly. The effect is that the loop is obeyed only once and with the wrong current node. FIXED in 5.3.2
5.3.1/005 A union expression whose operands are individual attribute nodes of the same element is evaluated incorrectly. For example count(@a | @b) returns 1. The attributes are wrongly regarded as duplicate nodes. FIXED in 5.3.2
5.3.1/006 When a namespace is excluded from the result tree using xsl:exclude-result-prefixes, but is then used on a literal result element, the request to exclude it should be ignored, to ensure that the result is well-formed XML following the Namespace rules. Currently the request to exclude the namespace is ignored if the namespace is used on the element containing the xsl:exclude-result-prefixes attribute, but not if it is used on an inner element. FIXED in 5.3.2
5.3.1/007 When a number is converted to a string, XPath requires that "after the decimal point there must be as many, but only as many, more digits as are needed to uniquely distinguish the number from all other IEEE 754 numeric values". Saxon may display more digits than this. FIXED in 5.3.2.
5.3.1/008 the code in ContentImpl, which tries to avoid calling StringBuffer.substring() when using a JDK earlier than 1.2, fails with a JDK earlier than 1.1. FIXED in 5.3.2.
5.3.1/009 disable-output-escaping="yes" has no effect when writing to a result tree fragment. FIXED in 5.3.2. (This property of the text is retained in the result tree fragment, and used when the text is copied to the final result tree using . It is still ignored if the RTF is subsequently converted to a string or to a node-set.)

Changes in version 5.3.1 (2000-04-20)

This is an error-clearance release: it clears defects found in version 5.3 (see below), also 5.2/021

Other changes:

Defects in version 5.3

5.3/001 When elements containing attributes are written to a result tree fragment, and then copied the tree using xsl:copy-of, the attribute set used for the last element is applied to each of the elements. FIXED in 5.3.1
5.3/002 saxon:preview works only in conjunction with saxon:output to produce one output file per preview element; it is not possible to append the output from each preview element to the master output file. (This restriction was actually documented, but it was sufficiently nasty to be considered a bug). FIXED in 5.3.1
5.3/003 The attribute [xsl:]exclude-result-prefixes="#default" has no effect. FIXED in 5.3.1
5.3/004 The priorities of the components in a union pattern may be calculated incorrectly, for example in the pattern "text() | *" both components are given priority +0.5 instead of -0.5. FIXED in 5.3.1
5.3/005 If xml:namespace-alias is used in an included or imported stylesheet module, it is ignored. FIXED in 5.3.1
5.3/006 Saxon does not report an error when xsl:attribute is used incorrectly to create an attribute named "xmlns" or "xmlns:xxx". FIXED in 5.3.1
5.3/007 The HTML output method occasionally applies URL escaping to an attribute that is not a URL, for example (with the Microsoft JVM) it does so with <h2 style="clear: all">. (The algorithm used was probabilistic). FIXED in 5.3.1
5.3/008 When xsl:copy-of is used to copy a result tree fragment to the final tree, no attempt is made to remove redundant namespace declarations. FIXED in 5.3.1.
5.3/009 The parent of a namespace node is the element on which the namespace was declared, not the element on whose namespace axis the namespace node lies. FIXED in 5.3.1
5.3/010 When an element containing the namespace undeclaration xmlns="" is copied, the undeclaration will not be reproduced in the result tree. This applies whether the copying is done using xsl:copy, xsl:copy-of, or by copying a literal result element. FIXED in 5.3.1
5.3/011 In the absence of an explicit <xsl:output method="html">, the output is not recognised as HTML if there are any namespace declarations in scope on the outermost element or if the first element node is preceded by a comment or processing instruction node. FIXED in 5.3.1

Changes in version 5.3 (2000-04-14)

The SaxonServlet sample servlet code has been changed so that the source=x and style=y parameters in the URL request are now interpreted relative to the servlet context. This means that specifying say "style=/styles/styleone.xsl" in the URL will locate the stylesheet in this file relative to the root directory for the web server.

The command-line interface (com.icl.saxon.StyleSheet) can now process an entire directory. Simply specify a directory name as the source file, and another directory as the output destination, for example: java com.icl.saxon.StyleSheet -o outdir sourcedir style.xsl . All the files are processed using the same stylesheet, unless the -a option is used, in which case each one is processed using the stylesheet identified in its own xml-stylesheet processing instruction.

xsl:call-template is extended so the name attribute can be an attribute value template, allowing the name of the called template to be decided at run-time. To activate this extension, the xsl:call-template element must have the extra attribute saxon:allow-avt="yes".

Unary minus in XPath expressions now changes the sign of the number rather than subtracting it from zero. This means that "-0" is now negative zero rather than positive zero. The specification does not actually define this, it says only that "-" is a subtraction operator, but James Clark has stated that this is what the spec should have said: it is intuitive, and consistent with Java and Javascript. The change is very unlikely to affect real applications.

The namespace for extension functions can now consist simply of the fully-qualified Java class name; there is no need for a leading "/". E.g. xmlns:math="java.lang.Math"

The type pseudo-attribute of the <?xml-stylesheet?> processing instruction may now take the value "text/xsl", for compatibility with Microsoft. The official values "text/xml" and "application/xml" are also supported (these do not currently work with Microsoft MSXML).

Added URIResolver class. You can create a subclass of URIResolver, and register it using PreparedStyleSheet.setURIResolver(), to handle URI formats other than standard URLs, including private conventions to get data from sources such as databases. The URIResolver is called to handle URIs appearing xsl:include, in xsl:import, and in the document() function. For a given URI, it returns an InputSource. If it returns an ExtendedInputSource, it can also dictate which XML parser should be used for this specific URI.

Changed ParserManager so that if ParserManager.properties cannot be found, it displays a message on System.err, and then continues using the built-in Ælfred parser.

The architecture is now based on SAX2 rather than SAX1. Where possible, SAX1 interfaces have been retained, for example it is still possible to specify a SAX1 parser for input and a DocumentHandler for output. However, some lesser-used interfaces have been deprecated and some removed altogether. The Builder now acts as a SAX2 ContentHandler, no longer as a SAX1 DocumentHandler. Recompiling any Java application will reveal any calls that are affected. Where a SAX1 parser is supplied, it is now used via the SAX2 ParserAdapter class.

The version of Ælfred supplied with the product is now based on David Brownell's version, which includes a number of bug fixes and performance improvements relative to the original Microstar parser.

There have been many internal changes to achieve improved performance. These should have no impact on existing stylesheets, and in most cases they should have no impact on Java applications. There are some changes to the classes NodeSetValue and FragmentValue, which may be used by extension functions, but the principal methods are unchanged. For performance, it is best to retrieve the nodes in a node-set as an array or as a NodeEnumeration rather than as a Vector. NodeSetValue is now an abstract class: any code that constructs a node-set should now use NodeSetExtent instead.

Here is a summmary of the main internal performance changes:

The overall performance improvement is in most cases around a factor of two.

Defects in version 5.2

5.2/001 In HTML output with indenting, the TEXTAREA element should be treated as a fixed-format element. FIXED.
5.2/002 The AElfred XML parser which is included as the default parser in Saxon validates parameter entity definitions within comments or ignored sections of the external DTD. FIXED.
5.2/003 Preview mode does not work. It causes a null pointer exception if invoked. As a result, the sample play.xsl stylesheet does not work. If you want to run this sample, delete the saxon:preview element at line 11, and add <xsl:apply-templates select="." mode="preview"> at line 102. FIXED.
5.2/004 The AElfred XML parser which is included as the default parser in Saxon traps exceptions occurring in the parser call-back code. This results in a lack of diagnostics. FIXED (by changes to the embedded AElfred code: the problem still occurs if the standard AElfred parser is used).
5.2/005 If the method attribute of xsl:output is defaulted, and text is output using disable-output-escaping="yes" before the first start tag has been written, or immediately following the first start tag, then the request to disable output escaping is ignored. FIXED.
5.2/006 Comparing @A=false() when attribute A doesn't exist may return false; it should return true. FIXED.
5.2/007 AElfred is not handling Unicode surrogate pairs correctly. FIXED (but only in the version of AElfred issued with Saxon).
5.2/008 Calling xsl:message (or xsl:comment etc) resets the media type to text/plain. FIXED.
5.2/009 Stray text characters at the top level of an included or imported stylesheet cause a ClassCastException to be reported. FIXED.
5.2/010 The omit-xml-declaration attribute of xsl:output and saxon:output has no effect. FIXED.
5.2/011 Saxon fails with a null pointer exception if you try to locate the root node of the document when the current node is not a descendant-or-self of the document element, or if there is no document element. The "document element" here is defined as the last element child of the root. FIXED.
5.2/012 The key() and id() functions do not work correctly if the source document is not well-formed, for example if the root has more than one element child. FIXED.
5.2/013 In a Location Path Pattern such as A[@a=1]/B, where there is a boolean predicate on a component other than the last, the predicate is evaluated with the wrong node as context node, and may therefore give the wrong result. FIXED.
5.2/014 A Null Pointer Exception occurs if the document() function is called while the context node is a transient node. A transient node is one that is created as part of a node-set using the extension functions node-set(), range(), or tokenize(). FIXED.
5.2/015 String Index Out Of Bounds exception occurs if there is an unmatched "{" and also an unmatched quote within an attribute value template. FIXED
5.2/016 The base URI of the nodes in a result tree fragment should be the base URI of the variable-binding element (this affects what happens if you use the document() function with a relative URI, and the context node is a node in a result tree fragment, accessed using the node-set() extesion function). FIXED
5.2/017 If you supply an Emitter to xsl:output it complains that it is not a DocumentHandler. (Emitter is no longer a subclass of DocumentHandler). FIXED
5.2/018 The sample Java applications assume the use of "\" as a separator in filenames. FIXED
5.2/019 self::text() returns an empty set when the current node is a text node (this also applies to any other unnamed node). As a result, the test <xsl:if test="self::text()"> returns false when the current node is a text node. FIXED
5.2/020 xsl:namespace-alias only works if it appears earlier in the stylesheet than the literal result element that needs to be aliased. FIXED
5.2/021 Every element should have a namespace node for the "xml" namespace. It doesn't. FIXED in 5.3.1

Changes in version 5.2 (2000-02-12)

Extension functions

The mechanism for calling extension functions has changed, to improve compatibility with xt and Xalan. Static methods are unaffected. Methods with no state that are NOT declared static should either be declared static, or the class must now be explicitly instantiated using the function new(). Instance-level (non-static) methods are now called by supplying the instance as an extra first argument. See extensibility.html for more details. As a result of these changes, the following stylesheet provided as an example in the xt documentation now works unchanged with SAXON:


<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:date="http://www.jclark.com/xt/java/java.util.Date">

<xsl:template match="/">
  <html>
    <xsl:if test="function-available('date:to-string') and function-available('date:new')">
      <p><xsl:value-of select="date:to-string(date:new())"/></p>
    </xsl:if>
  </html>
</xsl:template>

</xsl:stylesheet>

SAXON-supplied extension functions can now be called using the standard SAXON namespace URI, "http://icl.com/saxon", instead of using "/com.icl.saxon.functions.Extensions". This means the same namespace can be used for SAXON extension elements and extension functions. The old URI will continue to work.

Several new extension functions are available, described in detail in extensions.html:

Output formatting

The XML output method now uses abbreviated syntax for empty element tags (e.g. <EMPTY A="a"/>)

The XML and HTML output methods avoid outputting unnecessary character references, e.g. for quotes occurring in character data.

The HTML output method now uses entity references for characters in the range 160-255, even when the character is available in the selected encoding. Characters above this range are output as native UTF-8 characters if the encoding is UTF-8, or as character references otherwise. This approach is a compromise and I recognise that it will not please everyone. The idea behind it is to try and avoid using UTF-8 characters for English and Western European languages, where many users will have keyboards and editors that cannot handle them, but to use them for non-European languages, as users working in those languages are more likely to be able to cope with UTF-8.

The indentation algorithms have changed, for both XML and HTML: the result is more careful about where it adds whitespace, though it is not necessarily more attractive. On saxon:output you can also now specify the amount of indentation, e.g. indent="2" indents by two spaces. The default is three.

The HTML output method now escapes non-ASCII characters in URI attributes using the %HH escape convention.

XSLT conformance

For conformance reasons, the method attribute of xsl:output may no longer take the values "fop" or a Java class name. Instead, these values must be qualified by a namespace prefix. It does not matter what the namespace URI is, so long as it exists. For example, change method="fop" to method="saxon:fop", and method="com.me.MyEmitter" to method="saxon:com.me.myEmitter".

For conformance reasons, the ability to specify the attributes version, extension-element-prefixes, and exclude-result-prefixes on the xsl:template element is withdrawn. These attributes are only allowed on literal result elements and extension elements.

Embedded stylesheets are now supported via the new EmbeddedStylesheet class.

The <?xml-stylesheet?> processing instruction is now supported, via a new method getAssociatedStylesheet() on the DocumentInfo class.

Command line (com.icl.saxon.Stylesheet)

Options may now be specified in any order.

The new -a option will process a specified source document using the stylesheet identified in its <?xml-stylesheet?> processing instruction. No stylesheet should be specified on the command line. The href pseudo-attribute of the xml-stylesheet processing instruction must either be the URL of a freestanding stylesheet in an external document, or a fragment identifier matching the id attribute of an embedded stylesheet within the same document. The type pseudo-attribute should be "text/xml"

The -t option on the command line now outputs product and version identification as well as timing information.

The command line may include the options "-x parser" to specify the parser for source files, and "-y parser" to specify the parser for stylesheet modules. In both cases the parser is the fully qualified class name of a class that implements the SAX org.xml.sax.Parser interface.

Java API

The ExtendedInputSource class is extended to allow a DOM Document to be identified as the input source (for either the source document or the stylesheet).

ExtendedInputSource now has a setParser() interface defining which SAX Parser is to be used to process this input source. This is now the preferred way of specifying a non-default parser; previous methods are deprecated.

Saxon and Instant Saxon now include a bundled version of the AElfred XML parser, modified to notify comments to the application in the same way that James Clark's xp does, i.e. as Processing Instructions with a null target. The ParserManager.properties file has been changed so this is now the default parser.

Defects in version 5.1

Bug 5.0/015 (see below) is fixed in version 5.2. This has required some changes in internal data structures: included and imported stylesheets are no longer grafted into the tree for the principal stylesheet, but are now linked to it using a separate data structure.

5.1/001 In saxon:output, when the next-in-chain attribute is used, a null pointer exception occurs in com.icl.saxon.style.SAXONOutput. FIXED.
5.1/002 If the stylesheet makes a call on an extension function that cannot be loaded, an error is reported even if the function is not called. This means that testing the availability of the function using function-available() is no use. FIXED.
5.1/003 In a template rule whose pattern contains the single predicate "[1]" (for example, match="para[1]"), the predicate is ignored when matching the pattern: it will match every element including the first. FIXED.
5.1/004 A path expression that incorrectly ends with a "/" (for example "A/B/") causes a null pointer exception. FIXED.
5.1/005 xsl:namespace-alias only works if the namespace prefix used in the literal result element is the same as the stylesheet-prefix used in the xsl:namespace-alias element. It should work if both prefixes refer to the same namespace URI. FIXED.
5.1/006 The order of top-level elements is not adjusted when an included stylesheet imports another stylesheet. FIXED.
5.1/007 An element that includes the attribute xmlns="" will have a namespace node corresponding to this (with prefix and URI both null). This attribute cancels the default namespace declaration, it should not be regarded as a namespace declaration in its own right. FIXED.
5.1/008 SAXON does not validate that all the attributes on an element in the source document have distinct names after taking namespace declarations into account. FIXED.
5.1/009 A null pointer exception occurs if a text node is written to a result tree fragment having the root node as its parent and an element node as its preceding sibling. FIXED.
5.1/010 When using the default decimal format, the format-number() function outputs NaN as Unicode #xFFFD, not as "NaN". FIXED.
5.1/011 SAXON detects when a stylesheet directly includes or imports itself, but when the recursion is indirect (e.g. a.xsl includes b.xsl which includes a.xsl), the failure is detected only by running out of memory. FIXED.
5.1/012 Newline characters in output attribute values are not written as character references. See note at end of XSLT section 7.1.3. FIXED.
5.1/013 The key() function fails with a null pointer exception when the current node is in a document loaded using the document() function. FIXED.
5.1/014 saxon:output may fail with a null pointer exception if it has no method attribute and if it is called within an element such as xsl:variable that redirects the current output destination. FIXED.
5.1/015 The node-set "//*" is not sorted correctly into document order. FIXED.
5.1/016 With the Microsoft Java VM, the string() function, whether used explicitly or implicitly, converts numbers whose magnitude is above 10,000,000 or below 0.001 to a string in scientific floating point notation. (The original fix for 5.0/035 did not work with the Microsoft JVM). FIXED.
5.1/017 When running in a locale that does not use English-language number formatting conventions, the string() function, whether used explicitly or implicitly, displays the number zero as "0,0.". FIXED.
5.1/018 Outputting an attribute using xsl:attribute fails if the value contains a non-ASCII character. Also, xsl:comment, xsl:message, and xsl:processing-instruction may fail in the same way. FIXED.
5.1/019 The base URI for a processing instruction is incorrectly assumed to be the same as the base URI of its parent node. FIXED.
5.1/020 With xsl:output method="html" and the default of indent="yes", Saxon may generate white space in the HTML that affects the appearance in the browser; for example when the output is <A HREF=""><IMG SRC=""></A>. FIXED.
5.1/021 A null pointer exception occurs in com.icl.saxon.ParentEnumeration when the context node is the root node and the parent axis is followed (e.g. the expression "/.."). FIXED.
5.1/022 The example extension element SQLConnect is not thread-safe, it modifies the stylesheet tree. FIXED.
5.1/023 Files referenced using xsl:include and xsl:import are parsed using the default parser specified in ParserManager.properties, not the parser specified using setParser() for the principal stylesheet module. The same is true for document() which should use the source document parser. FIXED.
5.1/024 If the method attribute on xsl:output is omitted, the cdata-section-elements attribute is ignored. FIXED.
5.1/025 Within an element that is output as CDATA, the character sequence "]]>" is handled incorrectly if it appears as the last three characters of a text node. FIXED.
5.1/026 The HTML output method does not escape non-ASCII characters in URI attribute values as recommended in the HTML 4.0 recommendation. FIXED.

Changes in version 5.1 (1999-12-17)

XSL changes

There are no XSL changes in this version other than the bug fixes listed below.

API changes

Saxon extensions

Internal changes

Defects in version 5.0

About a dozen of the defects listed below were found by using the LotusXSL test suite, available from www.alphaworks.ibm.com, and comparing SAXON's results with the published LotusXSL results. I am grateful to IBM for making this test suite available.

5.0/001 In xsl:output and saxon:output, with method="html", when doctype-public is specified and doctype-system is omitted, no DOCTYPE declaration is output. This is the correct behaviour for method="xml" but not for method="html". FIXED.
5.0/002 In xsl:sort, attributes such as order and data-type are not interpreted as attribute value templates. FIXED
5.0/003 With html output, an attribute of the form x="x" (where the value of the attribute is the same as its name) is abbreviated where it should not be, e.g. <input name="name"> is output as <input name>. FIXED.
5.0/004 With the IBM Linux Java VM, encoding="UTF-8" is not recognized, and fails with an IllegalArgumentException. FIXED (but untested).
5.0/005 When the TEXT output method encounters a node other than a text node in the result tree, it should ignore it. Instead it reports an error. FIXED
5.0/006 When writing a CDATA section to an XML output file, characters that aren't supported in the current encoding should cause the CDATA section to be interrupted by a character reference. This doesn't happen. FIXED
5.0/007 In TEXT output, characters that aren't supported in the selected encoding should cause an error to be signalled. Instead, they are represented in the output using an XML character reference. FIXED
5.0/008 If xsl:number uses format="A.1" and there is only one number to be output, it is output as "A." rather than "A". Also, the final punctuation token isn't output if there are fewer numbers than tokens. FIXED
5.0/009 If a top-level xsl:param or xsl:variable appears in the stylesheet before the first xsl:output element, the stylesheet will produce no output. (There are also related problems associated with multiple xsl:output elements, details not investigated). FIXED
5.0/010 SAXON reports an error if two ID attributes in a document have the same value (which can only happen if the document is invalid). The XPath spec (5.2.1) says the second ID value should be ignored. FIXED
5.0/011 By default, white-space nodes in the source document are stripped. They should be preserved. FIXED
5.0/012 SAXON throws an IllegalArgumentException and prints a stack trace when the format pattern supplied to format-number() is invalid. The spec doesn't define the error handling behaviour here but the current output is messy. FIXED
5.0/013 SAXON reports an error if two xsl:decimal-format elements have the same name; the spec says this is OK so long as they're compatible. FIXED
5.0/014 If xsl:output specifies method="text" and indent="yes", no error is reported, and the output disappears into a black hole. Also, if method="xml" or "html" and indent="yes", any text output after the last end tag is lost. FIXED
5.0/015 Where qualified names are generated and validated at run-time, for example when the name attribute of xsl:element is an AVT, and when they appear within an included or imported stylesheet, the namespace declarations that are checked include the principal xsl:stylesheet element but not the xsl:stylesheet element of the included/imported stylesheet. FIXED in 5.2
5.0/016 The use-attribute-sets attribute is not allowed on the xsl:copy element. FIXED.
5.0/017 The substring() function can fail with an index out of range exception if the input string is zero-length or if the start position is beyond the end of the string. FIXED.
5.0/018 The expanded syntax for the "attribute::" axis doesn't work (the abbreviated syntax @ is fine). FIXED.
5.0/019 The substring() function gives incorrect results when one of the arguments is NaN or infinite. FIXED.
5.0/020 A filter expression does not always sort the nodes into document order before applying a positional filter. For example, (ancestor::*)[1] finds the innermost ancestor instead of the outermost. FIXED.
5.0/021 The ancestor-or-self:: and descendant-or-self:: axes always include the "self" node even when it does not match the required node type or name. FIXED.
5.0/022 The descendant axis may return incorrect results when the context node has no descendants. FIXED.
5.0/023 The pattern "node()" matches any node. It should only match a node that is the child of another node, that is, an element, text node, comment, or processing instruction. FIXED.
5.0/024 If the match pattern in an xsl:key definition matches attribute nodes, the attribute nodes are not indexed and will not be found when the key is used. FIXED.
5.0/025 xsl:number level="any" ignores the "from" pattern unless the relevant node also matches the "count" pattern. FIXED.
5.0/026 When name() is used to find the name of an attribute node that was accessed by name in the stylesheet, the prefix of the returned name is the namespace prefix that was used for this URI in the stylesheet, not the prefix that was used in the source document. FIXED.
5.0/027 Saxon outputs a newline character after the XML-declaration / text declaration. This is of no consequence when the output is treated as document entity, but it is a significant character when the output is treated as an external general parsed entity. FIXED.
5.0/028 When xsl:attribute is used with an unprefixed name and a non-null namespace, the generated attribute name is in the default namespace rather than the namespace requested. FIXED.
5.0/029 The string-value of an element node or of a root node includes the concatenation of not just the descendant text nodes, but the descendant comment and processing instruction nodes as well. FIXED.
5.0/030 The string-length function requires an argument. According to the spec, the argument is optional and defaults to the string-value of the current node. FIXED.
5.0/031 Variable declarations (but not references) cause the variable name to be incorrectly qualified with the default namespace URI. A default namespace URI is also used incorrectly to qualify various other names of stylesheet objects, e.g. modes and keys. FIXED.
5.0/032 The URI for the built-in XML namespace is incorrect. It should be "http://www.w3.org/XML/1998/namespace". The only effect is that namespace-uri() applied to a node that uses this namespace (e.g. an xml:space attribute) gives the wrong answer. FIXED.
5.0/033 The default priority for patterns such as "//X" is wrong. It is calculated as if the pattern were simply "X". For example, the default priority of "//*" is calculated as -0.5 when it should be +0.5. FIXED.
5.0/034 The round() function handles special values incorrectly. Special values include NaN, infinity, negative zero, numbers between -0.5 and -0.0, and numbers outside the range of a Java long integer. FIXED.
5.0/035 The string() function, whether used explicitly or implicitly, converts numbers whose magnitude is above 10,000,000 or below 0.001 to a string in scientific floating point notation. FIXED.

Michael H. Kay
12 May 2000