DB基礎講座:XQueryとSQLはどう違う?
一気に分かる“XQuery”ハンズオン演習
日本アイ・ビー・エム米持幸寿
2006/7/6
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を使います。
- DB2 V9.1 for Linux, UNIX and Windows
2006年7月28日よりダウンロード開始予定。それ以前でも、「オープンβダウンロード(英語ページ)」が利用できる。
上記のディレクトリ構造のXMLをXMLカラムに保存してXQueryで検索します。今回は保存するためのプログラムは本論から外れるので解説しませんが、下記にソースコードを準備しました。
- サンプル・ソースコード(Dir2xml.java)
利用手順は以下のとおりです。
- DB2 V9.1をインストール
- サンプルデータベースを作成
- ソースコード中のユーザーID、パスワード、対象ディレクトリ名を調整
- 実行
サブディレクトリごとに4つのXMLインスタンスが保存されます(図4)。
図4 サンプルに使うXMLデータ |
XMLで試す場合には、データをDB2に読み込んだ後、DB2コマンドとしてXQueryに続けて記事中のサンプルにあるクエリを実行してください。手順は以下のとおりです。
- スタートメニューから「DB2」→「汎用管理ツール」→「コントロールセンター」を開く
- コントロールセンターのツールバーの左から四番目の「コマンドエディター」ボタンを押す(画面をクリックすると拡大します)
- コマンドエディターが開いたら、上半分のコマンドエリアに「CONNECT TO SAMPLE」を入力し、Ctl+Enterを押す(画面をクリックすると拡大します)
- 「接続は成功しました」が表示されたら、コマンドエリアに「XQUERY for ....」の型式で入力し、Ctl+Enterを押す
XQueryを補完するXDMとXPath
XQueryには、前提仕様としてXDM(XQuery/XPath Data Model)とXPathが定義されています。
XDMは、XQuery、XPath、XSLTなどの入力となるXMLに使われるデータの型を定義しています。基本はXMLスキーマのデータ型定義を利用しています。
- XQuery 1.0 and XPath 2.0 Data Model (XDM)
(W3C Candidate Recommendation 8 June 2006)
XPathは、XDMで定義されるデータの処理のための表現形式です。
- XML Path Language (XPath) 2.0
(W3C Candidate Recommendation 8 June 2006)
XPathはXQueryやXSLT 2.0のためにXPath 2.0にバージョンアップしています。XPathの解説に関しては下記の記事に任せます。
- @IT記事「技術者のためのXML再入門」
第8回 XML文書内の位置を正確に指し示す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はどう違う? |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|