[XQuery] "Cartesian product"

XQuery 1.0: An XML Query Language
W3C Working Draft 12 November 2003

3.8.1. For and Let Clauses

"A for clause may also contain multiple variables, each with an
associated expression. In this case, the for clause iterates each
variable over the items that result from evaluating its expression.
The resulting tuple stream contains one tuple for each combination of
values in the Cartesian product of the sequences resulting from
evaluating the given expressions."

The second sentence only makes sense if the expressions are independent.

Consider a case where they are not:
  for $x in (10,20),
      $y in ($x + 1, $x + 2)
  return 2 * $y

In the two For clauses, the first expression yields (10,20),
and the second expression yields (11,12) and (21,22) in turn.
So "the sequences resulting from evaluating the given expressions"
are (10,20), (11,12), and (21,22). Their Cartesian product is
this set of combinations:
    [10,11,21]
    [10,11,22]
    [10,12,21]
    [10,12,22]
    [20,11,21]
    [20,11,22]
    [20,12,21]
    [20,12,22]
which is not at all what you intended.  Of course, this is a willful
misinterpretation. My claim is that, when the expressions are not
independent, it is the only interpretation available.  Presumably,
the intent is that [$x,$y] take on the values:
    [10,11]
    [10,12]
    [20,21]
    [20,22]
but this is not a Cartesian product.

I made much the same comment almost three years ago in:
http://lists.w3.org/Archives/Public/www-xml-query-comments/2001Apr/0009.html

(Personally, I think the whole "tuple stream" model of explaining
FLWOR expressions is an unnecessary complication, but I doubt that
I could convince you to abandon it.)

----

3.11 Quantified Expressions

This section has a similar sentence involving the term "Cartesian
product", which is similarly flawed.

-Michael Dyck

Received on Thursday, 12 February 2004 17:29:17 UTC