たのしいXML: XQuery: 基本構文

2008年10月19日(日)更新


■XQueryの書き方

たけち: 前回まででDB2でデータベース "SAMPLE01" を作って、テーブル MANYO01 に簡単なXMLデータを入れ、それを短いXQueryの記述で検索することができたね。

さらら: えぇ。

たけち: で、今回はXQueryの書き方を簡単な例で学んでみよう。

さらら: は〜い。


※ここでは、Windows版についてご説明しています。


■FLOWR構文

たけち: XQueryの基本構文は、FLOWR構文と呼ばれているものだよ。

さらら: FLOWR ??

たけち: 次に構文を簡単にみてみよう。


※FLOWRは、Flowerと同じ発音だそうです。

FLOWR構文

さらら: なんだか、難しそうねぇ。

たけち: う〜ん。簡単な検索だったら、一部だけ(たとえばforとreturn)を使えばできるから、少しずつ見ていこうね。

さらら: はい。でも、なんでFLOWR構文っていうの?

たけち: それぞれの先頭の文字をみてごらん。

さらら: あっ、。。。(^ ^;


■テーブル MANYO01内のデータ

たけち: じゃあ、検索を試してみる前に、先に作ったテーブル MANYO01内のデータがどうなっているかを確認しておこうね。どんなXMLデータだったかな?

さらら: えぇ。次のデータを入れたんだったわね。

テーブル MANYO01 に登録したXMLデータ

<poem pno="0008" poet="額田王">
  <genbun>熟田津尓 船乗世武登 月待者 潮毛可奈比沼 今者許藝乞菜</genbun>
  <yomi>熟田津に船乗りせむと月待てば潮もかなひぬ今は漕ぎ出でな</yomi>
  <note></note>
</poem>

<poem pno="0015" poet="中大兄">
  <genbun>渡津海乃 豊旗雲尓 伊理比紗之 今夜乃月夜 清明己曽</genbun>
  <yomi>海神の豊旗雲に入日さし今夜の月夜さやけくありこそ</yomi>
  <note></note>
</poem>

<poem pno="0020" poet="額田王">
  <genbun>茜草指 武良前野逝 標野行 野守者不見哉 君之袖布流</genbun>
  <yomi>あかねさす紫野行き標野行き野守は見ずや君が袖振る</yomi>
  <note></note>
</poem>

たけち: XQueryの検索指定と結果がわかりやすいように、図にしておこうね。

さらら: はい。

テーブル MANYO01 に登録したXMLデータ


■forとreturnだけの検索文の例

たけち: じゃあ、読みの要素(yomi)だけを検索する検索式の例を書いてみよう。ここでは、forとreturnを使うよ。XQuery文を入力する用意をして。

さらら: はっ、はい。えっ〜と。。。

たけち: 前回やったみたいに、コマンドエディタを起動して、SAMPLE01にアクセスして。。

さらら: あっ、そうだったわね。


yomi要素の検索例

コマンドエディタで
    xquery
    for $input in db2-fn:xmlcolumn("MANYO01.POEM")/poem/yomi     return $input     ;

を入力します。

yomi要素の検索例

さらら: あっ、3つの読み(yomi要素)が表示されたわ。へぇ〜。。。ねぇ、でも、どうなっているの?

たけち: それじゃ、説明するね。

さらら: はい。


■forとreturn

たけち: ここでの検索式は、for句とreturn句が使われているよ。

さらら: はっ、はい。

たけち: for句では、検索対象のXMLデータの指定したノードを繰り返して処理することを指示するんだよ。

さらら: えっ??

たけち: じゃ、ここでの例を見てみよう。図を見て。

for句で行われること(例)

たけち: inで検索対象のXMLデータと抽出するノードを指定しているんだ。この例だと、
    MANYO01.POEM の
    /poem/yomi ノード
になるね。

さらら: あれ。どっかで見たような・・・・

たけち: そうそう。さららの思ったとおりだよ。XMLデータ内のノードをXPathで指定しているんだよ。

さらら: あっ、XPathで指定しているのね。それで、yomiノードが抽出されるのね。わかるわ。

たけち: で、抽出したこれらのyomiノードが、変数の$inputに順に並べられるんだ。

さらら: そうなんだぁ。


※このサイトでは、XPathのコーナー(すみませんが、XPath 1.0です)で説明しています。

たけち: で、return句では、変数の$inputをそのまま記述しているよね。

さらら: えぇ。

たけち: この場合は、変数$inputの内容をそのまま出力しているんだね。

さらら: あ、なるほど。それで、3つの読み(yomi要素)が表示されたのね。

たけち: 今回はとっても簡単な例を試してみたね。

さらら: はい。だいたいの雰囲気はわかったわ。

たけち: 次回からは、少しずつ複雑な検索式にトライしてみよう。

さらら: は〜い。ありがと。

→次回はwhere句の例です。 (^ ^;


[たのしいXML のインデックス]へ