TOPサーバ構築・運用> 関数の作成と再帰呼び出し
XMLDB入門
eXistではじめよう!使って覚えるXMLデータベース入門

第4回:Webアプリケーションを構築しよう!

著者:ウルシステムズ  大塚 庸史、柏原 宏充   2007/8/6
前のページ  1  2  3   4  次のページ
関数の作成と再帰呼び出し

   実際のXQueryをみてみましょう。ここではXQueryの新しいテクニックが2つでてきます。1つは関数の定義、もう1つは再帰呼び出しです。

(画像をクリックすると別ウィンドウに拡大図を表示します)

   それぞれの項目は、以下のような意味を持っています。

1 request拡張モジュールの使用を宣言
2 response拡張モジュールの使用を宣言
3 関数traversePartsを定義。0または1の要素型の引数$consist_ofを引数にとり、戻り値もelement型であることを宣言
4 変数$partsに/db/inventory/parts.xmlのparts要素のid属性が同じparts要素をセット
5 $partsが複数の部品から構成されているとき、さらにtravarseParts関数自身を呼び出し、再起的に処理を行う
6 eXistで提供されている拡張XQueryライブラリを利用している。Content-Typeを「text/xml」に設定
7 eXistで提供されている拡張XQueryライブラリを利用している。リクエストに含まれているidというパラメータの値を取得し、変数$idにセット
8 変数$idをキーとしてproduct要素を取得し、変数$productにセット
9 選択したproductのconsist_of要素をtraverseParts関数に渡し、再帰呼び出しを開始

表4:項目の内容

※注: 再帰呼び出しは、階層構造を持つXMLを処理するのに非常に有効なテクニックですが、循環参照をしている(互いが互いを呼びだしている)データが存在すると、XQueryの処理が無限ループに陥ってしまいます。
今回のサンプルでは特に処理を行っていませんが、実際にはデータ投入時に無限ループのチェックを行うか、検索時に無限ループに陥ってないかどうかのチェックを行う必要があるでしょう。


index.htmlの作成

   最後に、AjaxライブラリのExt JSを使い、これまで作ってきたXQueryの呼び出し部分と、取得したデータの表示機能を作っていきます。処理の流れは以下のようになります。

表示機能の処理の流れ
図2:表示機能の処理の流れ

  1. ロードボタンを押下すると、eXistへ商品一覧XMLをリクエストする。
  2. 取得した商品一覧XMLをグリッドに表示する。
  3. グリッドで特定の商品をダブルクリックすると、eXistへ商品IDをキーとして、製品構成部品情報XMLをリクエストする。
  4. 取得した製品構成部品をツリー表示する。

表4:取得したデータ表示の処理の流れ

   グリッドやツリーウィジェットはすでに用意されているので、XQueryの呼び出し部分の処理を記述することで、以下のような画面を素早く作成することができます。

画面の作成
図3:画面の作成
(画像をクリックすると別ウィンドウに拡大図を表示します)

   詳細については実際のindex.htmlを参照していただくとして、ここではグリッド表示の部分とツリー作成部分について簡単に説明します。

前のページ  1  2  3   4  次のページ


ウルシステムズ株式会社 大塚 庸史
著者プロフィール
ウルシステムズ株式会社  大塚 庸史
ウルシステムズ株式会社シニアコンサルタント。2003年より現職。以前よりスクリプト言語には大きな興味を寄せていたが、最近、JavaScript、Flexの柔らかさに開眼しつつある。XQueryは今年「来る」と確信しつつ日々奔走中。


ウルシステムズ株式会社 柏原 宏充
著者プロフィール
ウルシステムズ株式会社  柏原 宏充
ウルシステムズ株式会社シニアコンサルタント。Web系開発の世界でRDBMSと触れあっていたところ、様々なことがあってXMLDBの世界へ。技術を文字にして伝え、文字を実装にして証明することを武器に、今日もお客様の課題解決に取り組んでいる。


INDEX
第4回:Webアプリケーションを構築しよう!
  eXistを使ってのWebアプリケーション構築
  作ってみよう!
関数の作成と再帰呼び出し
  製品一覧:グリッド表示