|
|
前のページ 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:表示機能の処理の流れ
- ロードボタンを押下すると、eXistへ商品一覧XMLをリクエストする。
- 取得した商品一覧XMLをグリッドに表示する。
- グリッドで特定の商品をダブルクリックすると、eXistへ商品IDをキーとして、製品構成部品情報XMLをリクエストする。
- 取得した製品構成部品をツリー表示する。
表4:取得したデータ表示の処理の流れ
グリッドやツリーウィジェットはすでに用意されているので、XQueryの呼び出し部分の処理を記述することで、以下のような画面を素早く作成することができます。
図3:画面の作成 (画像をクリックすると別ウィンドウに拡大図を表示します)
詳細については実際のindex.htmlを参照していただくとして、ここではグリッド表示の部分とツリー作成部分について簡単に説明します。
|
前のページ 1 2 3 4 次のページ
|
|
|
|
著者プロフィール
ウルシステムズ株式会社 大塚 庸史
ウルシステムズ株式会社シニアコンサルタント。2003年より現職。以前よりスクリプト言語には大きな興味を寄せていたが、最近、JavaScript、Flexの柔らかさに開眼しつつある。XQueryは今年「来る」と確信しつつ日々奔走中。
|
|
|
著者プロフィール
ウルシステムズ株式会社 柏原 宏充
ウルシステムズ株式会社シニアコンサルタント。Web系開発の世界でRDBMSと触れあっていたところ、様々なことがあってXMLDBの世界へ。技術を文字にして伝え、文字を実装にして証明することを武器に、今日もお客様の課題解決に取り組んでいる。
|
|
|
|