一気に分かる“XQuery”ハンズオン演習

DB基礎講座:XQueryとSQLはどう違う?

一気に分かる“XQuery”ハンズオン演習

日本アイ・ビー・エム
米持幸寿
2006/7/6

XQueryの代表的な機能

 XQueryの全貌は非常に膨大なので、本稿ですべてを語ることは無理ですが、いくつかの例を挙げてXQueryの基本を垣間見ていただきます。

 XQueryは、FLOWR(フラワー)と呼ばれる構文で記述します。FLOWRとはFor、Let、Where、Order by、Returnの頭文字を取ったものです。例えばforは、プログラミング言語のfor文に似ており、対象となるXMLドキュメントの要素に対して処理を進めていくことを宣言します。FLOWRを無理に日本語にするなら、「〜に対してすべてを処理する、〜に代入し、〜のとき、〜で並べ、〜を返す」となります。

 ここでは、身近な例としてファイルシステムのディレクトリ構造をXMLにしたものをXQueryで検索してみるクエリを例に挙げ、構文を解説していきます。Eclipseのランタイムのディレクトリを実際にデータとして使います。c:\_eclipse32ディレクトリに入っている4つのサブディレクトリ構造が、すべて別々のXMLになっていると考えてください(図3)。

図3 今回入力に使うXMLデータ

 また本稿では実際に動作させるために、XMLネイティブ保管機能を持ったIBM DB2 V9.1を使います。

 上記のディレクトリ構造のXMLをXMLカラムに保存してXQueryで検索します。今回は保存するためのプログラムは本論から外れるので解説しませんが、下記にソースコードを準備しました。

 利用手順は以下のとおりです。

  1. DB2 V9.1をインストール
  2. サンプルデータベースを作成
  3. ソースコード中のユーザーID、パスワード、対象ディレクトリ名を調整
  4. 実行

 サブディレクトリごとに4つのXMLインスタンスが保存されます(図4)。

図4 サンプルに使うXMLデータ

 XMLで試す場合には、データをDB2に読み込んだ後、DB2コマンドとしてXQueryに続けて記事中のサンプルにあるクエリを実行してください。手順は以下のとおりです。

  1. スタートメニューから「DB2」→「汎用管理ツール」→「コントロールセンター」を開く
  2. コントロールセンターのツールバーの左から四番目の「コマンドエディター」ボタンを押す画面をクリックすると拡大します
  3. コマンドエディターが開いたら、上半分のコマンドエリアに「CONNECT TO SAMPLE」を入力し、Ctl+Enterを押す画面をクリックすると拡大します
  4. 「接続は成功しました」が表示されたら、コマンドエリアに「XQUERY for ....」の型式で入力し、Ctl+Enterを押す


XQueryを補完するXDMとXPath

 XQueryには、前提仕様としてXDM(XQuery/XPath Data Model)とXPathが定義されています。

 XDMは、XQuery、XPath、XSLTなどの入力となるXMLに使われるデータの型を定義しています。基本はXMLスキーマのデータ型定義を利用しています。

 XPathは、XDMで定義されるデータの処理のための表現形式です。

 XPathはXQueryやXSLT 2.0のためにXPath 2.0にバージョンアップしています。XPathの解説に関しては下記の記事に任せます。


関数(Function)と演算子(Operator)

 XQueryの最初の入り口は関数と演算子です。関数と演算子は、「関数名(引数)」の形式をしています。引数は1つ、またはカンマで区切った複数を指定することがあります。引数には、何らかの名称や(次に説明する)FLOWR構文そのものを入れることもあります。

 XQueryに最初から定義されている関数や演算子は、「XQuery 1.0 and XPath 2.0 Functions and Operators」という仕様で定義されています。いくつか例を挙げましょう。

  • 文字列を大文字にしたい場合は、fn:upper-case( )を使う
  • 文字列の終わりがある特定の文字列で終わっているか検査するには、fn:ends-with( )を使う

 追加の関数においては、その設計や実装はベンダに任されています。

 最も多用される関数はXMLドキュメントを取得する関数ですが、リスト1ではDB2に保存されているデータを取得するfn-db2:xmlcolumn( )を使っています。

fn-db2:xmlcolumn("DIR.INFO")
リスト1 保存されているデータを取得する関数(DB2の独自実装)

 この関数には引数としてDB2でいうXMLカラム名を指定します。単にこの関数を実行すると、対象となるXMLそのものが実行結果として返ってきます。今回の例では4つのXMLドキュメントが処理されることになります。

2/3

 Index
DB基礎講座:XQueryとSQLはどう違う?
 一気に分かる“XQuery”ハンズオン演習
  Page 1
・はじめに
・XMLはどのように保存されるべきか
・SQLとXQueryは何が違うのか
Page 2
・XQueryの代表的な機能
  Page 3
・FLOWR構文を使ったXQuery演習


DB基礎講座:XQueryとSQLはどう違う?


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間