基本的なリストラクチャリング
このセクションで解説する階層型構造変換は、「構造リストラクチャリング」あるいはより簡潔に「リストラクチャリング」と呼ばれるものです。物理的あるいは論理的な階層型構造のリストラクチャリングは、個々のフラグメントを抽出してから個別に再構成することで行われます。個々のフラグメントの抽出時に行うべき処理は、構造を論理的に複製し、各構造の識別とアクセスを行うための名前やプレフィックスを割り当てておくことです。このように独立して操作可能な複数のフラグメントを用意することで、オリジナル構造の変換が実行可能となります。ここでは、図2の構造を作成するSQLクエリの指定が極めて直観的かつ単純な手法で記述でき、階層型処理との親和性が非常に高い点に注目してください。
論理的および物理的なデータ構造の分解と変換を標準SQLを用いて実行するには、SQLのエイリアス処理とフラグメント処理の組み合わせにより、クエリによる構造ビューへの任意回数の独立したアクセスを行えるようにしなければなりません。図2では、2つのフラグメント(図1の破線の円囲み)に対する単一のソースとしてStoreView
ビューを用いています。これらが反映するのはCustView
およびEmpView
の構成データです。ここで行われる本質的な処理は、これらのフラグメントによりStoreView
をいったん分解してからリモデリングを施すことで、データモデルのリシェイプを行うというものです。こうしたリシェイプは、構造中の他のデータ値のリレーションシップを基に、構造フラグメントを階層的に再結合(join)することで実行されます(通常は個別に実行)。
論理的な構造は各種の方法で自由にモデリングできますが、物理的なインプット構造については、アクセスされる外部構造を反映するようにモデリングする必要があります。図2のStoreView
では階層型構造を簡易的にモデリングしており、この例の場合は物理的なXMLあるいは論理的なリレーショナル構造とすることが可能ですが、行セット(rowset)にて両者は同一の表現となっています。このサンプルを見ると分かるように物理的な構造の再編成では、それを含む行セットから固定フラグメントを個別に選択した後にメインの構造(統合したビュー)に個別に結合させることで、論理的な構造の有す柔軟性を反映させることも可能です。またエイリアス機能を用いると、こうした新規のテーブルやビューに名前を付けることができ、SELECT
句にて高レベルのプレフィックスとして参照させることができます。名称変更後のオブジェクト間では同じ名前が使われる可能性もあるため、こうしたプレフィックスを使用することで、オブジェクト参照の精密な指定が可能となるはずです。
ビューにおける構造リストラクチャリングとエイリアスの使用
図3のサンプルは、XML変換に利用可能な各種のSQL処理を実演するために用意したものです。
1つ目は、リストラクチャリング用のSQLクエリ(前述のもの)をSQLビュー中に配置することで実行が簡便化されるというもので、これにより抽象的に柔軟な使用ができることが分かるでしょう。2つ目は、InvIDおよびAddrIDという列名に対して、生成するXMLに反映されるエイリアス名を付けられることです。具体的なコードは次のように記述されますが、ここでは先のサンプルを変更して、エイリアス名を付けた上で1つのビュー中に配置するようにしてあります。
CREATE View Transform AS SELECT SV1.EmpID EmpID, SV1.DpndID DpndID, SV2.CustID CustID, SV2.InvID Invoice, SV2.AddrID Address FROM StoreView SV1 LEFT JOIN StoreView SV2 ON SV1.EmpCustID=SV2.CustID
このSQLでは、InvID
およびAddrID
列にInvoice
およびAddress
というエイリアスを割り当てています。これらの新しい名前は、生成後の構造のもたらすXMLでも反映されるようになるはずです。
この指定による変換結果はTransform
という名前のSQLビューに格納されるため、簡単に呼び出すことができ、その他のビューと同様の使用も可能となっています。これが正常に動作するかを検証するにはSELECT * FROM Transform
というクエリを実行すればよく、これにより図3の構造が得られるはずです。後述するサンプルでは、呼び出し時に変換ビューを動的に変更する方法を説明します。