はじめに
ナビゲーションレスなデータベース階層処理を用いて行う階層型XMLプロセッシングの新たな手法についての解説も、本稿で3回目になります。1回目の記事では完全なマルチパス階層型データのクエリ処理の基礎を解説し、2回目の記事ではいくつかの階層型構造をより大きな階層型構造に編成する方法および、階層型構造をマッシュアップする新規の強力な手法の具体例を紹介しました。本稿はこの流れを引き継ぎ、マルチパス(非線形)階層型構造に高度な変換を施す新規の手法の具体例について解説します。ここでの操作にて正しい階層型構造を得るには、以前の記事と同様、正しい階層化の原則に従うことが必要です。
今日のXML構造の変換プロセスにおいて「リストラクチャリング(再編成)」と「リシェイプ(再形成)」はほぼ同じ用語として使われています。しかしながら次のように、これらはXML階層型構造に関するタイプの異なる2つの基本変換なのであり、その本来の意味も得られる結果も使用法も異なるので、両者は個別に取り扱わなくてはなりません。
- リストラクチャリングの処理は既存データ間のリレーションシップ(relationship:関係)で規定されるのに対して、リシェイプの処理は現状のデータ構造におけるセマンティクス(semantics:意味)で規定される。
- リストラクチャリングでは新規および未使用のリレーションシップを用いてデータを再編成するのに対して、リシェイプでは現状の構造的なセマンティクスを用いて他の形態の構造に再形成する。
- リストラクチャリング(データのリレーションシップを基に実行)では新たなセマンティクスの下で新規の構造とデータを生成できるのに対して、リシェイプ(構造のセマンティクスを基に実行)は構造を変化させるだけでデータとそのセマンティクスは変更させない。
リストラクチャリングもリシェイプも、それぞれに適した用途があります。一般論としては、特定のアプリケーションでの使用に適した構造のマッチングを行う場合はリストラクチャリングを用い、特定のフォーマットに適した構造のマッピングを行う場合はリシェイプを用います。
本稿で示すリストラクチャリングのSQLサンプルでは、コンストラクトのループ化やナビゲーションを必要とすることなく求めるオペレーションを実行できます。ただし当然ながら、この種の変換用SQLステートメントの記述にあたっては、若干の検討をしなくてはなりません。そうした処理で正常な結果が得られるのは、SQLに指定されるデータ構造の階層型リレーションシップに厳密に従うことで、すべてのオペレーションが階層的に行われるからです。SQLを用いた階層型構造オペレーションは、こうした変換を実装する際にその真価を発揮するもので、エラーの発生を回避しつつ複雑な変換処理の設計を簡易化してくれます。本稿で用いるリストラクチャリングの手法と原則は、他のXMLプロセッサで用いられるナビゲーション的およびプロシージャ(手続き)的な変換についても有効なものですが、ここで解説する完全な非線形変換をプロシージャ方式で実行するのは困難かもしれません。
本稿のリストラクチャリングの実行例におけるSQLステートメントについては、ANSI SQL Transparent XML Hierarchical Processorのプロトタイプを用いてステートメントの取得と実行をリアルタイムで行うための識別番号が付けられています。こうしたSQLのサンプルは変更可能です。また階層型プロセッサのプロトタイプおよびその使用法はhttp://www.adatinc.com/prototype.htmlから入手できます。