XSLT 2.0 implementation

It is now possible to specify both an initial named template and a source document on the command line. The initial template is specified with the -it option, the source document using the new -s option.

On the command line, it is now possible to set the value of a stylesheet parameter to a zero-length string by writing param=.

Saxon reports the new error condition XTDE0045 if the initial mode requested on initiating a transformation does not exist. Saxon previously handled this as if the mode existed but with no matching templates, that is, the built-in template rule (or the rule for mode="#all") would be invoked. This reflects a late change in the specification.

The error code returned when an invalid QName is passed to the type-available() function has changed from XTDE1425 to XTDE1428.

Serialization error SERE0008 is now reported when character maps are used to generate a character that cannot be represented in the selected encoding.

The unparsed-text() function, when reading a resource from an HTTP connection, now accepts gzip encoding. This means that the server can send the file in compressed form, for decompression on the client, whereas it would otherwise be decompressed on the server before transmission. This can save substantially on network costs. Surprisingly, Xerces does not appear to do the same thing when the doc() function is used. This means that calling saxon:parse(unparsed-text($uri)) can sometimes be significantly faster than doc($uri)). (It's possible to replicate this logic in a user-written URIResolver. I'm reluctant to put it in the standard URIResolver because the XML parser needs to see the HTTP headers in order to make its decisions about encoding. However, I've put a hook in the standard URIResolver that allows subclassing to make this easier.)