[xquery-talk] Need some theory help

Florent Georges lists at fgeorges.org
Mon Sep 8 15:08:53 PDT 2008

Michael Kay wrote:

  Hi Michael,

> Given general expressions E,F,G, I believe it is true that
> the following two expressions are equivalent:

> E/F union E/G <=> E/(F union G)

> (That is, union distributes through "/")

> But this is not true for "except".

> $a/descendant::*/child::b except $a/descendant::*/(child::c/child::b)

> is not the same as

> a/descendant::*/(child::b except child::c/child::b)

> (easily seen because child::c/child::b will not select any
> nodes that are selected by child::b).

  I am not really a theoretician, but I feel this problem is
related to the descendant axis rather than the set operations
(union, except...)

  Intuitively, I would say that "E//F x E//G" (for some
operator x) is not the same as "E//(F x G)" because in the
later "F x G" is 'anchored' at particular nodes, where in the
former two sequences are built then the operator is applied.

  For the union, I guess this leads into the same result
(intuitively again), but it doesn't with the difference (the
except operator.)

  Maybe using only a subset of axises to try to prove your
assertions could help find the way?




More information about the talk mailing list