Reference articles on history, science, culture and more
Encyclopedia

XPath 3

Latest version of the XML Path Language

XPath 3 is the latest version of the XML Path Language, a query language for selecting nodes in XML documents. It supersedes XPath 1.0 and XPath 2.0.

XPath 3.0 became a W3C Recommendation on 8 April 2014, while XPath 3.1 became a W3C Recommendation on 21 March 2017.

01New features in XPath 3.0

Compared to XPath 2.0, XPath 3.0 adds the following new features:

Inline function expressions
Anonymous functions can be created in an expression context. For example, the expression function($a as xs:double, $b as xs:double) as xs:double { $a * $b } creates a function that returns the product of its two arguments. The expression collection()/(let $a := . return function() { $a }) creates a sequence of functions, each one returning a different node from a collection.
Dynamic function calls
Function values may be called without being referenced by name. For example, $f[2]("Hi there") fetches the second item from sequence $f, and invokes it as a function, passing the string "Hi there" as argument.
Union types
Union types, as defined in XML Schema, may be used in type conversions and function type signatures.
Namespace literals
XML namespaces may be referenced using braced URI literals. For example, the qualified name math:pi may be expanded to Q{http://www.w3.org/2005/xpath-functions/math}pi, embedding the namespace URI inside the prefix.
String concatenation operator
The new || operator may be used for string concatenation: $a || $b is equivalent to fn:concat($a, $b).
Mapping operator
The new ! operator performs simple mapping: E1 ! E2 evaluates E2 for each item in the sequence E1, and concatenates the resulting items. This is comparable to the path operator /, but the ! operator does not perform duplicate elimination nor document ordering of the results.

02New features in XPath 3.1

XPath 3.1 mainly adds support for array and map (associative array) data types. These types and their associated functionality are intended to ease working with JSON data.

Another innovation is the arrow operator => for function chaining. For example, the XPath 2.0 expression

contains(upper-case(substring-before($in, ' ')), 'X')

can now be written

$in => substring-before(' ') => upper-case() => contains('X')
Watch videos about XPath 3Explainers and documentaries on YouTube (opens in a new tab)

Sources and credits

This article is adapted from the Wikipedia article XPath 3, written by its contributors and licensed under CC BY-SA 4.0. Fathomly has changed the layout, removed citation markers, navigation and maintenance notices, and adjusted punctuation. This adapted version is shared under the same license. For references, see the original article.

Fathomly is not affiliated with or endorsed by the Wikimedia Foundation. Spotted a problem? Tell us.