← Back to team overview

zorba-coders team mailing list archive

[Merge] lp:~zorba-coders/zorba/xpath_xqdoc into lp:zorba

 

William Candillon has proposed merging lp:~zorba-coders/zorba/xpath_xqdoc into lp:zorba.

Requested reviews:
  Matthias Brantner (matthias-brantner)

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/xpath_xqdoc/+merge/193484

Improve documentation for the xpath and xpath math functions.
As seen at 
http://test2.28.io.s3-website-us-east-1.amazonaws.com/documentation/latest/modules/w3c/xpath-functions
http://www.28.io.s3-website-us-east-1.amazonaws.com/documentation/latest/modules/w3c/xpath-functions-math
-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~zorba-coders/zorba/xpath_xqdoc/+merge/193484
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'modules/w3c/xpath_functions.xq'
--- modules/w3c/xpath_functions.xq	2013-10-12 01:10:05 +0000
+++ modules/w3c/xpath_functions.xq	2013-10-31 19:57:53 +0000
@@ -29,1032 +29,4829 @@
 module namespace fn = "http://www.w3.org/2005/xpath-functions";;
 
 (:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-QName";>fn:QName</a>
- :)
-declare function fn:QName($paramURI as xs:string?, $paramQName as xs:string) as xs:QName external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-abs";>fn:abs</a>
- :)
-declare function fn:abs($arg as numeric?) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-date-to-timezone";>fn:adjust-date-to-timezone</a>
- :)
-declare function fn:adjust-date-to-timezone($arg as xs:date?) as xs:date? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-date-to-timezone";>fn:adjust-date-to-timezone</a>
- :)
-declare function fn:adjust-date-to-timezone( $arg as xs:date?, $timezone as xs:dayTimeDuration?) as xs:date? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-dateTime-to-timezone";>fn:adjust-dateTime-to-timezone</a>
- :)
-declare function fn:adjust-dateTime-to-timezone($arg as xs:dateTime?) as xs:dateTime external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-dateTime-to-timezone";>fn:adjust-dateTime-to-timezone</a>
- :)
-declare function fn:adjust-dateTime-to-timezone( $arg as xs:dateTime?, $timezone as xs:dayTimeDuration?) as xs:dateTime external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-time-to-timezone";>fn:adjust-time-to-timezone</a>
- :)
-declare function fn:adjust-time-to-timezone($arg as xs:time?) as xs:time? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-adjust-time-to-timezone";>fn:adjust-time-to-timezone</a>
- :)
-declare function fn:adjust-time-to-timezone( $arg as xs:time?, $timezone as xs:dayTimeDuration?) as xs:time? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-analyze-string";>fn:analyze-string</a>
- :)
-declare function fn:analyze-string( $input as xs:string?, $pattern as xs:string) as element(fn:analyze-string-result) external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-analyze-string";>fn:analyze-string</a>
- :)
-declare function fn:analyze-string( $input as xs:string?, $pattern as xs:string, $flags as xs:string) as element(fn:analyze-string-result) external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-available-environment-variables";>fn:available-environment-variables</a>
- :)
-declare function fn:available-environment-variables() as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-avg";>fn:avg</a>
- :)
-declare function fn:avg($arg as xs:anyAtomicType*) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-boolean";>fn:boolean</a>
- :)
-declare function fn:boolean($arg as item()*) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-ceiling";>fn:ceiling</a>
- :)
-declare function fn:ceiling($arg as numeric?) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-codepoint-equal";>fn:codepoint-equal</a>
- :)
-declare function fn:codepoint-equal( $comparand1 as xs:string?, $comparand2 as xs:string?) as xs:boolean? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-codepoints-to-string";>fn:codepoints-to-string</a>
- :)
-declare function fn:codepoints-to-string($arg as xs:integer*) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-collection";>fn:collection</a>
- :)
-declare function fn:collection() as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-collection";>fn:collection</a>
- :)
-declare function fn:collection($arg as xs:string?) as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-compare";>fn:compare</a>
- :)
-declare function fn:compare($comparand1 as xs:string?, $comparand2 as xs:string?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-compare";>fn:compare</a>
- :)
-declare function fn:compare( $comparand1 as xs:string?, $comparand2 as xs:string?, $collation as xs:string) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-concat";>fn:concat</a>
- :)
-declare function fn:concat( $arg1 as xs:anyAtomicType?, $arg2 as xs:anyAtomicType? ) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-contains";>fn:contains</a>
- :)
-declare function fn:contains($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-contains";>fn:contains</a>
- :)
-declare function fn:contains( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-count";>fn:count</a>
- :)
-declare function fn:count($arg as item()*) as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-dateTime";>fn:dateTime</a>
- :)
-declare function fn:dateTime($arg1 as xs:date?, $arg2 as xs:time?) as xs:dateTime? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-day-from-date";>fn:day-from-date</a>
- :)
-declare function fn:day-from-date($arg as xs:date?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-days-from-duration";>fn:days-from-duration</a>
- :)
-declare function fn:days-from-duration($arg as xs:duration?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-deep-equal";>fn:deep-equal</a>
- :)
-declare function fn:deep-equal($parameter1 as item()*, $parameter2 as item()*) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-deep-equal";>fn:deep-equal</a>
- :)
-declare function fn:deep-equal( $parameter1 as item()*, $parameter2 as item()*, $collation as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-distinct-values";>fn:distinct-values</a>
- :)
-declare function fn:distinct-values($arg as xs:anyAtomicType*) as xs:anyAtomicType* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-distinct-values";>fn:distinct-values</a>
- :)
-declare function fn:distinct-values( $arg as xs:anyAtomicType*, $collation as xs:string) as xs:anyAtomicType* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-doc";>fn:doc</a>
- :)
-declare function fn:doc($uri as xs:string?) as document-node()? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-doc-available";>fn:doc-available</a>
- :)
-declare function fn:doc-available($uri as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-element-with-id";>fn:element-with-id</a>
- :)
-declare function fn:element-with-id($arg as xs:string*) as element()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-element-with-id";>fn:element-with-id</a>
- :)
-declare function fn:element-with-id($arg as xs:string*, $node as node()) as element()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-empty";>fn:empty</a>
- :)
-declare function fn:empty($arg as item()*) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-ends-with";>fn:ends-with</a>
- :)
-declare function fn:ends-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-ends-with";>fn:ends-with</a>
- :)
-declare function fn:ends-with( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-environment-variable";>fn:environment-variable</a>
- :)
-declare function fn:environment-variable($name as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-error";>fn:error</a>
- :)
-declare function fn:error() as none external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-error";>fn:error</a>
- :)
-declare function fn:error($code as xs:QName) as none external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-error";>fn:error</a>
- :)
-declare function fn:error($code as xs:QName?, $description as xs:string) as none external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-error";>fn:error</a>
- :)
-declare function fn:error( $code as xs:QName?, $description as xs:string, $error-object as item()*) as none external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-exactly-one";>fn:exactly-one</a>
- :)
-declare function fn:exactly-one($arg as item()*) as item() external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-exists";>fn:exists</a>
- :)
-declare function fn:exists($arg as item()*) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-false";>fn:false</a>
- :)
-declare function fn:false() as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-filter";>fn:filter</a>
- :)
-declare function fn:filter($seq as item()*, $f as function(item()) as xs:boolean) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-floor";>fn:floor</a>
- :)
-declare function fn:floor($arg as numeric?) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-fold-left";>fn:fold-left</a>
- :)
-declare function fn:fold-left($seq as item()*, $zero as item()*, $f as function(item()*, item()) as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-fold-right";>fn:fold-right</a>
- :)
-declare function fn:fold-right($seq as item()*, $zero as item()*, $f as function(item()*, item()) as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-date";>fn:format-date</a>
- :)
-declare function fn:format-date( $value as xs:date?, $picture as xs:string, $language as xs:string?, $calendar as xs:string?, $place as xs:string?) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-date";>fn:format-date</a>
- :)
-declare function fn:format-date($value as xs:date?, $picture as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-dateTime";>fn:format-dateTime</a>
- :)
-declare function fn:format-dateTime( $value as xs:dateTime?, $picture as xs:string, $language as xs:string?, $calendar as xs:string?, $place as xs:string?) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-dateTime";>fn:format-dateTime</a>
- :)
-declare function fn:format-dateTime($value as xs:dateTime?, $picture as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-integer";>fn:format-integer</a>
- :)
-declare function fn:format-integer($value as xs:integer?, $picture as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-integer";>fn:format-integer</a>
- :)
-declare function fn:format-integer( $value as xs:integer?, $picture as xs:string, $language as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-number";>fn:format-number</a>
- :)
-declare function fn:format-number($value as numeric?, $picture as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-number";>fn:format-number</a>
- :)
-declare function fn:format-number( $value as numeric?, $picture as xs:string, $decimal-format-name as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-time";>fn:format-time</a>
- :)
-declare function fn:format-time( $value as xs:time?, $picture as xs:string, $language as xs:string?, $calendar as xs:string?, $place as xs:string?) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-format-time";>fn:format-time</a>
- :)
-declare function fn:format-time($value as xs:time?, $picture as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-function-arity";>fn:function-arity</a>
- :)
-declare function fn:function-arity($func as function(*)) as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-generate-id";>fn:generate-id</a>
- :)
-declare function fn:generate-id() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-generate-id";>fn:generate-id</a>
- :)
-declare function fn:generate-id($arg as node()?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-head";>fn:head</a>
- :)
-declare function fn:head($arg as item()*) as item()? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-hours-from-duration";>fn:hours-from-duration</a>
- :)
-declare function fn:hours-from-duration($arg as xs:duration?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-hours-from-time";>fn:hours-from-time</a>
- :)
-declare function fn:hours-from-time($arg as xs:time?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-id";>fn:id</a>
- :)
-declare function fn:id($arg as xs:string*) as element()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-id";>fn:id</a>
- :)
-declare function fn:id($arg as xs:string*, $node as node()) as element()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-idref";>fn:idref</a>
- :)
-declare function fn:idref($arg as xs:string*) as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-idref";>fn:idref</a>
- :)
-declare function fn:idref($arg as xs:string*, $node as node()) as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-in-scope-prefixes";>fn:in-scope-prefixes</a>
- :)
-declare function fn:in-scope-prefixes($element as element()) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-index-of";>fn:index-of</a>
- :)
-declare function fn:index-of( $seq as xs:anyAtomicType*, $search as xs:anyAtomicType) as xs:integer* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-index-of";>fn:index-of</a>
- :)
-declare function fn:index-of( $seq as xs:anyAtomicType*, $search as xs:anyAtomicType, $collation as xs:string) as xs:integer* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-insert-before";>fn:insert-before</a>
- :)
-declare function fn:insert-before( $target as item()*, $position as xs:integer, $inserts as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-local-name-from-QName";>fn:local-name-from-QName</a>
- :)
-declare function fn:local-name-from-QName($arg as xs:QName?) as xs:NCName? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-lower-case";>fn:lower-case</a>
- :)
-declare function fn:lower-case($arg as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-for-each";>fn:for-each</a>
- :)
-declare function fn:for-each( $seq as item()*, $f as function(item()) as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-for-each-pair";>fn:for-each-pair</a>
- :)
-declare function fn:for-each-pair( $seq1 as item()*, $seq2 as item()*, $f as function(item(), item()) as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-matches";>fn:matches</a>
- :)
-declare function fn:matches($input as xs:string?, $pattern as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-matches";>fn:matches</a>
- :)
-declare function fn:matches( $input as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-max";>fn:max</a>
- :)
-declare function fn:max($arg as xs:anyAtomicType*) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-max";>fn:max</a>
- :)
-declare function fn:max($arg as xs:anyAtomicType*, $collation as xs:string) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-min";>fn:min</a>
- :)
-declare function fn:min($arg as xs:anyAtomicType*) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-min";>fn:min</a>
- :)
-declare function fn:min($arg as xs:anyAtomicType*, $collation as xs:string) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-dateTime";>fn:minutes-from-dateTime</a>
- :)
-declare function fn:minutes-from-dateTime($arg as xs:dateTime?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-duration";>fn:minutes-from-duration</a>
- :)
-declare function fn:minutes-from-duration($arg as xs:duration?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-time";>fn:minutes-from-time</a>
- :)
-declare function fn:minutes-from-time($arg as xs:time?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-month-from-date";>fn:month-from-date</a>
- :)
-declare function fn:month-from-date($arg as xs:date?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-months-from-duration";>fn:months-from-duration</a>
- :)
-declare function fn:months-from-duration($arg as xs:duration?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-for-prefix";>fn:namespace-uri-for-prefix</a>
- :)
-declare function fn:namespace-uri-for-prefix( $prefix as xs:string?, $element as element()) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-from-QName";>fn:namespace-uri-from-QName</a>
- :)
-declare function fn:namespace-uri-from-QName($arg as xs:QName?) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-normalize-space";>fn:normalize-space</a>
- :)
-declare function fn:normalize-space() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-normalize-space";>fn:normalize-space</a>
- :)
-declare function fn:normalize-space($arg as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-normalize-unicode";>fn:normalize-unicode</a>
- :)
-declare function fn:normalize-unicode($arg as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-normalize-unicode";>fn:normalize-unicode</a>
- :)
-declare function fn:normalize-unicode( $arg as xs:string?, $normalizationForm as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-not";>fn:not</a>
- :)
-declare function fn:not($arg as item()*) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-one-or-more";>fn:one-or-more</a>
- :)
-declare function fn:one-or-more($arg as item()*) as item()+ external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-parse-xml";>fn:parse-xml</a>
- :)
-declare function fn:parse-xml($arg as xs:string?) as document-node(element(*, xs:untyped)) external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-parse-xml";>fn:parse-xml</a>
- :)
-declare function fn:parse-xml( $arg as xs:string?, $baseURI as xs:string) as document-node(element(*, xs:untyped)) external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-parse-xml-fragment";>fn:parse-xml-fragment</a>
- :)
-declare function fn:parse-xml-fragment( $arg as xs:string?) as document-node(element(*, xs:untyped)) external;
-
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-prefix-from-QName";>fn:prefix-from-QName</a>
- :)
-declare function fn:prefix-from-QName($arg as xs:QName?) as xs:NCName? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-remove";>fn:remove</a>
- :)
-declare function fn:remove($target as item()*, $position as xs:integer) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-replace";>fn:replace</a>
- :)
-declare function fn:replace( $input as xs:string?, $pattern as xs:string, $replacement as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-replace";>fn:replace</a>
- :)
-declare function fn:replace( $input as xs:string?, $pattern as xs:string, $replacement as xs:string, $flags as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-resolve-QName";>fn:resolve-QName</a>
- :)
-declare function fn:resolve-QName($qname as xs:string?, $element as element()) as xs:QName? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-reverse";>fn:reverse</a>
- :)
-declare function fn:reverse($arg as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-round";>fn:round</a>
- :)
-declare function fn:round($arg as numeric?) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-round";>fn:round</a>
- :)
-declare function fn:round($arg as numeric?, $precision as xs:integer) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-round-half-to-even";>fn:round-half-to-even</a>
- :)
-declare function fn:round-half-to-even($arg as numeric?) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-round-half-to-even";>fn:round-half-to-even</a>
- :)
-declare function fn:round-half-to-even($arg as numeric?, $precision as xs:integer) as numeric? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-dateTime";>fn:seconds-from-dateTime</a>
- :)
-declare function fn:seconds-from-dateTime($arg as xs:dateTime?) as xs:decimal? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-duration";>fn:seconds-from-duration</a>
- :)
-declare function fn:seconds-from-duration($arg as xs:duration?) as xs:decimal? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-time";>fn:seconds-from-time</a>
- :)
-declare function fn:seconds-from-time($arg as xs:time?) as xs:decimal? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-serialize";>fn:serialize</a>
- :)
-declare function fn:serialize($arg as item()*) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-serialize";>fn:serialize</a>
- :)
-declare function fn:serialize( $arg as item()*, $params as element(output:serialization-parameters)?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-starts-with";>fn:starts-with</a>
- :)
-declare function fn:starts-with($arg1 as xs:string?, $arg2 as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-starts-with";>fn:starts-with</a>
- :)
-declare function fn:starts-with( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-join";>fn:string-join</a>
- :)
-declare function fn:string-join($arg1 as xs:string*) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-join";>fn:string-join</a>
- :)
-declare function fn:string-join($arg1 as xs:string*, $arg2 as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-length";>fn:string-length</a>
- :)
-declare function fn:string-length() as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-length";>fn:string-length</a>
- :)
-declare function fn:string-length($arg as xs:string?) as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-to-codepoints";>fn:string-to-codepoints</a>
- :)
-declare function fn:string-to-codepoints($arg as xs:string?) as xs:integer* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-subsequence";>fn:subsequence</a>
- :)
-declare function fn:subsequence($sourceSeq as item()*, $startingLoc as xs:double) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-subsequence";>fn:subsequence</a>
- :)
-declare function fn:subsequence( $sourceSeq as item()*, $startingLoc as xs:double, $length as xs:double) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring";>fn:substring</a>
- :)
-declare function fn:substring($sourceString as xs:string?, $start as xs:double) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring";>fn:substring</a>
- :)
-declare function fn:substring( $sourceString as xs:string?, $start as xs:double, $length as xs:double) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring-after";>fn:substring-after</a>
- :)
-declare function fn:substring-after($arg1 as xs:string?, $arg2 as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring-after";>fn:substring-after</a>
- :)
-declare function fn:substring-after( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring-before";>fn:substring-before</a>
- :)
-declare function fn:substring-before($arg1 as xs:string?, $arg2 as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-substring-before";>fn:substring-before</a>
- :)
-declare function fn:substring-before( $arg1 as xs:string?, $arg2 as xs:string?, $collation as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-sum";>fn:sum</a>
- :)
-declare function fn:sum($arg as xs:anyAtomicType*) as xs:anyAtomicType external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-sum";>fn:sum</a>
- :)
-declare function fn:sum( $arg as xs:anyAtomicType*, $zero as xs:anyAtomicType?) as xs:anyAtomicType? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-tail";>fn:tail</a>
- :)
-declare function fn:tail($arg as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-timezone-from-date";>fn:timezone-from-date</a>
- :)
-declare function fn:timezone-from-date($arg as xs:date?) as xs:dayTimeDuration? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-timezone-from-dateTime";>fn:timezone-from-dateTime</a>
- :)
-declare function fn:timezone-from-dateTime($arg as xs:dateTime?) as xs:dayTimeDuration? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-timezone-from-time";>fn:timezone-from-time</a>
- :)
-declare function fn:timezone-from-time($arg as xs:time?) as xs:dayTimeDuration? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-tokenize";>fn:tokenize</a>
- :)
-declare function fn:tokenize($input as xs:string?, $pattern as xs:string) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-tokenize";>fn:tokenize</a>
- :)
-declare function fn:tokenize( $input as xs:string?, $pattern as xs:string, $flags as xs:string) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-trace";>fn:trace</a>
- :)
-declare function fn:trace($value as item()*, $label as xs:string) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-translate";>fn:translate</a>
- :)
-declare function fn:translate( $arg as xs:string?, $mapString as xs:string, $transString as xs:string) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-true";>fn:true</a>
- :)
-declare function fn:true() as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unordered";>fn:unordered</a>
- :)
-declare function fn:unordered($sourceSeq as item()*) as item()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text";>fn:unparsed-text</a>
- :)
-declare function fn:unparsed-text($href as xs:string?) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text";>fn:unparsed-text</a>
- :)
-declare function fn:unparsed-text($href as xs:string?, $encoding as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-available";>fn:unparsed-text-available</a>
- :)
-declare function fn:unparsed-text-available($href as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-available";>fn:unparsed-text-available</a>
- :)
-declare function fn:unparsed-text-available( $href as xs:string?, $encoding as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-lines";>fn:unparsed-text-lines</a>
- :)
-declare function fn:unparsed-text-lines($href as xs:string?) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-lines";>fn:unparsed-text-lines</a>
- :)
-declare function fn:unparsed-text-lines( $href as xs:string?, $encoding as xs:string) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-upper-case";>fn:upper-case</a>
- :)
-declare function fn:upper-case($arg as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-uri-collection";>fn:uri-collection</a>
- :)
-declare function fn:uri-collection() as xs:anyURI* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-uri-collection";>fn:uri-collection</a>
- :)
-declare function fn:uri-collection($arg as xs:string?) as xs:anyURI* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-year-from-date";>fn:year-from-date</a>
- :)
-declare function fn:year-from-date($arg as xs:date?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-years-from-duration";>fn:years-from-duration</a>
- :)
-declare function fn:years-from-duration($arg as xs:duration?) as xs:integer? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-zero-or-one";>fn:zero-or-one</a>
- :)
-declare function fn:zero-or-one($arg as item()*) as item()? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-codepoints-to-string";>fn:codepoints-to-string</a>
- :)
-declare function fn:codepoints-to-string($arg as xs:integer*) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string-to-codepoints";>fn:string-to-codepoints</a>
- :)
-declare function fn:string-to-codepoints($arg as xs:string?) as xs:integer* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-base-uri";>fn:base-uri</a>
- :)
-declare function fn:base-uri() as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-base-uri";>fn:base-uri</a>
- :)
-declare function fn:base-uri($arg as node()?) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-current-date";>fn:current-date</a>
- :)
-declare function fn:current-date() as xs:date external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-current-dateTime";>fn:current-dateTime</a>
- :)
-declare function fn:current-dateTime() as xs:dateTimeStamp external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-current-time";>fn:current-time</a>
- :)
-declare function fn:current-time() as xs:time external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-data";>fn:data</a>
- :)
-declare function fn:data() as xs:anyAtomicType* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-data";>fn:data</a>
- :)
-declare function fn:data($arg as item()*) as xs:anyAtomicType* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-default-collation";>fn:default-collation</a>
- :)
-declare function fn:default-collation() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-document-uri";>fn:document-uri</a>
- :)
-declare function fn:document-uri() as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-document-uri";>fn:document-uri</a>
- :)
-declare function fn:document-uri($arg as node()?) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-encode-for-uri";>fn:encode-for-uri</a>
- :)
-declare function fn:encode-for-uri($uri-part as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-escape-html-uri";>fn:escape-html-uri</a>
- :)
-declare function fn:escape-html-uri($uri as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-has-children";>fn:has-children</a>
- :)
-declare function fn:has-children() as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-has-children";>fn:has-children</a>
- :)
-declare function fn:has-children($node as node()?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-implicit-timezone";>fn:implicit-timezone</a>
- :)
-declare function fn:implicit-timezone() as xs:dayTimeDuration external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-innermost";>fn:innermost</a>
- :)
-declare function fn:innermost($nodes as node()*) as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-iri-to-uri";>fn:iri-to-uri</a>
- :)
-declare function fn:iri-to-uri($iri as xs:string?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-lang";>fn:lang</a>
- :)
-declare function fn:lang($testlang as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-lang";>fn:lang</a>
- :)
-declare function fn:lang($testlang as xs:string?, $node as node()) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-last";>fn:last</a>
- :)
-declare function fn:last() as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-local-name";>fn:local-name</a>
- :)
-declare function fn:local-name() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-local-name";>fn:local-name</a>
- :)
-declare function fn:local-name($arg as node()?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-name";>fn:name</a>
- :)
-declare function fn:name() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-name";>fn:name</a>
- :)
-declare function fn:name($arg as node()?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri";>fn:namespace-uri</a>
- :)
-declare function fn:namespace-uri() as xs:anyURI external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri";>fn:namespace-uri</a>
- :)       
-declare function fn:namespace-uri($arg as node()?) as xs:anyURI external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-nilled";>fn:nilled</a>
- :)
-declare function fn:nilled() as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-nilled";>fn:nilled</a>
- :)
-declare function fn:nilled($arg as node()?) as xs:boolean? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-node-name";>fn:node-name</a>
- :)
-declare function fn:node-name() as xs:QName? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-node-name";>fn:node-name</a>
- :)
-declare function fn:node-name($arg as node()?) as xs:QName? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-number";>fn:number</a>
- :)
-declare function fn:number() as xs:double external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-number";>fn:number</a>
- :)
-declare function fn:number($arg as xs:anyAtomicType?) as xs:double external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-outermost";>fn:outermost</a>
- :)
-declare function fn:outermost($nodes as node()*) as node()* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-position";>fn:position</a>
- :)
-declare function fn:position() as xs:integer external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-resolve-uri";>fn:resolve-uri</a>
- :)
-declare function fn:resolve-uri($relative as xs:string?) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-resolve-uri";>fn:resolve-uri</a>
- :)
-declare function fn:resolve-uri($relative as xs:string?, $base as xs:string) as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-root";>fn:root</a>
- :)
-declare function fn:root() as node() external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-root";>fn:root</a>
- :)
-declare function fn:root($arg as node()?) as node()? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-static-base-uri";>fn:static-base-uri</a>
- :)
-declare function fn:static-base-uri() as xs:anyURI? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string";>fn:string</a>
- :)
-declare function fn:string() as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-string";>fn:string</a>
- :)
-declare function fn:string($arg as item()?) as xs:string external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-available-environment-variables";>fn:available-environment-variables</a>
- :)
-declare function fn:available-environment-variables() as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-environment-variable";>fn:environment-variable</a>
- :)
-declare function fn:environment-variable($arg as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text";>fn:unparsed-text</a>
- :)
-declare function fn:unparsed-text($href as xs:string?) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text";>fn:unparsed-text</a>
- :)
-declare function fn:unparsed-text($href as xs:string?, $encoding as xs:string) as xs:string? external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-available";>fn:unparsed-text-available</a>
- :)
-declare function fn:unparsed-text-available($href as xs:string?) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-lines";>fn:unparsed-text-lines</a>
- :)
-declare function fn:unparsed-text-lines(	$href	 as xs:string?, $encoding	 as xs:string) as xs:string* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-unparsed-text-available";>fn:unparsed-text-available</a>
- :)
-declare function fn:unparsed-text-available(	$href	 as xs:string?, $encoding	 as xs:string) as xs:boolean external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-uri-collection";>fn:uri-collection</a>
- :)
-declare function fn:uri-collection() as xs:anyURI* external;
-
-(:~
- : @see for semantics please check <a href="http://www.w3.org/TR/xpath-functions-30/#func-uri-collection";>fn:uri-collection</a>
- :)
-declare function fn:uri-collection($arg as xs:string?) as xs:anyURI* external;
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Constructs an <code>xs:QName</code> value given a namespace URI and a lexical
+ :             QName.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="QName" return-type="xs:QName" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="paramURI" type="xs:string?"/><arg name="paramQName" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The namespace URI in the returned QName is taken from <code>$paramURI</code>. If
+ :                <code>$paramURI</code> is the zero-length string or the empty sequence, it represents
+ :             "no namespace".</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The prefix (or absence of a prefix) in <code>$paramQName</code> is retained in the
+ :             returned <code>xs:QName</code> value.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The local name in the result is taken from the local part of
+ :             <code>$paramQName</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="CA" code="0002"/> if <code>$paramQName</code> does
+ :             not have the correct lexical form for an instance of <code>xs:QName</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="CA" code="0002"/> if <code>$paramURI</code> is the
+ :             zero-length string or the empty sequence, and the value of <code>$paramQName</code>
+ :             contains a colon (<code>:</code>).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CA" code="0002"/> if <code>$paramURI</code> is not a valid URI (XML Namespaces 1.0) or
+ :             IRI (XML Namespaces 1.1). </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-QName
+ :)
+declare function fn:QName($paramURI as xs:string?,  $paramQName as xs:string) as  xs:QName external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the absolute value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="abs" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is negative the function returns <code>-$arg</code>, otherwise it
+ :             returns <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For <code>xs:float</code> and <code>xs:double</code> arguments, if the argument is
+ :             positive zero or negative zero, then positive zero is returned. If the argument is
+ :             positive or negative infinity, positive infinity is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:abs(10.5)</code> returns <code>10.5</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:abs(-10.5)</code> returns <code>10.5</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-abs
+ :)
+declare function fn:abs($arg as numeric?) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:date</code> value to a specific timezone, or to no timezone
+ :             at all; the result is the date in the target timezone that contains the starting instant
+ :             of the supplied date.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-date-to-timezone" return-type="xs:date?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/></proto></example><example role="signature"><proto name="adjust-date-to-timezone" return-type="xs:date?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the local value of <code>$arg</code> without its timezone
+ :             component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then the function returns the value of the expression:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Let <code>$dt</code> be the value of <code>fn:dateTime($arg,
+ :                      xs:time('00:00:00'))</code>.</p></item><item><p>Let <code>$adt</code> be the value of <code>fn:adjust-dateTime-to-timezone($dt,
+ :                      $timezone)</code></p></item><item><p>The function returns the value of <code>xs:date($adt)</code></p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or is not an integral number
+ :             of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-date-to-timezone
+ :)
+declare function fn:adjust-date-to-timezone($arg as xs:date?) as  xs:date? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:date</code> value to a specific timezone, or to no timezone
+ :             at all; the result is the date in the target timezone that contains the starting instant
+ :             of the supplied date.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-date-to-timezone" return-type="xs:date?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/></proto></example><example role="signature"><proto name="adjust-date-to-timezone" return-type="xs:date?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the local value of <code>$arg</code> without its timezone
+ :             component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then the function returns the value of the expression:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Let <code>$dt</code> be the value of <code>fn:dateTime($arg,
+ :                      xs:time('00:00:00'))</code>.</p></item><item><p>Let <code>$adt</code> be the value of <code>fn:adjust-dateTime-to-timezone($dt,
+ :                      $timezone)</code></p></item><item><p>The function returns the value of <code>xs:date($adt)</code></p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or is not an integral number
+ :             of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-date-to-timezone
+ :)
+declare function fn:adjust-date-to-timezone( $arg as xs:date?,  $timezone as xs:dayTimeDuration?) as  xs:date? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:dateTime</code> value to a specific timezone, or to no
+ :             timezone at all.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-dateTime-to-timezone" return-type="xs:dateTime?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/></proto></example><example role="signature"><proto name="adjust-dateTime-to-timezone" return-type="xs:dateTime?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the local value of <code>$arg</code> without its timezone
+ :             component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then the result is the <code>xs:dateTime</code> value that is equal to
+ :                <code>$arg</code> and that has a timezone component equal to
+ :             <code>$timezone</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or is not an integral number
+ :             of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-dateTime-to-timezone
+ :)
+declare function fn:adjust-dateTime-to-timezone($arg as xs:dateTime?) as  xs:dateTime external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:dateTime</code> value to a specific timezone, or to no
+ :             timezone at all.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-dateTime-to-timezone" return-type="xs:dateTime?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/></proto></example><example role="signature"><proto name="adjust-dateTime-to-timezone" return-type="xs:dateTime?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the local value of <code>$arg</code> without its timezone
+ :             component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then the result is the <code>xs:dateTime</code> value that is equal to
+ :                <code>$arg</code> and that has a timezone component equal to
+ :             <code>$timezone</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or is not an integral number
+ :             of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-dateTime-to-timezone
+ :)
+declare function fn:adjust-dateTime-to-timezone( $arg as xs:dateTime?,  $timezone as xs:dayTimeDuration?) as  xs:dateTime external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:time</code> value to a specific timezone, or to no timezone
+ :             at all.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-time-to-timezone" return-type="xs:time?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/></proto></example><example role="signature"><proto name="adjust-time-to-timezone" return-type="xs:time?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the localized value of <code>$arg</code> without its
+ :             timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Let <code>$dt</code> be the <code>xs:dateTime</code> value
+ :                      <code>fn:dateTime(xs:date('1972-12-31'), $arg)</code>.</p></item><item><p>Let <code>$adt</code> be the value of <code>fn:adjust-dateTime-to-timezone($dt,
+ :                      $timezone)</code>
+ :                </p></item><item><p>The function returns the <code>xs:time</code> value
+ :                   <code>xs:time($adt)</code>.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or if does not contain an
+ :             integral number of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-time-to-timezone
+ :)
+declare function fn:adjust-time-to-timezone($arg as xs:time?) as  xs:time? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Adjusts an <code>xs:time</code> value to a specific timezone, or to no timezone
+ :             at all.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="adjust-time-to-timezone" return-type="xs:time?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/></proto></example><example role="signature"><proto name="adjust-time-to-timezone" return-type="xs:time?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/><arg name="timezone" type="xs:dayTimeDuration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$timezone</code> is not specified, then the effective value of
+ :                <code>$timezone</code> is the value of the implicit timezone in the dynamic
+ :             context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> is the empty sequence, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             the empty sequence, then the result is <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> does not have a timezone component and <code>$timezone</code> is
+ :             not the empty sequence, then the result is <code>$arg</code> with <code>$timezone</code>
+ :             as the timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is the empty
+ :             sequence, then the result is the localized value of <code>$arg</code> without its
+ :             timezone component.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>$arg</code> has a timezone component and <code>$timezone</code> is not the
+ :             empty sequence, then:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Let <code>$dt</code> be the <code>xs:dateTime</code> value
+ :                      <code>fn:dateTime(xs:date('1972-12-31'), $arg)</code>.</p></item><item><p>Let <code>$adt</code> be the value of <code>fn:adjust-dateTime-to-timezone($dt,
+ :                      $timezone)</code>
+ :                </p></item><item><p>The function returns the <code>xs:time</code> value
+ :                   <code>xs:time($adt)</code>.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DT" code="0003"/> if <code>$timezone</code> is less
+ :             than <code>-PT14H</code> or greater than <code>PT14H</code> or if does not contain an
+ :             integral number of minutes.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-adjust-time-to-timezone
+ :)
+declare function fn:adjust-time-to-timezone( $arg as xs:time?,  $timezone as xs:dayTimeDuration?) as  xs:time? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Analyzes a string using a regular expression, returning an XML structure that
+ :             identifies which parts of the input string matched or failed to match the regular
+ :             expression, and in the case of matched substrings, which substrings matched each
+ :             capturing group in the regular expression.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="analyze-string" return-type="element(fn:analyze-string-result)" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/></proto></example><example role="signature"><proto name="analyze-string" return-type="element(fn:analyze-string-result)" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$flags</code> argument is interpreted in the same way as for the
+ :                <code>fn:matches</code> function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence the function behaves as if
+ :                <code>$input</code> were the zero-length string. In this situation the result will be
+ :             an element node with no children.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an element node whose local name is
+ :                <code>analyze-string-result</code>. This element and all its descendant elements have
+ :             the namespace URI <code>http://www.w3.org/2005/xpath-functions</code>. The namespace
+ :             prefix is <termref def="implementation-dependent"/>. The children of this element are a
+ :             sequence of <code>fn:match</code> and <code>fn:non-match</code> elements. This sequence
+ :             is formed by breaking the <code>$input</code> string into a sequence of strings,
+ :             returning any substring that matches <code>$pattern</code> as the content of a
+ :                <code>match</code> element, and any intervening substring as the content of a
+ :                <code>non-match</code> element.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>More specifically, the function starts at the beginning of the input string and attempts
+ :             to find the first substring that matches the regular expression. If there are several
+ :             matches, the first match is defined to be the one whose starting position comes first in
+ :             the string. If several alternatives within the regular expression both match at the same
+ :             position in the input string, then the match that is chosen is the first alternative
+ :             that matches. For example, if the input string is <code>The quick brown fox jumps</code>
+ :             and the regular expression is <code>jump|jumps</code>, then the match that is chosen is
+ :                <code>jump</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Having found the first match, the instruction proceeds to find the second and subsequent
+ :             matches by repeating the search, starting at the first <termref def="character">character</termref> that was not included in the previous match.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The input string is thus partitioned into a sequence of substrings, some of which match
+ :             the regular expression, others which do not match it. Each substring will contain at
+ :             least one character. This sequence is represented in the result by the sequence of
+ :                <code>fn:match</code> and <code>fn:non-match</code> children of the returned element
+ :             node; the string value of the <code>fn:match</code> or <code>fn:non-match</code> element
+ :             will be the corresponding substring of <code>$input</code>, and the string value of the
+ :             returned element node will therefore be the same as <code>$input</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The content of an <code>fn:non-match</code> element is always a single text node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The content of a <code>fn:match</code> element, however, is in general a sequence of
+ :             text nodes and <code>fn:group</code> element children. An <code>fn:group</code> element
+ :             with a <code>nr</code> attribute having the integer value <var>N</var> identifies the
+ :             substring captured by the <var>Nth</var> parenthesized sub-expression in the regular
+ :             expression. For each capturing subexpression there will be at most one corresponding
+ :                <code>fn:group</code> element in each <code>fn:match</code> element in the
+ :             result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the function is called twice with the same arguments, it is <termref def="implementation-dependent"/> whether the two calls return the same element node
+ :             or distinct (but deep equal) element nodes. In this respect it is
+ :             <termref def="nondeterministic">nondeterministic</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="J">The base URI of the element nodes in the result is
+ :          <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A schema is defined for the structure of the returned element, containing the
+ :             definitions below. The returned element and its descendants will have type annotations
+ :             obtained by validating the returned element against this schema, unless the function is
+ :             used in an environment where type annotations are not supported (for example, a Basic
+ :             XSLT Processor), in which case the elements will all be annotated as
+ :                <code>xs:untyped</code> and the attributes as <code>xs:untypedAtomic</code>.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p diff="add" at="M">A free-standing copy of this schema can be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink"; href="analyze-string.xsd" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">analyze-string.xsd</loc></p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>
+ :             <eg xml:space="preserve">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ : &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+ :     targetNamespace="http://www.w3.org/2005/xpath-functions";
+ :     xmlns:fn="http://www.w3.org/2005/xpath-functions";
+ :     elementFormDefault="qualified"&gt; 
+ : 
+ :     &lt;xs:element name="analyze-string-result" type="fn:analyze-string-result-type"/&gt;
+ :     &lt;xs:element name="match" type="fn:match-type"/&gt;
+ :     &lt;xs:element name="non-match" type="xs:string"/&gt;
+ :     &lt;xs:element name="group" type="fn:group-type"/&gt;
+ :     
+ :     &lt;xs:complexType name="analyze-string-result-type" mixed="true"&gt;
+ :         &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;
+ :             &lt;xs:element ref="fn:match"/&gt;
+ :             &lt;xs:element ref="fn:non-match"/&gt;
+ :         &lt;/xs:choice&gt;
+ :     &lt;/xs:complexType&gt;
+ :         
+ :     &lt;xs:complexType name="match-type" mixed="true"&gt;
+ :         &lt;xs:sequence&gt;
+ :             &lt;xs:element ref="fn:group" minOccurs="0" maxOccurs="unbounded"/&gt;
+ :         &lt;/xs:sequence&gt;
+ :     &lt;/xs:complexType&gt;
+ :     
+ :     &lt;xs:complexType name="group-type" mixed="true"&gt;
+ :         &lt;xs:sequence&gt;
+ :             &lt;xs:element ref="fn:group" minOccurs="0" maxOccurs="unbounded"/&gt;
+ :         &lt;/xs:sequence&gt;
+ :         &lt;xs:attribute name="nr" type="xs:positiveInteger"/&gt;
+ :     &lt;/xs:complexType&gt;    
+ :  
+ : &lt;/xs:schema&gt;
+ : </eg>
+ :          </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0003"/> if the supplied
+ :                <code>$pattern</code> matches a zero-length string, that is, if <code>fn:matches("",
+ :                $pattern, $flags)</code> returns <code>true</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-analyze-string
+ :)
+declare function fn:analyze-string( $input as xs:string?,  $pattern as xs:string) as  element(fn:analyze-string-result) external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Analyzes a string using a regular expression, returning an XML structure that
+ :             identifies which parts of the input string matched or failed to match the regular
+ :             expression, and in the case of matched substrings, which substrings matched each
+ :             capturing group in the regular expression.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="analyze-string" return-type="element(fn:analyze-string-result)" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/></proto></example><example role="signature"><proto name="analyze-string" return-type="element(fn:analyze-string-result)" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$flags</code> argument is interpreted in the same way as for the
+ :                <code>fn:matches</code> function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence the function behaves as if
+ :                <code>$input</code> were the zero-length string. In this situation the result will be
+ :             an element node with no children.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an element node whose local name is
+ :                <code>analyze-string-result</code>. This element and all its descendant elements have
+ :             the namespace URI <code>http://www.w3.org/2005/xpath-functions</code>. The namespace
+ :             prefix is <termref def="implementation-dependent"/>. The children of this element are a
+ :             sequence of <code>fn:match</code> and <code>fn:non-match</code> elements. This sequence
+ :             is formed by breaking the <code>$input</code> string into a sequence of strings,
+ :             returning any substring that matches <code>$pattern</code> as the content of a
+ :                <code>match</code> element, and any intervening substring as the content of a
+ :                <code>non-match</code> element.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>More specifically, the function starts at the beginning of the input string and attempts
+ :             to find the first substring that matches the regular expression. If there are several
+ :             matches, the first match is defined to be the one whose starting position comes first in
+ :             the string. If several alternatives within the regular expression both match at the same
+ :             position in the input string, then the match that is chosen is the first alternative
+ :             that matches. For example, if the input string is <code>The quick brown fox jumps</code>
+ :             and the regular expression is <code>jump|jumps</code>, then the match that is chosen is
+ :                <code>jump</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Having found the first match, the instruction proceeds to find the second and subsequent
+ :             matches by repeating the search, starting at the first <termref def="character">character</termref> that was not included in the previous match.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The input string is thus partitioned into a sequence of substrings, some of which match
+ :             the regular expression, others which do not match it. Each substring will contain at
+ :             least one character. This sequence is represented in the result by the sequence of
+ :                <code>fn:match</code> and <code>fn:non-match</code> children of the returned element
+ :             node; the string value of the <code>fn:match</code> or <code>fn:non-match</code> element
+ :             will be the corresponding substring of <code>$input</code>, and the string value of the
+ :             returned element node will therefore be the same as <code>$input</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The content of an <code>fn:non-match</code> element is always a single text node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The content of a <code>fn:match</code> element, however, is in general a sequence of
+ :             text nodes and <code>fn:group</code> element children. An <code>fn:group</code> element
+ :             with a <code>nr</code> attribute having the integer value <var>N</var> identifies the
+ :             substring captured by the <var>Nth</var> parenthesized sub-expression in the regular
+ :             expression. For each capturing subexpression there will be at most one corresponding
+ :                <code>fn:group</code> element in each <code>fn:match</code> element in the
+ :             result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the function is called twice with the same arguments, it is <termref def="implementation-dependent"/> whether the two calls return the same element node
+ :             or distinct (but deep equal) element nodes. In this respect it is
+ :             <termref def="nondeterministic">nondeterministic</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="J">The base URI of the element nodes in the result is
+ :          <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A schema is defined for the structure of the returned element, containing the
+ :             definitions below. The returned element and its descendants will have type annotations
+ :             obtained by validating the returned element against this schema, unless the function is
+ :             used in an environment where type annotations are not supported (for example, a Basic
+ :             XSLT Processor), in which case the elements will all be annotated as
+ :                <code>xs:untyped</code> and the attributes as <code>xs:untypedAtomic</code>.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p diff="add" at="M">A free-standing copy of this schema can be found at <loc xmlns:xlink="http://www.w3.org/1999/xlink"; href="analyze-string.xsd" xlink:type="simple" xlink:show="replace" xlink:actuate="onRequest">analyze-string.xsd</loc></p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>
+ :             <eg xml:space="preserve">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+ : &lt;xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
+ :     targetNamespace="http://www.w3.org/2005/xpath-functions";
+ :     xmlns:fn="http://www.w3.org/2005/xpath-functions";
+ :     elementFormDefault="qualified"&gt; 
+ : 
+ :     &lt;xs:element name="analyze-string-result" type="fn:analyze-string-result-type"/&gt;
+ :     &lt;xs:element name="match" type="fn:match-type"/&gt;
+ :     &lt;xs:element name="non-match" type="xs:string"/&gt;
+ :     &lt;xs:element name="group" type="fn:group-type"/&gt;
+ :     
+ :     &lt;xs:complexType name="analyze-string-result-type" mixed="true"&gt;
+ :         &lt;xs:choice minOccurs="0" maxOccurs="unbounded"&gt;
+ :             &lt;xs:element ref="fn:match"/&gt;
+ :             &lt;xs:element ref="fn:non-match"/&gt;
+ :         &lt;/xs:choice&gt;
+ :     &lt;/xs:complexType&gt;
+ :         
+ :     &lt;xs:complexType name="match-type" mixed="true"&gt;
+ :         &lt;xs:sequence&gt;
+ :             &lt;xs:element ref="fn:group" minOccurs="0" maxOccurs="unbounded"/&gt;
+ :         &lt;/xs:sequence&gt;
+ :     &lt;/xs:complexType&gt;
+ :     
+ :     &lt;xs:complexType name="group-type" mixed="true"&gt;
+ :         &lt;xs:sequence&gt;
+ :             &lt;xs:element ref="fn:group" minOccurs="0" maxOccurs="unbounded"/&gt;
+ :         &lt;/xs:sequence&gt;
+ :         &lt;xs:attribute name="nr" type="xs:positiveInteger"/&gt;
+ :     &lt;/xs:complexType&gt;    
+ :  
+ : &lt;/xs:schema&gt;
+ : </eg>
+ :          </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0003"/> if the supplied
+ :                <code>$pattern</code> matches a zero-length string, that is, if <code>fn:matches("",
+ :                $pattern, $flags)</code> returns <code>true</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-analyze-string
+ :)
+declare function fn:analyze-string( $input as xs:string?,  $pattern as xs:string,  $flags as xs:string) as  element(fn:analyze-string-result) external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a list of environment variable names that are suitable for passing to
+ :                <code>fn:environment-variable</code>, as a (possibly empty) sequence of strings.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="available-environment-variables" return-type="xs:string*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		environment variables.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence of strings, being the names of the environment variables
+ :             in the dynamic context in some <termref def="implementation-dependent">implementation-dependent</termref> order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function is <termref def="dt-deterministic">deterministic</termref>: that is, the
+ :             set of available environment variables does not vary during evaluation.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a list of strings, containing no duplicates.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>It is intended that the strings in this list should be suitable for passing to
+ :                <code>fn:environment-variable</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See also the note on security under the definition of the
+ :                <code>fn:environment-variable</code> function. If access to environment variables has
+ :             been disabled, <code>fn:available-environment-variables</code> always returns the empty
+ :             sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-available-environment-variables
+ :)
+declare function fn:available-environment-variables() as  xs:string* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the average of the values in the input sequence <code>$arg</code>, that
+ :             is, the sum of the values divided by the number of values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="avg" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the empty sequence is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> contains values of type <code>xs:untypedAtomic</code> they are cast
+ :             to <code>xs:double</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Duration values must either all be <code>xs:yearMonthDuration</code> values or must all
+ :             be <code>xs:dayTimeDuration</code> values. For numeric values, the numeric promotion
+ :             rules defined in <specref ref="op.numeric"/> are used to promote all values to a single
+ :             common type. After these operations, <code>$arg</code> must contain items of a single
+ :             type, which must be one of the four numeric types, <code>xs:yearMonthDuration</code> or
+ :                <code>xs:dayTimeDuration</code> or one if its subtypes.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the average of the values as <code>sum($arg) div
+ :             count($arg)</code>; but the implementation may use an otherwise equivalent algorithm
+ :             that avoids arithmetic overflow.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A type error is raised <errorref class="RG" code="0006"/> if the input sequence contains
+ :             items of incompatible types, as described above.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-avg
+ :)
+declare function fn:avg($arg as xs:anyAtomicType*) as  xs:anyAtomicType? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Computes the effective boolean value of the sequence <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="boolean" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function computes the effective boolean value of a sequence, defined according to
+ :             the following rules. See also <xspecref spec="XP30" ref="id-ebv"/>.</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If <code>$arg</code> is the empty sequence, <code>fn:boolean</code> returns
+ :                      <code>false</code>.</p></item><item><p>If <code>$arg</code> is a sequence whose first item is a node,
+ :                      <code>fn:boolean</code> returns <code>true</code>.</p></item><item><p>If <code>$arg</code> is a singleton value of type <code>xs:boolean</code> or a
+ :                   derived from <code>xs:boolean</code>, <code>fn:boolean</code> returns
+ :                      <code>$arg</code>.</p></item><item><p>If <code>$arg</code> is a singleton value of type <code>xs:string</code> or a type
+ :                   derived from <code>xs:string</code>, <code>xs:anyURI</code> or a type derived from
+ :                      <code>xs:anyURI</code> or <code>xs:untypedAtomic</code>,
+ :                      <code>fn:boolean</code> returns <code>false</code> if the operand value has
+ :                   zero length; otherwise it returns <code>true</code>.</p></item><item><p>If <code>$arg</code> is a singleton value of any numeric type or a type derived
+ :                   from a numeric type, <code>fn:boolean</code> returns <code>false</code> if the
+ :                   operand value is <code>NaN</code> or is numerically equal to zero; otherwise it
+ :                   returns <code>true</code>.</p></item><item><p>In all other cases, <code>fn:boolean</code> raises a type error <errorref class="RG" code="0006"/>.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">The static semantics of this function are described in [Formal
+ :             Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result of this function is not necessarily the same as <code>$arg cast as
+ :                xs:boolean</code>. For example, <code>fn:boolean("false")</code> returns the value
+ :                <code>true</code> whereas <code>"false" cast as xs:boolean</code> (which can also be
+ :             written <code>xs:boolean("false")</code>) returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>let <code>$abc</code> := <code>("a", "b", "")</code></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><code>fn:boolean($abc)</code> raises a type error <errorref class="RG" code="0006"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:boolean($abc[1])</code> returns <code>true()</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:boolean($abc[0])</code> returns <code>false()</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:boolean($abc[3])</code> returns <code>false()</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-boolean
+ :)
+declare function fn:boolean($arg as item()*) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds <code>$arg</code> upwards to a whole number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="ceiling" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the smallest (closest to negative infinity) number with no
+ :             fractional part that is not less than the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For <code>xs:float</code> and <code>xs:double</code> arguments, if the argument is
+ :             positive zero, then positive zero is returned. If the argument is negative zero, then
+ :             negative zero is returned. If the argument is less than zero and greater than -1,
+ :             negative zero is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:ceiling(10.5)</code> returns <code>11</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:ceiling(-10.5)</code> returns <code>-10</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-ceiling
+ :)
+declare function fn:ceiling($arg as numeric?) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if two strings are equal, considered codepoint-by-codepoint.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="codepoint-equal" return-type="xs:boolean?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="comparand1" type="xs:string?"/><arg name="comparand2" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If either argument is the empty sequence, the function returns the empty sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns <code>true</code> or <code>false</code> depending on
+ :             whether the value of <code>$comparand1</code> is equal to the value of
+ :                <code>$comparand2</code>, according to the Unicode codepoint collation
+ :                (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function allows <code>xs:anyURI</code> values to be compared without having to
+ :             specify the Unicode codepoint collation.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-codepoint-equal
+ :)
+declare function fn:codepoint-equal( $comparand1 as xs:string?,  $comparand2 as xs:string?) as  xs:boolean? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Creates an <code>xs:string</code> from a sequence of <termref def="codepoint">codepoints</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="codepoints-to-string" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:integer*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the string made up from the <termref def="character">characters</termref> whose Unicode <termref def="codepoint">codepoints</termref> are
+ :             supplied in <code>$arg</code>. This will be the zero-length string if <code>$arg</code>
+ :             is the empty sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="M">dynamic</phrase> error is raised <errorref class="CH" code="0001"/> if any of the codepoints in
+ :                <code>$arg</code> is not a permitted XML character.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-codepoints-to-string
+ :)
+declare function fn:codepoints-to-string($arg as xs:integer*) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a sequence of nodes representing a collection of documents indentified
+ :             by a collection URI; or a default collection if no URI is supplied.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="collection" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="collection" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		available node collections, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function takes an <code>xs:string</code> as argument and returns a sequence of
+ :             nodes obtained by interpreting <code>$arg</code> as an <code>xs:anyURI</code> and
+ :             resolving it according to the mapping specified in <term>Available node collections</term>
+ :             described in <xspecref spec="XP30" ref="id-xp-evaluation-context-components"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <term>Available node collections</term> provides a mapping from this string to a sequence
+ :             of nodes, the function returns that sequence. If <term>Available node collections</term> maps
+ :             the string to an empty sequence, then the function returns an empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is not specified, the function returns the sequence of the nodes in
+ :             the default node collection in the dynamic context. See <xspecref spec="XP30" ref="id-xp-evaluation-context-components"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is a relative <code>xs:anyURI</code>, it is resolved
+ :             against the value of the base-URI property from the static context. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function behaves as if it had been
+ :             called without an argument. See above.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>By default, this function is <termref def="deterministic">deterministic</termref>. 
+ :             This means that repeated
+ :             calls on the function with the same argument will return the same result. However, for
+ :             performance reasons, implementations may provide a user option to evaluate the function
+ :             without a guarantee of determinism. The manner in which any such option is provided is
+ :                <termref def="implementation-defined"/>. If the user has not selected such an option,
+ :             a call to this function must either return a deterministic result or must raise a <phrase diff="add" at="L">dynamic</phrase> error
+ :                <errorref class="DC" code="0003"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">There is no requirement that the returned nodes should be in document
+ :             order, nor is there a requirement that the result should contain no duplicates.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if no URI is supplied and the
+ :             value of the default collection is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="J">A <phrase diff="add" at="M">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if <term>available
+ :                node collections</term> provides no mapping for the absolutized URI.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0004"/> if <code>$arg</code> is not a
+ :             valid <code>xs:anyURI</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-collection
+ :)
+declare function fn:collection() as  node()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a sequence of nodes representing a collection of documents indentified
+ :             by a collection URI; or a default collection if no URI is supplied.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="collection" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="collection" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		available node collections, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function takes an <code>xs:string</code> as argument and returns a sequence of
+ :             nodes obtained by interpreting <code>$arg</code> as an <code>xs:anyURI</code> and
+ :             resolving it according to the mapping specified in <term>Available node collections</term>
+ :             described in <xspecref spec="XP30" ref="id-xp-evaluation-context-components"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <term>Available node collections</term> provides a mapping from this string to a sequence
+ :             of nodes, the function returns that sequence. If <term>Available node collections</term> maps
+ :             the string to an empty sequence, then the function returns an empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is not specified, the function returns the sequence of the nodes in
+ :             the default node collection in the dynamic context. See <xspecref spec="XP30" ref="id-xp-evaluation-context-components"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is a relative <code>xs:anyURI</code>, it is resolved
+ :             against the value of the base-URI property from the static context. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function behaves as if it had been
+ :             called without an argument. See above.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>By default, this function is <termref def="deterministic">deterministic</termref>. 
+ :             This means that repeated
+ :             calls on the function with the same argument will return the same result. However, for
+ :             performance reasons, implementations may provide a user option to evaluate the function
+ :             without a guarantee of determinism. The manner in which any such option is provided is
+ :                <termref def="implementation-defined"/>. If the user has not selected such an option,
+ :             a call to this function must either return a deterministic result or must raise a <phrase diff="add" at="L">dynamic</phrase> error
+ :                <errorref class="DC" code="0003"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">There is no requirement that the returned nodes should be in document
+ :             order, nor is there a requirement that the result should contain no duplicates.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if no URI is supplied and the
+ :             value of the default collection is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="J">A <phrase diff="add" at="M">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if <term>available
+ :                node collections</term> provides no mapping for the absolutized URI.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0004"/> if <code>$arg</code> is not a
+ :             valid <code>xs:anyURI</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-collection
+ :)
+declare function fn:collection($arg as xs:string?) as  node()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns -1, 0, or 1, depending on whether <code>$comparand1</code> collates
+ :             before, equal to, or after <code>$comparand2</code> according to the rules of a selected
+ :             collation.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="compare" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="comparand1" type="xs:string?"/><arg name="comparand2" type="xs:string?"/></proto></example><example role="signature"><proto name="compare" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="comparand1" type="xs:string?"/><arg name="comparand2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns -1, 0, or 1, depending on whether the value of the <code>$comparand1</code> is
+ :             respectively less than, equal to, or greater than the value of <code>$comparand2</code>,
+ :             according to the rules of the collation that is used. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If either <code>$comparand1</code> or <code>$comparand2</code> is the empty sequence,
+ :             the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function, called with the first signature, defines the semantics of the "eq", "ne",
+ :             "gt", "lt", "le" and "ge" operators on <code>xs:string</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('abc', 'abc')</code> returns <code>0</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strasse', 'Straße')</code> returns <code>0</code>. <emph>(Assuming the default collation includes provisions that equate
+ :                      <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>). Otherwise, the returned value depends on the
+ :                   semantics of the default collation.).</emph></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strasse', 'Straße',
+ :                   'http://example.com/deutsch')</code> returns <code>0</code>. <emph>(Assuming the collation identified by the URI
+ :                      <code>http://example.com/deutsch</code> includes provisions that equate
+ :                      <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>). Otherwise, the returned value depends on the
+ :                   semantics of that collation.).</emph></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strassen', 'Straße')</code> returns <code>1</code>. <emph>(Assuming the default collation includes provisions that treat
+ :                   differences between <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>) with less strength than the differences between the
+ :                   base characters, such as the final <quote>n</quote>. ).</emph></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-compare
+ :)
+declare function fn:compare($comparand1 as xs:string?,  $comparand2 as xs:string?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns -1, 0, or 1, depending on whether <code>$comparand1</code> collates
+ :             before, equal to, or after <code>$comparand2</code> according to the rules of a selected
+ :             collation.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="compare" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="comparand1" type="xs:string?"/><arg name="comparand2" type="xs:string?"/></proto></example><example role="signature"><proto name="compare" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="comparand1" type="xs:string?"/><arg name="comparand2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns -1, 0, or 1, depending on whether the value of the <code>$comparand1</code> is
+ :             respectively less than, equal to, or greater than the value of <code>$comparand2</code>,
+ :             according to the rules of the collation that is used. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If either <code>$comparand1</code> or <code>$comparand2</code> is the empty sequence,
+ :             the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function, called with the first signature, defines the semantics of the "eq", "ne",
+ :             "gt", "lt", "le" and "ge" operators on <code>xs:string</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('abc', 'abc')</code> returns <code>0</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strasse', 'Straße')</code> returns <code>0</code>. <emph>(Assuming the default collation includes provisions that equate
+ :                      <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>). Otherwise, the returned value depends on the
+ :                   semantics of the default collation.).</emph></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strasse', 'Straße',
+ :                   'http://example.com/deutsch')</code> returns <code>0</code>. <emph>(Assuming the collation identified by the URI
+ :                      <code>http://example.com/deutsch</code> includes provisions that equate
+ :                      <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>). Otherwise, the returned value depends on the
+ :                   semantics of that collation.).</emph></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:compare('Strassen', 'Straße')</code> returns <code>1</code>. <emph>(Assuming the default collation includes provisions that treat
+ :                   differences between <quote>ss</quote> and the (German) character <quote>ß</quote>
+ :                      (<quote>sharp-s</quote>) with less strength than the differences between the
+ :                   base characters, such as the final <quote>n</quote>. ).</emph></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-compare
+ :)
+declare function fn:compare( $comparand1 as xs:string?,  $comparand2 as xs:string?,  $collation as xs:string) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the concatenation of the string values of the arguments.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>
+ :          The two-argument form of this function defines the semantics of the "||" operator.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="concat" return-type="xs:string" isOp="yes" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:anyAtomicType?"/><arg name="arg2" type="xs:anyAtomicType?"/><arg name="..." type="xs:anyAtomicType?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function accepts two or more <code>xs:anyAtomicType</code> arguments and casts each
+ :             one to <code>xs:string</code>. The function returns the <code>xs:string</code> that is
+ :             the concatenation of the values of its arguments after conversion. If any argument is
+ :             the empty sequence, that argument is treated as the zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E19">The <code>fn:concat</code> function is specified to allow two or
+ :             more arguments, which are concatenated together. This is the only function specified in
+ :             this document that allows a variable number of arguments. This capability is retained
+ :             for compatibility with <bibref ref="xpath"/>. </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-concat
+ :)
+declare function fn:concat( $arg1 as xs:anyAtomicType?,  $arg2 as xs:anyAtomicType?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="contains" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="contains" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> is the zero-length string, the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> contains (at the beginning, at the end, or anywhere within) at
+ :             least one sequence of collation units that provides a <term>minimal match</term> to the
+ :             collation units in the value of <code>$arg2</code>, according to the collation that is
+ :             used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p><term>Minimal match</term> is defined in <bibref ref="Unicode-Collations"/>. </p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-contains
+ :)
+declare function fn:contains($arg1 as xs:string?,  $arg2 as xs:string?) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="contains" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="contains" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> is the zero-length string, the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> contains (at the beginning, at the end, or anywhere within) at
+ :             least one sequence of collation units that provides a <term>minimal match</term> to the
+ :             collation units in the value of <code>$arg2</code>, according to the collation that is
+ :             used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p><term>Minimal match</term> is defined in <bibref ref="Unicode-Collations"/>. </p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-contains
+ :)
+declare function fn:contains( $arg1 as xs:string?,  $arg2 as xs:string?,  $collation as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of items in a sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="count" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the number of items in the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns 0 if <code>$arg</code> is the empty sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-count
+ :)
+declare function fn:count($arg as item()*) as  xs:integer external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns an <code>xs:dateTime</code> value created by combining an
+ :                <code>xs:date</code> and an <code>xs:time</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="dateTime" return-type="xs:dateTime?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:date?"/><arg name="arg2" type="xs:time?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If either <code>$arg1</code> or <code>$arg2</code> is the empty sequence the function
+ :             returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:dateTime</code> whose date component is
+ :             equal to <code>$arg1</code> and whose time component is equal to <code>$arg2</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The timezone of the result is computed as follows:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If neither argument has a timezone, the result has no timezone.</p></item><item><p>If exactly one of the arguments has a timezone, or if both arguments have the same
+ :                   timezone, the result has this timezone.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RG" code="0008"/> if the two arguments both have
+ :             timezones and the timezones are different. </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-dateTime
+ :)
+declare function fn:dateTime($arg1 as xs:date?,  $arg2 as xs:time?) as  xs:dateTime? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the day component of an <code>xs:date</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="day-from-date" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> between 1 and 31, both
+ :             inclusive, representing the day component in the localized value of
+ :             <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:day-from-date(xs:date("1999-05-31-05:00"))</code> returns <code>31</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:day-from-date(xs:date("2000-01-01+05:00"))</code> returns <code>1</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-day-from-date
+ :)
+declare function fn:day-from-date($arg as xs:date?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of days in a duration.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="days-from-duration" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:duration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> representing the days
+ :             component in the value of <code>$arg</code>. The result is obtained by casting
+ :                <code>$arg</code> to an <code>xs:dayTimeDuration</code> (see <specref ref="casting-to-durations"/>) and then computing the days component as described in
+ :                <specref ref="canonical-dayTimeDuration"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a negative duration then the result will be negative..</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is an <code>xs:yearMonthDuration</code> the function returns 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:days-from-duration(xs:dayTimeDuration("P3DT10H"))</code> returns <code>3</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:days-from-duration(xs:dayTimeDuration("P3DT55H"))</code> returns <code>5</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:days-from-duration(xs:yearMonthDuration("P3Y5M"))</code> returns <code>0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-days-from-duration
+ :)
+declare function fn:days-from-duration($arg as xs:duration?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> This function assesses whether two sequences are deep-equal to each other. To
+ :             be deep-equal, they must contain items that are pairwise deep-equal; and for two items
+ :             to be deep-equal, they must either be atomic values that compare equal, or nodes of the
+ :             same kind, with the same name, whose children are deep-equal.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="deep-equal" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="parameter1" type="item()*"/><arg name="parameter2" type="item()*"/></proto></example><example role="signature"><proto name="deep-equal" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="parameter1" type="item()*"/><arg name="parameter2" type="item()*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$collation</code> argument identifies a collation which is used at all levels
+ :             of recursion when strings are compared (but not when names are compared), according to
+ :             the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are both empty, the function returns <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are of different lengths, the function returns
+ :             <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are of the same length, the function returns <code>true</code> if
+ :             and only if every item in the sequence <code>$parameter1</code> is deep-equal to the
+ :             item at the same position in the sequence <code>$parameter2</code>. The rules for
+ :             deciding whether two items are deep-equal follow.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Call the two items <code>$i1</code> and <code>$i2</code> respectively.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$i1</code> and <code>$i2</code> are both atomic values, they are deep-equal if
+ :             and only if <code>($i1 eq $i2)</code> is <code>true</code>, or if both values are
+ :                <code>NaN</code>. If the <code>eq</code> operator is not defined for <code>$i1</code>
+ :             and <code>$i2</code>, the function returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If one of the pair <code>$i1</code> or <code>$i2</code> is an atomic value and the
+ :             other is not,
+ :             <!--<phrase diff="add" at="MAP">or if one is a node and the other is not, </phrase>-->
+ :             the function returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$i1</code> and <code>$i2</code> are both nodes, they are compared as described
+ :             below:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the two nodes are of different kinds, the result is <code>false</code>.</p></item><item><p>If the two nodes are both document nodes then they are deep-equal if and only if
+ :                   the sequence <code>$i1/(*|text())</code> is deep-equal to the sequence
+ :                      <code>$i2/(*|text())</code>.</p></item><item><p> If the two nodes are both element nodes then they are deep-equal if and only if
+ :                   all of the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><!-- bug 17252 --><p diff="chg" at="L">Either both nodes are both annotated as having simple content or both nodes are
+ :                         annotated as having complex content. For this purpose "simple content" means either a simple
+ :                      type or a complex type with simple content; "complex content" means a complex type whose variety
+ :                      is mixed, element-only, or empty.</p><note diff="add" at="L"><p>It is a consequence of this rule that validating a document
+ :                      <var>D</var> against a schema will usually (but not necessarily) result in a document that is not deep-equal
+ :                         to <var>D</var>. The exception is when the schema allows all elements to have mixed content.</p></note></item><item><p>The two nodes have the same number of attributes, and for every attribute
+ :                            <code>$a1</code> in <code>$i1/@*</code> there exists an attribute
+ :                            <code>$a2</code> in <code>$i2/@*</code> such that <code>$a1</code> and
+ :                            <code>$a2</code> are deep-equal.</p></item><item><p> One of the following conditions holds:</p><ulist><item><p>Both element nodes are annotated as having simple content 
+ :                               <phrase diff="add" at="L">(as defined in 3(b) above)</phrase>, and
+ :                               the typed value of <code>$i1</code> is deep-equal to the typed value
+ :                               of <code>$i2</code>.</p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety element-only, and the sequence <code>$i1/*</code> is
+ :                               deep-equal to the sequence <code>$i2/*</code>.</phrase></p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety mixed</phrase>, and the sequence <code>$i1/(*|text())</code> is
+ :                               deep-equal to the sequence <code>$i2/(*|text())</code>.</p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety empty</phrase>.</p></item></ulist></item></olist></item><item><p>If the two nodes are both attribute nodes then they are deep-equal if and only if
+ :                   both the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><p>The typed value of <code>$i1</code> is deep-equal to the typed value of
+ :                            <code>$i2</code>.</p></item></olist></item><item><p> If the two nodes are both processing instruction nodes<phrase diff="del" at="A-E42"> or namespace bindings</phrase>, then they are deep-equal if and
+ :                   only if both the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><p>The string value of <code>$i1</code> is equal to the string value of
+ :                            <code>$i2</code>.</p></item></olist></item><item><p diff="add" at="A-E42"> If the two nodes are both namespace nodes, then they are deep-equal if and only
+ :                   if both the following conditions are satisfied:</p><olist><item><p diff="add" at="A-E42">The two nodes either have the same name or are both nameless, that is
+ :                            <code>fn:deep-equal(node-name($i1), node-name($i2))</code>.</p></item><item><p diff="add" at="A-E42">The string value of <code>$i1</code> is equal to the string value of
+ :                            <code>$i2</code> when compared using the Unicode codepoint collation.</p></item></olist></item><item><p>If the two nodes are both text nodes or comment nodes, then they are deep-equal if
+ :                   and only if their string-values are equal.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">A <phrase diff="add" at="L">type</phrase> error is raised <errorref class="TY" code="0015" type="type"/> 
+ :             if either input sequence contains a function item.
+ :             <!--<phrase diff="add" at="MAP">that is not a map</phrase>,-->
+ :          </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-deep-equal
+ :)
+declare function fn:deep-equal($parameter1 as item()*,  $parameter2 as item()*) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> This function assesses whether two sequences are deep-equal to each other. To
+ :             be deep-equal, they must contain items that are pairwise deep-equal; and for two items
+ :             to be deep-equal, they must either be atomic values that compare equal, or nodes of the
+ :             same kind, with the same name, whose children are deep-equal.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="deep-equal" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="parameter1" type="item()*"/><arg name="parameter2" type="item()*"/></proto></example><example role="signature"><proto name="deep-equal" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="parameter1" type="item()*"/><arg name="parameter2" type="item()*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$collation</code> argument identifies a collation which is used at all levels
+ :             of recursion when strings are compared (but not when names are compared), according to
+ :             the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are both empty, the function returns <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are of different lengths, the function returns
+ :             <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the two sequences are of the same length, the function returns <code>true</code> if
+ :             and only if every item in the sequence <code>$parameter1</code> is deep-equal to the
+ :             item at the same position in the sequence <code>$parameter2</code>. The rules for
+ :             deciding whether two items are deep-equal follow.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Call the two items <code>$i1</code> and <code>$i2</code> respectively.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$i1</code> and <code>$i2</code> are both atomic values, they are deep-equal if
+ :             and only if <code>($i1 eq $i2)</code> is <code>true</code>, or if both values are
+ :                <code>NaN</code>. If the <code>eq</code> operator is not defined for <code>$i1</code>
+ :             and <code>$i2</code>, the function returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If one of the pair <code>$i1</code> or <code>$i2</code> is an atomic value and the
+ :             other is not,
+ :             <!--<phrase diff="add" at="MAP">or if one is a node and the other is not, </phrase>-->
+ :             the function returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$i1</code> and <code>$i2</code> are both nodes, they are compared as described
+ :             below:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the two nodes are of different kinds, the result is <code>false</code>.</p></item><item><p>If the two nodes are both document nodes then they are deep-equal if and only if
+ :                   the sequence <code>$i1/(*|text())</code> is deep-equal to the sequence
+ :                      <code>$i2/(*|text())</code>.</p></item><item><p> If the two nodes are both element nodes then they are deep-equal if and only if
+ :                   all of the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><!-- bug 17252 --><p diff="chg" at="L">Either both nodes are both annotated as having simple content or both nodes are
+ :                         annotated as having complex content. For this purpose "simple content" means either a simple
+ :                      type or a complex type with simple content; "complex content" means a complex type whose variety
+ :                      is mixed, element-only, or empty.</p><note diff="add" at="L"><p>It is a consequence of this rule that validating a document
+ :                      <var>D</var> against a schema will usually (but not necessarily) result in a document that is not deep-equal
+ :                         to <var>D</var>. The exception is when the schema allows all elements to have mixed content.</p></note></item><item><p>The two nodes have the same number of attributes, and for every attribute
+ :                            <code>$a1</code> in <code>$i1/@*</code> there exists an attribute
+ :                            <code>$a2</code> in <code>$i2/@*</code> such that <code>$a1</code> and
+ :                            <code>$a2</code> are deep-equal.</p></item><item><p> One of the following conditions holds:</p><ulist><item><p>Both element nodes are annotated as having simple content 
+ :                               <phrase diff="add" at="L">(as defined in 3(b) above)</phrase>, and
+ :                               the typed value of <code>$i1</code> is deep-equal to the typed value
+ :                               of <code>$i2</code>.</p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety element-only, and the sequence <code>$i1/*</code> is
+ :                               deep-equal to the sequence <code>$i2/*</code>.</phrase></p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety mixed</phrase>, and the sequence <code>$i1/(*|text())</code> is
+ :                               deep-equal to the sequence <code>$i2/(*|text())</code>.</p></item><item><p>Both element nodes have a type annotation that is <phrase diff="chg" at="L">a complex type with
+ :                               variety empty</phrase>.</p></item></ulist></item></olist></item><item><p>If the two nodes are both attribute nodes then they are deep-equal if and only if
+ :                   both the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><p>The typed value of <code>$i1</code> is deep-equal to the typed value of
+ :                            <code>$i2</code>.</p></item></olist></item><item><p> If the two nodes are both processing instruction nodes<phrase diff="del" at="A-E42"> or namespace bindings</phrase>, then they are deep-equal if and
+ :                   only if both the following conditions are satisfied:</p><olist><item><p>The two nodes have the same name, that is <code>(node-name($i1) eq
+ :                            node-name($i2))</code>.</p></item><item><p>The string value of <code>$i1</code> is equal to the string value of
+ :                            <code>$i2</code>.</p></item></olist></item><item><p diff="add" at="A-E42"> If the two nodes are both namespace nodes, then they are deep-equal if and only
+ :                   if both the following conditions are satisfied:</p><olist><item><p diff="add" at="A-E42">The two nodes either have the same name or are both nameless, that is
+ :                            <code>fn:deep-equal(node-name($i1), node-name($i2))</code>.</p></item><item><p diff="add" at="A-E42">The string value of <code>$i1</code> is equal to the string value of
+ :                            <code>$i2</code> when compared using the Unicode codepoint collation.</p></item></olist></item><item><p>If the two nodes are both text nodes or comment nodes, then they are deep-equal if
+ :                   and only if their string-values are equal.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">A <phrase diff="add" at="L">type</phrase> error is raised <errorref class="TY" code="0015" type="type"/> 
+ :             if either input sequence contains a function item.
+ :             <!--<phrase diff="add" at="MAP">that is not a map</phrase>,-->
+ :          </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-deep-equal
+ :)
+declare function fn:deep-equal( $parameter1 as item()*,  $parameter2 as item()*,  $collation as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the values that appear in a sequence, with duplicates eliminated.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="distinct-values" return-type="xs:anyAtomicType*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="distinct-values" return-type="xs:anyAtomicType*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the sequence that results from removing from <code>$arg</code> all
+ :             but one of a set of values that are equal to one another. Values are compared using the
+ :                <code>eq</code> operator, subject to the caveats defined below.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Values of type <code>xs:untypedAtomic</code> are compared as if they were of type
+ :                <code>xs:string</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Values that cannot be compared, because the <code>eq</code> operator is not defined for
+ :             their types, are considered to be distinct.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. This collation is used when string comparison is
+ :             required.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For <code>xs:float</code> and <code>xs:double</code> values, positive zero is equal to
+ :             negative zero and, although <code>NaN</code> does not equal itself, if <code>$arg</code>
+ :             contains multiple <code>NaN</code> values a single <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>xs:dateTime</code>, <code>xs:date</code> or <code>xs:time</code> values do not
+ :             have a timezone, they are considered to have the implicit timezone provided by the
+ :             dynamic context for the purpose of comparison. Note that <code>xs:dateTime</code>,
+ :                <code>xs:date</code> or <code>xs:time</code> values can compare equal even if their
+ :             timezones are different.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The order in which the sequence of values is returned is <termref def="implementation-dependent"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Which value of a set of values that compare equal is returned is <termref def="implementation-dependent"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">The static type of the result is a sequence of prime types as defined
+ :             in [Formal Semantics].</p><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E44">
+ :             <p>If the input sequence contains values of different numeric types that differ from
+ :                each other by small amounts, then the eq operator is not transitive, because of
+ :                rounding effects occurring during type promotion. In the situation where the input
+ :                contains three values <code>A</code>, <code>B</code>, and <code>C</code> such that
+ :                   <code>A eq B</code>, <code>B eq C</code>, but <code>A ne C</code>, then the number
+ :                of items in the result of the function (as well as the choice of which items are
+ :                returned) is <termref def="implementation-dependent"/>, subject only to the
+ :                constraints that (a) no two items in the result sequence compare equal to each other,
+ :                and (b) every input item that does not appear in the result sequence compares equal
+ :                to some item that does appear in the result sequence.</p>
+ : 
+ :             <p>For example, this arises when computing:</p>
+ : 
+ :             <eg xml:space="preserve">    distinct-values(
+ :             (xs:float('1.0'),
+ :             xs:decimal('1.0000000000100000000001',
+ :             xs:double( '1.00000000001'))</eg>
+ : 
+ :             <p>because the values of type <code>xs:float</code> and <code>xs:double</code> both
+ :                compare equal to the value of type <code>xs:decimal</code> but not equal to each
+ :                other. </p>
+ :          </change><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-distinct-values
+ :)
+declare function fn:distinct-values($arg as xs:anyAtomicType*) as  xs:anyAtomicType* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the values that appear in a sequence, with duplicates eliminated.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="distinct-values" return-type="xs:anyAtomicType*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="distinct-values" return-type="xs:anyAtomicType*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the sequence that results from removing from <code>$arg</code> all
+ :             but one of a set of values that are equal to one another. Values are compared using the
+ :                <code>eq</code> operator, subject to the caveats defined below.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Values of type <code>xs:untypedAtomic</code> are compared as if they were of type
+ :                <code>xs:string</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Values that cannot be compared, because the <code>eq</code> operator is not defined for
+ :             their types, are considered to be distinct.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. This collation is used when string comparison is
+ :             required.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For <code>xs:float</code> and <code>xs:double</code> values, positive zero is equal to
+ :             negative zero and, although <code>NaN</code> does not equal itself, if <code>$arg</code>
+ :             contains multiple <code>NaN</code> values a single <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If <code>xs:dateTime</code>, <code>xs:date</code> or <code>xs:time</code> values do not
+ :             have a timezone, they are considered to have the implicit timezone provided by the
+ :             dynamic context for the purpose of comparison. Note that <code>xs:dateTime</code>,
+ :                <code>xs:date</code> or <code>xs:time</code> values can compare equal even if their
+ :             timezones are different.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The order in which the sequence of values is returned is <termref def="implementation-dependent"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Which value of a set of values that compare equal is returned is <termref def="implementation-dependent"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">The static type of the result is a sequence of prime types as defined
+ :             in [Formal Semantics].</p><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E44">
+ :             <p>If the input sequence contains values of different numeric types that differ from
+ :                each other by small amounts, then the eq operator is not transitive, because of
+ :                rounding effects occurring during type promotion. In the situation where the input
+ :                contains three values <code>A</code>, <code>B</code>, and <code>C</code> such that
+ :                   <code>A eq B</code>, <code>B eq C</code>, but <code>A ne C</code>, then the number
+ :                of items in the result of the function (as well as the choice of which items are
+ :                returned) is <termref def="implementation-dependent"/>, subject only to the
+ :                constraints that (a) no two items in the result sequence compare equal to each other,
+ :                and (b) every input item that does not appear in the result sequence compares equal
+ :                to some item that does appear in the result sequence.</p>
+ : 
+ :             <p>For example, this arises when computing:</p>
+ : 
+ :             <eg xml:space="preserve">    distinct-values(
+ :             (xs:float('1.0'),
+ :             xs:decimal('1.0000000000100000000001',
+ :             xs:double( '1.00000000001'))</eg>
+ : 
+ :             <p>because the values of type <code>xs:float</code> and <code>xs:double</code> both
+ :                compare equal to the value of type <code>xs:decimal</code> but not equal to each
+ :                other. </p>
+ :          </change><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-distinct-values
+ :)
+declare function fn:distinct-values( $arg as xs:anyAtomicType*,  $collation as xs:string) as  xs:anyAtomicType* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">Retrieves a document using a URI supplied as an
+ :                <code>xs:string</code>, and returns the corresponding document node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="doc" return-type="document-node()?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="uri" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		available documents, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$uri</code> is the empty sequence, the result is an empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E26">If <code>$uri</code> is a relative URI reference, it is resolved
+ :             relative to the value of the <phrase diff="chg" at="L">Static Base URI property from the static context</phrase>. The resulting
+ :             absolute URI is promoted to an <code>xs:string</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E26">If the <term>Available documents</term> described in <xspecref spec="XP30" ref="eval_context"/> provides a mapping from this string to a document
+ :             node, the function returns that document node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E26">The URI may include a fragment identifier.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>By default, this function is <termref def="deterministic">deterministic</termref>. Two calls on this function
+ :             return the same document node if the same URI Reference (after resolution to an absolute
+ :             URI Reference) is supplied to both calls. Thus, the following expression (if it does not
+ :             raise an error) will always be true:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">doc("foo.xml") is doc("foo.xml")</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>However, for performance reasons, implementations may provide a user option to evaluate
+ :             the function without a guarantee of determinism. The manner in which any such option is
+ :             provided is implementation-defined. If the user has not selected such an option, a call
+ :             of the function must either return a deterministic result or must raise a <phrase diff="add" at="L">dynamic</phrase> error
+ :                <errorref class="DC" code="0003"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p>If <code>$uri</code> is read from a source document, it is generally appropriate to
+ :                resolve it relative to the base URI property of the relevant node in the source
+ :                document. This can be achieved by calling the <code>fn:resolve-uri</code> function,
+ :                and passing the resulting absolute URI as an argument to the <code>fn:doc</code>
+ :                function.</p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If two calls to this function supply different absolute URI References as arguments, the
+ :             same document node may be returned if the implementation can determine that the two
+ :             arguments refer to the same resource.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> By defining the semantics of this function in terms of a string-to-document-node
+ :             mapping in the dynamic context, the specification is acknowledging that the results of
+ :             this function are outside the purview of the language specification itself, and depend
+ :             entirely on the run-time environment in which the expression is evaluated. This run-time
+ :             environment includes not only an unpredictable collection of resources ("the web"), but
+ :             configurable machinery for locating resources and turning their contents into document
+ :             nodes within the XPath data model. Both the set of resources that are reachable, and the
+ :             mechanisms by which those resources are parsed and validated, are <termref def="implementation-dependent"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> One possible processing model for this function is as follows. The resource identified
+ :             by the URI Reference is retrieved. If the resource cannot be retrieved, a <phrase diff="add" at="L">dynamic</phrase> error is
+ :             raised <errorref class="DC" code="0002"/>. The data resulting from the retrieval action
+ :             is then parsed as an XML document and a tree is constructed in accordance with the
+ :                <bibref ref="xpath-datamodel-30"/>. If the top-level media type is known and is
+ :             "text", the content is parsed in the same way as if the media type were text/xml;
+ :             otherwise, it is parsed in the same way as if the media type were application/xml. If
+ :             the contents cannot be parsed successfully, a <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0002"/>. Otherwise, the result of the function is the document node at the root
+ :             of the resulting tree. This tree is then optionally validated against a schema.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Various aspects of this processing are <termref def="implementation-defined"/>.
+ :             Implementations may provide external configuration options that allow any aspect of the
+ :             processing to be controlled by the user. In particular:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>The set of URI schemes that the implementation recognizes is
+ :                   implementation-defined. Implementations may allow the mapping of URIs to resources
+ :                   to be configured by the user, using mechanisms such as catalogs or user-written
+ :                   URI handlers.</p></item><item><p>The handling of non-XML media types is implementation-defined. Implementations may
+ :                   allow instances of the data model to be constructed from non-XML resources, under
+ :                   user control.</p></item><item><p>It is <termref def="implementation-defined"/> whether DTD validation and/or schema
+ :                   validation is applied to the source document.</p></item><item><p>Implementations may provide user-defined error handling options that allow
+ :                   processing to continue following an error in retrieving a resource, or in parsing
+ :                   and validating its content. When errors have been handled in this way, the
+ :                   function may return either an empty sequence, or a fallback document provided by
+ :                   the error handler.</p></item><item><p>Implementations may provide user options that relax the requirement for the
+ :                   function to return deterministic results.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E26">A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="DC" code="0005"/> if <code>$uri</code> is not a valid URI.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if the
+ :                <term>available documents</term> provides no mapping for the absolutized URI.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0002"/> if the resource cannot be
+ :             retrieved or cannot be parsed successfully as XML.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0003"/> if the implementation is not able
+ :             to guarantee that the result of the function will be deterministic, and the user has not
+ :             indicated that an unstable result is acceptable.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-doc
+ :)
+declare function fn:doc($uri as xs:string?) as  document-node()? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">The function returns true if and only if the function
+ :             call <code>fn:doc($uri)</code> would return a document node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="doc-available" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="uri" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		available documents, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">If <code>$uri</code> is an empty sequence, this function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">If a call on <code>fn:doc($uri)</code> would return a document
+ :             node, this function returns <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0005"/> if
+ :                <code>$uri</code> is not a valid URI according to the rules applied by the
+ :             implementation of <code>fn:doc</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E26">Otherwise, this function returns <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If this function returns <code>true</code>, then calling <code>fn:doc($uri)</code>
+ :             within the same <termref def="execution-scope"/> must return a document node. However,
+ :             if nondeterministic processing has been selected for the <code>fn:doc</code> function,
+ :             this guarantee is lost.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-doc-available
+ :)
+declare function fn:doc-available($uri as xs:string?) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31"> Returns the sequence of element nodes that have an
+ :                <code>ID</code> value matching the value of one or more of the <code>IDREF</code>
+ :             values supplied in <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="element-with-id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="element-with-id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31">
+ : 
+ :             <note><p>The effect of this function is identical to <function>fn:id</function> in respect
+ :                   of elements that have an attribute with the <code>is-id</code> property. However,
+ :                   it behaves differently in respect of element nodes with the <code>is-id</code>
+ :                   property. Whereas the <code>fn:id</code>, for legacy reasons, returns the element
+ :                   that has the <code>is-id</code> property, this parent returns the element
+ :                   identified by the ID, which is the parent of the element having the
+ :                      <code>is-id</code> property.</p></note>
+ :             <p>The function returns a sequence, in document order with duplicates eliminated,
+ :                containing every element node <code>E</code> that satisfies all the following
+ :                conditions:</p>
+ :             <olist><item><p>
+ :                      <code>E</code> is in the target document. The target document is the document
+ :                      containing <code>$node</code>, or the document containing the context item
+ :                         (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                      function if <code>$node</code> is omitted is exactly the same as if the context
+ :                      item had been passed as <code>$node</code>.</p></item><item><p><code>E</code> has an <code>ID</code> value equal to one of the candidate
+ :                         <code>IDREF</code> values, where:</p><ulist><item><p> An element has an <code>ID</code> value equal to <code>V</code> if
+ :                            either or both of the following conditions are true:</p><ulist><item><p>The element has an child element node whose <code>is-id</code>
+ :                                  property (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and
+ :                                  whose typed value is equal to <code>V</code> under the rules of the
+ :                                     <code>eq</code> operator using the Unicode code point collation
+ :                                     (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item><item><p>The element has an attribute node whose <code>is-id</code> property
+ :                                  (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and whose
+ :                                  typed value is equal to <code>V</code> under the rules of the
+ :                                     <code>eq</code> operator using the Unicode code point collation
+ :                                     (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p>Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were
+ :                            of type <code>IDREFS</code>, that is, each <code>xs:string</code> in
+ :                               <code>$arg</code> is treated as a whitespace-separated sequence of
+ :                            tokens, each acting as an <code>IDREF</code>. These tokens are then
+ :                            included in the list of candidate <code>IDREF</code>s. If any of the
+ :                            tokens is not a lexically valid <code>IDREF</code> (that is, if it is not
+ :                            lexically an <code>xs:NCName</code>), it is ignored. Formally, the
+ :                            candidate <code>IDREF</code> values are the strings in the sequence given
+ :                            by the expression:</p><eg xml:space="preserve">for $s in $arg return 
+ :    fn:tokenize(fn:normalize-space($s), ' ')[. castable as xs:IDREF]</eg></item></ulist></item><item><p> If several elements have the same <code>ID</code> value, then <code>E</code>
+ :                      is the one that is first in document order.</p></item></olist>
+ :          </change><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31">
+ :             <p>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                   <code>$node</code>, or the context item if the second argument is omitted, is a
+ :                   node in a tree whose root is not a document node.</p>
+ :             <p>The following errors may be raised when <code>$node</code> is omitted:</p>
+ :             <ul><li><p>If the context
+ :                   item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                   <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                   node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul>
+ :             
+ :          </change></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-element-with-id
+ :)
+declare function fn:element-with-id($arg as xs:string*) as  element()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31"> Returns the sequence of element nodes that have an
+ :                <code>ID</code> value matching the value of one or more of the <code>IDREF</code>
+ :             values supplied in <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="element-with-id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="element-with-id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31">
+ : 
+ :             <note><p>The effect of this function is identical to <function>fn:id</function> in respect
+ :                   of elements that have an attribute with the <code>is-id</code> property. However,
+ :                   it behaves differently in respect of element nodes with the <code>is-id</code>
+ :                   property. Whereas the <code>fn:id</code>, for legacy reasons, returns the element
+ :                   that has the <code>is-id</code> property, this parent returns the element
+ :                   identified by the ID, which is the parent of the element having the
+ :                      <code>is-id</code> property.</p></note>
+ :             <p>The function returns a sequence, in document order with duplicates eliminated,
+ :                containing every element node <code>E</code> that satisfies all the following
+ :                conditions:</p>
+ :             <olist><item><p>
+ :                      <code>E</code> is in the target document. The target document is the document
+ :                      containing <code>$node</code>, or the document containing the context item
+ :                         (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                      function if <code>$node</code> is omitted is exactly the same as if the context
+ :                      item had been passed as <code>$node</code>.</p></item><item><p><code>E</code> has an <code>ID</code> value equal to one of the candidate
+ :                         <code>IDREF</code> values, where:</p><ulist><item><p> An element has an <code>ID</code> value equal to <code>V</code> if
+ :                            either or both of the following conditions are true:</p><ulist><item><p>The element has an child element node whose <code>is-id</code>
+ :                                  property (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and
+ :                                  whose typed value is equal to <code>V</code> under the rules of the
+ :                                     <code>eq</code> operator using the Unicode code point collation
+ :                                     (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item><item><p>The element has an attribute node whose <code>is-id</code> property
+ :                                  (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and whose
+ :                                  typed value is equal to <code>V</code> under the rules of the
+ :                                     <code>eq</code> operator using the Unicode code point collation
+ :                                     (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p>Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were
+ :                            of type <code>IDREFS</code>, that is, each <code>xs:string</code> in
+ :                               <code>$arg</code> is treated as a whitespace-separated sequence of
+ :                            tokens, each acting as an <code>IDREF</code>. These tokens are then
+ :                            included in the list of candidate <code>IDREF</code>s. If any of the
+ :                            tokens is not a lexically valid <code>IDREF</code> (that is, if it is not
+ :                            lexically an <code>xs:NCName</code>), it is ignored. Formally, the
+ :                            candidate <code>IDREF</code> values are the strings in the sequence given
+ :                            by the expression:</p><eg xml:space="preserve">for $s in $arg return 
+ :    fn:tokenize(fn:normalize-space($s), ' ')[. castable as xs:IDREF]</eg></item></ulist></item><item><p> If several elements have the same <code>ID</code> value, then <code>E</code>
+ :                      is the one that is first in document order.</p></item></olist>
+ :          </change><change xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="A-E31">
+ :             <p>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                   <code>$node</code>, or the context item if the second argument is omitted, is a
+ :                   node in a tree whose root is not a document node.</p>
+ :             <p>The following errors may be raised when <code>$node</code> is omitted:</p>
+ :             <ul><li><p>If the context
+ :                   item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                   <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                   node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul>
+ :             
+ :          </change></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-element-with-id
+ :)
+declare function fn:element-with-id($arg as xs:string*,  $node as node()) as  element()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the argument is the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="empty" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns
+ :                <code>true</code>; otherwise, the function returns <code>false</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:empty((1,2,3)[10])</code> returns <code>true()</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:empty(fn:remove(("hello", "world"), 1))</code> returns <code>false()</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-empty
+ :)
+declare function fn:empty($arg as item()*) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             trailing substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="ends-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="ends-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>. If the value of <code>$arg1</code> is the zero-length string and
+ :             the value of <code>$arg2</code> is not the zero-length string, then the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> starts with a sequence of collation units that provides a
+ :                <term>match</term> to the collation units of <code>$arg2</code> according to the
+ :             collation that is used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p>
+ :                <term>Match</term> is defined in <bibref ref="Unicode-Collations"/>. </p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-ends-with
+ :)
+declare function fn:ends-with($arg1 as xs:string?,  $arg2 as xs:string?) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             trailing substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="ends-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="ends-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>. If the value of <code>$arg1</code> is the zero-length string and
+ :             the value of <code>$arg2</code> is not the zero-length string, then the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> starts with a sequence of collation units that provides a
+ :                <term>match</term> to the collation units of <code>$arg2</code> according to the
+ :             collation that is used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p>
+ :                <term>Match</term> is defined in <bibref ref="Unicode-Collations"/>. </p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-ends-with
+ :)
+declare function fn:ends-with( $arg1 as xs:string?,  $arg2 as xs:string?,  $collation as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the value of a system environment variable, if it exists.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="environment-variable" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="name" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		environment variables.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The set of available <xtermref spec="XP30" ref="dt-environment-variables">environment variables</xtermref> 
+ :             is a set of (name, value) pairs forming part
+ :             of the dynamic context, in which the name is unique within the set of pairs. The name
+ :             and value are arbitrary strings.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the <code>$name</code> argument matches the name of one of these pairs, the function
+ :             returns the corresponding value.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If there is no environment variable with a matching name, the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used for matching names is <termref def="implementation-defined"/>, but
+ :             must be the same as the collation used to ensure that the names of all environment
+ :             variables are unique.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="I">The function is <termref def="dt-deterministic">deterministic</termref>, 
+ :             which means that if it is called several times
+ :          within the same <termref def="dt-execution-scope">execution scope</termref>, with the same arguments,
+ :             it must return the same result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>On many platforms, the term "environment variable" has a natural meaning in terms of
+ :             facilities provided by the operating system. This interpretation of the concept does not
+ :             exclude other interpretations, such as a mapping to a set of configuration parameters in
+ :             a database system.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Environment variable names are usually case sensitive. Names are usually of the form
+ :                <code>(letter|_) (letter|_|digit)*</code>, but this varies by platform.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>On some platforms, there may sometimes be multiple environment variables with the same name;
+ :             in this case, it is implementation-dependent as to which is returned; see for example
+ :                <bibref ref="POSIX.1-2008"/> (Chapter 8, Environment Variables).
+ :             Implementations <rfc2119>may</rfc2119> use prefixes or other naming conventions
+ :             to disambiguate the names.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The requirement to ensure that the function is deterministic means in practice that
+ :          the implementation must make a snapshot of the environment variables at some time
+ :          during execution, and return values obtained from this snapshot, rather than using
+ :          live values that are subject to change at any time.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Operating system environment variables may be associated with a particular process,
+ :          while queries and stylesheets may execute across multiple processes (or multiple machines).
+ :          In such circumstances implementations <rfc2119>may</rfc2119> choose to provide access
+ :          to the environment variables associated with the process in which the query or stylesheet
+ :          processing was initiated.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Security advice: Queries from untrusted sources should not be permitted unrestricted
+ :             access to environment variables. For example, the name of the account under which the
+ :             query is running may be useful information to a would-be intruder. An implementation may
+ :             therefore choose to restrict access to the environment, or may provide a facility to
+ :             make <code>fn:environment-variable</code> always return the empty sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-environment-variable
+ :)
+declare function fn:environment-variable($name as xs:string) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the <code>fn:error</code> function raises an application-defined
+ :             error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/><arg name="error-object" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function never returns a value. Instead it always raises an error. The effect of
+ :             the error is identical to the effect of dynamic errors raised implicitly, for example
+ :             when an incorrect argument is supplied to a function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The parameters to the <code>fn:error</code> function supply information that is
+ :             associated with the error condition and that is made available to a caller that asks for
+ :             information about the error. The error may be caught either by the host language (using
+ :             a try/catch construct in XSLT or XQuery, for example), or by the calling application or
+ :             external processing environment. The way in which error information is returned to the
+ :             external processing environment is <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>fn:error</code> is called with no arguments, then its behavior is the same as
+ :             the function call: </p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:error(fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')) </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$code</code> is the empty sequence then the effective value is the
+ :                <code>xs:QName</code> constructed by:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>There are three pieces of information that may be associated with an error:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>The <code>$code</code> is an error code that distinguishes this error from others.
+ :                   It is an <code>xs:QName</code>; the namespace URI conventionally identifies the
+ :                   component, subsystem, or authority responsible for defining the meaning of the
+ :                   error code, while the local part identifies the specific error condition. The
+ :                   namespace URI <code>http://www.w3.org/2005/xqt-errors</code> is used for errors
+ :                   defined in this specification; other namespace URIs may be used for errors defined
+ :                   by the application.</p><p>If the external processing environment expects the error code to be returned as a
+ :                   URI or a string rather than as an <code>xs:QName</code>, then an error code with
+ :                   namespace URI <code>NS</code> and local part <code>LP</code> will be returned in
+ :                   the form <code>NS#LP</code>. The namespace URI part of the error code should
+ :                   therefore not include a fragment identifier.</p></item><item><p>The <code>$description</code> is a natural-language description of the error
+ :                   condition.</p></item><item><p>The <code>$error-object</code> is an arbitrary value used to convey additional
+ :                   information about the error, and may be used in any way the application
+ :                   chooses.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function always raises a <phrase diff="add" at="L">dynamic</phrase> error. By default, it raises <errorref class="ER" code="0000"/></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-error
+ :)
+declare function fn:error() as  none external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the <code>fn:error</code> function raises an application-defined
+ :             error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/><arg name="error-object" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function never returns a value. Instead it always raises an error. The effect of
+ :             the error is identical to the effect of dynamic errors raised implicitly, for example
+ :             when an incorrect argument is supplied to a function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The parameters to the <code>fn:error</code> function supply information that is
+ :             associated with the error condition and that is made available to a caller that asks for
+ :             information about the error. The error may be caught either by the host language (using
+ :             a try/catch construct in XSLT or XQuery, for example), or by the calling application or
+ :             external processing environment. The way in which error information is returned to the
+ :             external processing environment is <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>fn:error</code> is called with no arguments, then its behavior is the same as
+ :             the function call: </p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:error(fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')) </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$code</code> is the empty sequence then the effective value is the
+ :                <code>xs:QName</code> constructed by:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>There are three pieces of information that may be associated with an error:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>The <code>$code</code> is an error code that distinguishes this error from others.
+ :                   It is an <code>xs:QName</code>; the namespace URI conventionally identifies the
+ :                   component, subsystem, or authority responsible for defining the meaning of the
+ :                   error code, while the local part identifies the specific error condition. The
+ :                   namespace URI <code>http://www.w3.org/2005/xqt-errors</code> is used for errors
+ :                   defined in this specification; other namespace URIs may be used for errors defined
+ :                   by the application.</p><p>If the external processing environment expects the error code to be returned as a
+ :                   URI or a string rather than as an <code>xs:QName</code>, then an error code with
+ :                   namespace URI <code>NS</code> and local part <code>LP</code> will be returned in
+ :                   the form <code>NS#LP</code>. The namespace URI part of the error code should
+ :                   therefore not include a fragment identifier.</p></item><item><p>The <code>$description</code> is a natural-language description of the error
+ :                   condition.</p></item><item><p>The <code>$error-object</code> is an arbitrary value used to convey additional
+ :                   information about the error, and may be used in any way the application
+ :                   chooses.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function always raises a <phrase diff="add" at="L">dynamic</phrase> error. By default, it raises <errorref class="ER" code="0000"/></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-error
+ :)
+declare function fn:error($code as xs:QName) as  none external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the <code>fn:error</code> function raises an application-defined
+ :             error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/><arg name="error-object" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function never returns a value. Instead it always raises an error. The effect of
+ :             the error is identical to the effect of dynamic errors raised implicitly, for example
+ :             when an incorrect argument is supplied to a function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The parameters to the <code>fn:error</code> function supply information that is
+ :             associated with the error condition and that is made available to a caller that asks for
+ :             information about the error. The error may be caught either by the host language (using
+ :             a try/catch construct in XSLT or XQuery, for example), or by the calling application or
+ :             external processing environment. The way in which error information is returned to the
+ :             external processing environment is <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>fn:error</code> is called with no arguments, then its behavior is the same as
+ :             the function call: </p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:error(fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')) </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$code</code> is the empty sequence then the effective value is the
+ :                <code>xs:QName</code> constructed by:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>There are three pieces of information that may be associated with an error:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>The <code>$code</code> is an error code that distinguishes this error from others.
+ :                   It is an <code>xs:QName</code>; the namespace URI conventionally identifies the
+ :                   component, subsystem, or authority responsible for defining the meaning of the
+ :                   error code, while the local part identifies the specific error condition. The
+ :                   namespace URI <code>http://www.w3.org/2005/xqt-errors</code> is used for errors
+ :                   defined in this specification; other namespace URIs may be used for errors defined
+ :                   by the application.</p><p>If the external processing environment expects the error code to be returned as a
+ :                   URI or a string rather than as an <code>xs:QName</code>, then an error code with
+ :                   namespace URI <code>NS</code> and local part <code>LP</code> will be returned in
+ :                   the form <code>NS#LP</code>. The namespace URI part of the error code should
+ :                   therefore not include a fragment identifier.</p></item><item><p>The <code>$description</code> is a natural-language description of the error
+ :                   condition.</p></item><item><p>The <code>$error-object</code> is an arbitrary value used to convey additional
+ :                   information about the error, and may be used in any way the application
+ :                   chooses.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function always raises a <phrase diff="add" at="L">dynamic</phrase> error. By default, it raises <errorref class="ER" code="0000"/></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-error
+ :)
+declare function fn:error($code as xs:QName?,  $description as xs:string) as  none external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the <code>fn:error</code> function raises an application-defined
+ :             error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/></proto></example><example role="signature"><proto name="error" return-type="none" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="code" type="xs:QName?"/><arg name="description" type="xs:string"/><arg name="error-object" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function never returns a value. Instead it always raises an error. The effect of
+ :             the error is identical to the effect of dynamic errors raised implicitly, for example
+ :             when an incorrect argument is supplied to a function.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The parameters to the <code>fn:error</code> function supply information that is
+ :             associated with the error condition and that is made available to a caller that asks for
+ :             information about the error. The error may be caught either by the host language (using
+ :             a try/catch construct in XSLT or XQuery, for example), or by the calling application or
+ :             external processing environment. The way in which error information is returned to the
+ :             external processing environment is <termref def="implementation-dependent"/></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>fn:error</code> is called with no arguments, then its behavior is the same as
+ :             the function call: </p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:error(fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')) </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$code</code> is the empty sequence then the effective value is the
+ :                <code>xs:QName</code> constructed by:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:QName('http://www.w3.org/2005/xqt-errors', 'err:FOER0000')</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>There are three pieces of information that may be associated with an error:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>The <code>$code</code> is an error code that distinguishes this error from others.
+ :                   It is an <code>xs:QName</code>; the namespace URI conventionally identifies the
+ :                   component, subsystem, or authority responsible for defining the meaning of the
+ :                   error code, while the local part identifies the specific error condition. The
+ :                   namespace URI <code>http://www.w3.org/2005/xqt-errors</code> is used for errors
+ :                   defined in this specification; other namespace URIs may be used for errors defined
+ :                   by the application.</p><p>If the external processing environment expects the error code to be returned as a
+ :                   URI or a string rather than as an <code>xs:QName</code>, then an error code with
+ :                   namespace URI <code>NS</code> and local part <code>LP</code> will be returned in
+ :                   the form <code>NS#LP</code>. The namespace URI part of the error code should
+ :                   therefore not include a fragment identifier.</p></item><item><p>The <code>$description</code> is a natural-language description of the error
+ :                   condition.</p></item><item><p>The <code>$error-object</code> is an arbitrary value used to convey additional
+ :                   information about the error, and may be used in any way the application
+ :                   chooses.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function always raises a <phrase diff="add" at="L">dynamic</phrase> error. By default, it raises <errorref class="ER" code="0000"/></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-error
+ :)
+declare function fn:error( $code as xs:QName?,  $description as xs:string,  $error-object as item()*) as  none external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns <code>$arg</code> if it contains exactly one item. Otherwise, raises an
+ :             error. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="exactly-one" return-type="item()" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Except in error cases, the function returns <code>$arg</code> unchanged.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RG" code="0005"/> if <code>$arg</code> is an empty
+ :             sequence or a sequence containing more than one item.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-exactly-one
+ :)
+declare function fn:exactly-one($arg as item()*) as  item() external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the argument is a non-empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="exists" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is a non-empty sequence, the function returns
+ :                <code>true</code>; otherwise, the function returns <code>false</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:exists(fn:remove(("hello"), 1))</code> returns <code>false()</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:exists(fn:remove(("hello", "world"), 1))</code> returns <code>true()</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-exists
+ :)
+declare function fn:exists($arg as item()*) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the <code>xs:boolean</code> value <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="false" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result is equivalent to <code>xs:boolean("0")</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:false()</code> returns <code>xs:boolean(0)</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-false
+ :)
+declare function fn:false() as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns those items from the sequence <var>$seq</var> for which the supplied
+ :             function <var>$f</var> returns true.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="filter" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="item()*"/><arg name="f" type="function(item()) as xs:boolean"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of the function is equivalent to the following implementation in XQuery:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : declare function fn:filter(
+ :         $seq as item()*,
+ :         $f as function(item()) as xs:boolean)
+ :         as item()* {
+ :   if (fn:empty($seq))
+ :   then ()
+ :   else ( fn:head($seq)[$f(.) eq fn:true()], 
+ :          fn:filter(fn:tail($seq), $f)
+ :        )
+ : };</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>or its equivalent in XSLT:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : &lt;xsl:function name="fn:filter" as="item()*"&gt;
+ :   &lt;xsl:param name="seq" as="item()*"/&gt;
+ :   &lt;xsl:param name="f" as="function(item()) as xs:boolean"/&gt;
+ :   &lt;xsl:if test="fn:exists($seq)"&gt;
+ :     &lt;xsl:sequence select="fn:head($seq)[$f(.) eq fn:true()], fn:filter(fn:tail($seq), $f)"/&gt;
+ :   &lt;/xsl:if&gt;
+ : &lt;/xsl:function&gt;
+ :          </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">As a consequence of the function signature and the function calling
+ :             rules, a type error occurs if the supplied function <var>$f</var> returns anything other
+ :             than a single <code>xs:boolean</code> item; there is no conversion to an effective
+ :             boolean value.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-filter
+ :)
+declare function fn:filter($seq as item()*,  $f as function(item()) as xs:boolean) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds <code>$arg</code> downwards to a whole number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="floor" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the largest (closest to positive infinity) number with no
+ :             fractional part that is not greater than the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For <code>xs:float</code> and <code>xs:double</code> arguments, if the argument is
+ :             positive zero, then positive zero is returned. If the argument is negative zero, then
+ :             negative zero is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:floor(10.5)</code> returns <code>10</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:floor(-10.5)</code> returns <code>-11</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-floor
+ :)
+declare function fn:floor($arg as numeric?) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Processes the supplied sequence from left to right, applying the supplied
+ :             function repeatedly to each item in turn, together with an accumulated result value.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="fold-left" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="item()*"/><arg name="zero" type="item()*"/><arg name="f" type="function(item()*, item()) as item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of the function is equivalent to the following implementation in XQuery:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : declare function fn:fold-left(
+ :         $seq as item()*
+ :         $zero as item()*,
+ :         $f as function(item()*, item()) as item()*) 
+ :         as item()* {
+ :   if (fn:empty($seq))
+ :   then $zero
+ :   else fn:fold-left(fn:tail($seq), $f($zero, fn:head($seq)), $f)
+ : };</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>or its equivalent in XSLT:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : &lt;xsl:function name="fn:fold-left" as="item()*"&gt;
+ :   &lt;xsl:param name="seq" as="item()*"/&gt;
+ :   &lt;xsl:param name="zero" as="item()*"/&gt;
+ :   &lt;xsl:param name="f" as="function(item()*, item()) as item()*"/&gt;
+ :   &lt;xsl:choose&gt;
+ :     &lt;xsl:when test="fn:empty($seq)"&gt;
+ :       &lt;xsl:sequence select="$zero"/&gt;
+ :     &lt;/xsl:when&gt;
+ :     &lt;xsl:otherwise&gt;
+ :       &lt;xsl:sequence select="fn:fold-left(fn:tail($seq), $f($zero, fn:head($seq)), $f)"/&gt;
+ :     &lt;/xsl:otherwise&gt;
+ :   &lt;/xsl:choose&gt;
+ : &lt;/xsl:function&gt;
+ :          </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">As a consequence of the function signature and the function calling
+ :             rules, a type error occurs if the supplied function <var>$f</var> cannot be applied to
+ :             two arguments, where the first argument is either the value of <var>$zero</var> or the
+ :             result of a previous application of <var>$f</var>, and the second is <var>$seq</var> or
+ :             any trailing subsequence of <var>$seq</var>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-fold-left
+ :)
+declare function fn:fold-left($seq as item()*,  $zero as item()*,  $f as function(item()*, item()) as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Processes the supplied sequence from right to left, applying the supplied
+ :             function repeatedly to each item in turn, together with an accumulated result value.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="fold-right" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="item()*"/><arg name="zero" type="item()*"/><arg name="f" type="function(item()*, item()) as item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of the function is equivalent to the following implementation in XQuery:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : declare function fn:fold-right(
+ :         $seq as item()*, 
+ :         $zero as item()*, 
+ :         $f as function(item(), item()*) as item()*) 
+ :         as item()* {
+ :   if (fn:empty($seq))
+ :   then $zero
+ :   else $f(fn:head($seq), fn:fold-right(fn:tail($seq), $zero, $f))
+ : };</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>or its equivalent in XSLT:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : &lt;xsl:function name="fn:fold-right" as="item()*"&gt;
+ :   &lt;xsl:param name="seq" as="item()*"/&gt;
+ :   &lt;xsl:param name="zero" as="item()*"/&gt;
+ :   &lt;xsl:param name="f" as="function(item(), item()*) as item()*"/&gt;
+ :   &lt;xsl:choose&gt;
+ :     &lt;xsl:when test="fn:empty($seq)"&gt;
+ :       &lt;xsl:sequence select="$zero"/&gt;
+ :     &lt;/xsl:when&gt;
+ :     &lt;xsl:otherwise&gt;
+ :       &lt;xsl:sequence select="$f(fn:head($seq), fn:fold-right(fn:tail($seq), $zero, $f))"/&gt;
+ :     &lt;/xsl:otherwise&gt;
+ :   &lt;/xsl:choose&gt;
+ : &lt;/xsl:function&gt;
+ :          </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">As a consequence of the function signature and the function calling
+ :             rules, a type error occurs if the supplied function <var>$f</var> cannot be applied to
+ :             two arguments, where the first argument is any item in the sequence <var>$seq</var>, and
+ :             the second is either the value of <var>$zero</var> or the result of a previous
+ :             application of <var>$f</var>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-fold-right
+ :)
+declare function fn:fold-right($seq as item()*,  $zero as item()*,  $f as function(item()*, item()) as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:date</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-date" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:date?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-date" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:date?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-date
+ :)
+declare function fn:format-date( $value as xs:date?,  $picture as xs:string,  $language as xs:string?,  $calendar as xs:string?,  $place as xs:string?) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:date</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-date" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:date?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-date" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:date?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-date
+ :)
+declare function fn:format-date($value as xs:date?,  $picture as xs:string) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:dateTime</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-dateTime" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:dateTime?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-dateTime" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:dateTime?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-dateTime
+ :)
+declare function fn:format-dateTime( $value as xs:dateTime?,  $picture as xs:string,  $language as xs:string?,  $calendar as xs:string?,  $place as xs:string?) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:dateTime</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-dateTime" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:dateTime?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-dateTime" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:dateTime?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-dateTime
+ :)
+declare function fn:format-dateTime($value as xs:dateTime?,  $picture as xs:string) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Formats an integer according to a given picture string, using the conventions
+ :             of a given natural language if specified.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-integer" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:integer?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-integer" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:integer?"/><arg name="picture" type="xs:string"/><arg name="lang" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default language.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$value</code> is an empty sequence, the function returns a zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>In all other cases, the <code>$picture</code> argument describes the format in which
+ :                <code>$value</code> is output.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The rules that follow describe how non-negative numbers are output. If the value of
+ :                <code>$value</code> is negative, the rules below are applied to the absolute value of
+ :                <code>$value</code>, and a minus sign is prepended to the result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="L">The value of <code>$picture</code> consists of a primary format token, 
+ :             optionally followed
+ :             by a format modifier. The primary format token is always present and <rfc2119>must not</rfc2119>
+ :             be zero-length. If the string contains one or more semicolons then everything that
+ :             precedes the last semicolon is taken as the primary format token and everything
+ :             that follows is taken as the format modifier; if the string contains no
+ :             semicolon then the entire picture is taken as the primary format token, and the
+ :             format modifier is taken to be absent (which is equivalent to supplying a
+ :             zero-length string).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The primary format token is classified as one of the following:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>A <var>decimal-digit-pattern</var> made up of <var>optional-digit-signs</var>,
+ :                      <var>mandatory-digit-signs</var>, and <var>grouping-separator-signs</var>.</p><ulist><item><p>The <var>optional-digit-sign</var> is the character "#".</p></item><item><p>A <var>mandatory-digit-sign</var> is a <termref def="character">character</termref> in Unicode category Nd. All
+ :                            <var>mandatory-digit-signs</var> within the format token <rfc2119>must</rfc2119> be from the
+ :                         same digit family, where a digit family is a sequence of ten consecutive
+ :                         characters in Unicode category Nd, having digit values 0 through 9. Within
+ :                         the format token, these digits are interchangeable: a three-digit number may
+ :                         thus be indicated equivalently by <code>000</code>, <code>001</code>, or
+ :                            <code>999</code>.</p></item><item><p>a <var>grouping-separator-sign</var> is a non-alphanumeric character, that
+ :                         is a <termref def="character">character</termref> whose Unicode category is
+ :                         other than Nd, Nl, No, Lu, Ll, Lt, Lm or Lo.</p></item></ulist><p diff="chg" at="L">If the primary format token contains at least one Unicode digit 
+ :                   then it is taken as a decimal digit pattern, and in this case it <rfc2119>must</rfc2119>
+ :                   match the regular expression <code>^((\p{Nd}|#|[^\p{N}\p{L}])+?)$</code>. If it contains
+ :                   a digit but does not match this pattern, a <phrase diff="add" at="L">dynamic</phrase> error 
+ :                   is raised <errorref class="DF" code="1310"/>.</p><note><p diff="add" at="L">If a semicolon is to be used as a grouping separator, then the primary
+ :                format token as a whole must be followed by another semicolon, to ensure that
+ :                the grouping separator is not mistaken as a separator between the primary format
+ :                token and the format modifier.</p></note><p>There <rfc2119>must</rfc2119> be at least one <var>mandatory-digit-sign</var>. There may be zero or
+ :                   more <var>optional-digit-signs</var>, and (if present) these <rfc2119>must</rfc2119> precede all
+ :                      <var>mandatory-digit-signs</var>. There may be zero or more
+ :                      <var>grouping-separator-signs</var>. A <var>grouping-separator-sign</var> <rfc2119>must
+ :                   not</rfc2119> appear at the start or end of the <var>decimal-digit-pattern</var>, nor
+ :                   adjacent to another <var>grouping-separator-sign</var>.</p><p>The corresponding output format is a decimal number, using this digit family, with
+ :                   at least as many digits as there are <var>mandatory-digit-signs</var> in the
+ :                   format token. Thus, a format token <code>1</code> generates the sequence <code>0 1
+ :                      2 ... 10 11 12 ...</code>, and a format token <code>01</code> (or equivalently,
+ :                      <code>00</code> or <code>99</code>) generates the sequence <code>00 01 02 ...
+ :                      09 10 11 12 ... 99 100 101</code>. A format token of <code>&amp;#x661;</code>
+ :                   (Arabic-Indic digit one) generates the sequence <code>١</code> then <code>٢</code>
+ :                   then <code>٣</code> ...</p><p>The <var>grouping-separator-signs</var> are handled as follows. The position of
+ :                   grouping separators within the format token, counting backwards from the last
+ :                   digit, indicates the position of grouping separators to appear within the
+ :                   formatted number, and the character used as the <var>grouping-separator-sign</var>
+ :                   within the format token indicates the character to be used as the corresponding
+ :                   grouping separator in the formatted number. If <var>grouping-separator-signs</var>
+ :                   appear at regular intervals within the format token, that is if the same grouping
+ :                   separator appears at positions forming a sequence <var>N</var>, 2<var>N</var>,
+ :                      3<var>N</var>, ... for some integer value <var>N</var> (including the case
+ :                   where there is only one number in the list), then the sequence is extrapolated to
+ :                   the left, so grouping separators will be used in the formatted number at every
+ :                   multiple of <var>N</var>. For example, if the format token is <code>0'000</code>
+ :                   then the number one million will be formatted as <code>1'000'000</code>, while the
+ :                   number fifteen will be formatted as <code>0'015</code>.</p><p>The only purpose of <var>optional-digit-signs</var> is to mark the position of
+ :                      <var>grouping-separator-signs</var>. For example, if the format token is
+ :                      <code>#'##0</code> then the number one million will be formatted as
+ :                      <code>1'000'000</code>, while the number fifteen will be formatted as
+ :                      <code>15</code>. A grouping separator is included in the formatted number only
+ :                   if there is a digit to its left, which will only be the case if either (a) the
+ :                   number is large enough to require that digit, or (b) the number of
+ :                      <var>mandatory-digit-signs</var> in the format token requires insignificant
+ :                   leading zeros to be present.</p><note><p>Numbers will never be truncated. Given the <var>decimal-digit-pattern</var>
+ :                      <code>01</code>, the number three hundred will be output as <code>300</code>,
+ :                      despite the absence of any <var>optional-digit-sign</var>.</p></note></item><item><p>The format token <code>A</code>, which generates the sequence <code>A B C ... Z AA AB
+ :                      AC...</code>.</p></item><item><p>The format token <code>a</code>, which generates the sequence <code>a b c ... z aa ab
+ :                      ac...</code>.</p></item><item><p>The format token <code>i</code>, which generates the sequence <code>i ii iii iv v vi vii
+ :                      viii ix x ...</code>.</p></item><item><p>The format token <code>I</code>, which generates the sequence <code>I II III IV V VI VII
+ :                      VIII IX X ...</code>.</p></item><item><p>The format token <code>w</code>, which generates numbers written as lower-case words, for
+ :                   example in English, <code>one two three four ...</code>
+ :                </p></item><item><p>The format token <code>W</code>, which generates numbers written as upper-case words, for
+ :                   example in English, <code>ONE TWO THREE FOUR ...</code>
+ :                </p></item><item><p>The format token <code>Ww</code>, which generates numbers written as title-case words, for
+ :                   example in English, <code>One Two Three Four ...</code>
+ :                </p></item><item><p>Any other format token, which indicates a numbering sequence in which that token
+ :                   represents the number 1 (one) (but see the note below).
+ :                   <!-- Where possible (given the constraint that format tokens
+ : 						must be alphanumeric, and that they must be distinct) the format token
+ : 						used to represent a numbering sequence should be the same as the representation
+ : 						of the number 1 (one) in that sequence.-->
+ :                   It is <termref def="implementation-defined">implementation-defined</termref> which
+ :                   numbering sequences, additional to those listed above, are supported. If an
+ :                   implementation does not support a numbering sequence represented by the given
+ :                   token, it <rfc2119>must</rfc2119> use a format token of <code>1</code>.</p><note><p>In some traditional numbering sequences additional signs are added to denote
+ :                      that the letters should be interpreted as numbers; these are not included in
+ :                      the format token. An example (see also the example below) is classical Greek
+ :                      where a <emph>dexia keraia</emph> (x0374, ʹ) and sometimes an <emph>aristeri keraia</emph>
+ :                      (x0375, ͵) is added.</p></note></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For all format tokens other than the first kind above (one that consists of decimal
+ :             digits), there <rfc2119>may</rfc2119> be <termref def="implementation-defined">implementation-defined</termref> lower and upper bounds on the range of numbers that
+ :             can be formatted using this format token; indeed, for some numbering sequences there may
+ :             be intrinsic limits. For example, the format token <code>&amp;#x2460;</code> (circled
+ :             digit one, ①) has a range <phrase diff="chg" at="M">imposed by the Unicode character repertoire — 1 to 20 in
+ :             Unicode versions prior to 4.0, increased in subsequent versions</phrase>. For
+ :             the numbering sequences described above any upper bound imposed by the implementation
+ :                <rfc2119>must not</rfc2119> be less than 1000 (one thousand) and any lower bound must
+ :             not be greater than 1. Numbers that fall outside this range <rfc2119>must</rfc2119> be
+ :             formatted using the format token <code>1</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The above expansions of numbering sequences for format tokens such as <code>a</code> and
+ :                <code>i</code> are indicative but not prescriptive. There are various conventions in
+ :             use for how alphabetic sequences continue when the alphabet is exhausted, and differing
+ :             conventions for how roman numerals are written (for example, <code>IV</code> versus
+ :                <code>IIII</code> as the representation of the number 4). Sometimes alphabetic
+ :             sequences are used that omit letters such as <code>i</code> and <code>o</code>. This
+ :             specification does not prescribe the detail of any sequence other than those sequences
+ :             consisting entirely of decimal digits.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Many numbering sequences are language-sensitive. This applies especially to the sequence
+ :             selected by the tokens <code>w</code>, <code>W</code> and <code>Ww</code>. It also
+ :             applies to other sequences, for example different languages using the Cyrillic alphabet
+ :             use different sequences of characters, each starting with the letter #x410 (Cyrillic
+ :             capital letter A). In such cases, the <code>$lang</code> argument specifies which
+ :             language's conventions are to be used. <phrase diff="chg" at="L">If the argument
+ :             is specified, the value <rfc2119>should</rfc2119> be either an empty sequence
+ :             or a value that would be valid for the <code>xml:lang</code> attribute (see <bibref ref="REC-xml"/>).
+ :             Note that this permits the identification of sublanguages based on country codes (from ISO 3166-1)
+ :             as well as identification of dialects and regions within a country.</phrase>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The set of languages
+ :             for which numbering is supported is <termref def="implementation-defined"/>.
+ :             If the <code>$lang</code> argument is absent, 
+ :             or is set to an empty sequence, or is invalid, or is not a language supported by the
+ :             implementation, then the number is formatted using <phrase diff="chg" at="K">the
+ :             default language from the dynamic context</phrase>. 
+ :             </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The format modifier <phrase diff="chg" at="L"><rfc2119>must</rfc2119>
+ :             be a string that matches the regular expression <code diff="chg" at="M">^([co](\(.+\))?)?[at]?$</code>. </phrase>
+ :             That is, if it is present it must consist of one <phrase diff="add" at="G">or more</phrase> of
+ :             the following, in <phrase diff="del" at="K">any</phrase> order:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p diff="chg" at="G">either <code>c</code> or <code>o</code>, optionally followed by
+ :                   a sequence of characters enclosed between parentheses, to indicate cardinal or
+ :                   ordinal numbering respectively, the default being cardinal numbering</p></item><item><p diff="chg" at="G">either <code>a</code> or <code>t</code>, to indicate alphabetic
+ :                   or traditional numbering respectively, the default being <termref def="implementation-defined">implementation-defined</termref>.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the <code>o</code> modifier is present, this indicates a request to output ordinal
+ :             numbers rather than cardinal numbers. For example, in English, when used with the format
+ :             token <code>1</code>, this outputs the sequence <code>1st 2nd 3rd 4th ...</code>, and
+ :             when used with the format token <code>w</code> outputs the sequence <code>first second
+ :             third fourth ...</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">The string of characters between the parentheses, if present, is used to
+ :          select between other possible variations of cardinal or ordinal numbering sequences.
+ :          The interpretation of this string is <termref def="implemementation-defined">implementation-defined</termref>. No error occurs
+ :          if the implementation does not define any interpretation for the defined string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For example, in some languages, ordinal numbers vary depending on the grammatical context:
+ :             they may have different genders and may decline with the noun that they qualify.
+ :             In such cases the string appearing in parentheses after the letter <code>o</code> may be
+ :             used to indicate the variation of the ordinal number required. The way in which the
+ :             variation is indicated will depend on the conventions of the language. For inflected
+ :             languages that vary the ending of the word, the <rfc2119>recommended</rfc2119> approach is to indicate the
+ :             required ending, preceded by a hyphen: for example in German, appropriate values are
+ :                <code>o(-e)</code>, <code>o(-er)</code>, <code>o(-es)</code>, <code>o(-en)</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>It is <termref def="implementation-defined">implementation-defined</termref> what
+ :             combinations of values of the format token, the language, and the cardinal/ordinal
+ :             modifier are supported. If ordinal numbering is not supported for the combination of the
+ :             format token, the language, and the string appearing in parentheses, the request is
+ :             ignored and cardinal numbers are generated instead.</p><example xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><head>Ordinal Numbering in Italian</head><p>The specification <code>"1;o(-º)"</code> with <code>$lang</code> equal to
+ :                   <code>it</code>, if supported, should produce the sequence:</p><eg xml:space="preserve">1º 2º 3º 4º ...</eg><p>The specification <code>"Ww;o"</code> with <code>$lang</code> equal to
+ :                   <code>it</code>, if supported, should produce the sequence:</p><eg xml:space="preserve">Primo Secondo Terzo Quarto Quinto ...</eg></example><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <phrase diff="chg" at="G">use of the <code>a</code> or <code>t</code>
+ :                modifier</phrase> disambiguates between numbering sequences that use letters. In many
+ :             languages there are two commonly used numbering sequences that use letters. One
+ :             numbering sequence assigns numeric values to letters in alphabetic sequence, and the
+ :             other assigns numeric values to each letter in some other manner traditional in that
+ :             language. In English, these would correspond to the numbering sequences specified by the
+ :             format tokens <code>a</code> and <code>i</code>. In some languages, the first member of
+ :             each sequence is the same, and so the format token alone would be ambiguous. <phrase diff="chg" at="G">In the absence of the <code>a</code> or <code>t</code> modifier,
+ :                the default is <termref def="implementation-defined">implementation-defined</termref></phrase>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DF" code="1310"/> if the format token is invalid,
+ :             that is, if it violates any mandatory rules (indicated by an emphasized <rfc2119>must</rfc2119>
+ :             or <rfc2119>required</rfc2119> keyword in the above rules). For example, the error is raised if
+ :             the primary format token contains a digit but does not match the required regular expression.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-integer
+ :)
+declare function fn:format-integer($value as xs:integer?,  $picture as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Formats an integer according to a given picture string, using the conventions
+ :             of a given natural language if specified.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-integer" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:integer?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-integer" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:integer?"/><arg name="picture" type="xs:string"/><arg name="lang" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default language.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$value</code> is an empty sequence, the function returns a zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>In all other cases, the <code>$picture</code> argument describes the format in which
+ :                <code>$value</code> is output.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The rules that follow describe how non-negative numbers are output. If the value of
+ :                <code>$value</code> is negative, the rules below are applied to the absolute value of
+ :                <code>$value</code>, and a minus sign is prepended to the result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="L">The value of <code>$picture</code> consists of a primary format token, 
+ :             optionally followed
+ :             by a format modifier. The primary format token is always present and <rfc2119>must not</rfc2119>
+ :             be zero-length. If the string contains one or more semicolons then everything that
+ :             precedes the last semicolon is taken as the primary format token and everything
+ :             that follows is taken as the format modifier; if the string contains no
+ :             semicolon then the entire picture is taken as the primary format token, and the
+ :             format modifier is taken to be absent (which is equivalent to supplying a
+ :             zero-length string).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The primary format token is classified as one of the following:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>A <var>decimal-digit-pattern</var> made up of <var>optional-digit-signs</var>,
+ :                      <var>mandatory-digit-signs</var>, and <var>grouping-separator-signs</var>.</p><ulist><item><p>The <var>optional-digit-sign</var> is the character "#".</p></item><item><p>A <var>mandatory-digit-sign</var> is a <termref def="character">character</termref> in Unicode category Nd. All
+ :                            <var>mandatory-digit-signs</var> within the format token <rfc2119>must</rfc2119> be from the
+ :                         same digit family, where a digit family is a sequence of ten consecutive
+ :                         characters in Unicode category Nd, having digit values 0 through 9. Within
+ :                         the format token, these digits are interchangeable: a three-digit number may
+ :                         thus be indicated equivalently by <code>000</code>, <code>001</code>, or
+ :                            <code>999</code>.</p></item><item><p>a <var>grouping-separator-sign</var> is a non-alphanumeric character, that
+ :                         is a <termref def="character">character</termref> whose Unicode category is
+ :                         other than Nd, Nl, No, Lu, Ll, Lt, Lm or Lo.</p></item></ulist><p diff="chg" at="L">If the primary format token contains at least one Unicode digit 
+ :                   then it is taken as a decimal digit pattern, and in this case it <rfc2119>must</rfc2119>
+ :                   match the regular expression <code>^((\p{Nd}|#|[^\p{N}\p{L}])+?)$</code>. If it contains
+ :                   a digit but does not match this pattern, a <phrase diff="add" at="L">dynamic</phrase> error 
+ :                   is raised <errorref class="DF" code="1310"/>.</p><note><p diff="add" at="L">If a semicolon is to be used as a grouping separator, then the primary
+ :                format token as a whole must be followed by another semicolon, to ensure that
+ :                the grouping separator is not mistaken as a separator between the primary format
+ :                token and the format modifier.</p></note><p>There <rfc2119>must</rfc2119> be at least one <var>mandatory-digit-sign</var>. There may be zero or
+ :                   more <var>optional-digit-signs</var>, and (if present) these <rfc2119>must</rfc2119> precede all
+ :                      <var>mandatory-digit-signs</var>. There may be zero or more
+ :                      <var>grouping-separator-signs</var>. A <var>grouping-separator-sign</var> <rfc2119>must
+ :                   not</rfc2119> appear at the start or end of the <var>decimal-digit-pattern</var>, nor
+ :                   adjacent to another <var>grouping-separator-sign</var>.</p><p>The corresponding output format is a decimal number, using this digit family, with
+ :                   at least as many digits as there are <var>mandatory-digit-signs</var> in the
+ :                   format token. Thus, a format token <code>1</code> generates the sequence <code>0 1
+ :                      2 ... 10 11 12 ...</code>, and a format token <code>01</code> (or equivalently,
+ :                      <code>00</code> or <code>99</code>) generates the sequence <code>00 01 02 ...
+ :                      09 10 11 12 ... 99 100 101</code>. A format token of <code>&amp;#x661;</code>
+ :                   (Arabic-Indic digit one) generates the sequence <code>١</code> then <code>٢</code>
+ :                   then <code>٣</code> ...</p><p>The <var>grouping-separator-signs</var> are handled as follows. The position of
+ :                   grouping separators within the format token, counting backwards from the last
+ :                   digit, indicates the position of grouping separators to appear within the
+ :                   formatted number, and the character used as the <var>grouping-separator-sign</var>
+ :                   within the format token indicates the character to be used as the corresponding
+ :                   grouping separator in the formatted number. If <var>grouping-separator-signs</var>
+ :                   appear at regular intervals within the format token, that is if the same grouping
+ :                   separator appears at positions forming a sequence <var>N</var>, 2<var>N</var>,
+ :                      3<var>N</var>, ... for some integer value <var>N</var> (including the case
+ :                   where there is only one number in the list), then the sequence is extrapolated to
+ :                   the left, so grouping separators will be used in the formatted number at every
+ :                   multiple of <var>N</var>. For example, if the format token is <code>0'000</code>
+ :                   then the number one million will be formatted as <code>1'000'000</code>, while the
+ :                   number fifteen will be formatted as <code>0'015</code>.</p><p>The only purpose of <var>optional-digit-signs</var> is to mark the position of
+ :                      <var>grouping-separator-signs</var>. For example, if the format token is
+ :                      <code>#'##0</code> then the number one million will be formatted as
+ :                      <code>1'000'000</code>, while the number fifteen will be formatted as
+ :                      <code>15</code>. A grouping separator is included in the formatted number only
+ :                   if there is a digit to its left, which will only be the case if either (a) the
+ :                   number is large enough to require that digit, or (b) the number of
+ :                      <var>mandatory-digit-signs</var> in the format token requires insignificant
+ :                   leading zeros to be present.</p><note><p>Numbers will never be truncated. Given the <var>decimal-digit-pattern</var>
+ :                      <code>01</code>, the number three hundred will be output as <code>300</code>,
+ :                      despite the absence of any <var>optional-digit-sign</var>.</p></note></item><item><p>The format token <code>A</code>, which generates the sequence <code>A B C ... Z AA AB
+ :                      AC...</code>.</p></item><item><p>The format token <code>a</code>, which generates the sequence <code>a b c ... z aa ab
+ :                      ac...</code>.</p></item><item><p>The format token <code>i</code>, which generates the sequence <code>i ii iii iv v vi vii
+ :                      viii ix x ...</code>.</p></item><item><p>The format token <code>I</code>, which generates the sequence <code>I II III IV V VI VII
+ :                      VIII IX X ...</code>.</p></item><item><p>The format token <code>w</code>, which generates numbers written as lower-case words, for
+ :                   example in English, <code>one two three four ...</code>
+ :                </p></item><item><p>The format token <code>W</code>, which generates numbers written as upper-case words, for
+ :                   example in English, <code>ONE TWO THREE FOUR ...</code>
+ :                </p></item><item><p>The format token <code>Ww</code>, which generates numbers written as title-case words, for
+ :                   example in English, <code>One Two Three Four ...</code>
+ :                </p></item><item><p>Any other format token, which indicates a numbering sequence in which that token
+ :                   represents the number 1 (one) (but see the note below).
+ :                   <!-- Where possible (given the constraint that format tokens
+ : 						must be alphanumeric, and that they must be distinct) the format token
+ : 						used to represent a numbering sequence should be the same as the representation
+ : 						of the number 1 (one) in that sequence.-->
+ :                   It is <termref def="implementation-defined">implementation-defined</termref> which
+ :                   numbering sequences, additional to those listed above, are supported. If an
+ :                   implementation does not support a numbering sequence represented by the given
+ :                   token, it <rfc2119>must</rfc2119> use a format token of <code>1</code>.</p><note><p>In some traditional numbering sequences additional signs are added to denote
+ :                      that the letters should be interpreted as numbers; these are not included in
+ :                      the format token. An example (see also the example below) is classical Greek
+ :                      where a <emph>dexia keraia</emph> (x0374, ʹ) and sometimes an <emph>aristeri keraia</emph>
+ :                      (x0375, ͵) is added.</p></note></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For all format tokens other than the first kind above (one that consists of decimal
+ :             digits), there <rfc2119>may</rfc2119> be <termref def="implementation-defined">implementation-defined</termref> lower and upper bounds on the range of numbers that
+ :             can be formatted using this format token; indeed, for some numbering sequences there may
+ :             be intrinsic limits. For example, the format token <code>&amp;#x2460;</code> (circled
+ :             digit one, ①) has a range <phrase diff="chg" at="M">imposed by the Unicode character repertoire — 1 to 20 in
+ :             Unicode versions prior to 4.0, increased in subsequent versions</phrase>. For
+ :             the numbering sequences described above any upper bound imposed by the implementation
+ :                <rfc2119>must not</rfc2119> be less than 1000 (one thousand) and any lower bound must
+ :             not be greater than 1. Numbers that fall outside this range <rfc2119>must</rfc2119> be
+ :             formatted using the format token <code>1</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The above expansions of numbering sequences for format tokens such as <code>a</code> and
+ :                <code>i</code> are indicative but not prescriptive. There are various conventions in
+ :             use for how alphabetic sequences continue when the alphabet is exhausted, and differing
+ :             conventions for how roman numerals are written (for example, <code>IV</code> versus
+ :                <code>IIII</code> as the representation of the number 4). Sometimes alphabetic
+ :             sequences are used that omit letters such as <code>i</code> and <code>o</code>. This
+ :             specification does not prescribe the detail of any sequence other than those sequences
+ :             consisting entirely of decimal digits.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Many numbering sequences are language-sensitive. This applies especially to the sequence
+ :             selected by the tokens <code>w</code>, <code>W</code> and <code>Ww</code>. It also
+ :             applies to other sequences, for example different languages using the Cyrillic alphabet
+ :             use different sequences of characters, each starting with the letter #x410 (Cyrillic
+ :             capital letter A). In such cases, the <code>$lang</code> argument specifies which
+ :             language's conventions are to be used. <phrase diff="chg" at="L">If the argument
+ :             is specified, the value <rfc2119>should</rfc2119> be either an empty sequence
+ :             or a value that would be valid for the <code>xml:lang</code> attribute (see <bibref ref="REC-xml"/>).
+ :             Note that this permits the identification of sublanguages based on country codes (from ISO 3166-1)
+ :             as well as identification of dialects and regions within a country.</phrase>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The set of languages
+ :             for which numbering is supported is <termref def="implementation-defined"/>.
+ :             If the <code>$lang</code> argument is absent, 
+ :             or is set to an empty sequence, or is invalid, or is not a language supported by the
+ :             implementation, then the number is formatted using <phrase diff="chg" at="K">the
+ :             default language from the dynamic context</phrase>. 
+ :             </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The format modifier <phrase diff="chg" at="L"><rfc2119>must</rfc2119>
+ :             be a string that matches the regular expression <code diff="chg" at="M">^([co](\(.+\))?)?[at]?$</code>. </phrase>
+ :             That is, if it is present it must consist of one <phrase diff="add" at="G">or more</phrase> of
+ :             the following, in <phrase diff="del" at="K">any</phrase> order:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p diff="chg" at="G">either <code>c</code> or <code>o</code>, optionally followed by
+ :                   a sequence of characters enclosed between parentheses, to indicate cardinal or
+ :                   ordinal numbering respectively, the default being cardinal numbering</p></item><item><p diff="chg" at="G">either <code>a</code> or <code>t</code>, to indicate alphabetic
+ :                   or traditional numbering respectively, the default being <termref def="implementation-defined">implementation-defined</termref>.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the <code>o</code> modifier is present, this indicates a request to output ordinal
+ :             numbers rather than cardinal numbers. For example, in English, when used with the format
+ :             token <code>1</code>, this outputs the sequence <code>1st 2nd 3rd 4th ...</code>, and
+ :             when used with the format token <code>w</code> outputs the sequence <code>first second
+ :             third fourth ...</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">The string of characters between the parentheses, if present, is used to
+ :          select between other possible variations of cardinal or ordinal numbering sequences.
+ :          The interpretation of this string is <termref def="implemementation-defined">implementation-defined</termref>. No error occurs
+ :          if the implementation does not define any interpretation for the defined string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For example, in some languages, ordinal numbers vary depending on the grammatical context:
+ :             they may have different genders and may decline with the noun that they qualify.
+ :             In such cases the string appearing in parentheses after the letter <code>o</code> may be
+ :             used to indicate the variation of the ordinal number required. The way in which the
+ :             variation is indicated will depend on the conventions of the language. For inflected
+ :             languages that vary the ending of the word, the <rfc2119>recommended</rfc2119> approach is to indicate the
+ :             required ending, preceded by a hyphen: for example in German, appropriate values are
+ :                <code>o(-e)</code>, <code>o(-er)</code>, <code>o(-es)</code>, <code>o(-en)</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>It is <termref def="implementation-defined">implementation-defined</termref> what
+ :             combinations of values of the format token, the language, and the cardinal/ordinal
+ :             modifier are supported. If ordinal numbering is not supported for the combination of the
+ :             format token, the language, and the string appearing in parentheses, the request is
+ :             ignored and cardinal numbers are generated instead.</p><example xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><head>Ordinal Numbering in Italian</head><p>The specification <code>"1;o(-º)"</code> with <code>$lang</code> equal to
+ :                   <code>it</code>, if supported, should produce the sequence:</p><eg xml:space="preserve">1º 2º 3º 4º ...</eg><p>The specification <code>"Ww;o"</code> with <code>$lang</code> equal to
+ :                   <code>it</code>, if supported, should produce the sequence:</p><eg xml:space="preserve">Primo Secondo Terzo Quarto Quinto ...</eg></example><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <phrase diff="chg" at="G">use of the <code>a</code> or <code>t</code>
+ :                modifier</phrase> disambiguates between numbering sequences that use letters. In many
+ :             languages there are two commonly used numbering sequences that use letters. One
+ :             numbering sequence assigns numeric values to letters in alphabetic sequence, and the
+ :             other assigns numeric values to each letter in some other manner traditional in that
+ :             language. In English, these would correspond to the numbering sequences specified by the
+ :             format tokens <code>a</code> and <code>i</code>. In some languages, the first member of
+ :             each sequence is the same, and so the format token alone would be ambiguous. <phrase diff="chg" at="G">In the absence of the <code>a</code> or <code>t</code> modifier,
+ :                the default is <termref def="implementation-defined">implementation-defined</termref></phrase>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DF" code="1310"/> if the format token is invalid,
+ :             that is, if it violates any mandatory rules (indicated by an emphasized <rfc2119>must</rfc2119>
+ :             or <rfc2119>required</rfc2119> keyword in the above rules). For example, the error is raised if
+ :             the primary format token contains a digit but does not match the required regular expression.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-integer
+ :)
+declare function fn:format-integer( $value as xs:integer?,  $picture as xs:string,  $language as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing a number formatted according to a given picture
+ :             string, taking account of decimal formats specified in the static context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-number" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="numeric?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-number" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="numeric?"/><arg name="picture" type="xs:string"/><arg name="decimal-format-name" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		decimal formats, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="K">The effect of the two-argument form of the function is equivalent to calling
+ :          the three-argument form with an empty sequence as the value of the third argument.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function formats <code>$value</code> as a string using the <termref def="dt-picture-string">picture string</termref> specified by the
+ :                <code>$picture</code> argument and the decimal-format named by the
+ :                <code>$decimal-format-name</code> argument, or the default decimal-format, if there
+ :             is no <code>$decimal-format-name</code> argument. The syntax of the picture string is
+ :             described in <specref ref="syntax-of-picture-string"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$value</code> argument may be of any numeric data type
+ :             (<code>xs:double</code>, <code>xs:float</code>, <code>xs:decimal</code>, or their
+ :             subtypes including <code>xs:integer</code>). Note that if an <code>xs:decimal</code> is
+ :             supplied, it is not automatically promoted to an <code>xs:double</code>, as such
+ :             promotion can involve a loss of precision.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the supplied value of the <code>$value</code> argument is an empty sequence, the
+ :             function behaves as if the supplied value were the <code>xs:double</code> value
+ :                <code>NaN</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$decimal-format-name</code>, 
+ :             <phrase diff="add" at="K">if present and non-empty, </phrase>
+ :             <rfc2119>must</rfc2119> <phrase diff="chg" at="L">be a string which after removal of leading and trailing whitespace is in the form of an
+ :             an <code>EQName</code> as defined in the XPath 3.0 grammar, that is one of the following</phrase>:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>A lexical QName, which is expanded using the 
+ :                <phrase diff="chg" at="J">statically known namespaces</phrase>. 
+ :                The default namespace is not used (no prefix means no namespace).</p></item><item><p diff="add" at="L">A <code>URIQualifiedName</code> using the syntax <code>Q{uri}local</code>,
+ :             where the URI can be zero-length to indicate a name in no namespace.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="K">The decimal format that is used is the decimal format
+ :          in the static context whose name matches <code>$decimal-format-name</code> if supplied,
+ :          or the default decimal format in the static context otherwise.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The evaluation of the <function>format-number</function> function takes place in two
+ :             phases, an analysis phase described in <specref ref="analysing-picture-string"/> and a
+ :             formatting phase described in <specref ref="formatting-the-number"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The analysis phase takes as its inputs the <termref def="dt-picture-string">picture
+ :                string</termref> and the variables derived from the relevant decimal format in the
+ :             static context, and produces as its output a number of variables with defined values.
+ :             The formatting phase takes as its inputs the number to be formatted and the variables
+ :             produced by the analysis phase, and produces as its output a string containing a
+ :             formatted representation of the number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result of the function is the formatted string representation of the supplied
+ :             number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DF" code="1280"/> if the name specified as the
+ :                <code>$decimal-format-name</code> argument is 
+ :             <phrase diff="chg" at="L">neither a valid lexical QName nor a valid <code>URIQualifiedName</code></phrase>, or if it
+ :             uses a prefix <phrase diff="add" at="J">that is not found in the statically known namespaces</phrase>, or if the static
+ :             context does not contain a declaration of a decimal-format with a matching expanded
+ :             QName. If the processor is able to detect the error statically (for example, when the
+ :             argument is supplied as a string literal), then the processor <rfc2119>may</rfc2119>
+ :             optionally signal this as a static error.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-number
+ :)
+declare function fn:format-number($value as numeric?,  $picture as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing a number formatted according to a given picture
+ :             string, taking account of decimal formats specified in the static context.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-number" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="numeric?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-number" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="numeric?"/><arg name="picture" type="xs:string"/><arg name="decimal-format-name" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		decimal formats, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="K">The effect of the two-argument form of the function is equivalent to calling
+ :          the three-argument form with an empty sequence as the value of the third argument.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function formats <code>$value</code> as a string using the <termref def="dt-picture-string">picture string</termref> specified by the
+ :                <code>$picture</code> argument and the decimal-format named by the
+ :                <code>$decimal-format-name</code> argument, or the default decimal-format, if there
+ :             is no <code>$decimal-format-name</code> argument. The syntax of the picture string is
+ :             described in <specref ref="syntax-of-picture-string"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$value</code> argument may be of any numeric data type
+ :             (<code>xs:double</code>, <code>xs:float</code>, <code>xs:decimal</code>, or their
+ :             subtypes including <code>xs:integer</code>). Note that if an <code>xs:decimal</code> is
+ :             supplied, it is not automatically promoted to an <code>xs:double</code>, as such
+ :             promotion can involve a loss of precision.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the supplied value of the <code>$value</code> argument is an empty sequence, the
+ :             function behaves as if the supplied value were the <code>xs:double</code> value
+ :                <code>NaN</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$decimal-format-name</code>, 
+ :             <phrase diff="add" at="K">if present and non-empty, </phrase>
+ :             <rfc2119>must</rfc2119> <phrase diff="chg" at="L">be a string which after removal of leading and trailing whitespace is in the form of an
+ :             an <code>EQName</code> as defined in the XPath 3.0 grammar, that is one of the following</phrase>:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>A lexical QName, which is expanded using the 
+ :                <phrase diff="chg" at="J">statically known namespaces</phrase>. 
+ :                The default namespace is not used (no prefix means no namespace).</p></item><item><p diff="add" at="L">A <code>URIQualifiedName</code> using the syntax <code>Q{uri}local</code>,
+ :             where the URI can be zero-length to indicate a name in no namespace.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="K">The decimal format that is used is the decimal format
+ :          in the static context whose name matches <code>$decimal-format-name</code> if supplied,
+ :          or the default decimal format in the static context otherwise.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The evaluation of the <function>format-number</function> function takes place in two
+ :             phases, an analysis phase described in <specref ref="analysing-picture-string"/> and a
+ :             formatting phase described in <specref ref="formatting-the-number"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The analysis phase takes as its inputs the <termref def="dt-picture-string">picture
+ :                string</termref> and the variables derived from the relevant decimal format in the
+ :             static context, and produces as its output a number of variables with defined values.
+ :             The formatting phase takes as its inputs the number to be formatted and the variables
+ :             produced by the analysis phase, and produces as its output a string containing a
+ :             formatted representation of the number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result of the function is the formatted string representation of the supplied
+ :             number.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DF" code="1280"/> if the name specified as the
+ :                <code>$decimal-format-name</code> argument is 
+ :             <phrase diff="chg" at="L">neither a valid lexical QName nor a valid <code>URIQualifiedName</code></phrase>, or if it
+ :             uses a prefix <phrase diff="add" at="J">that is not found in the statically known namespaces</phrase>, or if the static
+ :             context does not contain a declaration of a decimal-format with a matching expanded
+ :             QName. If the processor is able to detect the error statically (for example, when the
+ :             argument is supplied as a string literal), then the processor <rfc2119>may</rfc2119>
+ :             optionally signal this as a static error.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-number
+ :)
+declare function fn:format-number( $value as numeric?,  $picture as xs:string,  $decimal-format-name as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:time</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-time" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:time?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-time" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:time?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-time
+ :)
+declare function fn:format-time( $value as xs:time?,  $picture as xs:string,  $language as xs:string?,  $calendar as xs:string?,  $place as xs:string?) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string containing an <code>xs:time</code> value formatted for display.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="format-time" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:time?"/><arg name="picture" type="xs:string"/></proto></example><example role="signature"><proto name="format-time" return-type="xs:string?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="value" type="xs:time?"/><arg name="picture" type="xs:string"/><arg name="language" type="xs:string?"/><arg name="calendar" type="xs:string?"/><arg name="place" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		default calendar, and default language, and default place, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The five-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		implicit timezone, and namespaces.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>See <specref ref="rules-for-datetime-formatting"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-format-time
+ :)
+declare function fn:format-time($value as xs:time?,  $picture as xs:string) as  xs:string? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the arity of the function identified by a function item.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="function-arity" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="func" type="function(*)"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>fn:function-arity</code> function returns the arity (number of arguments) of
+ :             the function identified by <code>$func</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:function-arity(fn:substring#2)</code> returns <code>2</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:function-arity(function($node){name($node)})</code> returns <code>1</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>let $initial := fn:substring(?, 1, 1) return fn:function-arity($initial)</code> returns <code>1</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-function-arity
+ :)
+declare function fn:function-arity($func as function(*)) as  xs:integer external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function returns a string that uniquely identifies a given node. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="generate-id" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="generate-id" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="node()?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the argument is omitted, it defaults to the context item (<code>.</code>). The
+ :             behavior of the function if the argument is omitted is exactly the same as if the
+ :             context item had been passed as the argument.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the argument is the empty sequence, the result is the zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>In other cases, the function returns a string that uniquely identifies a given node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The returned identifier <rfc2119>must</rfc2119> consist of ASCII alphanumeric characters
+ :             and <rfc2119>must</rfc2119> start with an alphabetic character. Thus, the string is
+ :             syntactically an XML name.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>An implementation is free to generate an identifier in any convenient way provided that
+ :             it always generates the same identifier for the same node and that different identifiers
+ :             are always generated from different nodes. An implementation is under no obligation to
+ :             generate the same identifiers each time a document is transformed or queried.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$arg</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-generate-id
+ :)
+declare function fn:generate-id() as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function returns a string that uniquely identifies a given node. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="generate-id" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="generate-id" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="node()?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the argument is omitted, it defaults to the context item (<code>.</code>). The
+ :             behavior of the function if the argument is omitted is exactly the same as if the
+ :             context item had been passed as the argument.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the argument is the empty sequence, the result is the zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>In other cases, the function returns a string that uniquely identifies a given node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The returned identifier <rfc2119>must</rfc2119> consist of ASCII alphanumeric characters
+ :             and <rfc2119>must</rfc2119> start with an alphabetic character. Thus, the string is
+ :             syntactically an XML name.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>An implementation is free to generate an identifier in any convenient way provided that
+ :             it always generates the same identifier for the same node and that different identifiers
+ :             are always generated from different nodes. An implementation is under no obligation to
+ :             generate the same identifiers each time a document is transformed or queried.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$arg</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-generate-id
+ :)
+declare function fn:generate-id($arg as node()?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the first item in a sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="head" return-type="item()?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the value of the expression <code>$arg[1]</code></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the empty sequence is returned. Otherwise
+ :             the first item in the sequence is returned.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-head
+ :)
+declare function fn:head($arg as item()*) as  item()? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of hours in a duration.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="hours-from-duration" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:duration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> representing the hours
+ :             component in the value of <code>$arg</code>. The result is obtained by casting
+ :                <code>$arg</code> to an <code>xs:dayTimeDuration</code> (see <specref ref="casting-to-durations"/>) and then computing the hours component as described in
+ :                <specref ref="canonical-dayTimeDuration"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a negative duration then the result will be negative..</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is an <code>xs:yearMonthDuration</code> the function returns 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-duration(xs:dayTimeDuration("P3DT10H"))</code> returns <code>10</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-duration(xs:dayTimeDuration("P3DT12H32M12S"))</code> returns <code>12</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-duration(xs:dayTimeDuration("PT123H"))</code> returns <code>3</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-duration(xs:dayTimeDuration("-P3DT10H"))</code> returns <code>-10</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-hours-from-duration
+ :)
+declare function fn:hours-from-duration($arg as xs:duration?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the hours component of an <code>xs:time</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="hours-from-time" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> between 0 and 23, both
+ :             inclusive, representing the value of the hours component in the local value of
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Assume that the dynamic context provides an implicit timezone value of
+ :                   <code>-05:00</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-time(xs:time("11:23:00"))</code> returns <code>11</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-time(xs:time("21:23:00"))</code> returns <code>21</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-time(xs:time("01:23:00+05:00"))</code> returns <code>1</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-time(fn:adjust-time-to-timezone(xs:time("01:23:00+05:00"),
+ :                   xs:dayTimeDuration("PT0S")))</code> returns <code>20</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:hours-from-time(xs:time("24:00:00"))</code> returns <code>0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-hours-from-time
+ :)
+declare function fn:hours-from-time($arg as xs:time?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the sequence of element nodes that have an <code>ID</code> value
+ :             matching the value of one or more of the <code>IDREF</code> values supplied in
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence, in document order with duplicates eliminated,
+ :             containing every element node <code>E</code> that satisfies all the following
+ :             conditions:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>
+ :                   <code>E</code> is in the target document. The target document is the document
+ :                   containing <code>$node</code>, or the document containing the context item
+ :                      (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                   function if <code>$node</code> is omitted is exactly the same as if the context
+ :                   item had been passed as <code>$node</code>.</p></item><item><p><code>E</code> has an <code>ID</code> value equal to one of the candidate
+ :                      <code>IDREF</code> values, where:</p><ulist><item><p> An element has an <code>ID</code> value equal to <code>V</code> if either
+ :                         or both of the following conditions are true:</p><ulist><item><p>The <code>is-id</code> property (See <xspecref spec="DM30" ref="dm-is-id"/>.) of the element node is true, and the typed value
+ :                               of the element node is equal to <code>V</code> under the rules of the
+ :                                  <code>eq</code> operator using the Unicode codepoint collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item><item><p>The element has an attribute node whose <code>is-id</code> property
+ :                               (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and whose typed
+ :                               value is equal to <code>V</code> under the rules of the
+ :                                  <code>eq</code> operator using the Unicode code point collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p> Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were of
+ :                         type <code>IDREFS</code>, that is, each <code>xs:string</code> in
+ :                            <code>$arg</code> is treated as a whitespace-separated sequence of
+ :                         tokens, each acting as an <code>IDREF</code>. These tokens are then included
+ :                         in the list of candidate <code>IDREF</code>s. If any of the tokens is not a
+ :                         lexically valid <code>IDREF</code> (that is, if it is not lexically an
+ :                            <code>xs:NCName</code>), it is ignored. Formally, the candidate
+ :                            <code>IDREF</code> values are the strings in the sequence given by the
+ :                         expression:</p><eg xml:space="preserve">for $s in $arg return 
+ :     fn:tokenize(fn:normalize-space($s), ' ')[. castable as xs:IDREF]</eg></item></ulist></item><item><p>If several elements have the same <code>ID</code> value, then <code>E</code> is
+ :                   the one that is first in document order.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                <code>$node</code>, or the context item if the second argument is absent, is a node
+ :                in a tree whose root is not a document node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$node</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-id
+ :)
+declare function fn:id($arg as xs:string*) as  element()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the sequence of element nodes that have an <code>ID</code> value
+ :             matching the value of one or more of the <code>IDREF</code> values supplied in
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="id" return-type="element()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence, in document order with duplicates eliminated,
+ :             containing every element node <code>E</code> that satisfies all the following
+ :             conditions:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>
+ :                   <code>E</code> is in the target document. The target document is the document
+ :                   containing <code>$node</code>, or the document containing the context item
+ :                      (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                   function if <code>$node</code> is omitted is exactly the same as if the context
+ :                   item had been passed as <code>$node</code>.</p></item><item><p><code>E</code> has an <code>ID</code> value equal to one of the candidate
+ :                      <code>IDREF</code> values, where:</p><ulist><item><p> An element has an <code>ID</code> value equal to <code>V</code> if either
+ :                         or both of the following conditions are true:</p><ulist><item><p>The <code>is-id</code> property (See <xspecref spec="DM30" ref="dm-is-id"/>.) of the element node is true, and the typed value
+ :                               of the element node is equal to <code>V</code> under the rules of the
+ :                                  <code>eq</code> operator using the Unicode codepoint collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item><item><p>The element has an attribute node whose <code>is-id</code> property
+ :                               (See <xspecref spec="DM30" ref="dm-is-id"/>.) is true and whose typed
+ :                               value is equal to <code>V</code> under the rules of the
+ :                                  <code>eq</code> operator using the Unicode code point collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p> Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were of
+ :                         type <code>IDREFS</code>, that is, each <code>xs:string</code> in
+ :                            <code>$arg</code> is treated as a whitespace-separated sequence of
+ :                         tokens, each acting as an <code>IDREF</code>. These tokens are then included
+ :                         in the list of candidate <code>IDREF</code>s. If any of the tokens is not a
+ :                         lexically valid <code>IDREF</code> (that is, if it is not lexically an
+ :                            <code>xs:NCName</code>), it is ignored. Formally, the candidate
+ :                            <code>IDREF</code> values are the strings in the sequence given by the
+ :                         expression:</p><eg xml:space="preserve">for $s in $arg return 
+ :     fn:tokenize(fn:normalize-space($s), ' ')[. castable as xs:IDREF]</eg></item></ulist></item><item><p>If several elements have the same <code>ID</code> value, then <code>E</code> is
+ :                   the one that is first in document order.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                <code>$node</code>, or the context item if the second argument is absent, is a node
+ :                in a tree whose root is not a document node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$node</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-id
+ :)
+declare function fn:id($arg as xs:string*,  $node as node()) as  element()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the sequence of element or attribute nodes with an <code>IDREF</code>
+ :             value matching the value of one or more of the <code>ID</code> values supplied in
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="idref" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="idref" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> The function returns a sequence, in document order with duplicates eliminated,
+ :             containing every element or attribute node <code>$N</code> that satisfies all the
+ :             following conditions:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p><code>$N</code> is in the target document. The target document is the document
+ :                   containing <code>$node</code> or the document containing the context item
+ :                      (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                   function if <code>$node</code> is omitted is exactly the same as if the context
+ :                   item had been passed as <code>$node</code>.</p></item><item><p><code>$N</code> has an <code>IDREF</code> value equal to one of the candidate
+ :                      <code>ID</code> values, where:</p><ulist><item><p>A node <code>$N</code> has an <code>IDREF</code> value equal to
+ :                            <code>V</code> if both of the following conditions are true:</p><ulist><item><p>The <code>is-idrefs</code> property (see <xspecref spec="DM30" ref="dm-is-idrefs"/>) of <code>$N</code> is <code>true</code>.</p></item><item><p>The sequence <!--Text replaced by erratum E29 change 1"--><eg diff="chg" at="A-E29" xml:space="preserve">fn:tokenize(fn:normalize-space(fn:string($N)), ' ')</eg>
+ :                               <!--End of text replaced by erratum E29--> contains a string that is
+ :                               equal to <code>V</code> under the rules of the <code>eq</code>
+ :                               operator using the Unicode code point collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p>Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were of
+ :                         lexically of type <code>xs:ID</code>. These <code>xs:string</code>s are then
+ :                         included in the list of candidate <code>xs:ID</code>s. If any of the strings
+ :                         in <code>$arg</code> is not a lexically valid <code>xs:ID</code> (that is,
+ :                         if it is not lexically an <code>xs:NCName</code>), it is ignored. More
+ :                         formally, the candidate <code>ID</code> values are the strings in the
+ :                         sequence:</p><eg xml:space="preserve">$arg[. castable as xs:NCName]</eg></item></ulist></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                <code>$node</code>, or the context item if the second argument is omitted, is a node
+ :                in a tree whose root is not a document node. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$node</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-idref
+ :)
+declare function fn:idref($arg as xs:string*) as  node()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the sequence of element or attribute nodes with an <code>IDREF</code>
+ :             value matching the value of one or more of the <code>ID</code> values supplied in
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="idref" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/></proto></example><example role="signature"><proto name="idref" return-type="node()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string*"/><arg name="node" type="node()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> The function returns a sequence, in document order with duplicates eliminated,
+ :             containing every element or attribute node <code>$N</code> that satisfies all the
+ :             following conditions:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p><code>$N</code> is in the target document. The target document is the document
+ :                   containing <code>$node</code> or the document containing the context item
+ :                      (<code>.</code>) if the second argument is omitted. The behavior of the
+ :                   function if <code>$node</code> is omitted is exactly the same as if the context
+ :                   item had been passed as <code>$node</code>.</p></item><item><p><code>$N</code> has an <code>IDREF</code> value equal to one of the candidate
+ :                      <code>ID</code> values, where:</p><ulist><item><p>A node <code>$N</code> has an <code>IDREF</code> value equal to
+ :                            <code>V</code> if both of the following conditions are true:</p><ulist><item><p>The <code>is-idrefs</code> property (see <xspecref spec="DM30" ref="dm-is-idrefs"/>) of <code>$N</code> is <code>true</code>.</p></item><item><p>The sequence <!--Text replaced by erratum E29 change 1"--><eg diff="chg" at="A-E29" xml:space="preserve">fn:tokenize(fn:normalize-space(fn:string($N)), ' ')</eg>
+ :                               <!--End of text replaced by erratum E29--> contains a string that is
+ :                               equal to <code>V</code> under the rules of the <code>eq</code>
+ :                               operator using the Unicode code point collation
+ :                                  (<code>http://www.w3.org/2005/xpath-functions/collation/codepoint</code>).</p></item></ulist></item><item><p>Each <code>xs:string</code> in <code>$arg</code> is parsed as if it were of
+ :                         lexically of type <code>xs:ID</code>. These <code>xs:string</code>s are then
+ :                         included in the list of candidate <code>xs:ID</code>s. If any of the strings
+ :                         in <code>$arg</code> is not a lexically valid <code>xs:ID</code> (that is,
+ :                         if it is not lexically an <code>xs:NCName</code>), it is ignored. More
+ :                         formally, the candidate <code>ID</code> values are the strings in the
+ :                         sequence:</p><eg xml:space="preserve">$arg[. castable as xs:NCName]</eg></item></ulist></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0001" type="dynamic"/> if
+ :                <code>$node</code>, or the context item if the second argument is omitted, is a node
+ :                in a tree whose root is not a document node. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following errors may be raised when <code>$node</code> is omitted:</p><ul xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><li><p>If the context
+ :                item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, <phrase diff="add" at="M">dynamic error</phrase>
+ :                <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/></p></li><li><p>If the context item is not a
+ :                node, <phrase diff="add" at="M">type error</phrase> <xerrorref spec="XP" class="TY" code="0004" type="type"/>.</p></li></ul></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-idref
+ :)
+declare function fn:idref($arg as xs:string*,  $node as node()) as  node()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the prefixes of the in-scope namespaces for an element node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="in-scope-prefixes" return-type="xs:string*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="element" type="element()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence of strings representing the prefixes of the in-scope
+ :             namespaces for <code>$element</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For namespace bindings that have a prefix, the function returns the prefix as an
+ :                <code>xs:NCName</code>. For the default namespace, which has no prefix, it returns
+ :             the zero-length string. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result sequence contains no duplicates.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The ordering of the result sequence is <termref def="implementation-dependent">implementation-dependent</termref>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-in-scope-prefixes
+ :)
+declare function fn:in-scope-prefixes($element as element()) as  xs:string* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a sequence of positive integers giving the positions within the
+ :             sequence <code>$seq</code> of items that are equal to <code>$search</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="index-of" return-type="xs:integer*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="xs:anyAtomicType*"/><arg name="search" type="xs:anyAtomicType"/></proto></example><example role="signature"><proto name="index-of" return-type="xs:integer*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="xs:anyAtomicType*"/><arg name="search" type="xs:anyAtomicType"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence of positive integers giving the positions within the
+ :             sequence <code>$seq</code> of items that are equal to <code>$search</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. This collation is used when string comparison is
+ :             required.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the sequence <code>$seq</code> are compared with <code>$search</code> under
+ :             the rules for the <code>eq</code> operator. Values of type <code>xs:untypedAtomic</code>
+ :             are compared as if they were of type <code>xs:string</code>. Values that cannot be
+ :             compared, because the <code>eq</code> operator is not defined for their types, are
+ :             considered to be distinct. If an item compares equal, then the position of that item in
+ :             the sequence <code>$seq</code> is included in the result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The first item in a sequence is at position 1, not position 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result sequence is in ascending numeric order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$seq</code> is the empty sequence, or if no item in
+ :                <code>$seq</code> matches <code>$search</code>, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">No error occurs if non-comparable values are encountered. So when
+ :             comparing two atomic values, the effective boolean value of <code>fn:index-of($a,
+ :                $b)</code> is true if <code>$a</code> and <code>$b</code> are equal, false if they
+ :             are not equal or not comparable.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-index-of
+ :)
+declare function fn:index-of( $seq as xs:anyAtomicType*,  $search as xs:anyAtomicType) as  xs:integer* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a sequence of positive integers giving the positions within the
+ :             sequence <code>$seq</code> of items that are equal to <code>$search</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="index-of" return-type="xs:integer*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="xs:anyAtomicType*"/><arg name="search" type="xs:anyAtomicType"/></proto></example><example role="signature"><proto name="index-of" return-type="xs:integer*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="xs:anyAtomicType*"/><arg name="search" type="xs:anyAtomicType"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence of positive integers giving the positions within the
+ :             sequence <code>$seq</code> of items that are equal to <code>$search</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>. This collation is used when string comparison is
+ :             required.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the sequence <code>$seq</code> are compared with <code>$search</code> under
+ :             the rules for the <code>eq</code> operator. Values of type <code>xs:untypedAtomic</code>
+ :             are compared as if they were of type <code>xs:string</code>. Values that cannot be
+ :             compared, because the <code>eq</code> operator is not defined for their types, are
+ :             considered to be distinct. If an item compares equal, then the position of that item in
+ :             the sequence <code>$seq</code> is included in the result.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The first item in a sequence is at position 1, not position 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The result sequence is in ascending numeric order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$seq</code> is the empty sequence, or if no item in
+ :                <code>$seq</code> matches <code>$search</code>, then the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">No error occurs if non-comparable values are encountered. So when
+ :             comparing two atomic values, the effective boolean value of <code>fn:index-of($a,
+ :                $b)</code> is true if <code>$a</code> and <code>$b</code> are equal, false if they
+ :             are not equal or not comparable.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-index-of
+ :)
+declare function fn:index-of( $seq as xs:anyAtomicType*,  $search as xs:anyAtomicType,  $collation as xs:string) as  xs:integer* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a sequence constructed by inserting an item or a sequence of items at a
+ :             given position within an existing sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="insert-before" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="target" type="item()*"/><arg name="position" type="xs:integer"/><arg name="inserts" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value returned by the function consists of all items of <code>$target</code> whose
+ :             index is less than <code>$position</code>, followed by all items of
+ :                <code>$inserts</code>, followed by the remaining elements of <code>$target</code>, in
+ :             that order. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$target</code> is the empty sequence, <code>$inserts</code> is returned. If
+ :                <code>$inserts</code> is the empty sequence, <code>$target</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$position</code> is less than one (1), the first position, the effective value
+ :             of <code>$position</code> is one (1). If <code>$position</code> is greater than the
+ :             number of items in <code>$target</code>, then the effective value of
+ :                <code>$position</code> is equal to the number of items in <code>$target</code> plus
+ :             1. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$target</code> is not affected by the sequence construction.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-insert-before
+ :)
+declare function fn:insert-before( $target as item()*,  $position as xs:integer,  $inserts as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the local part of the supplied QName.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="local-name-from-QName" return-type="xs:NCName?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:QName?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:NCName</code> representing the local part of
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:local-name-from-QName(fn:QName("http://www.example.com/example";,
+ :                   "person"))</code> returns <code>"person"</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-local-name-from-QName
+ :)
+declare function fn:local-name-from-QName($arg as xs:QName?) as  xs:NCName? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Converts a string to lower case.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="lower-case" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the zero-length string is
+ :             returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns the value of <code>$arg</code> after translating every
+ :                <termref def="character">character</termref> to its lower-case correspondent as
+ :             defined in the appropriate case mappings section in the Unicode standard <bibref ref="Unicode"/>. For versions of Unicode beginning with the 2.1.8 update, only
+ :             locale-insensitive case mappings should be applied. Beginning with version 3.2.0 (and
+ :             likely future versions) of Unicode, precise mappings are described in default case
+ :             operations, which are full case mappings in the absence of tailoring for particular
+ :             languages and environments. Every upper-case character that does not have a lower-case
+ :             correspondent, as well as every lower-case character, is included in the returned value
+ :             in its original form. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Case mappings may change the length of a string. In general, the
+ :                <code>fn:upper-case</code> and <code>fn:lower-case</code> functions are not inverses
+ :             of each other: <code>fn:lower-case(fn:upper-case($arg))</code> is not guaranteed to
+ :             return <code>$arg</code>, nor is <code>fn:upper-case(fn:lower-case($arg))</code>. The
+ :             Latin small letter dotless i (as used in Turkish) is perhaps the most prominent
+ :             lower-case letter which will not round-trip. The Latin capital letter i with dot above
+ :             is the most prominent upper-case letter which will not round trip; there are others,
+ :             such as Latin capital letter Sharp S (#1E9E) which is introduced in Unicode 5.1.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> These functions may not always be linguistically appropriate (e.g. Turkish i without
+ :             dot) or appropriate for the application (e.g. titlecase). In cases such as Turkish, a
+ :             simple translation should be used first.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> Because the function is not sensitive to locale, results will not always match user
+ :             expectations. In Quebec, for example, the standard uppercase equivalent of "è" is "È",
+ :             while in metropolitan France it is more commonly "E"; only one of these is supported by
+ :             the functions as defined.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> Many characters of class Ll lack uppercase equivalents in the Unicode case mapping
+ :             tables; many characters of class Lu lack lowercase equivalents.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-lower-case
+ :)
+declare function fn:lower-case($arg as xs:string?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Applies the function item <var>$f</var> to every item from the sequence
+ :                <var>$seq</var> in turn, returning the concatenation of the resulting sequences in
+ :             order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="for-each" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq" type="item()*"/><arg name="f" type="function(item()) as item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of the function is equivalent to the following implementation in XQuery:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : declare function fn:for-each($seq, $f) {
+ :   if (fn:empty($seq))
+ :   then ()
+ :   else ($f(fn:head($seq)), fn:for-each(fn:tail($seq), $f))
+ : };</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>or its equivalent in XSLT:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : &lt;xsl:function name="fn:for-each"&gt;
+ :   &lt;xsl:param name="seq"/&gt;
+ :   &lt;xsl:param name="f"/&gt;
+ :   &lt;xsl:if test="fn:exists($seq)"&gt;
+ :     &lt;xsl:sequence select="$f(fn:head($seq)), fn:for-each(fn:tail($seq), $f)"/&gt;
+ :   &lt;/xsl:if&gt;
+ : &lt;/xsl:function&gt;
+ :          </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function call <code>fn:for-each($SEQ, $F)</code> is equivalent to the expression
+ :                <code>for $i in $SEQ return $F($i)</code><phrase diff="add" at="G">, assuming that
+ :                ordering mode is <code>ordered</code>.</phrase></p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-for-each
+ :)
+declare function fn:for-each( $seq as item()*,  $f as function(item()) as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Applies the function item <var>$f</var> to successive pairs of items taken one
+ :             from <var>$seq1</var> and one from <var>$seq2</var>, returning the concatenation of the
+ :             resulting sequences in order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="for-each-pair" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="seq1" type="item()*"/><arg name="seq2" type="item()*"/><arg name="f" type="function(item(), item()) as item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of the function is equivalent to the following implementation in XQuery:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : declare function fn:for-each-pair($seq1, $seq2, $f)
+ : {
+ :    if(fn:exists($seq1) and fn:exists($seq2)) 
+ :    then (
+ :      $f(fn:head($seq1), fn:head($seq2)),
+ :      fn:for-each-pair(fn:tail($seq1), fn:tail($seq2), $f)
+ :    )
+ :    else ()
+ : };</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>or its equivalent in XSLT:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ : &lt;xsl:function name="fn:for-each-pair"&gt;
+ :   &lt;xsl:param name="seq1/&gt;
+ :   &lt;xsl:param name="seq2/&gt;
+ :   &lt;xsl:param name="f"/&gt;
+ :   &lt;xsl:if test="fn:exists($seq1) and fn:exists($seq2)"&gt;
+ :     &lt;xsl:sequence select="$f(fn:head($seq1), fn:head($seq2))"/&gt;
+ :     &lt;xsl:sequence select="fn:for-each-pair(fn:tail($seq1), fn:tail($seq2), $f)"/&gt;
+ :   &lt;/xsl:if&gt;
+ : &lt;/xsl:function&gt;
+ :          </eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:for-each-pair(("a", "b", "c"), ("x", "y", "z"), concat#2)</code> returns <code>("ax", "by", "cz")</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:for-each-pair(1 to 5, 1 to 5, function($a, $b){10*$a + $b}</code> returns <code>(11, 22, 33, 44, 55)</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-for-each-pair
+ :)
+declare function fn:for-each-pair( $seq1 as item()*,  $seq2 as item()*,  $f as function(item(), item()) as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the supplied string matches a given regular expression.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="matches" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/></proto></example><example role="signature"><proto name="matches" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns <code>true</code> if <code>$input</code> or some substring of
+ :                <code>$input</code> matches the regular expression supplied as <code>$pattern</code>.
+ :             Otherwise, the function returns <code>false</code>. The matching rules are influenced by
+ :             the value of <code>$flags</code> if present. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in <specref ref="flags"/>. </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-matches
+ :)
+declare function fn:matches($input as xs:string?,  $pattern as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the supplied string matches a given regular expression.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="matches" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/></proto></example><example role="signature"><proto name="matches" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns <code>true</code> if <code>$input</code> or some substring of
+ :                <code>$input</code> matches the regular expression supplied as <code>$pattern</code>.
+ :             Otherwise, the function returns <code>false</code>. The matching rules are influenced by
+ :             the value of <code>$flags</code> if present. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in <specref ref="flags"/>. </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-matches
+ :)
+declare function fn:matches( $input as xs:string?,  $pattern as xs:string,  $flags as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a value that is equal to the highest value appearing in the input
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="max" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="max" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following rules are applied to the input sequence <code>$arg</code>:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Values of type <code>xs:untypedAtomic</code> in <code>$arg</code> are cast to
+ :                      <code>xs:double</code>.</p></item><item><!--Text replaced by erratum E27 change 1"--><p diff="chg" at="A-E27">Numeric and <code>xs:anyURI</code> values are converted to
+ :                   the least common type reachable by a combination of type promotion and subtype
+ :                   substitution. See <xspecref spec="XP30" ref="promotion"/> and <xspecref spec="XP30" ref="mapping"/>.</p><!--End of text replaced by erratum E27--></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the resulting sequence may be reordered in an arbitrary order. The
+ :             resulting sequence is referred to below as the converted sequence. The function returns
+ :             an item from the converted sequence rather than the input sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence is empty, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>All items in the <phrase diff="chg" at="A-E47">converted sequence must be
+ :                derived</phrase> from a single base type for which the <code>le</code> operator is
+ :             defined. In addition, the values in the sequence must have a total order. If date/time
+ :             values do not have a timezone, they are considered to have the implicit timezone
+ :             provided by the dynamic context for the purpose of comparison. Duration values must
+ :             either all be <code>xs:yearMonthDuration</code> values or must all be
+ :                <code>xs:dayTimeDuration</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence contains the value <code>NaN</code>, the value
+ :                <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> are of
+ :             type <code>xs:string</code> or types derived by restriction from <code>xs:string</code>,
+ :             then the determination of the item with the smallest value is made according to the
+ :             collation that is used. If the type of the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> is not <code>xs:string</code> and
+ :                <code>$collation</code> is specified, the collation is ignored.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the result of the expression:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ :    if (every $v in $c satisfies $c[1] ge $v)
+ :    then $c[1] 
+ :    else fn:max(fn:subsequence($c, 2))</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>evaluated with <code>$collation</code> as the default collation if specified, and with
+ :                <code>$c</code> as the converted sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A type error is raised <errorref class="RG" code="0006"/> if the input sequence contains
+ :             items of incompatible types, as described above.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-max
+ :)
+declare function fn:max($arg as xs:anyAtomicType*) as  xs:anyAtomicType? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a value that is equal to the highest value appearing in the input
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="max" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="max" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following rules are applied to the input sequence <code>$arg</code>:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Values of type <code>xs:untypedAtomic</code> in <code>$arg</code> are cast to
+ :                      <code>xs:double</code>.</p></item><item><!--Text replaced by erratum E27 change 1"--><p diff="chg" at="A-E27">Numeric and <code>xs:anyURI</code> values are converted to
+ :                   the least common type reachable by a combination of type promotion and subtype
+ :                   substitution. See <xspecref spec="XP30" ref="promotion"/> and <xspecref spec="XP30" ref="mapping"/>.</p><!--End of text replaced by erratum E27--></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the resulting sequence may be reordered in an arbitrary order. The
+ :             resulting sequence is referred to below as the converted sequence. The function returns
+ :             an item from the converted sequence rather than the input sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence is empty, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>All items in the <phrase diff="chg" at="A-E47">converted sequence must be
+ :                derived</phrase> from a single base type for which the <code>le</code> operator is
+ :             defined. In addition, the values in the sequence must have a total order. If date/time
+ :             values do not have a timezone, they are considered to have the implicit timezone
+ :             provided by the dynamic context for the purpose of comparison. Duration values must
+ :             either all be <code>xs:yearMonthDuration</code> values or must all be
+ :                <code>xs:dayTimeDuration</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence contains the value <code>NaN</code>, the value
+ :                <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> are of
+ :             type <code>xs:string</code> or types derived by restriction from <code>xs:string</code>,
+ :             then the determination of the item with the smallest value is made according to the
+ :             collation that is used. If the type of the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> is not <code>xs:string</code> and
+ :                <code>$collation</code> is specified, the collation is ignored.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the result of the expression:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ :    if (every $v in $c satisfies $c[1] ge $v)
+ :    then $c[1] 
+ :    else fn:max(fn:subsequence($c, 2))</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>evaluated with <code>$collation</code> as the default collation if specified, and with
+ :                <code>$c</code> as the converted sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A type error is raised <errorref class="RG" code="0006"/> if the input sequence contains
+ :             items of incompatible types, as described above.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-max
+ :)
+declare function fn:max($arg as xs:anyAtomicType*,  $collation as xs:string) as  xs:anyAtomicType? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a value that is equal to the lowest value appearing in the input
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="min" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="min" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following rules are applied to the input sequence:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Values of type <code>xs:untypedAtomic</code> in <code>$arg</code> are cast to
+ :                      <code>xs:double</code>.</p></item><item><!--Text replaced by erratum E27 change 2"--><p diff="chg" at="A-E27">Numeric and <code>xs:anyURI</code> values are converted to
+ :                   the least common type reachable by a combination of type promotion and subtype
+ :                   substitution. See <xspecref spec="XP30" ref="promotion"/> and <xspecref spec="XP30" ref="mapping"/>.</p><!--End of text replaced by erratum E27--></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the resulting sequence may be reordered in an arbitrary order. The
+ :             resulting sequence is referred to below as the converted sequence. The function returns
+ :             an item from the converted sequence rather than the input sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence is empty, the empty sequence is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>All items in the <phrase diff="chg" at="A-E47">converted sequence must be
+ :                derived</phrase> from a single base type for which the <code>le</code> operator is
+ :             defined. In addition, the values in the sequence must have a total order. If date/time
+ :             values do not have a timezone, they are considered to have the implicit timezone
+ :             provided by the dynamic context for the purpose of comparison. Duration values must
+ :             either all be <code>xs:yearMonthDuration</code> values or must all be
+ :                <code>xs:dayTimeDuration</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence contains the value <code>NaN</code>, the value
+ :                <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> are of
+ :             type <code>xs:string</code> or types derived by restriction from <code>xs:string</code>,
+ :             then the determination of the item with the smallest value is made according to the
+ :             collation that is used. If the type of the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> is not <code>xs:string</code> and
+ :                <code>$collation</code> is specified, the collation is ignored.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the result of the expression:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ :    if (every $v in $c satisfies $c[1] le $v) 
+ :    then $c[1] 
+ :    else fn:min(fn:subsequence($c, 2))</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>evaluated with <code>$collation</code> as the default collation if specified, and with
+ :                <code>$c</code> as the converted sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A type error is raised <errorref class="RG" code="0006"/> if the input sequence contains
+ :             items of incompatible types, as described above.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-min
+ :)
+declare function fn:min($arg as xs:anyAtomicType*) as  xs:anyAtomicType? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a value that is equal to the lowest value appearing in the input
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="min" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/></proto></example><example role="signature"><proto name="min" return-type="xs:anyAtomicType?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:anyAtomicType*"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri, and implicit timezone.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The following rules are applied to the input sequence:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>Values of type <code>xs:untypedAtomic</code> in <code>$arg</code> are cast to
+ :                      <code>xs:double</code>.</p></item><item><!--Text replaced by erratum E27 change 2"--><p diff="chg" at="A-E27">Numeric and <code>xs:anyURI</code> values are converted to
+ :                   the least common type reachable by a combination of type promotion and subtype
+ :                   substitution. See <xspecref spec="XP30" ref="promotion"/> and <xspecref spec="XP30" ref="mapping"/>.</p><!--End of text replaced by erratum E27--></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The items in the resulting sequence may be reordered in an arbitrary order. The
+ :             resulting sequence is referred to below as the converted sequence. The function returns
+ :             an item from the converted sequence rather than the input sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence is empty, the empty sequence is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>All items in the <phrase diff="chg" at="A-E47">converted sequence must be
+ :                derived</phrase> from a single base type for which the <code>le</code> operator is
+ :             defined. In addition, the values in the sequence must have a total order. If date/time
+ :             values do not have a timezone, they are considered to have the implicit timezone
+ :             provided by the dynamic context for the purpose of comparison. Duration values must
+ :             either all be <code>xs:yearMonthDuration</code> values or must all be
+ :                <code>xs:dayTimeDuration</code> values.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the converted sequence contains the value <code>NaN</code>, the value
+ :                <code>NaN</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> are of
+ :             type <code>xs:string</code> or types derived by restriction from <code>xs:string</code>,
+ :             then the determination of the item with the smallest value is made according to the
+ :             collation that is used. If the type of the items in the <phrase diff="chg" at="A-E47">converted sequence</phrase> is not <code>xs:string</code> and
+ :                <code>$collation</code> is specified, the collation is ignored.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the result of the expression:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve">
+ :    if (every $v in $c satisfies $c[1] le $v) 
+ :    then $c[1] 
+ :    else fn:min(fn:subsequence($c, 2))</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>evaluated with <code>$collation</code> as the default collation if specified, and with
+ :                <code>$c</code> as the converted sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A type error is raised <errorref class="RG" code="0006"/> if the input sequence contains
+ :             items of incompatible types, as described above.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-min
+ :)
+declare function fn:min($arg as xs:anyAtomicType*,  $collation as xs:string) as  xs:anyAtomicType? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the minute component of an <code>xs:dateTime</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="minutes-from-dateTime" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> value between 0 and 59, both
+ :             inclusive, representing the minute component in the local value of
+ :             <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:minutes-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))</code> returns <code>20</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:minutes-from-dateTime(xs:dateTime("1999-05-31T13:30:00+05:30"))</code> returns <code>30</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-dateTime
+ :)
+declare function fn:minutes-from-dateTime($arg as xs:dateTime?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of minutes in a duration.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="minutes-from-duration" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:duration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> representing the minutes
+ :             component in the value of <code>$arg</code>. The result is obtained by casting
+ :                <code>$arg</code> to an <code>xs:dayTimeDuration</code> (see <specref ref="casting-to-durations"/>) and then computing the minutes component as described
+ :             in <specref ref="canonical-dayTimeDuration"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a negative duration then the result will be negative..</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is an <code>xs:yearMonthDuration</code> the function returns 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:minutes-from-duration(xs:dayTimeDuration("P3DT10H"))</code> returns <code>0</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:minutes-from-duration(xs:dayTimeDuration("-P5DT12H30M"))</code> returns <code>-30</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-duration
+ :)
+declare function fn:minutes-from-duration($arg as xs:duration?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the minutes component of an <code>xs:time</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="minutes-from-time" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> value between 0 and 59, both
+ :             inclusive, representing the value of the minutes component in the local value of
+ :                <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:minutes-from-time(xs:time("13:00:00Z"))</code> returns <code>0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-minutes-from-time
+ :)
+declare function fn:minutes-from-time($arg as xs:time?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the month component of an <code>xs:date</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="month-from-date" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:date?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> between 1 and 12, both
+ :             inclusive, representing the month component in the local value of <code>$arg</code>.
+ :          </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:month-from-date(xs:date("1999-05-31-05:00"))</code> returns <code>5</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:month-from-date(xs:date("2000-01-01+05:00"))</code> returns <code>1</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-month-from-date
+ :)
+declare function fn:month-from-date($arg as xs:date?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of months in a duration.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="months-from-duration" return-type="xs:integer?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:duration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:integer</code> representing the months
+ :             component in the value of <code>$arg</code>. The result is obtained by casting
+ :                <code>$arg</code> to an <code>xs:yearMonthDuration</code> (see <specref ref="casting-to-durations"/>) and then computing the months component as described in
+ :                <specref ref="canonical-yearMonthDuration"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a negative duration then the result will be negative..</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is an <code>xs:dayTimeDuration</code> the function returns 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:months-from-duration(xs:yearMonthDuration("P20Y15M"))</code> returns <code>3</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:months-from-duration(xs:yearMonthDuration("-P20Y18M"))</code> returns <code>-6</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:months-from-duration(xs:dayTimeDuration("-P2DT15H0M0S"))</code> returns <code>0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-months-from-duration
+ :)
+declare function fn:months-from-duration($arg as xs:duration?) as  xs:integer? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the namespace URI of one of the in-scope namespaces for
+ :                <code>$element</code>, identified by its namespace prefix.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="namespace-uri-for-prefix" return-type="xs:anyURI?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="prefix" type="xs:string?"/><arg name="element" type="element()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$element</code> has an in-scope namespace whose namespace prefix is equal to
+ :                <code>$prefix</code>, the function returns the namespace URI of that namespace.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$element</code> has no in-scope namespace whose namespace prefix is equal to
+ :             <code>$prefix</code>, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="I">If <code>$prefix</code> is the zero-length string or the empty
+ :             sequence, then if <code>$element</code> has a default namespace (that is, a namespace
+ :             node with no name), the function returns the namespace URI of the default namespace. If
+ :                <code>$element</code> has no default namespace, the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Prefixes are equal only if their Unicode codepoints match exactly.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>let <code>$e</code> := <eg xml:space="preserve">
+ : &lt;z:a xmlns="http://example.org/one"; xmlns:z="http://example.org/two"&gt;
+ :   &lt;b xmlns=""/&gt;
+ : &lt;/z:a&gt;</eg></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-for-prefix("z", $e)</code> returns <code>"http://example.org/two";</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-for-prefix("", $e)</code> returns <code>"http://example.org/one";</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-for-prefix((), $e)</code> returns <code>"http://example.org/one";</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-for-prefix("xml", $e)</code> returns <code>"http://www.w3.org/XML/1998/namespace";</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-for-prefix("xml", $e)</code> returns <code>"http://www.w3.org/XML/1998/namespace";</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-for-prefix
+ :)
+declare function fn:namespace-uri-for-prefix( $prefix as xs:string?,  $element as element()) as  xs:anyURI? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the namespace URI part of the supplied QName.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="namespace-uri-from-QName" return-type="xs:anyURI?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:QName?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:anyURI</code> representing the namespace URI
+ :             part of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is in no namespace, the function returns the zero-length
+ :                <code>xs:anyURI</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:namespace-uri-from-QName(fn:QName("http://www.example.com/example";,
+ :                   "person"))</code> returns <code>xs:anyURI("http://www.example.com/example";)</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-namespace-uri-from-QName
+ :)
+declare function fn:namespace-uri-from-QName($arg as xs:QName?) as  xs:anyURI? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the value of <code>$arg</code> with leading and trailing whitespace
+ :             removed, and sequences of internal whitespace reduced to a single space character.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="normalize-space" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="normalize-space" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a string constructed by stripping leading and trailing whitespace
+ :             from the value of <code>$arg</code>, and replacing sequences of one or more adjacent
+ :             whitespace characters with a single space, <code>#x20</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The whitespace characters are defined in the metasymbol S (Production 3) of <bibref ref="REC-xml"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E14">If no argument is supplied, then <code>$arg</code> defaults to the
+ :             string value (calculated using <code>fn:string</code>) of the context item
+ :                (<code>.</code>). </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If no argument is supplied and the context item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref> then a <phrase diff="add" at="dynamic">dynamic</phrase> error is raised: <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-normalize-space
+ :)
+declare function fn:normalize-space() as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the value of <code>$arg</code> with leading and trailing whitespace
+ :             removed, and sequences of internal whitespace reduced to a single space character.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="normalize-space" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="normalize-space" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a string constructed by stripping leading and trailing whitespace
+ :             from the value of <code>$arg</code>, and replacing sequences of one or more adjacent
+ :             whitespace characters with a single space, <code>#x20</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The whitespace characters are defined in the metasymbol S (Production 3) of <bibref ref="REC-xml"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A-E14">If no argument is supplied, then <code>$arg</code> defaults to the
+ :             string value (calculated using <code>fn:string</code>) of the context item
+ :                (<code>.</code>). </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If no argument is supplied and the context item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref> then a <phrase diff="add" at="dynamic">dynamic</phrase> error is raised: <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-normalize-space
+ :)
+declare function fn:normalize-space($arg as xs:string?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the value of <code>$arg</code> after applying Unicode
+ :             normalization.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="normalize-unicode" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example><example role="signature"><proto name="normalize-unicode" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/><arg name="normalizationForm" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the single-argument version of the function is used, the result is the same as
+ :             calling the two-argument version with <code>$normalizationForm</code> set to the string
+ :             "NFC".</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns the value of <code>$arg</code> normalized according to
+ :             the rules of the normalization form identified by the value of
+ :                <code>$normalizationForm</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effective value of <code>$normalizationForm</code> is the value of the expression
+ :                <code>fn:upper-case(fn:normalize-space($normalizationForm))</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="D">See <bibref ref="charmod-normalization"/> for a description of the
+ :             normalization forms.</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFC</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form C (NFC).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFD</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form D (NFD).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFKC</quote>,
+ :                   then the function returns the value of <code>$arg</code> in Unicode Normalization
+ :                   Form KC (NFKC).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFKD</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form KD (NFKD).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is
+ :                      <quote>FULLY-NORMALIZED</quote>, then the function returns the value of
+ :                      <code>$arg</code> converted to fully normalized form. </p></item><item><p>If the effective value of <code>$normalizationForm</code> is the zero-length
+ :                   string, no normalization is performed and <code>$arg</code> is returned.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">Normalization forms NFC, NFD, NFKC, and NFKD, and the algorithms to be
+ :             used for converting a string to each of these forms, are defined in <bibref ref="Unicode-Normalization"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">The motivation for normalization form FULLY-NORMALIZED is explained in
+ :                <bibref ref="charmod-normalization"/>. However, as that specification did not
+ :             progress beyond working draft status, the normative specification is as follows:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D"><item><p>A string is <term>fully-normalized</term> if (a) it is in normalization form NFC
+ :                   as defined in <bibref ref="Unicode-Normalization"/>, and (b) it does not start
+ :                   with a composing character.</p></item><item><p>A composing character is a character that is one or both of the following:</p><ulist><item><p>the second character in the canonical decomposition mapping of some
+ :                         character that is not listed in the Composition Exclusion Table defined in
+ :                            <bibref ref="Unicode-Normalization"/>;</p></item><item><p>of non-zero canonical combining class (as defined in <bibref ref="Unicode"/>).</p></item></ulist></item><item><p>A string is converted to FULLY-NORMALIZED form as follows:</p><ulist><item><p>if the first character in the string is a composing character, prepend a
+ :                         single space (x20);</p></item><item><p>convert the resulting string to normalization form NFC.</p></item></ulist></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" At="L">Conforming implementations <rfc2119>must</rfc2119> support normalization form "NFC" and
+ :                <rfc2119>may</rfc2119> support normalization forms "NFD", "NFKC", "NFKD", and
+ :             "FULLY-NORMALIZED". They <rfc2119>may</rfc2119> also support other normalization forms
+ :             with <termref def="implementation-defined">implementation-defined</termref> semantics. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">It is <termref def="dt-implementation-defined">implementation-defined</termref> which version of
+ :             Unicode (and therefore, of the normalization algorithms and their underlying
+ :             data) is supported by the implementation. See <bibref ref="Unicode-Normalization"/> for details of the
+ :             stability policy regarding changes to the normalization rules in future
+ :             versions of Unicode. If the input string contains codepoints that are
+ :             unassigned in the relevant version of Unicode, or for which no normalization
+ :             rules are defined, the <code>fn:normalize-unicode</code> function leaves such codepoints
+ :             unchanged. If the implementation supports the requested normalization form then
+ :             it <rfc2119>must</rfc2119> be able to handle every input string without raising an error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="CH" code="0003"/> if the effective value of the
+ :                <code>$normalizationForm</code> argument is not one of the values supported by the
+ :             implementation.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-normalize-unicode
+ :)
+declare function fn:normalize-unicode($arg as xs:string?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the value of <code>$arg</code> after applying Unicode
+ :             normalization.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="normalize-unicode" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example><example role="signature"><proto name="normalize-unicode" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/><arg name="normalizationForm" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the single-argument version of the function is used, the result is the same as
+ :             calling the two-argument version with <code>$normalizationForm</code> set to the string
+ :             "NFC".</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns the value of <code>$arg</code> normalized according to
+ :             the rules of the normalization form identified by the value of
+ :                <code>$normalizationForm</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effective value of <code>$normalizationForm</code> is the value of the expression
+ :                <code>fn:upper-case(fn:normalize-space($normalizationForm))</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="D">See <bibref ref="charmod-normalization"/> for a description of the
+ :             normalization forms.</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFC</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form C (NFC).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFD</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form D (NFD).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFKC</quote>,
+ :                   then the function returns the value of <code>$arg</code> in Unicode Normalization
+ :                   Form KC (NFKC).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is <quote>NFKD</quote>,
+ :                   then the function returns the value of <code>$arg</code> converted to Unicode
+ :                   Normalization Form KD (NFKD).</p></item><item><p>If the effective value of <code>$normalizationForm</code> is
+ :                      <quote>FULLY-NORMALIZED</quote>, then the function returns the value of
+ :                      <code>$arg</code> converted to fully normalized form. </p></item><item><p>If the effective value of <code>$normalizationForm</code> is the zero-length
+ :                   string, no normalization is performed and <code>$arg</code> is returned.</p></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">Normalization forms NFC, NFD, NFKC, and NFKD, and the algorithms to be
+ :             used for converting a string to each of these forms, are defined in <bibref ref="Unicode-Normalization"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D">The motivation for normalization form FULLY-NORMALIZED is explained in
+ :                <bibref ref="charmod-normalization"/>. However, as that specification did not
+ :             progress beyond working draft status, the normative specification is as follows:</p><ulist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="D"><item><p>A string is <term>fully-normalized</term> if (a) it is in normalization form NFC
+ :                   as defined in <bibref ref="Unicode-Normalization"/>, and (b) it does not start
+ :                   with a composing character.</p></item><item><p>A composing character is a character that is one or both of the following:</p><ulist><item><p>the second character in the canonical decomposition mapping of some
+ :                         character that is not listed in the Composition Exclusion Table defined in
+ :                            <bibref ref="Unicode-Normalization"/>;</p></item><item><p>of non-zero canonical combining class (as defined in <bibref ref="Unicode"/>).</p></item></ulist></item><item><p>A string is converted to FULLY-NORMALIZED form as follows:</p><ulist><item><p>if the first character in the string is a composing character, prepend a
+ :                         single space (x20);</p></item><item><p>convert the resulting string to normalization form NFC.</p></item></ulist></item></ulist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" At="L">Conforming implementations <rfc2119>must</rfc2119> support normalization form "NFC" and
+ :                <rfc2119>may</rfc2119> support normalization forms "NFD", "NFKC", "NFKD", and
+ :             "FULLY-NORMALIZED". They <rfc2119>may</rfc2119> also support other normalization forms
+ :             with <termref def="implementation-defined">implementation-defined</termref> semantics. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">It is <termref def="dt-implementation-defined">implementation-defined</termref> which version of
+ :             Unicode (and therefore, of the normalization algorithms and their underlying
+ :             data) is supported by the implementation. See <bibref ref="Unicode-Normalization"/> for details of the
+ :             stability policy regarding changes to the normalization rules in future
+ :             versions of Unicode. If the input string contains codepoints that are
+ :             unassigned in the relevant version of Unicode, or for which no normalization
+ :             rules are defined, the <code>fn:normalize-unicode</code> function leaves such codepoints
+ :             unchanged. If the implementation supports the requested normalization form then
+ :             it <rfc2119>must</rfc2119> be able to handle every input string without raising an error.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="CH" code="0003"/> if the effective value of the
+ :                <code>$normalizationForm</code> argument is not one of the values supported by the
+ :             implementation.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-normalize-unicode
+ :)
+declare function fn:normalize-unicode( $arg as xs:string?,  $normalizationForm as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns <code>true</code> if the effective boolean value of <code>$arg</code>
+ :             is <code>false</code>, or <code>false</code> if it is <code>true</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="not" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$arg</code> is first reduced to an effective boolean value by
+ :             applying the <code>fn:boolean()</code> function. The function returns <code>true</code>
+ :             if the effective boolean value is <code>false</code>, or <code>false</code> if the
+ :             effective boolean value is <code>true</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:not(fn:true())</code> returns <code>false()</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:not("false")</code> returns <code>false()</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-not
+ :)
+declare function fn:not($arg as item()*) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns <code>$arg</code> if it contains one or more items. Otherwise, raises
+ :             an error. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="one-or-more" return-type="item()+" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Except in error cases, the function returns <code>$arg</code> unchanged.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RG" code="0004"/> if <code>$arg</code> is an empty
+ :             sequence.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-one-or-more
+ :)
+declare function fn:one-or-more($arg as item()*) as  item()+ external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function takes as input an XML document represented as a string, and
+ :             returns the document node at the root of an XDM tree representing the parsed
+ :             document.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="parse-xml" return-type="document-node(element(*))?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">If <code>$arg</code> is the empty sequence, the function returns the
+ :             empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The precise process used to construct the XDM instance is <termref def="implementation-defined"/>. In
+ :             particular, it is implementation-defined whether DTD and/or schema validation is invoked, and it is
+ :             implementation-defined whether an XML 1.0 or XML 1.1 parser is used.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The Static Base URI property from the static context of the
+ :             <code>fn:parse-xml</code> function call is used both as the base URI used by the XML parser to resolve
+ :             relative entity references within the document, and as the base URI of the document node
+ :             that is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The document URI of the returned node is <termref def="absent">absent</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function is <emph>not</emph>
+ :             <termref def="deterministic">deterministic</termref>: that is, if the function is called
+ :             twice with the same arguments, it is <termref def="implementation-dependent">implementation-dependent</termref> whether the same node is returned on both
+ :             occasions.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0006"/> if the content of
+ :                <code>$arg</code> is not a well-formed and namespace-well-formed XML document.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0006"/> if DTD-based
+ :             validation is carried out and the content of <code>$arg</code> is not valid against its
+ :             DTD.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-parse-xml
+ :)
+declare function fn:parse-xml($arg as xs:string?) as  document-node(element(*, xs:untyped)) external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function takes as input an XML document represented as a string, and
+ :             returns the document node at the root of an XDM tree representing the parsed
+ :             document.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="parse-xml" return-type="document-node(element(*))?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">If <code>$arg</code> is the empty sequence, the function returns the
+ :             empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The precise process used to construct the XDM instance is <termref def="implementation-defined"/>. In
+ :             particular, it is implementation-defined whether DTD and/or schema validation is invoked, and it is
+ :             implementation-defined whether an XML 1.0 or XML 1.1 parser is used.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The Static Base URI property from the static context of the
+ :             <code>fn:parse-xml</code> function call is used both as the base URI used by the XML parser to resolve
+ :             relative entity references within the document, and as the base URI of the document node
+ :             that is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The document URI of the returned node is <termref def="absent">absent</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function is <emph>not</emph>
+ :             <termref def="deterministic">deterministic</termref>: that is, if the function is called
+ :             twice with the same arguments, it is <termref def="implementation-dependent">implementation-dependent</termref> whether the same node is returned on both
+ :             occasions.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0006"/> if the content of
+ :                <code>$arg</code> is not a well-formed and namespace-well-formed XML document.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="G">A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0006"/> if DTD-based
+ :             validation is carried out and the content of <code>$arg</code> is not valid against its
+ :             DTD.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-parse-xml
+ :)
+declare function fn:parse-xml( $arg as xs:string?,  $baseURI as xs:string) as  document-node(element(*, xs:untyped)) external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function takes as input an XML external entity represented as a string,
+ :             and returns the document node at the root of an XDM tree representing the parsed
+ :             document fragment.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="parse-xml-fragment" return-type="document-node()?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-nondeterministic">nondeterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The input must be a namespace-well-formed external general parsed entity. More specifically,
+ :             it must be a string conforming to the production rule <xnt xmlns:xlink="http://www.w3.org/1999/xlink"; spec="xml" ref="NT-extParsedEnt" xlink:type="simple">extParsedEnt</xnt> in <bibref ref="REC-xml"/>, it must contain no entity references other
+ :             than references to predefined entities,
+ :             and it must satisfy all the rules
+ :             of <bibref ref="REC-xml-names"/> for namespace-well-formed documents with the exception
+ :             that the rule requiring it to be a well-formed document is replaced by the rule requiring
+ :             it to be a well-formed external general parsed entity.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The string is parsed to form a sequence of nodes which
+ :             become children of the new document node, in the same way as the content of any element
+ :             is converted into a sequence of children for the resulting element node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Schema validation is <emph>not</emph> invoked, which means that the nodes in the
+ :             returned document will all be untyped.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The precise process used to construct the XDM instance is <termref def="implementation-defined"/>. In
+ :             particular, it is implementation-defined whether an XML 1.0 or XML 1.1 parser is
+ :             used.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="L">The Static Base URI from the static context of the <code>fn:parse-xml-fragment</code> function call 
+ :             is used as the base URI of the document node
+ :             that is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The document URI of the returned node is <termref def="absent">absent</termref>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function is <emph>not</emph>
+ :             <termref def="deterministic">deterministic</termref>: that is, if the function is called
+ :             twice with the same arguments, it is <termref def="implementation-dependent">implementation-dependent</termref> whether the same node is returned on both
+ :                occasions.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="DC" code="0006"/> if the content of
+ :                <code>$arg</code> is not a well-formed external general parsed entity, 
+ :             if it contains entity references other than references to predefined entities, or if a document that
+ :             incorporates this well-formed parsed entity would not be namespace-well-formed.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-parse-xml-fragment
+ :)
+declare function fn:parse-xml-fragment( $arg as xs:string?) as  document-node(element(*, xs:untyped)) external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the prefix component of the supplied QName.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="prefix-from-QName" return-type="xs:NCName?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:QName?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> has no prefix component the function returns the empty
+ :             sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:NCName</code> representing the prefix
+ :             component of <code>$arg</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-prefix-from-QName
+ :)
+declare function fn:prefix-from-QName($arg as xs:QName?) as  xs:NCName? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a new sequence containing all the items of <code>$target</code> except
+ :             the item at position <code>$position</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="remove" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="target" type="item()*"/><arg name="position" type="xs:integer"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence consisting of all items of <code>$target</code> whose
+ :             index is less than <code>$position</code>, followed by all items of <code>$target</code>
+ :             whose index is greater than <code>$position</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$position</code> is less than 1 or greater than the number of items in
+ :                <code>$target</code>, <code>$target</code> is returned.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$target</code> is the empty sequence, the empty sequence is returned.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-remove
+ :)
+declare function fn:remove($target as item()*,  $position as xs:integer) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string produced from the input string by replacing any substrings
+ :             that match a given regular expression with a supplied replacement string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="replace" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="replacement" type="xs:string"/></proto></example><example role="signature"><proto name="replace" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="replacement" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$flags</code> argument is interpreted in the same manner as for the
+ :                <code>fn:matches</code> function. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the <code>xs:string</code> that is obtained by replacing each
+ :             non-overlapping substring of <code>$input</code> that matches the given
+ :                <code>$pattern</code> with an occurrence of the <code>$replacement</code> string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If two overlapping substrings of <code>$input</code> both match the
+ :                <code>$pattern</code>, then only the first one (that is, the one whose first <termref def="character">character</termref> comes first in the <code>$input</code> string) is
+ :             replaced.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">If the <code>q</code> flag is present, the replacement string is used
+ :                <emph>as is</emph>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><phrase diff="add" at="B">Otherwise,</phrase> within the <code>$replacement</code>
+ :             string, a variable <code>$N</code> may be used to refer to the substring captured by the
+ :             Nth parenthesized sub-expression in the regular expression. For each match of the
+ :             pattern, these variables are assigned the value of the content matched by the relevant
+ :             sub-expression, and the modified replacement string is then substituted for the <termref def="character">characters</termref> in <code>$input</code> that matched the pattern.
+ :                <code>$0</code> refers to the substring captured by the regular expression as a
+ :             whole.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>More specifically, the rules are as follows, where <code>S</code> is the number of
+ :             parenthesized sub-expressions in the regular expression, and <code>N</code> is the
+ :             decimal number formed by taking all the digits that consecutively follow the
+ :                <code>$</code> character:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If <code>N</code>=<code>0</code>, then the variable is replaced by the substring
+ :                   matched by the regular expression as a whole.</p></item><item><p>If <code>1</code>&lt;=<code>N</code>&lt;=<code>S</code>, then the variable is
+ :                   replaced by the substring captured by the Nth parenthesized sub-expression. If the
+ :                      <code>Nth</code> parenthesized sub-expression was not matched, then the
+ :                   variable is replaced by the zero-length string.</p></item><item><p>If <code>S</code>&lt;<code>N</code>&lt;=<code>9</code>, then the variable is
+ :                   replaced by the zero-length string.</p></item><item><p>Otherwise (if <code>N</code>&gt;<code>S</code> and
+ :                      <code>N</code>&gt;<code>9</code>), the last digit of <code>N</code> is taken to
+ :                   be a literal character to be included "as is" in the replacement string, and the
+ :                   rules are reapplied using the number <code>N</code> formed by stripping off this
+ :                   last digit.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For example, if the replacement string is <quote>
+ :                <code>$23</code>
+ :             </quote> and there are 5 substrings, the result contains the value of the substring that
+ :             matches the second sub-expression, followed by the digit <quote>
+ :                <code>3</code>
+ :             </quote>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="B">Unless the <code>q</code> flag is used, a literal <code>$</code>
+ :             character within the replacement string must be written as <code>\$</code>, and a
+ :             literal <code>\</code> character must be written as <code>\\</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If two alternatives within the pattern both match at the same position in the
+ :                <code>$input</code>, then the match that is chosen is the one matched by the first
+ :             alternative. For example:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:replace("abcd", "(ab)|(a)", "[1=$1][2=$2]") returns "[1=ab][2=]cd"</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0003"/> if the pattern matches a
+ :             zero-length string, that is, if the expression <code>fn:matches("", $pattern,
+ :                $flags)</code> returns <code>true</code>. It is not an error, however, if a captured
+ :             substring is zero-length.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0004"/> if the value of
+ :                <code>$replacement</code> contains a "<code>$</code>" character that is not
+ :             immediately followed by a digit <code>0-9</code> and not immediately preceded by a
+ :             "\".</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0004"/> if the value of
+ :                <code>$replacement</code> contains a "<code>\</code>" character that is not part of a
+ :                "<code>\\</code>" pair, unless it is immediately followed by a "<code>$</code>"
+ :             character.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-replace
+ :)
+declare function fn:replace( $input as xs:string?,  $pattern as xs:string,  $replacement as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string produced from the input string by replacing any substrings
+ :             that match a given regular expression with a supplied replacement string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="replace" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="replacement" type="xs:string"/></proto></example><example role="signature"><proto name="replace" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="input" type="xs:string?"/><arg name="pattern" type="xs:string"/><arg name="replacement" type="xs:string"/><arg name="flags" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The effect of calling the first version of this function (omitting the argument
+ :                <code>$flags</code>) is the same as the effect of calling the second version with the
+ :                <code>$flags</code> argument set to a zero-length string. Flags are defined in
+ :                <specref ref="flags"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The <code>$flags</code> argument is interpreted in the same manner as for the
+ :                <code>fn:matches</code> function. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$input</code> is the empty sequence, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the <code>xs:string</code> that is obtained by replacing each
+ :             non-overlapping substring of <code>$input</code> that matches the given
+ :                <code>$pattern</code> with an occurrence of the <code>$replacement</code> string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If two overlapping substrings of <code>$input</code> both match the
+ :                <code>$pattern</code>, then only the first one (that is, the one whose first <termref def="character">character</termref> comes first in the <code>$input</code> string) is
+ :             replaced.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">If the <code>q</code> flag is present, the replacement string is used
+ :                <emph>as is</emph>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><phrase diff="add" at="B">Otherwise,</phrase> within the <code>$replacement</code>
+ :             string, a variable <code>$N</code> may be used to refer to the substring captured by the
+ :             Nth parenthesized sub-expression in the regular expression. For each match of the
+ :             pattern, these variables are assigned the value of the content matched by the relevant
+ :             sub-expression, and the modified replacement string is then substituted for the <termref def="character">characters</termref> in <code>$input</code> that matched the pattern.
+ :                <code>$0</code> refers to the substring captured by the regular expression as a
+ :             whole.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>More specifically, the rules are as follows, where <code>S</code> is the number of
+ :             parenthesized sub-expressions in the regular expression, and <code>N</code> is the
+ :             decimal number formed by taking all the digits that consecutively follow the
+ :                <code>$</code> character:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If <code>N</code>=<code>0</code>, then the variable is replaced by the substring
+ :                   matched by the regular expression as a whole.</p></item><item><p>If <code>1</code>&lt;=<code>N</code>&lt;=<code>S</code>, then the variable is
+ :                   replaced by the substring captured by the Nth parenthesized sub-expression. If the
+ :                      <code>Nth</code> parenthesized sub-expression was not matched, then the
+ :                   variable is replaced by the zero-length string.</p></item><item><p>If <code>S</code>&lt;<code>N</code>&lt;=<code>9</code>, then the variable is
+ :                   replaced by the zero-length string.</p></item><item><p>Otherwise (if <code>N</code>&gt;<code>S</code> and
+ :                      <code>N</code>&gt;<code>9</code>), the last digit of <code>N</code> is taken to
+ :                   be a literal character to be included "as is" in the replacement string, and the
+ :                   rules are reapplied using the number <code>N</code> formed by stripping off this
+ :                   last digit.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For example, if the replacement string is <quote>
+ :                <code>$23</code>
+ :             </quote> and there are 5 substrings, the result contains the value of the substring that
+ :             matches the second sub-expression, followed by the digit <quote>
+ :                <code>3</code>
+ :             </quote>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="B">Unless the <code>q</code> flag is used, a literal <code>$</code>
+ :             character within the replacement string must be written as <code>\$</code>, and a
+ :             literal <code>\</code> character must be written as <code>\\</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> If two alternatives within the pattern both match at the same position in the
+ :                <code>$input</code>, then the match that is chosen is the one matched by the first
+ :             alternative. For example:</p><eg xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; xml:space="preserve"> fn:replace("abcd", "(ab)|(a)", "[1=$1][2=$2]") returns "[1=ab][2=]cd"</eg><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0002"/> if the value of
+ :                <code>$pattern</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0001"/> if the value of
+ :                <code>$flags</code> is invalid according to the rules described in section <specref ref="regex-syntax"/>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0003"/> if the pattern matches a
+ :             zero-length string, that is, if the expression <code>fn:matches("", $pattern,
+ :                $flags)</code> returns <code>true</code>. It is not an error, however, if a captured
+ :             substring is zero-length.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0004"/> if the value of
+ :                <code>$replacement</code> contains a "<code>$</code>" character that is not
+ :             immediately followed by a digit <code>0-9</code> and not immediately preceded by a
+ :             "\".</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="RX" code="0004"/> if the value of
+ :                <code>$replacement</code> contains a "<code>\</code>" character that is not part of a
+ :                "<code>\\</code>" pair, unless it is immediately followed by a "<code>$</code>"
+ :             character.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-replace
+ :)
+declare function fn:replace( $input as xs:string?,  $pattern as xs:string,  $replacement as xs:string,  $flags as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns an <code>xs:QName</code> value (that is, an expanded-QName) by taking
+ :             an <code>xs:string</code> that has the lexical form of an <code>xs:QName</code> (a
+ :             string in the form "prefix:local-name" or "local-name") and resolving it using the
+ :             in-scope namespaces for a given element.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="resolve-QName" return-type="xs:QName?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="qname" type="xs:string?"/><arg name="element" type="element()"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$qname</code> is the empty sequence, returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>More specifically, the function searches the namespace bindings of <code>$element</code>
+ :             for a binding whose name matches the prefix of <code>$qname</code>, or the zero-length
+ :             string if it has no prefix, and constructs an expanded-QName whose local name is taken
+ :             from the supplied <code>$qname</code>, and whose namespace URI is taken from the string
+ :             value of the namespace binding.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the <code>$qname</code> has no prefix, and there is no namespace binding for
+ :                <code>$element</code> corresponding to the default (unnamed) namespace, then the
+ :             resulting expanded-QName has no namespace part.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The prefix (or absence of a prefix) in the supplied <code>$qname</code> argument is
+ :             retained in the returned expanded-QName, as discussed in <xspecref spec="DM30" ref="terminology"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="CA" code="0002"/> if <code>$qname</code> does not
+ :             have the correct lexical form for an instance of <code>xs:QName</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error is raised <errorref class="NS" code="0004"/> if <code>$qname</code> has a
+ :             prefix and there is no namespace binding for <code>$element</code> that matches this
+ :             prefix.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-resolve-QName
+ :)
+declare function fn:resolve-QName($qname as xs:string?,  $element as element()) as  xs:QName? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Reverses the order of items in a sequence. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="reverse" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence containing the items in <code>$arg</code> in reverse
+ :             order.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the empty sequence is returned. </p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-reverse
+ :)
+declare function fn:reverse($arg as item()*) as  item()* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds a value to a specified number of decimal places, rounding upwards if two
+ :             such values are equally near.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="round" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example><example role="signature"><proto name="round" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/><arg name="precision" type="xs:integer"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the nearest (that is, numerically closest) value to
+ :                <code>$arg</code> that is a multiple of ten to the power of minus
+ :                <code>$precision</code>. If two such values are equally near (for example, if the
+ :             fractional part in <code>$arg</code> is exactly .5), the function returns the one that
+ :             is closest to positive infinity.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The single-argument version of this function produces the same result as the
+ :             two-argument version with <code>$precision=0</code> (that is, it rounds to a whole
+ :             number).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>When <code>$arg</code> is of type <code>xs:float</code> and <code>xs:double</code>:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If <code>$arg</code> is NaN, positive or negative zero, or positive or negative
+ :                   infinity, then the result is the same as the argument.</p></item><item><p>For other values, the argument is cast to <code>xs:decimal</code> using an
+ :                   implementation of <code>xs:decimal</code> that imposes no limits on the number of
+ :                   digits that can be represented. The function is applied to this
+ :                      <code>xs:decimal</code> value, and the resulting <code>xs:decimal</code> is
+ :                   cast back to <code>xs:float</code> or <code>xs:double</code> as appropriate to
+ :                   form the function result. If the resulting <code>xs:decimal</code> value is zero,
+ :                   then positive or negative zero is returned according to the sign of
+ :                      <code>$arg</code>.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is typically used with a non-zero <code>$precision</code> in financial
+ :             applications where the argument is of type <code>xs:decimal</code>. For arguments of
+ :             type <code>xs:float</code> and <code>xs:double</code> the results may be
+ :             counter-intuitive. For example, consider <code>round(35.425e0, 2)</code>. The result is
+ :             not 35.43, as might be expected, but 35.42. This is because the <code>xs:double</code> written as 35.425e0
+ :             has an exact value equal to 35.42499999999..., which is closer
+ :             to 35.42 than to 35.43.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-round
+ :)
+declare function fn:round($arg as numeric?) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds a value to a specified number of decimal places, rounding upwards if two
+ :             such values are equally near.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="round" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example><example role="signature"><proto name="round" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/><arg name="precision" type="xs:integer"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the nearest (that is, numerically closest) value to
+ :                <code>$arg</code> that is a multiple of ten to the power of minus
+ :                <code>$precision</code>. If two such values are equally near (for example, if the
+ :             fractional part in <code>$arg</code> is exactly .5), the function returns the one that
+ :             is closest to positive infinity.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The single-argument version of this function produces the same result as the
+ :             two-argument version with <code>$precision=0</code> (that is, it rounds to a whole
+ :             number).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>When <code>$arg</code> is of type <code>xs:float</code> and <code>xs:double</code>:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If <code>$arg</code> is NaN, positive or negative zero, or positive or negative
+ :                   infinity, then the result is the same as the argument.</p></item><item><p>For other values, the argument is cast to <code>xs:decimal</code> using an
+ :                   implementation of <code>xs:decimal</code> that imposes no limits on the number of
+ :                   digits that can be represented. The function is applied to this
+ :                      <code>xs:decimal</code> value, and the resulting <code>xs:decimal</code> is
+ :                   cast back to <code>xs:float</code> or <code>xs:double</code> as appropriate to
+ :                   form the function result. If the resulting <code>xs:decimal</code> value is zero,
+ :                   then positive or negative zero is returned according to the sign of
+ :                      <code>$arg</code>.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is typically used with a non-zero <code>$precision</code> in financial
+ :             applications where the argument is of type <code>xs:decimal</code>. For arguments of
+ :             type <code>xs:float</code> and <code>xs:double</code> the results may be
+ :             counter-intuitive. For example, consider <code>round(35.425e0, 2)</code>. The result is
+ :             not 35.43, as might be expected, but 35.42. This is because the <code>xs:double</code> written as 35.425e0
+ :             has an exact value equal to 35.42499999999..., which is closer
+ :             to 35.42 than to 35.43.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-round
+ :)
+declare function fn:round($arg as numeric?,  $precision as xs:integer) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds a value to a specified number of decimal places, rounding to make the
+ :             last digit even if two such values are equally near.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="round-half-to-even" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example><example role="signature"><proto name="round-half-to-even" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/><arg name="precision" type="xs:integer"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the nearest (that is, numerically closest) value to
+ :                <code>$arg</code> that is a multiple of ten to the power of minus
+ :                <code>$precision</code>. If two such values are equally near (e.g. if the fractional
+ :             part in <code>$arg</code> is exactly .500...), the function returns the one whose least
+ :             significant digit is even.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> The first signature of this function produces the same result as the second signature
+ :             with <code>$precision=0</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For arguments of type <code>xs:float</code> and <code>xs:double</code>:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the argument is <code>NaN</code>, positive or negative zero, or positive or
+ :                   negative infinity, then the result is the same as the argument.</p></item><item><p>In all other cases, the argument is cast to <code>xs:decimal</code>
+ :                   <phrase diff="add" at="A">using an implementation of xs:decimal that imposes no
+ :                      limits on the number of digits that can be represented.</phrase> The function
+ :                   is applied to this <code>xs:decimal</code> value, and the resulting
+ :                      <code>xs:decimal</code> is cast back to <code>xs:float</code> or
+ :                      <code>xs:double</code> as appropriate to form the function result. If the
+ :                   resulting <code>xs:decimal</code> value is zero, then positive or negative zero is
+ :                   returned according to the sign of the original argument.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A">This function is typically used in financial applications where the
+ :             argument is of type <code>xs:decimal</code>. For arguments of type <code>xs:float</code>
+ :             and <code>xs:double</code> the results may be counter-intuitive. For example, consider
+ :                <code>round-half-to-even(xs:float(150.015), 2)</code>. The result is not 150.02 as
+ :             might be expected, but 150.01. This is because the conversion of the
+ :                <code>xs:float</code> value represented by the literal 150.015 to an
+ :                <code>xs:decimal</code> produces the <code>xs:decimal</code> value 150.014999389...,
+ :             which is closer to 150.01 than to 150.02.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-round-half-to-even
+ :)
+declare function fn:round-half-to-even($arg as numeric?) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Rounds a value to a specified number of decimal places, rounding to make the
+ :             last digit even if two such values are equally near.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="round-half-to-even" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/></proto></example><example role="signature"><proto name="round-half-to-even" return-type="numeric?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="numeric?"/><arg name="precision" type="xs:integer"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>General rules: see <specref ref="numeric-value-functions"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns the nearest (that is, numerically closest) value to
+ :                <code>$arg</code> that is a multiple of ten to the power of minus
+ :                <code>$precision</code>. If two such values are equally near (e.g. if the fractional
+ :             part in <code>$arg</code> is exactly .500...), the function returns the one whose least
+ :             significant digit is even.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the type of <code>$arg</code> is one of the four numeric types <code>xs:float</code>,
+ :                <code>xs:double</code>, <code>xs:decimal</code> or <code>xs:integer</code> the type
+ :             of the result is the same as the type of <code>$arg</code>. If the type of
+ :                <code>$arg</code> is a type derived from one of the numeric types, the result is an
+ :             instance of the base numeric type.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";> The first signature of this function produces the same result as the second signature
+ :             with <code>$precision=0</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>For arguments of type <code>xs:float</code> and <code>xs:double</code>:</p><olist xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><item><p>If the argument is <code>NaN</code>, positive or negative zero, or positive or
+ :                   negative infinity, then the result is the same as the argument.</p></item><item><p>In all other cases, the argument is cast to <code>xs:decimal</code>
+ :                   <phrase diff="add" at="A">using an implementation of xs:decimal that imposes no
+ :                      limits on the number of digits that can be represented.</phrase> The function
+ :                   is applied to this <code>xs:decimal</code> value, and the resulting
+ :                      <code>xs:decimal</code> is cast back to <code>xs:float</code> or
+ :                      <code>xs:double</code> as appropriate to form the function result. If the
+ :                   resulting <code>xs:decimal</code> value is zero, then positive or negative zero is
+ :                   returned according to the sign of the original argument.</p></item></olist><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="del" at="F">For detailed type semantics, see [Formal Semantics].</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="A">This function is typically used in financial applications where the
+ :             argument is of type <code>xs:decimal</code>. For arguments of type <code>xs:float</code>
+ :             and <code>xs:double</code> the results may be counter-intuitive. For example, consider
+ :                <code>round-half-to-even(xs:float(150.015), 2)</code>. The result is not 150.02 as
+ :             might be expected, but 150.01. This is because the conversion of the
+ :                <code>xs:float</code> value represented by the literal 150.015 to an
+ :                <code>xs:decimal</code> produces the <code>xs:decimal</code> value 150.014999389...,
+ :             which is closer to 150.01 than to 150.02.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-round-half-to-even
+ :)
+declare function fn:round-half-to-even($arg as numeric?,  $precision as xs:integer) as  numeric? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the seconds component of an <code>xs:dateTime</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="seconds-from-dateTime" return-type="xs:decimal?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:dateTime?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:decimal</code> value greater than or equal
+ :             to zero and less than 60, representing the seconds and fractional seconds in the local
+ :             value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:seconds-from-dateTime(xs:dateTime("1999-05-31T13:20:00-05:00"))</code> returns <code>0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-dateTime
+ :)
+declare function fn:seconds-from-dateTime($arg as xs:dateTime?) as  xs:decimal? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of seconds in a duration.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="seconds-from-duration" return-type="xs:decimal?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:duration?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:decimal</code> representing the seconds
+ :             component in the value of <code>$arg</code>. The result is obtained by casting
+ :                <code>$arg</code> to an <code>xs:dayTimeDuration</code> (see <specref ref="casting-to-durations"/>) and then computing the seconds component as described
+ :             in <specref ref="canonical-dayTimeDuration"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a negative duration then the result will be negative..</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is an <code>xs:yearMonthDuration</code> the function returns 0.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:seconds-from-duration(xs:dayTimeDuration("P3DT10H12.5S"))</code> returns <code>12.5</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:seconds-from-duration(xs:dayTimeDuration("-PT256S"))</code> returns <code>-16.0</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-duration
+ :)
+declare function fn:seconds-from-duration($arg as xs:duration?) as  xs:decimal? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the seconds component of an <code>xs:time</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="seconds-from-time" return-type="xs:decimal?" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:time?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is the empty sequence, the function returns the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Otherwise, the function returns an <code>xs:decimal</code> value greater than or equal
+ :             to zero and less than 60, representing the seconds and fractional seconds in the local
+ :             value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:seconds-from-time(xs:time("13:20:10.5"))</code> returns <code>10.5</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-seconds-from-time
+ :)
+declare function fn:seconds-from-time($arg as xs:time?) as  xs:decimal? external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function serializes the supplied <phrase diff="chg" at="G">input
+ :                sequence</phrase>
+ :             <code>$arg</code> as described in <bibref ref="xslt-xquery-serialization-30"/>,
+ :             returning the serialized <phrase diff="chg" at="G">representation of the
+ :                sequence</phrase> as a string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="serialize" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example><example role="signature"><proto name="serialize" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/><arg name="params" type="element(output:serialization-parameters)?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$arg</code> acts as the input sequence to the serialization process,
+ :             which starts with sequence normalization.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">The single-argument version of this function has the same effect as
+ :             the two-argument version called with <code>$params</code> set to an empty sequence. This
+ :             in turn is the same as the effect of passing an
+ :                <code>output:serialization-parameters</code> element with no child elements.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">The <code>$params</code> argument is used to identify a set of
+ :             serialization parameters. These are supplied in the form of an
+ :                <code>output:serialization-parameters</code> element, having the format described in
+ :                <xspecref spec="SER30" ref="serparams-in-xdm-instance"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The final stage of serialization, that is, encoding, is skipped. If the serializer does
+ :             not allow this phase to be skipped, then the sequence of octets returned by the
+ :             serializer is decoded into a string by reversing the character encoding performed in the
+ :             final stage.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">If the host language makes serialization an optional feature and
+ :          the implementation does not support serialization, then a dynamic error
+ :             <errorref class="DC" code="0010"/> is raised.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The serialization process will raise an error if <code>$arg</code> is an attribute or
+ :             namespace node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If any serialization error occurs, including the detection of an invalid value for a
+ :             serialization parameter, this results in the <code>fn:serialize</code> call failing with
+ :             a dynamic error.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-serialize
+ :)
+declare function fn:serialize($arg as item()*) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function serializes the supplied <phrase diff="chg" at="G">input
+ :                sequence</phrase>
+ :             <code>$arg</code> as described in <bibref ref="xslt-xquery-serialization-30"/>,
+ :             returning the serialized <phrase diff="chg" at="G">representation of the
+ :                sequence</phrase> as a string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="serialize" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/></proto></example><example role="signature"><proto name="serialize" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="item()*"/><arg name="params" type="element(output:serialization-parameters)?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The value of <code>$arg</code> acts as the input sequence to the serialization process,
+ :             which starts with sequence normalization.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">The single-argument version of this function has the same effect as
+ :             the two-argument version called with <code>$params</code> set to an empty sequence. This
+ :             in turn is the same as the effect of passing an
+ :                <code>output:serialization-parameters</code> element with no child elements.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="chg" at="G">The <code>$params</code> argument is used to identify a set of
+ :             serialization parameters. These are supplied in the form of an
+ :                <code>output:serialization-parameters</code> element, having the format described in
+ :                <xspecref spec="SER30" ref="serparams-in-xdm-instance"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The final stage of serialization, that is, encoding, is skipped. If the serializer does
+ :             not allow this phase to be skipped, then the sequence of octets returned by the
+ :             serializer is decoded into a string by reversing the character encoding performed in the
+ :             final stage.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="L">If the host language makes serialization an optional feature and
+ :          the implementation does not support serialization, then a dynamic error
+ :             <errorref class="DC" code="0010"/> is raised.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The serialization process will raise an error if <code>$arg</code> is an attribute or
+ :             namespace node.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If any serialization error occurs, including the detection of an invalid value for a
+ :             serialization parameter, this results in the <code>fn:serialize</code> call failing with
+ :             a dynamic error.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-serialize
+ :)
+declare function fn:serialize( $arg as item()*,  $params as element(output:serialization-parameters)?) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             leading substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="starts-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="starts-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>. If the value of <code>$arg1</code> is the zero-length string and
+ :             the value of <code>$arg2</code> is not the zero-length string, then the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> starts with a sequence of collation units that provides a
+ :                <term>match</term> to the collation units of <code>$arg2</code> according to the
+ :             collation that is used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p><term>Match</term> is defined in <bibref ref="Unicode-Collations"/>.</p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-starts-with
+ :)
+declare function fn:starts-with($arg1 as xs:string?,  $arg2 as xs:string?) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns true if the string <code>$arg1</code> contains <code>$arg2</code> as a
+ :             leading substring, taking collations into account.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="starts-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/></proto></example><example role="signature"><proto name="starts-with" return-type="xs:boolean" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string?"/><arg name="arg2" type="xs:string?"/><arg name="collation" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The two-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The three-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>.  It depends on 
+ : 		collations, and static base uri.
+ : 	</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> or <code>$arg2</code> is the empty sequence, or
+ :             contains only ignorable collation units, it is interpreted as the zero-length
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg2</code> is the zero-length string, then the function returns
+ :                <code>true</code>. If the value of <code>$arg1</code> is the zero-length string and
+ :             the value of <code>$arg2</code> is not the zero-length string, then the function returns
+ :                <code>false</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The collation used by this function is determined according to the rules in <specref ref="choosing-a-collation"/>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:boolean</code> indicating whether or not the value of
+ :                <code>$arg1</code> starts with a sequence of collation units that provides a
+ :                <term>match</term> to the collation units of <code>$arg2</code> according to the
+ :             collation that is used.</p><note xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><p><term>Match</term> is defined in <bibref ref="Unicode-Collations"/>.</p></note><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>A <phrase diff="add" at="L">dynamic</phrase> error <rfc2119>may</rfc2119> be raised <errorref class="CH" code="0004"/> if the
+ :             specified collation does not support collation units.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-starts-with
+ :)
+declare function fn:starts-with( $arg1 as xs:string?,  $arg2 as xs:string?,  $collation as xs:string) as  xs:boolean external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string created by concatenating the items in a sequence, with a
+ :             defined separator between adjacent items.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="string-join" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string*"/></proto></example><example role="signature"><proto name="string-join" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string*"/><arg name="arg2" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">The effect of calling the single-argument version of this function is
+ :             the same as calling the two-argument version with <code>$arg2</code> set to a
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:string</code> created by concatenating the items in the
+ :             sequence <code>$arg1</code>, in order, using the value of <code>$arg2</code> as a
+ :             separator between adjacent items. If the value of <code>$arg2</code> is the zero-length
+ :             string, then the members of <code>$arg1</code> are concatenated without a separator.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> is the empty sequence, the function returns the
+ :             zero-length string.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-string-join
+ :)
+declare function fn:string-join($arg1 as xs:string*) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns a string created by concatenating the items in a sequence, with a
+ :             defined separator between adjacent items.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="string-join" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string*"/></proto></example><example role="signature"><proto name="string-join" return-type="xs:string" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg1" type="xs:string*"/><arg name="arg2" type="xs:string"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax"; diff="add" at="B">The effect of calling the single-argument version of this function is
+ :             the same as calling the two-argument version with <code>$arg2</code> set to a
+ :             zero-length string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:string</code> created by concatenating the items in the
+ :             sequence <code>$arg1</code>, in order, using the value of <code>$arg2</code> as a
+ :             separator between adjacent items. If the value of <code>$arg2</code> is the zero-length
+ :             string, then the members of <code>$arg1</code> are concatenated without a separator.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg1</code> is the empty sequence, the function returns the
+ :             zero-length string.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-string-join
+ :)
+declare function fn:string-join($arg1 as xs:string*,  $arg2 as xs:string) as  xs:string external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of <termref def="character">characters</termref> in a
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="string-length" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="string-length" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:integer</code> equal to the length in <termref def="character">characters</termref> of the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the zero-argument version of the function is equivalent to calling
+ :                <code>fn:string-length(fn:string(.))</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :                <code>xs:integer</code> value zero (0).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is not specified and the context item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, a <phrase diff="add" at="M">dynamic</phrase> error is raised: <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-string-length
+ :)
+declare function fn:string-length() as  xs:integer external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the number of <termref def="character">characters</termref> in a
+ :             string.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="string-length" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"/></example><example role="signature"><proto name="string-length" return-type="xs:integer" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The zero-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-dependent">context-dependent</termref>,  and <termref def="dt-focus-dependent">focus-dependent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The one-argument form of this function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns an <code>xs:integer</code> equal to the length in <termref def="character">characters</termref> of the value of <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Calling the zero-argument version of the function is equivalent to calling
+ :                <code>fn:string-length(fn:string(.))</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If the value of <code>$arg</code> is the empty sequence, the function returns the
+ :                <code>xs:integer</code> value zero (0).</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is not specified and the context item is <xtermref ref="dt-absent" spec="DM30">absent</xtermref>, a <phrase diff="add" at="M">dynamic</phrase> error is raised: <xerrorref spec="XP" class="DY" code="0002" type="dynamic"/>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-string-length
+ :)
+declare function fn:string-length($arg as xs:string?) as  xs:integer external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the sequence of <termref def="codepoint">codepoints</termref> that
+ :             constitute an <code>xs:string</code> value. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="string-to-codepoints" return-type="xs:integer*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="arg" type="xs:string?"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termref>, <termref def="dt-context-independent">context-independent</termref>,  and <termref def="dt-focus-independent">focus-independent</termref>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The function returns a sequence of integers, each integer being the Unicode <termref def="codepoint">codepoints</termref> of the corresponding <termref def="character">character</termref> in <code>$arg</code>.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>If <code>$arg</code> is a zero-length string or the empty sequence, the function returns
+ :             the empty sequence.</p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>The expression <code>fn:string-to-codepoints("Thérèse")</code> returns <code>(84, 104, 233, 114, 232, 115, 101)</code>.</p></div> 
+ :
+ : @see http://www.w3.org/TR/xpath-functions-30/#func-string-to-codepoints
+ :)
+declare function fn:string-to-codepoints($arg as xs:string?) as  xs:integer* external;
+ 
+(:~
+ : <div><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>Returns the contiguous sequence of items in the value of
+ :                <code>$sourceSeq</code> beginning at the position indicated by the value of
+ :                <code>$startingLoc</code> and continuing for the number of items indicated by the
+ :             value of <code>$length</code>. </p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";><example role="signature"><proto name="subsequence" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="sourceSeq" type="item()*"/><arg name="startingLoc" type="xs:double"/></proto></example><example role="signature"><proto name="subsequence" return-type="item()*" isOp="no" prefix="fn" returnEmptyOk="no" returnSeq="no" returnVaries="no" isSchema="no" isDatatype="no" isSpecial="no"><arg name="sourceSeq" type="item()*"/><arg name="startingLoc" type="xs:double"/><arg name="length" type="xs:double"/></proto></example></p><p xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax";>This function is <termref def="dt-deterministic">deterministic</termr

Follow ups