XPath 3.1 implementation

The Saxon-defined "source-location" property provided for the fn:transform() function now sets the global context item as well as the initial match selection, except when streaming (because the global context item cannot be a streamed node).

A new implementation of maps (called a DictionaryMap) has been introduced, optimized for maps with string-valued keys that are unlikely to be modified after initial construction (such modifications are still allowed, but are inefficient). This implementation is used in a number of cases where maps are constructed internally, notably for the result of parse-json() and xml-to-json(). It may be explicitly selected on the map:merge() function by adding two vendor-defined options to the second (options) parameter: key-type="string" constrains the entries in the map to be strings (a dynamic error occurs if not), and final="true()" indicates that the map should be constructed assuming no map:put() or map:remove() calls will take place (if they do, they will work, but will result in the whole map being copied).