XQuery および XML データベース

www.altova.com このトピックを印刷 前のページ 1つ上のレベル 次のページ

ホーム >  ユーザーマニュアル > XQuery >

XQuery および XML データベース

XQuery ドキュメントを使えば、XML データベース (XML DB) への問い合わせを行うことができます。この XQuery 機能は、現在 IBM DB2 データベースでしかサポートされておりません。XQuery を使った XML DB への問い合わせの仕組みは、(i) XQuery エンジンに対して DB 内部の XML へ問い合わせを行う通知と、(ii) DB 内部にある XML データへのアクセス、により成り立っています。

 

この仕組みを実装するには、以下のようなステップを踏む必要があります。各ステップの詳細を以下に記します:

 

1.XQuery ドキュメントの設定 を行い、XQUERY キーワードをドキュメントの最初に挿入することで XML DB の問い合わせを行うようにする。.
2.アクティブな XQuery ドキュメントに対して、(情報ウィンドウから)DB のサポートを有効にして、(クイック接続ダイアログを使って)DBへ接続する
3.XQuery ドキュメントにて、DB 固有の XQuery 拡張を使用することで、DB データにアクセスし、XQuery オペレーションも行えるようにする。
4.XQuery ドキュメントの実行を XMLSpy から行う。

 

XML DB の問い合わせを行うよう XQuery ドキュメントを設定する

XQuery ドキュメントを使って XML DB の問い合わせを行うには、XQuery ドキュメントを開き(または新しい XQuery ドキュメントを作成し)、XQUERY キーワードを、ドキュメントの最初に入力します。以下の例を参照ください。

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

ドキュメントがオプションの xquery version 表現を使用する場合でも、XQUERY が必要です:

 

XQUERY xquery version "1.0"; (: Retrieve details of all customers :)

declare default element namespace "http://http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

メモ:XMLSpy の内蔵 XQuery エンジンが XQUERY キーワードを読むことにより、XML DB がアクセスの対象になることが示唆されます。その結果、XQUERY キーワードを含む XQuery ドキュメントを、XML DB を含まない XML ドキュメントに対して実行してもエラーとなります。

 

DB サポートを有効化し、 DB へ接続する。

(下のスクリーンショットの様に)情報ウィンドウにあるデータベースサポートを有効化チェックボックスにチェックを入れることで、XQuery ドキュメントの DB サポートが有効になります。DB サポートは、各 XQuery ドキュメントに対して有効にする必要があり、XQuery ドキュメントを開き直したときにも再度設定する必要があることに注意してください。

XQEnableDBSupport

情報ウィンドウにて DB のサポートを有効にすると、接続ウィザードが起動され、データベースへの接続を行うことができます。現在のところ、IBM DB2 データベースのみがサポートされています。データベースへの接続方法についてはデータソースへ接続、のセクションにて記述されています。データソースへの接続が既に存在する場合、これらの接続が(以下のスクリーンショットにある)情報ウィンドウの Data Source コンボボックスに表示され、データソースのリストに表示されているアイテムの1つを、アクティブな XQuery ドキュメントのデータソースとして選択することができます。情報ウィンドウでは、Root Object コンボボックスからルートオブジェクトを選択することもできます。

XQDataSourceComboBox

情報ウィンドウにある XQicQuickConnect アイコンをクリックすることで、(DB への接続を行う)接続ウィザードにいつでもアクセスすることができます。

メモ:XQuery ドキュメントを閉じると、DB への接続も同様に切断されます。その後 XQuery ドキュメントを開く際に、DB への接続を再度行う必要が生じます。

 

IBM DB2 固有の XQuery 言語拡張

XQuery ドキュメントでは IBM DB2 データベースからデータを取得するために、2つの IBM DB2 固有の関数を使用することができます:

 

db2-fn:xmlcolumn により、列の検索やフィルタリングを行うこと無く、XML 列全体を取得することができます。
db2-fn:sqlquery により、SQL SELECT ステートメントをベースにした値の取得を行ないます。

 

これらの関数を使用して取得された XML データは、標準的な XQuery コンストラクトにより開くことができます。以下の例を参照ください。

 

db2-fn:xmlcolumn::この関数の引数は大文字/小文字で区別される文字列リテラルで、テーブル内にある XML 列の参照に使用されます。文字列リテラル引数は XML タイプの修飾された列名でなければなりません。列内にある全ての XML データがシーケンスとして関数から返され、ここでは検索条件などは適用されません。以下の例では、CUSTOMER テーブル内の INFO (XML) 列のデータ全てが、トップレベルの <newdocelement> 要素内に戻されます:

 

XQUERY (: Retrieve details of all customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </newdocelement>

 

取得されたデータは XQuery コンストラクトを使って絞り込むことができます。以下の例では、CUSTOMER テーブルにある INFO (XML) 列から取得されたデータが、XQuery コンストラクトによりフィルタリングされ、トロント (Toronto) にある顧客データのみが取得されるようになっています。

 

XQUERY (: Retrieve details of Toronto customers :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo[addr/city='Toronto']</newdocelement>

 

メモ:上の例では、各セルにある XML ファイルのドキュメント要素は customerinfo であり、db2-fn:xmlcolumn により得られた XML シーケンスのルートノードは customerinfo ノードの上にある abstract ノードと見なされます。

 

db2-fn:sqlquery:.この関数は SQL SELECT ステートメントを引数として受け取り、その結果を XML 値のシーケンスとして戻します。取得されたシーケンスは XQuery コンストラクトにより絞り込むこともできます。以下の例では、CUSTOMER テーブルにある INFO 列のデータのうち、CID フィールドの値が 1000  から 1004 間にある行が取得されます。SQL ステートメントでは大文字/小文字の区別は行われませんが、XQuery では異なるものとして扱われることに注意してください。

 

XQUERY (: Retrieve details of customers by Cid:)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

 

<persons>

   {db2-fn:sqlquery("SELECT info FROM customer WHERE CID>1000 AND CID<1004")/

   <person>

      <id>{data(@Cid)}</id>

      <name>{data(name)}</name>

   </person>}

</persons>

 

上の XQuery ドキュメントは以下のような出力を生成します:

 

<persons xmlns="http://www.altova.com/xquery/databases/db2">

   <person>

 <id>1001</id>

 <name>Kathy Smith</name>

   </person>

   <person>

 <id>1002</id>

 <name>Jim Jones</name>

   </person>

   <person>

 <id>1003</id>

 <name>Robert Shoemaker</name>

   </person>

</persons>

 

以下の点に注意してください:

 

デフォルトの要素名前空間宣言(デフォルトのelement namespace)は XQuery 全体に対して適用され、XML ドキュメントや新たな要素の構築時のナビゲーションに利用されます。これは、XQuery セレクター name が、<default-element-namespace>:name に拡張され、構築された要素(例:persons)がデフォルトの名前空間にあることを意味します。
SQL SELECT ステートメントでは大文字/小文字の区別が行われません。
SELECT ステートメントの WHERE 句は、データベースアイテムを参照するもので、アクセスされている XML ファイルのノードを参照するものではありません。
db2-fn:sqlquery 関数の後にある "/" は戻されたシーケンスの最初のアイテムを表わしており、このアイテムがコンテキストノードになります。

 

XQuery の実行

XQuery ドキュメントを実行するには、XSL/XQuery メニューにある XQuery を実行コマンドを選択します。他にも、Alt+F10 を押下し、XQuery を実行アイコン ic_xquery_transform をクリックすることで、同様の操作を行えます。実行の結果は新しいドキュメント内に表示されます。


(C) 2019 Altova GmbH