サンプルXMLデータベース ~ XQueryを試してみよう ~ IBM Software Group | DB2 Information Management Software 2008/9/23
by user
Comments
Transcript
サンプルXMLデータベース ~ XQueryを試してみよう ~ IBM Software Group | DB2 Information Management Software 2008/9/23
IBM Software Group | DB2 Information Management Software サンプルXMLデータベース ~ XQueryを試してみよう ~ 2008/9/23 © 2008 IBM Corporation IBM Software Group | DB2 Information Management Software はじめに DB2® 9以降では、“XMLデータの格納、管理、検索”サポートが1つの大 きな特長です。本資料は、XMLサンプル・データを使ったXMLデータの初 歩的な検索についてご紹介します。 本資料でご紹介した内容は、バージョンアップなどにより予告なしに変更 されてることがあります。 記載内容について万一お気づきの点がございましたら、ご一報いただけ れば幸甚です 2 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software サンプル・データのシナリオ 2008/9/23 © 2008 IBM Corporation IBM Software Group | DB2 Information Management Software シナリオ : リレーショナル・データベース (1) 業界最大手でシェアNo.1を誇るセレクト・ショップOでは、商品のデータを リレーショナル・データベースで管理しています このショップでは扱っている商品が洋服はもちろん、その他に小物やグッ ズまで多岐に渡っていて、商品の属性まで含めて正規化すると属性の分 だけ表が増えてしまうので、正規化は行っていません 属性はサイズと色だけを商品テーブルで保管しています。現在はサイズ のカラムは3つ、色のカラムは4つとなっています 4 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software シナリオ :リレーショナル・データベース (2) 表の定義文 CREATE TABLE item( id INTEGER NOT NULL PRIMARY KEY, 商品 VARCHAR(50), 価格 INTEGER, サイズ1 CHAR(1), サイズ2 CHAR(1), サイズ3 CHAR(1), 色1 VARCHAR(10), 色2 VARCHAR(10), 色3 VARCHAR(10), 色4 VARCHAR(10) ); 5 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software シナリオ : XMLデータベース (1) 業界No.2のシェアを持つセレクト・ショップDでは、商品のデータをXML データベースで管理しています このショップでは扱っている商品が洋服はもちろん、その他に小物やグッ ズまで多岐に渡っていますが、商品の属性はXMLで保管しています XML形式で属性を管理しているため、新商品で新しい属性(素材、生産 地など)が増えても、表の構造を変えることなく、全ての属性を保管するこ とが出来ます 6 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software シナリオ : XMLデータベース (2) 表の定義文とXMLデータの例 CREATE TABLE xmlitem( id INTEGER NOT NULL PRIMARY KEY, item XML ); <アイテム> <商品 id="10101"> Tシャツ(長袖) </商品> <価格> 1000 </価格> <サイズ>S</サイズ><サイズ>M</サイズ><サイズ>L</サイズ> <色>黒</色><色>赤</色><色>青</色> <素材>綿</素材> </アイテム> 7 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータベースの柔軟性(1) セレクト・ショップOとDは、同時期に事業を拡大しシルバー・アクセサリー 分野に進出することを決定しました 指輪などはサイズ属性が、洋服のようなS、M、L、XL…といったものでは なく、1号、2号、3号…というような形式になっています また、ペンダントなどはサイズ属性はチェーンの長さ(40cm、50cm、 60cm…)になります 今回扱うアクセサリーはサイズ属性の形式が変わり、種類も増えるため に、ECサイトの商品検索の仕組みなど、システムの変更が必要になりま す 8 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータベースの柔軟性(2) サイズで絞って商品検索を行う画面の変更例 セレクト・ショップO 1. サイズ属性が3つまでしか持て ないため、テーブルにカラムを追 加 属性はXML形式で持っているため テーブル構造の変更の必要はない 2. SQL文の変更 テーブル構造に変更がないため、 SQLの変更も必要はない 3. 取り出すカラムが増えるので、 データの取り出し部分の変更 結果はXMLカラムで取り出すため、 この部分の変更の必要はない 4. HTML表示部分の変更(JSP) 9 セレクト・ショップD DB2 HTML表示部分の変更(XSLT) © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータベースの柔軟性(3) セレクト・ショップDは、XMLデータベースを使って柔軟な商品データの管 理を行っていたために、システムの変更を非常に短期間で終えることが 出来た 一方、セレクト・ショップOは、リレーショナル・データベースを使っていた ために、システムの変更に多くの時間とコストを費やした この結果、セレクト・ショップOのシルバー・アクセサリー事業は、セレクト・ ショップDに遅れを取ってしまい、業界でのシェアもセレクト・ショップDに 逆転を許すこととなってしまった 10 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software ファイルの説明 サンプル・データには以下のファイルが含まれます 11 – create_table.ddl XML列を含む表の定義文 – load.ddl XMLを含むデータのロード文 – load_xml.txt 区切りASCIIファイル – xml/*.xml XMLデータ – xquery/*.sql Xquery文 – create_table_current.ddl リレーショナル表 – load_current.ddl リレーショナル・データのロード文 – item.txt 区切りASCIIファイル DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータベース・XMLテーブルの作成 2008/9/23 © 2008 IBM Corporation IBM Software Group | DB2 Information Management Software 0. 環境の準備 この資料ではDB2 9.5とIBM Data Studioを使って説明していますので、以下 のURLを参考に環境を準備して下さい DB2 Express-C 9.5 for Windows クイックインストール – http://www.ibm.com/developerworks/jp/offers/db2express-c/installwin_v95/ DB2 Express-C 9.5 for Linux クイックインストール – http://www.ibm.com/developerworks/jp/offers/db2express-c/installlin_v95/ IBM Data Studioクイック・スタート – http://www.ibm.com/developerworks/jp/xml/library/j_x-datastudio/ XPathやXQueryの実行環境を準備する – http://www.ibm.com/developerworks/jp/xml/library/j_x-xmlmaster/ 13 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 1. データベースの作成 XMLサンプル・データベースの作成 – Unicodeデータベースを作成します – DB2 Viperにおいて、XMLドキュメント および 従来形式のSQLデータ 両方を格納できるのはUnicode形式のデータベースです。 – Unicodeデータベース作成後は、特別なコマンドを発行したり、さらに操 作を行う必要はありません。(ネイティブの階層形式でDB2にXMLデー タを格納できます) 定義文 – create database [データベース名] using codeset UTF-8 territory JP 例) $ db2 create database xmlsampl using codeset UTF-8 territory JP DB20000I CREATE DATABASE コマンドが正常に完了しました。 14 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 2. XMLテーブルの作成(1) サンプル・テーブルの作成 – XMLデータを格納するには、1つ以上のXML列が含まれたテーブルを作成 します – これらのテーブルはドキュメント・コレクションの論理コンテナとして機能 します – DB2の内部では、実際にはXMLデータと非XMLデータに対して異なる 格納スキームを使用しています。様々な形式のデータを管理する1つ の論理オブジェクトとしてテーブルを使用する事で、管理とアプリケー ション開発をシンプルにできます 15 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 2. XMLテーブルの作成(2) 定義文 CREATE TABLE xmlitem( id item INTEGER NOT NULL PRIMARY KEY, XML ); 例) $ db2 connect to xmlsampl $ db2 -tvf create_table.ddl CREATE TABLE xmlitem( id INTEGER NOT NULL PRIMARY KEY, item XML ) DB20000I SQL コマンドが正常に完了しました。 16 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 3. XMLデータのロード(1) LOADユーティリティーの使用 – XMLデータがファイルになっている場合、DB2のLOADユーティリティーが使 用できます – アプリケーションの作成は不要です – LOADに必要なもの – XMLドキュメントのファイル – 区切りASCIIファイル – 任意のテキスト・エディターを使って作成します(一般に拡張子 は.delとします) – ファイル内の各行は、テーブルにロードされる1行のデータです – 行にXMLデータ指定子(XDS)が含まれている場合、LOADは参 照先XMLファイルに含まれているデータを読み取り、それをDB2 にロードします 17 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 3. XMLデータのロード(2) 入力用の区切りASCIIファイルの例 18 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 3. XMLデータのロード(3) ロード文 – load from load_xml.txt of del XML from xml insert into xmlitem; 例) $ db2 -tvf load.ddl load from load_xml.txt of del XML from xml insert into xmlitem ∼ 中略 ∼ 19 読み込まれた行数 = 358 スキップされた行数 =0 ロードされた行数 = 358 拒否された行数 =0 削除された行数 =0 コミットされた行数 = 358 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 4. XMLデータの確認(1) IBM Data Studioを起動して、XMLSAMPLデータベースを開きます 20 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 4. XMLデータの確認(2) データベース・エクスプローラーのテーブルからXMLITEMを選択し、右 クリックで[データ] -> [サンプルコンテンツ]をクリックします XML列のボタンをクリックしてXML文書を開いて確認します 21 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 4. XMLデータの確認(3) [設計] と [ソース] のタブを切り替えてXML文書を確認する事が出来ます 22 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの簡単な検索(XQuery、SQL/XML) 2008/9/23 © 2008 IBM Corporation IBM Software Group | DB2 Information Management Software XQueryを使ったXMLデータの検索 db2-fn:xmlcolumn – XML型のカラムを指定して、XMLデータを取り出します – XPathで条件を指定して結果を絞り込むことが可能です db2-fn:sqlquery – SQLを使い、XMLデータを取り出します – 条件指定をして結果を絞り込むことが可能です 24 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (1) XQUERYとdb2-fn:xmlcolumnを使い、全てのXMLデータを検索 XQUERY db2-fn:xmlcolumn("XMLITEM.ITEM") % 25 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (2) XQUERYとdb2-fn:sqlquery を使い、全てのXMLデータを検索 XQUERY db2-fn:sqlquery("select item from xmlitem") % 26 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (3) XQUERYとdb2-fn:xmlcolumnを使い、サイズがLの商品を検索 XQUERY db2-fn:xmlcolumn('XMLITEM.ITEM')/アイテム[サイズ='L']/商品 % 27 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (4) XMLデータの検索(3)を参照 XQUERY db2-fn:xmlcolumn('XMLITEM.ITEM')/アイテム[サイズ='L' and 色='黒']/商品 % 28 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (5) XMLデータの検索(3)を参照、サイズが120cmで青色の商品を検索 XQUERY db2-fn:xmlcolumn('XMLITEM.ITEM')/アイテム[サイズ='120cm' and 色='青']/商品 % 29 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (6) XMLデータの検索(3)を参照、サイズが120cmで青色、1,000円以下の商品を検索 XQUERY db2-fn:xmlcolumn('XMLITEM.ITEM')/アイテム[サイズ='120cm' and 色='青' and 価格 <= 1000]/商品 % 30 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (7) XQUERYとdb2-fn:xmlcolumnを使い、idが10101である商品を検索 XQUERY db2-fn:xmlcolumn('XMLITEM.ITEM')//商品[@id="10101"] % 31 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[XQuery] (8) XQUERYとdb2-fn:xmlcolumn、countを使い、サイズがLの商品点数を数える XQUERY count(db2-fn:xmlcolumn('XMLITEM.ITEM')/アイテム[サイズ='L']/商品) % 32 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software SQL/XMLを使ったXMLデータの検索 xmlexists – xmlexists述部は、条件を指定してXMLカラムの絞り込むことが出来ます xmlquery – xmlqueryは、SQLからXQueryを実行するためのSQLスカラ関数です 33 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[SQL/XML] (9) SQLとxmlexistsを使った検索の例、商品名が“フランス風カーディガン(七分袖)”であ る商品を検索 select c.id, c.item from xmlitem c where xmlexists('$i/アイテム[商品 = "フランス風カーディガン(七分袖)"]' passing c.item as "i") % 34 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software XMLデータの検索[SQL/XML] (10) SQLとxmlqueryを使った検索の例、商品コードが’20401’の商品を検索 select xmlquery('$i/アイテム/商品 ' passing c.item as "i") from xmlitem c where c.id = 20401 % 35 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software 【参考】 db2 コマンドライン・オプション db2コマンドライン・オプション – SQL文の区切り文字を指定 – オプション : -td’%’ – XQueryでは、セミコロン(;)をSQL文中で使用することもあるので、セミ コロン(;)以外の区切り文字が必要 – XMLデータにインデントを付けて表示 – オプション : -I – XMLデータのXML宣言を表示 – オプション : -d 使用例) – db2 -td'%' -ivf query_01.sql 36 DB2 © 2006 IBM Corporation IBM Software Group | DB2 Information Management Software END 37 DB2 © 2006 IBM Corporation