[xquery-talk] Question on expected XQuery return per standards

David Sewell dsewell at virginia.edu
Fri Mar 27 14:31:41 PST 2009


Over on another list there has been a discussion of unexpected results
from an XQuery like the following. The issues are how the parser
interprets, in particular, the abbreviated syntax '//' and '[N]' as an
equivalent to '[position() eq N]'.

My belief is that the standard requires that two nodes (p2, p4) should
be returned for result sets 1-4 below, because the interpretation of the
XPath should in each case be identical. Set 5, on the other hand, should
return only p2.

We're seeing different behavior from a couple of XML parsers. Anyone
care to read from the stone tablets on this one?

(: begin query :)

let $xml :=
  <root>
    <div>
      <p>p1</p>
      <p>p2</p>
    </div>
    <div>
      <p>p3</p>
      <p>p4</p>
    </div>
  </root>

return (
  <set1>{ $xml/descendant-or-self::node()/p[position() eq 2] }</set1>,
  <set2>{ $xml//p[position() eq 2] }</set2>,
  <set3>{ $xml/descendant-or-self::node()/p[2] }</set3>,
  <set4>{ $xml//p[2] }</set4>,
  <set5>{ $xml/descendant::p[2] }</set5>
)

(: end query :)

David S.

-- 
David Sewell, Editorial and Technical Manager
ROTUNDA, The University of Virginia Press
PO Box 801079, Charlottesville, VA 22904-4318 USA
Courier: 310 Old Ivy Way, Suite 302, Charlottesville VA 22903
Email: dsewell at virginia.edu   Tel: +1 434 924 9973
Web: http://rotunda.upress.virginia.edu/


More information about the talk mailing list