DB2 9はpureXML機能により、従来通りのリレーショナル・データベースであると同時に新たなpureXMLデータベースとして利用できるハイブリッド・データベースです。このpureXML機能を用いれば、ネイティブXML文書の格納・管理・検索をXML文書が本来持つフレキシビリティを損なうことなく行うことができ、RDBとXML DBの両者の利点を最大限に活かしたデータ活用を行う事ができます。
DB2におけるXML文書への照会はSQLを主言語とするSQL/XMLか、XMLへの照会を主眼に開発されたXQueryを使って行うことができます。XQueryはXML文書の検索においては標準的なインターフェースですが、これまでRDBを利用されてきた方々には馴染みの薄い言語だと思います。
DB2 9.7はデータベースを管理、開発するツールとしてIBM Data Studioを提供しています。XQueryを書く時にもIBM Data Studioを利用することができます。IBM Data Studioを使うことで、XQuery書く際に次の様な機能を利用することができ、便利に照会文を作ることができます。
- コンテンツ・アシストによるXQuery生成の支援
- 同一ツール上でのXQueryの生成・実行・実行結果の確認
- 構文の自動チェック
- 構文の強調表示
IBM Data Studioは従来DB2に付属してきたコントロール・センターやDB2 Developer Workbenchに置き換わるEclipseベースの開発ツールです。IBM Data Studioはダウンロード・サイトから無償でダウンロードすることができます。
本資料では、IBM Data StudioによるXQueryの作成方法をご紹介します。
なお、本資料はDB2 9.7およびIBM Data Studio 2.2を元に記しています。
当資料では、サンプル・データとして、DB2が提供するサンプル・データベースを用いることにします。まずはサンプル・データベースを作成しましょう。サンプル・データベースはXMLデータを扱うことができるように構成する必要があります。
すでにサンプル・データベースをXML文書が利用できるオプションを選択して作成されている方は、このセクションを飛ばしてください。
また、サンプル・データベースをXML文書が利用できるオプションを指定せずに作成してしまった方は、一度サンプル・データベースをドロップした上で、当セクションの手順で再度サンプル・データベースを作成してください。
ファースト・ステップからサンプル・データベースを作成します。
ファースト・ステップを起動します。
[すべてのプログラム]―[IBM DB2]―[DB2COPY1 (デフォルト)]―[セットアップ・ツール]―[ファースト・ステップ]
SAMPLEデータベースの作成」をクリックします(図1)。
図1. DB2 Database for Linux, UNIX and Windowsのファースト・ステップ
「XMLおよびSQLのオブジェクトとデータ」を選びます(図2)。
データベースを作成したいドライブを指定します。十分な空き容量のあるドライブを指定してください。
「OK」をクリックするとデータベースの作成が開始されます。
図2. SAMPLEデータベース作成ウィザード
IBM Data Studioの起動とXQuery作成の準備
それでは、Data Studioを起動してみましょう。
[スタート]―[すべてのプログラム]―[IBM Data Studio]-[IBM Data Studio 2.2]
起動するとWorkspaceの格納先を問い合わせるダイアローグ・ボックスが表示されます。適当なディレクトリーを指定して「OK」を押します(図3)。
図3. ワークスペースの選択
初めて起動した際にはWelcome画面が表示されます。上部中央あたりにある矢印のアイコンをクリックすると、「データ・パースペクティブ」に移ります(図4)。
図4. Welcome画面からのデータ・パースペクティブへの移動
データ・パースペクティブは下に示すようないくつかの部分から構成されています(図5)。
図5. IBM Data Studioのデータ・パースペクティブ
はじめに、XQueryを発行して照会を行うデータベースへ接続します。データ・ソース・エクスプローラーを確認してみるとローカルに定義されているデータベース定義から自動的に接続定義が作成されていることが分かります。自動生成された接続定義は
データベース別名[DB2 別名]
という名前が付けられています。
目的とするデータベースがない場合には[データベース]を右クリックし、[新規]を選択することで接続を作成することができます。
今回は「SAMPLE」を右クリックし、[接続]を選択します。これで、SAMPLEデータベースに接続されます(図6)。
図6. SAMPLEデータベースへの接続
次の作業はプロジェクトの作成です。開発するXQueryはデータ開発プロジェクトの中に作成します。データ開発プロジェクトはワークスペースの左上に表示されるデータ・プロジェクト・エクスプローラーに表示されます。
データ開発プロジェクトを次のいずれかの方法で作成します。
- データ・プロジェクト・エクスプローラー上を右クリックし、[新規]―[データ開発プロジェクト]を選択する(図7)。
- ツール・バー上の[新規]ボタン脇の矢印をクリックし、[データ開発プロジェクト]を選択する。
- メニュー・バーから、[ファイル]―[新規]―[データ開発プロジェクト]を選択する。
図7. データ開発プロジェクトの作成
データ開発プロジェクトを作成するためのダイアローグ・ボックスが表示されます。
任意のプロジェクト名を入力し[OK]を押します。
今回は「SampleXQuery」とします(図8)。
図8. データ開発プロジェクト名の指定
利用するデータベース接続を選びます。
今回は「SAMPLE」を選びます(図9)。
図9. 接続先データベースの選択
デフォルト・スキーマおよびスキーマ表示を省略するスキーマを指定する画面が表示されます。ここは特に変更せずに「終了」をクリックします(図10)。
図10. デフォルト・スキーマの設定
さて、いよいよXQueryの作成です。先に作成したデータ開発プロジェクト「SampleXQuery」を展開し、「SQLスクリプト」フォルダーを右クリックして「新規」―「SQLまたはXQueryスクリプト」を選びます(図11)。
図11. 新規XQueryの作成
ウィザードの最初のページでこれから作成するXQueryに適当な名前を付けます。「MyXQuery01」と入力し、「終了」をクリックします(図12)。
図12. XQuery名の指定
タブに「MyXQuery01.sql」と書かれた白紙のページがData Studio中央のエディター領域に表示されます。エディター上をクリックし、「Ctrl + スペース」を押します。そうすると、一般的なEclipseのツールと同様にコンテンツ・アシスト機能が動き、入力できるSQLおよびXQueryの候補が表示されます。その状態で「xq」と入力すると表示されている候補が「xq」から始まる文字列にフィルタリングされます。また、どれかの候補を選ぶと右側にボックスが表われ、入力される文字列全体が表示されます。今回はこの中から、XQuery – db2-fn:xmlcolumn functionを選択しましょう(図13)。
図13. コンテンツ・アシストからのテンプレートの選択
そうするとエディター上には図14のような文字列が入力されます。
図14. エディターに入力されたXQueryのテンプレート
青字で示され四角く枠囲みされている部分が、ユーザーが入力しなければならない部分です。次の様に操作してみてください(図15)。
- “schema”の上をダブル・クリックし、“schema”全体を選択します。
- その状態でコンテンツ・アシスト(Ctrl + スペース)を呼び出します。
- 入力可能なスキーマ名や表などの候補が表示されるので、「DB2ADMIN」を選択します。(ここでは操作しているユーザーがdb2adminであることを想定しています。ほかのユーザーで操作している場合はそのユーザー名を指定してください。)
図15. XQuery生成時のコンテンツ・アシストの利用
- 同様に“table”の上をダブル・クリックし、“table”全体を選択します。
- その状態でコンテンツ・アシスト(Ctrl + スペース)を起動します。
- 入力可能な表の候補から「PRODUCT」を選択します。
- “Column”についても同様に操作します。Columnには「DESCRIPTION」を選択してください。
でき上がったXQueryはリスト1の様になります。
リスト1. 生成されたXQuery
XQUERY db2-fn:xmlcolumn('DB2ADMIN.PRODUCT.DESCRIPTION') |
作成したXQueryはData Studioの中で実行して結果を確認することができます。
次のいずれかの方法で実行してみましょう。
方法1: メニュー・バーから[実行]-[SQLの実行]を選択します。
方法2: エディター上を右クリックし「SQLの実行」を選択します。
方法3: F5を押します。
XQueryを実行すると実行の成否と結果が下部のSQLの結果ビューに表示されます(図16)。「SQLの結果」タブをダブル・クリックすると実行結果が全画面表示されます。再度ダブル・クリックすると、元の表示に戻ります。
図16. XQueryの実行結果
個々のレコードをクリックすると左側に小さな白い四角が表示されます(図17)。これをクリックすると照会されたXML文書の詳細をエディターで確認できます(図18)。
図17. 照会結果XML文書の詳細の確認
図18. 照会結果XML文書の詳細表示
XQueryはFor、Let、Where、Order by、Returnを要素とするFLWOR(フラワー)表現と呼ばれる仕方で検索対象・条件を指定して、目的とするXML文書を取得することに特徴があります。
今度はFLWOR表現を使って、<price>要素が10以下のPRODUCTについて、名前を示す<name>要素と値段を示す<price>要素を取り出してみましょう。また、抽出したXML文書は全体を<ProdcutList>、個々のエントリーを<Product>というタグで囲むことにします。pidを<Product>要素の属性とします。結果として得られるXML文書はリスト2のような構造になります。
リスト2. 生成するXML文書の構造
<ProductList> <Product pid=xxxx> <name>…</name> <price>…</price> </Product> <Product pid=xxxx> <name>…</name> <price>…</price> </Product> … </ProductList> |
先の例と同様に、MyXQuery02というXQueryを作成します。
コンテンツ・アシストを利用してxquery for – for clause with return clauseの一番下にリストされているものを選択します(図19)。
図19. コンテンツ・アシストからのXQueryテンプレートの選択
エディターには図20のようなテンプレートが挿入されます。
図20. 挿入されたFLWOR形式XQueryのテンプレート
先に説明したとおり、青枠で囲まれている部分は最低限修正の必要な部分です。次の様に、XQueryを修正してみましょう。
- 2行目のdeclare~の文を削除します。
- element_name1をProductListに変更します。
- xml_node_sequenceを選択し、コンテンツ・アシストを呼び出します。コンテンツ・アシストからdb2-fn:xmlcolumnを入力します(図21)。
図21. コンテンツ・アシストからのdb2-fn:xmlcolumnの挿入
- 青字で示されている’schema.table.column’に先ほどと同様’DB2ADMIN.PRODUCT.DESCRIPTION’を指定します。
- <element_name2>を<Product pid="{$i/product/@pid}">で置き換えます。
- for句とreturn句の間にリスト3に示すwhere句を追加します。
リスト3. 挿入するwhere句
where $i/product/description/price <= 10 |
- return句の{ $i }をリスト4に書き換えます。
リスト4. {$i}の書き換え
{ $i/product/description/name, $i/product/description/price } |
作成したXQueryの結果はリスト5のようになります。
リスト5. 生成されたXQuery
xquery
<ProductList> {
for $i in db2-fn:xmlcolumn('DB2ADMIN.PRODUCT.DESCRIPTION')
where $i/product/description/price <= 10
return <Product pid="{$i/product/@pid}"> {
$i/product/description/name, $i/product/description/price } </Product>
}
</ProductList>
|
先ほどと同じようにXQueryを実行すると結果を得ることができます(図22、図23)。
図22. XQueryの実行結果
図23. 照会結果XML文書の詳細
XQueryを生成する上で構文上の不備がある場合には、エディターの左側に赤い丸に白抜きの×が表示されます。また、エディターの右側にも赤くマーキングがされ全体の中でどこに問題があるかが示されます。さらに赤い波下線が照会文中に示され、Data Studioがどこを問題と認識しているかが示されます。
また、×印の上にカーソルを持っていくと、問題箇所についてのヒントが示されます。
うまくXQueryが実行できない場合には参考にしてください。
図24. XQuery構文に不備がある場合の例
エディター上を右クリックして表示されるコンテキスト・メニュー中には「SQLのフォーマット」と書かれた機能が提供されています。ですが、XQuery文に対してはSQLのフォーマット機能は使わないでください。SQLのフォーマットを実行すると、SQLのキーワードが大文字に変換されてしまいます。以下の例では、SQLのキーワードであるWHEREやRETURNに加えて、表名や列名として存在するPRODUCT、DESCRIPTION、NAME、PRICEなどが大文字化されています。XQueryは大文字/小文字を識別する言語ですので、このような書き換えがなされると正しく照会を実行することができません。
リスト6. 「SQLのフォーマット」前のXQuery文
xquery
<ProductList> {
for $i in db2-fn:xmlcolumn('DB2ADMIN.PRODUCT.DESCRIPTION')
where $i/product/description/price <=10
return <Product pid="{$i/product/@pid}"> {
$i/product/description/name, $i/product/description/price } </Product>
}
</ProductList>
|
リスト7. 「SQLのフォーマット」後のXQuery文
xquery
<ProductList> {
for $i in db2-fn:xmlcolumn('DB2ADMIN.PRODUCT.DESCRIPTION')
WHERE $I/PRODUCT/DESCRIPTION/PRICE <=10
RETURN <PRODUCT PID="{$i/product/@pid}"> {
$I/PRODUCT/DESCRIPTION/NAME, $I/PRODUCT/DESCRIPTION/PRICE } </PRODUCT>
}
</PRODUCTLIST> |
db2-fn:xmlcolumnで指定するスキーマ名、表名、列名は大文字で指定する
db2-fn:xmlcolumnで指定するスキーマ名、表名、列名はDB2エンジンでDB2のカタログと突合されます。DB2のカタログの中にはDB2の各種オブジェクトは大文字で格納されていることから、db2-fn:xmlcolumnで指定するスキーマ名、表名、列名を小文字で記述すると照会を実行できません。
ここは、オマジナイだと思って、大文字で記述してください。
生成しているXQuery文を行単位でコメント化/非コメント化することができます。
コメント化/非コメント化する場合は対象となる行上にカーソルを置いた状態で右クリックし、「コメントの切り替え」を選択してください。
IBM Data Studioではデフォルトではセミコロン「;」を照会文の終了文字として利用しています。
ところで、XQueryでは名前空間を区切る際などにセミコロンを利用することがあり、それが問題となることがあります。
照会文の終了文字を変更する場合はエディター上で右クリックし、「ステートメント終了文字の変更」を選択して任意の文字に終了文字を変更してください。
DB2 9.7により提供されるIBM Data Studioの使い方について、XQueryを例にしてチュートリアル風にステップ・バイ・ステップで見てきました。これまで一度もXQueryを書いたことがない方や、まだXQueryに十分習熟していないという方も、一度、実際に使ってみてXQueryがどのようなものか体験してみてください。このドキュメントが皆さんの助けとなれば幸いです。
-
IBM Data Studioクイック・スタート: IBM Data Studioのインストール方法を画面つきでステップ毎に紹介しています。
- IBM Data Studioダウンロード・サイト (US): IBM Data Studioはここからダウンロードできます。
- pureXMLの歩き方: DB2のpureXML機能に関して勉強するためのポータル・サイトです。DB2のXML機能そのものおよびXQueryなどを勉強するための資料への豊富なリンクが紹介されています。pureXML機能の使い方が分からなかったり、これから使ってみようという方はこちらのサイトが良いガイドになるでしょう。
- XML-DB開発実技コース: XML DBにおける開発に関する書籍です。XQueryの書き方に関しても、演習付きで初歩から詳しく解説されています。これからXML DBやXQueryを勉強したいという方には、大いに参考になるでしょう。
- DB2入門講座: DB2はこれからという方のための情報リンク集です。pureXMLは使ってみたいけれど、DB2が分からないという方はこちらが参考になるでしょう。
- DB2 Express-Cダウンロード・サイト (US): 無償版のDB2 Express-Cのダウンロード・サイトです。pureXML機能もDB2 Express-Cで試すことができます。
- User's Forum for DB2 Japan: DB2全般に関するユーザー・フォーラムです。分からないことは、ここで気軽に聞くことができます。
- developerWorks Form - IBM Data Studio (US): IBM Data Studioに関するフォーラムです。(英語)
- DB2 インフォメーション・センター: DB2のオンラインマニュアルです。
- developerWorks Japan - Information Management: DB2および関連するInformation Management製品に関する技術情報サイトです。