[xquery-talk] XQuery and id()/idref(); Controlling the children of nodes in the result sequence

Florent Georges lists at fgeorges.org
Thu Apr 24 11:43:40 PDT 2008

Andrew Welch wrote:


> if you rewrote

> not(ancestor::* intersect $e)

> to be

> not(some $x in ancestor::* satisfies $x is $e)

  That's not the same thing because 'is' compares two nodes.  So your
second expression would be rather equivalent to:

    not(ancestor::* intersect exactly-one($e))

  I'd say you should write instead:

      some $x in ancestor::* satisfies
        some $y in $e satisfies
          $x is $y

  I didn't test them, but I guess even a naive processor would have
enough info in the second case to know it can stop as soon as it finds
a node that satisfies the identity (because of 'some').

  For the first case Saxon seems to wrap the intersection into an
'exists' instead of 'not', and I am confident that in this case it
stops when it finds a node.  But Mike can tell you more on that.

  But when I see the two expressions, my first reaction is to prefer to
trust my processor's optimizer and make the intent as clear as possible
for other developers...



Do You Yahoo!?
En finir avec le spam? Yahoo! Mail vous offre la meilleure protection possible contre les messages non sollicités 
http://mail.yahoo.fr Yahoo! Mail 

More information about the talk mailing list