SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ANSI SQLを用いた階層型構造のリストラクチャリング

階層型XMLプロセッシング

  • X ポスト
  • このエントリーをはてなブックマークに追加

基本的なリストラクチャリング

 このセクションで解説する階層型構造変換は、「構造リストラクチャリング」あるいはより簡潔に「リストラクチャリング」と呼ばれるものです。物理的あるいは論理的な階層型構造のリストラクチャリングは、個々のフラグメントを抽出してから個別に再構成することで行われます。個々のフラグメントの抽出時に行うべき処理は、構造を論理的に複製し、各構造の識別とアクセスを行うための名前やプレフィックスを割り当てておくことです。このように独立して操作可能な複数のフラグメントを用意することで、オリジナル構造の変換が実行可能となります。ここでは、図2の構造を作成するSQLクエリの指定が極めて直観的かつ単純な手法で記述でき、階層型処理との親和性が非常に高い点に注目してください。

 論理的および物理的なデータ構造の分解と変換を標準SQLを用いて実行するには、SQLのエイリアス処理とフラグメント処理の組み合わせにより、クエリによる構造ビューへの任意回数の独立したアクセスを行えるようにしなければなりません。図2では、2つのフラグメント(図1の破線の円囲み)に対する単一のソースとしてStoreViewビューを用いています。これらが反映するのはCustViewおよびEmpViewの構成データです。ここで行われる本質的な処理は、これらのフラグメントによりStoreViewをいったん分解してからリモデリングを施すことで、データモデルのリシェイプを行うというものです。こうしたリシェイプは、構造中の他のデータ値のリレーションシップを基に、構造フラグメントを階層的に再結合(join)することで実行されます(通常は個別に実行)。

 論理的な構造は各種の方法で自由にモデリングできますが、物理的なインプット構造については、アクセスされる外部構造を反映するようにモデリングする必要があります。図2のStoreViewでは階層型構造を簡易的にモデリングしており、この例の場合は物理的なXMLあるいは論理的なリレーショナル構造とすることが可能ですが、行セット(rowset)にて両者は同一の表現となっています。このサンプルを見ると分かるように物理的な構造の再編成では、それを含む行セットから固定フラグメントを個別に選択した後にメインの構造(統合したビュー)に個別に結合させることで、論理的な構造の有す柔軟性を反映させることも可能です。またエイリアス機能を用いると、こうした新規のテーブルやビューに名前を付けることができ、SELECT句にて高レベルのプレフィックスとして参照させることができます。名称変更後のオブジェクト間では同じ名前が使われる可能性もあるため、こうしたプレフィックスを使用することで、オブジェクト参照の精密な指定が可能となるはずです。

ビューにおける構造リストラクチャリングとエイリアスの使用

 図3のサンプルは、XML変換に利用可能な各種のSQL処理を実演するために用意したものです。

図3 静的なリストラクチャリング: Transformビューにて全フィールドを選択することで得られる構造
図3 静的なリストラクチャリング: Transformビューにて全フィールドを選択することで得られる構造

 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の構造が得られるはずです。後述するサンプルでは、呼び出し時に変換ビューを動的に変更する方法を説明します。

次のページ
出力されるリストラクチャリングビューの動的な変更

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Michael M. David(Michael M. David)

 Advanced Data Access Technologies, Incの創設者であり、それ以前はNCR/Teradataのスタッフ研究員および主任XML設計者として活動し、ANSI SQLX Groupの代表も務める。フラット、リレーショナル、階層型データを用いた非プロシージャ方式による異種データベ...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3920 2009/06/04 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング