XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~
第6回 FLWOR式によるデータのJOIN

タプルストリームとは

for句(とlet句)は、タプルストリーム(Tuple Stream)を生成します。タプルとは、「複数のさまざまなデータを1つにまとめたモノ」を指します。CやC++の構造体を抽象化した概念と思って間違いないでしょう。

FLWOR式では、1回の反復処理で処理対象となる項目の集まりがタプルになります。処理対象の項目は反復処理を行なうごとに変わりますから、ちょうどJavaやC++のStreamのように一連のタプルの流れがあるように考えられます。これをタプルストリーム(Tuple Stream)と呼びます。

for式が1つしかない場合は、タプルストリームはfor式に指定されたシーケンスと同じになります。ですから、

for $i in (1, 2, 3)
return $i
の実行結果は、

1 2 3

というシーケンスになります。

では、for式が2つあるとタプルストリームはどうなるでしょう。

for $i in (1, 2, 3),
$j in ("a", "b", "c")
return ($i, $j)

結果は、次のようなシーケンスになります。

1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c

最初のfor式のシーケンスの全項目と、2つ目のfor式のシーケンスの全項目をすべて組み合わせたシーケンスになっていますね。このような組み合わせを作ることを「直積をとる」と言い、できあがった組み合わせを「直積」と呼びます。つまり、for式が複数ある場合、for句はすべてのfor式のシーケンスの直積をタプルストリームとして生成します。


<掲載> P.198-203 DB Magazine 2007 October

ページトップへ▲

XMLマスターポイントレッスン ~ プロフェッショナル(データベース)編 ~ 記事一覧へ戻る

HOMEへ戻る