XPath 3.0 implementation

Support for the primitive type xs:precisionDecimal has been dropped, since it has been removed from XSD 1.1.

The XPath 3.0 string concatenation operator ("||", borrowed from SQL) is implemented.

The XPath 3.0 simple mapping operator ("!") is implemented.

Casting from strings (and xs:untypedAtomic) to union and list types is now supported. The effect is the same as casting to an attribute with the given type, and then atomizing the attribute. For example casting to a type list-of-integer defined as a list type with an item type of xs:integer returns a sequence of xs:integer values. XPath 3.0 also allows in some cases casting to a union type from types other than strings; this is not fully implemented in Saxon.

Certain union types can now appear in a SequenceType (e.g as the declared type of a function argument). The union types accepted are those that are not derived by restriction from another union types, and whose membership includes only atomic types and other union types that meet the same criteria.

The XQuery/XPath 3.0 parser has been extended to support partial function application ("?" as a function argument) in dynamic function calls. Previously this feature was supported only in direct function calls to a named function.

The implementation of maps has been updated to match the draft XSLT 3.0 spec. The extensions for maps are available in XPath 3.0 and XQuery 3.0, rather than being restricted to XSLT. This may change as the W3C specifications evolve.