The list on this page indicates which XPath 2.0 functions are implemented in this Saxon release, and any restrictions in the current implementation.
Functions defined in the XSLT 2.0 specification are not currently listed.
fn:add-timezone-to-date( date $srcval) => date
** Not yet implemented **
fn:add-timezone-to-date( date $srcval, dayTimeDuration $timezone) => date
** Not yet implemented **
fn:add-timezone-to-dateTime( dateTime $srcval) => dateTime
** Not yet implemented **
fn:add-timezone-to-dateTime( dateTime $srcval, dayTimeDuration $timezone) => dateTime
** Not yet implemented **
fn:add-timezone-to-time( time $srcval) => time
** Not yet implemented **
fn:add-timezone-to-time( time $srcval, dayTimeDuration $timezone) => time
** Not yet implemented **
fn:avg(item* $srcval) => double?
fn:base-uri(node $srcval) => anyURI?,returns String
fn:boolean(item* $srcval) => boolean
fn:ceiling(double? $srcval) => double?
fn:codepoints-to-string(integer* codes) => string
fn:collection(string $srcval) => node*
** Not yet implemented **
fn:compare(string? $comparand1, string? $comparand2) => integer?
fn:compare(string? $comparand1, string? $comparand2, anyURI $collationLiteral) => integer?
Note: In Saxon, the collation is represented as a string
fn:concat(string $arg1, ...) => string
fn:contains(string? $operand1, string? $operand2) => boolean?
Note: Currently implemented by comparing Unicode code-points
fn:contains(string? $operand1, string? $operand2, anyURI $collationLiteral) => boolean?
** Not yet implemented **
fn:context-item() => item?
** Not yet implemented **
fn:copy(node? $srcval) => node?
** Not yet implemented **
fn:count(item* $srcval) => unsignedInt
Note: Currently returns an integer, not an unsignedInt
fn:current-date() => date
fn:current-dateTime() => dateTime
fn:current-time() => time
fn:data(node $srcval) => atomic value*
fn:deep-equal(node $parameter1, node $parameter2) => boolean
fn:deep-equal(node $parameter1, node $parameter2, anyURI $collation) => boolean
Note: Untested
fn:distinct-nodes( node* $srcval) => node*
fn:distinct-values( item* $srcval) => item*
** Not yet implemented **
fn:distinct-values( item* $srcval, anyURI $collationLiteral) => item*
** Not yet implemented **
fn:document(item* $srcval1) => node*
fn:document(item* $srcval1, node* $srcval2) => node*
fn:empty(item* $srcval) => boolean
fn:ends-with(string? $operand1, string? $operand2) => boolean?
Note: Currently compares string using Unicode codepoint matching
fn:ends-with(string? $operand1, string? $operand2, anyURI $collationLiteral) => boolean?
** Not yet implemented **
fn:error()
** Not yet implemented **
fn:error(item $srcval)
** Not yet implemented **
fn:escape-uri(string $uri-part, boolean $escape-reserved) => string
fn:exists(item* $srcval) => boolean
fn:expanded-QName( string $paramURI, string $paramLocal) => QName
fn:false() => boolean
fn:floor(double? $srcval) => double?
fn:get-day-from-date( date? $srcval) => integer?
fn:get-day-from-dateTime( dateTime? $srcval) => integer?
fn:get-days-from-dayTimeDuration( dayTimeDuration? $srcval) => integer?
** Not yet implemented **
fn:get-dayTimeDuration-from-dateTimes( dateTime $srcval1, dateTime $srcval2) => dayTimeDuration
** Not yet implemented **
fn:get-hours-from-dateTime( dateTime? $srcval) => integer?
fn:get-hours-from-dayTimeDuration( dayTimeDuration? $srcval) => integer?
** Not yet implemented **
fn:get-hours-from-time( time? $srcval) => integer?
fn:get-local-name-from-QName( QName? $srcval) => string?
fn:get-minutes-from-dateTime( dateTime? $srcval) => integer?
fn:get-minutes-from-dayTimeDuration( dayTimeDuration? $srcval) => integer?
** Not yet implemented **
fn:get-minutes-from-time( time? $srcval) => integer?
fn:get-month-from-date( date? $srcval) => integer?
fn:get-month-from-dateTime( dateTime? $srcval) => integer?
fn:get-months-from-yearMonthDuration( yearMonthDuration? $srcval) => integer?
** Not yet implemented **
fn:get-namespace-from-QName( QName? $srcval) => anyURI?
fn:get-seconds-from-dateTime( dateTime? $srcval) => decimal?
fn:get-seconds-from-dayTimeDuration( dayTimeDuration? $srcval) => integer?
** Not yet implemented **
fn:get-seconds-from-time( time? $srcval) => decimal?
fn:get-timezone-from-date( date? $srcval) => string?
fn:get-timezone-from-dateTime( dateTime? $srcval) => string?
fn:get-timezone-from-time( time? $srcval) => string?
fn:get-year-from-date( date? $srcval) => integer?
fn:get-year-from-dateTime( dateTime? $srcval) => integer?
fn:get-yearMonthDuration-from-dateTimes( dateTime $srcval1, dateTime $srcval2) => yearMonthDuration
** Not yet implemented **
fn:get-years-from-yearMonthDuration( yearMonthDuration? $srcval) => integer?
** Not yet implemented **
fn:id(IDREF* $srcval) => element*
Note: Implemented according to the XPath 1.0 specification
fn:idref(string* $srcval) => element*
** Not yet implemented **
fn:if-absent(node? $node, anySimpleType $value) => anySimpleType*
** Not yet implemented **
fn:if-empty(node? $node, anySimpleType $value) => anySimpleType*
** Not yet implemented **
fn:index-of(item* $seqParam, item $srchParam) => unsignedInt*
** Not yet implemented **
fn:index-of(item* $seqParam, item $srchParam, anyURI $collationLiteral) => unsignedInt*
** Not yet implemented **
fn:input() => node*
** Not yet implemented **
fn:insert(item* $target, decimal $position, item* $inserts) => item*
fn:item-at(item* $seqParam, decimal $posParam) => item?
Note: Currently returns an empty sequence rather than raising an error if the index is out of range
fn:lang(string $testlang) => boolean
fn:last() => unsignedInt?
fn:local-name() => string
fn:local-name(node? $srcval) => string
fn:lower-case(string? $srcval) => string?
fn:matches(string? $input, string? $pattern) => boolean?
fn:matches(string? $input, string? $pattern, string? $flags) => boolean?
fn:max(item* $srcval) => anySimpleType?
fn:max(item* $srcval, anyURI $collationLiteral) => anySimpleType?
** Not yet implemented **
fn:min(item* $srcval) => anySimpleType?
fn:min(item* $srcval, anyURI $collationLiteral) => anySimpleType?
** Not yet implemented **
fn:name() => string
fn:name(node? $srcval) => string
fn:namespace-uri() => string
fn:namespace-uri(node? $srcval) => string
fn:node-kind(node $srcval) => string
fn:node-name(node $srcval) => QName?
** Not yet implemented **
fn:normalize-space( string? $srcval) => string?
fn:normalize-unicode( string? $srcval) => string?
** Not yet implemented **
fn:normalize-unicode( string? $srcval, string $normalizationForm) => string?
** Not yet implemented **
fn:not(item* $srcval) => boolean
fn:number() => double
fn:number(node $srcval) => double
Note: Implementation follows the XPath 1.0 specification
fn:position() => unsignedInt?
fn:remove(item* $target, decimal $position) => item*
fn:remove-timezone-from-dateTime( dateTime $srcval) => dateTime
** Not yet implemented **
fn:remove-timezone-from-dateTime( dateTime $srcval, dayTimeDuration $timezone) => dateTime
** Not yet implemented **
fn:remove-timezone-from-time( time $srcval) => time
** Not yet implemented **
fn:remove-timezone-from-time( time $srcval, dayTimeDuration $timezone) => time
** Not yet implemented **
fn:replace(string? $input, string? $pattern, string? $replacement) => string?
fn:replace(string? $input, string? $pattern, string? $replacement, string? $flags) => string?
fn:resolve-uri(anyURI $base, anyURI $relative) => anyURI
** Not yet implemented **
fn:root(node $srcval) => node
fn:round(double? $srcval) => double?
fn:sequence-deep-equal( item* $parameter1, item* $parameter2) => boolean?
fn:sequence-deep-equal( item* $parameter1, item* $parameter2, anyURI $collationLiteral) => boolean?
fn:sequence-node-equal( node* $parameter1, node* $parameter2) => boolean?
fn:starts-with(string? $operand1, string? $operand2) => boolean?
Note: Currently compares the strings using Unicode code-point matching
fn:starts-with(string? $operand1, string? $operand2, anyURI $collationLiteral) => boolean?
** Not yet implemented **
fn:string() => string
fn:string(item $srcval) => string
fn:string-join(string* $sequence, string $separator) => string
fn:string-length(string? $srcval) => integer?
fn:string-pad(string? $padString, decimal? $padCount) => string?
fn:string-to-codepoints(string $srcval) => integer*
fn:subsequence(item* $sourceSeq, decimal $startingLoc) => item*
fn:subsequence(item* $sourceSeq, decimal $startingLoc, decimal $length) => item*
fn:substring(string? $sourceString, decimal? $startingLoc) => string?
fn:substring(string? $sourceString, decimal? $startingLoc, decimal? $length) => string?
fn:substring-after( string? $operand1, string? $operand2) => string?
fn:substring-after( string? $operand1, string? $operand2, anyURI $collationLiteral) => string?
** Not yet implemented **
fn:substring-before( string? $operand1, string? $operand2) => string?
fn:substring-before( string? $operand1, string? $operand2, anyURI $collationLiteral) => string?
** Not yet implemented **
fn:sum(item* $srcval) => double
fn:tokenize(string? $input, string? $pattern) => string*
fn:tokenize(string? $input, string? $pattern, string? $flags) => string*
fn:translate(string? $srcval, string? $mapString, string? $transString) => string?
fn:true() => boolean
fn:unique-ID(node $srcval) => ID?
** Not yet implemented **
fn:upper-case(string? $srcval) => string?
Michael H. Kay
15 November 2002