Read a LocationPath
as a generalized match pattern. What this means is that the LocationPath
is read backwards, as a test on a given node, to see if it matches the
criteria of the selection, and ends up at the context node. Essentially,
this is a backwards query from a given node, to find the context node.
So, the selection "foo/daz" is, in non-abreviated expanded syntax,
Taking this as a match pattern for a probable node, it works out to
"self::daz/parent::foo[child::daz[position()=2 and isPrevStepNode()]
precedingSibling::node()[isContextNodeOfLocationPath()]", adding magic
isPrevStepNode and isContextNodeOfLocationPath operations. Predicates in
the location path have to be executed by the following step,
because they have to know the context of their execution.