Patterns and location paths

Richard Tobin richard at
Fri Apr 30 11:22:03 BST 1999

> That's not correct: foo//bar[5] selects any bar element that is a
> descendant of a foo child of the current node and that is the fifth bar
> child of its parent.

Good, that's what I initially expected.

> What exactly in the draft led you to think otherwise?

My interpretation is as follows:

 "foo" selects the foo children of the current node

 For each of these, "//" selects its descendants

 "bar" filters these to select the bar descendants

 The predicate "[5]" is evaluated "with the complete list of nodes to be
 filtered as the context node list" (6.1.3) - ie, all the bar descendants
 of the current foo node.  "5" is equivalent to "position()=5", and 
 "position()" returns the position of the node in the context node
 list (6.2.2).  So it selects the fifth of all the bar descendants.
This is not what I said in my previous message - I was wrongly taking
the context list to be all the bar descendants of all the foo children,
rather than evaluating //bar[5] separately for each foo.  But it's still
not what you say above.

And an example in section 6.1 seems to confirm my (revised) interpretation:

  /from-descendants(figure[position()=42]) selects the forty-second
  figure element in the document

It doesn't say "selects any figure element that is the 42nd child of
its parent".

Am I still confused?

-- Richard

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list