XPath 2.0 implementation

Implemented the regular expression functions matches(), replace() and tokenize() as defined in the Functions and Operators specification; also the regex-group() function defined in the XSLT 2.0 WD.

The only option in the construct A instance of [only] B has been removed, as it is no longer defined in the XPath WD.

Changed the rules for the context document: this is now always the document containing the context node. If the context item is not a node, there is no context document, and any absolute path expression (or calls on id(), key(), or unparsed-entity-uri()) will cause a dynamic error.

Implemented the time data type, the constructor xs:time(), and the functions current-date() and current-time(). Time values can be compared for equality or ordering, and can be sorted.

Implemented the component extraction functions, get-x-from-y, for date, dateTime, and time.

Changed DateTime and time classes so that the timezone is retained as part of the value. Equality and ordering is done by normalizing the time to UTC, but conversion to a string, and extraction of components, reflects the timezone as originally specified.

Constructor functions such as dateTime() have been moved to the schema namespace (you can use either "http://www.w3.org/2001/XMLSchema" (conventional prefix xs) or "http://www.w3.org/2001/XMLSchema-datatypes" (conventional prefix xsd). Stylesheets that use these constructor functions must be changed. The semantics of these constructor are identical to the cast expression.

Added the duration data-type, including conversion to and from strings, comparison for equality and ordering, sorting, and component extraction. (This goes beyond the XPath 2.0 drafts, which do not allow ordering on durations.) Ordering is based on the average length of a month (one year = 365.25... days): so P365D < P1Y and P366D > P1Y. Component extraction works on any kind of duration, and the functions are currently named get-X-from-duration(), not get-X-from-yearMonthDuration() or get-X-from-dayTimeDuration(). Arithmetic involving durations or dates is not yet implemented.

Added the two XPath-defined subtypes of duration: xs:dayTimeDuration and xs:yearMonthDuration. Implemented the functions to construct these from a number of months or seconds. The "+" and "-" operators can be used to add two durations of the same type, and the "*" and "div" operators to multiply or divide a duration by a number.

Added the subtypes of xs:integer (xs:long, xs:int, xs:short and the rest). The type promotion rules for comparison and arithmetic on numeric types have been brought into line with the specification, though there are probably still a few minor discrepancies (especially where fallback conversions from strings are involved).

Added the idiv operator for integer division. For example, 10 idiv 3 is 3. The div operator always returns a double result.