EXPath extensions

EXPath is a more recent initiative to define a standardized set of extension functions and extension elements that can be used across different XSLT and XQuery processors.

Saxon supports the EXPath file module since release 9.5. Since 9.6 the binary and archive modules are supported too. Note that the zip module was withdrawn at 9.5.1 and is now replaced by archive and that some of the functions of file changed between 9.5 and 9.6 as result of specification changes.

Details of the functions supported (with some additional information about the Saxon implementation) can be found in the main Function library.

The EXPath file module

The file module provides a set of functions to examine and manipulate the local file system. For the specification of the file module see EXPath File Module.

All functions in the file module are implemented.

Note that many of the functions in this module have side-effects, and therefore need to be used with care to ensure that they are called the right number of times, and in the right order. The best way of achieving this is to imagine that a function like file:write() produces an invisible result, and that this invisible result needs to be inserted into the final result of the query or stylesheet. So, for example, if <body>...</body> is an element being written to the result tree, then the function call <body>{file:write(...)}</body> will always be evaluated exactly once. By contrast, a call appearing as the initializer of a variable (for example in let $x := file:write(...) return ...) might be evaluated multiple times or not at all, depending on how the variable is actually used.

A good way to invoke functions with side-effects is to use the saxon:do extension instruction: for example <saxon:do action="file:create-dir('temp')"/>. This is because instructions within a sequence constructor are always evaluated sequentially, in the order written.

Functions in the EXPath file module use file paths that are specified as being relative to the "current working directory". If the Java system property expath.base.directory is present, this is taken as the current working directory. In other cases, Saxon interprets the file name using the rules of the Java method File.getCanonicalFile().

On Windows, a file name starting "//" or "\\" is interpreted as a UNC file name. In particular, the function file:path-to-uri(name) converts //server/p/q/a.xml to file://server/p/q/a.xml - that is, the server part of the UNC name becomes the authority part of the URI.

The EXPath binary module

The binary module defines a library of functions for manipulating binary data and converting between binary data and string and numeric forms. For the specification of the binary module see EXPath Binary Module. The specification has been stabilised at a Version 1.0 status so the functions can be considered stable.

All functions in the binary module are implemented and tested. Note that this module does not provide binary file i/o - functions from the EXPath file module should be used for such operations.

The EXPath archive module

The archive module defines facilities for reading, creating and manipulating content arranged into archive (ZIP, JAR) collections. For the specification of the archive module see EXPath Archive Module.

Most functions in the archive module are implemented and tested. Note that this module does not provide file i/o of archives directly - functions from the EXPath file module should be used for such operations, or are used indirectly by the archive-file system conversion functions.

Two groups of the archive module functions exist - one using element structures, the other using maps - for details see Using map types to describe entries and options. Note that mechanisms for describing options and properties through elements and attributes are not yet finalised. If you are using XPath 3.0 then we suggest strongly that you use the map-based function forms (which have names ending in -map), as their specification is much more likely to be stable, and the functions are easier to use.

Other EXPath modules

Implementations of other EXPath modules may be available from third parties.