IBM Books

管理およびプログラミングの手引き

XML 列について計画する

以下の節では、XML 列についての計画タスクを解説します。

妥当性検査

アクセスおよび保管の方式を選択した後、 データの妥当性検査 を行うかどうかを決めて、 DAD を指定することができます。 DTD を使用して XML データの妥当性検査を行います。 DTD を使用すると、XML 文書が有効であることを確認し、 XML データを構造化検索できるようになります。 DTD は DTD リポジトリーに保管されています。

推奨: XML 文書をアーカイブ目的で保管する場合を除き、 XML データは DTD を使用して妥当性検査を行ってください。 妥当性検査を行うためには、DTD が XML エクステンダー・リポジトリーに存在しなければなりません。 DTD をリポジトリーに挿入する方法については、DTD リポジトリーへの DTD の保管を参照してください。

複数の異なる DTD を使用して、同じ XML 列内の文書の妥当性検査を行うことができます。 つまり、類似の要素を持つ類似の構造の文書が、異なる DTD を呼び出すようにすることができます。 複数の DTD を参照するためには、以下の指針に従ってください。

重要: XML データを DB2 に挿入する前に、 妥当性検査を行うかどうかを決めてください。 XML エクステンダーは、すでに DB2 に挿入されているデータの妥当性検査はサポートしません。

考慮事項:

XML ユーザー定義タイプ

XML 文書は UDT として XML 列に保管します。 使用可能な UDT については、表 4 を参照してください。

表 4. XML エクステンダー UDT
ユーザー定義タイプ列 ソース・データ・タイプ 使用法の説明
XMLVARCHAR VARCHAR(varchar_len) XML 文書の全体を VARCHAR として DB2 内に保管します。
XMLCLOB CLOB(clob_len) XML 文書の全体を CLOB として DB2 内に保管します。
XMLFILE VARCHAR(1024) XML 文書のファイル名を DB2 内に保管して、 XML 文書を DB2 サーバーにとってローカルのファイル内に保管します。

サイド表

サイド表の計画を立てるとき、この表の編成方法、いくつの表を作成するか、 およびサイド表のデフォルト視点を作成するかどうかを考察しなければなりません。 その場合の決断は、要素と属性が複数回出現するかどうかや、 照会のパフォーマンス上の要件などのいくつかの考慮事項をベースに下します。

複数回の出現

ロケーション・パスが複数回出現する文書の場合、 XML エクステンダーは、複数回出現する要素の順序を追跡記録するために、 各サイド表内にタイプ INTEGER の列 DXX_SEQNO を追加します。 DXX_SEQNO を使うと、SQL 照会内に ORDER BY DXX_SEQNO と指定することで、 元の XML 文書と同じ順序で要素を取り出すことができます。

デフォルト視点および照会のパフォーマンス

XML 列を使用可能にするときに、 ROOT ID という名前の固有 ID を使ってアプリケーション表をサイド表に結合するための デフォルトの読み取り専用視点を指定することができます。 デフォルト視点を使うと、サイド表を照会することで XML 文書を検索することができます。 たとえば、アプリケーション表が SALES_TAB、 サイド表が ORDER_TAB、PART_TAB、および SHIP_TAB であるとすると、次のようにします。

SELECT sales_person FROM sales_order_view
      WHERE  price > 2500.00

この SQL ステートメントは、 PRICE が 2500.00 より大きい列 ORDER に注文を保管している SALES_TAB 内の営業担当者の名前を戻します。

デフォルト視点を照会すると、 アプリケーション表とサイド表の 1 つの視点が提示されるという利点があります。 しかし、作成されるサイド表の数が多い場合、照会の負荷は大きくなります。 したがって、デフォルト視点の作成をお勧めするのは、サイド表の合計列数が少ない場合のみです。 アプリケーションで、サイド表の重要な列を結合して独自の視点を作成することができます。

XML 列データの索引

XML 列文書に索引を付けるかどうかは、計画時の重要な決断事項です。 この決断は、データへのアクセスが必要になる頻度、 および構造化検索の際のパフォーマンスの重要性に基づいて下します。

XML 文書の全体を含む XML 列を使用するとき、 XML 要素または属性値を含めるためのサイド表を作成してから、 これらの列に索引を作成することができます。 どの要素および属性に索引を作成するのかを決めなければなりません。

XML 列を索引付けすることによって、頻繁に照会される整数、10 進数、 または日付などの汎用データ・タイプのデータを、 データベース・エンジンのネイティブ DB2 索引サポートを使用して索引付けすることができます。 XML エクステンダーは XML 要素または属性の値を XML 文書から抽出して、 それらをサイド表 に保管し、 それらのサイド表に索引を作成できるようにします。

サイド表の各列は、XML 要素または属性および SQL データ・タイプを識別するロケーション・パスによって指定できます。 図 8 は、サイド表のある XML 列を示しています。

図 8. サイド表のあるXML 列


サイド表のあるXML 列

XML エクステンダーは、XML 文書を XML 列に保管するときに自動的にサイド表にデータを取り入れます。

高速検索のために、DB2 B-tree 索引付け テクノロジーを使用してこれらの列に索引を作成します。 索引の作成に使用される方式はオペレーティング・システムによって異なり、 XML エクステンダーはそれらの方式をサポートします。

考慮事項:

ロケーション・パス

ロケーション・パスとは、 XML 要素または属性を識別する一連の XML タグ です。 XML エクステンダーは、ロケーション・パスを以下の状況で使用します。

図 9 は、ロケーション・パスおよび XML 文書との関係を示しています。

図 9. 文書を構造化 XML 文書として DB2 表の列に保管する


文書を構造化 XML 文書として DB2 表の列に保管する

ロケーション・パスの構文

以下のリストは、XML エクステンダーでサポートされるロケーション・パスの構文を説明しています。

1. /
XML のルート要素を表します。

2. /tag1
ルートの下の要素 tag1 を表します。

3. /tag1/tag2/..../tagn
ルートからの降順の連鎖、tag1tag2、 そして tagn-1 の子である、tagn という名前の要素を表します。

4. //tagn
名前が tagn である要素を表します。 ダブルスラッシュ (//) は、0 個以上の任意のタグを示します。

5. /tag1//tagn
名前が tagn である要素を表します。 それはルートの下にある tag1 という名前の要素の子であり、 ダブルスラッシュ (//) は 0 個以上の任意のタグを示します。

6. /tag1/tag2/@attr1
tag2 という名前の要素の属性 attr1 を表します。 それはルートの下にある要素 tag1 の子です。

7. /tag1/tag2[@attr1="5"]
名前が tag2 で属性 attr1 の値が 5 である要素を表します。 tag2 はルートの下にある tag1 という名前の要素の子です。

8. /tag1/tag2[@attr1="5"]/.../tagn
ルートからの降順の連鎖、tag1tag2、 そして tagn-1 の子である、tagn という名前の要素を表します。 tag2 の属性 attr1 の値は 5 です。

ワイルドカード: ロケーション・パス内の要素をアスタリスクに置き換えて、 任意のストリングに一致させることができます。

単純ロケーション・パス

単純ロケーション・パス は、 要素タイプ名を順番に並べてシングルスラッシュ (/) で区切ったものです。 属性値は、要素タイプの後で大括弧で囲まれて示されます。 ロケーション・パスの構文 の 3 および 6 の構文説明は、 単純ロケーション・パスについて解説しています。 表 5 は構文を説明しています。

表 5. 単純ロケーション・パスの構文
対象 ロケーション・パス 説明
XML 要素 /tag1/tag2/..../tagn-1/tagn tagn という名前の要素およびその親によって識別される要素の内容
XML 属性 /tag_1/tag_2/..../tag_n-1 /tag_n/@attr1
tagn およびその親によって識別される要素の、attr1 という名前の属性

XML エクステンダーの制約事項

XML エクステンダーには、DAD 内での要素または属性の定義にロケーション・パスを使用することに関して制限があります。 XML エクステンダーは要素または属性と DB2 列との間で 1 対 1 マッピングを使用するので、 ロケーション・パスのための特殊な規則が必要になります。 表 6 には、ロケーション・パスについての制限が説明されています。 サポートされるロケーション・パスの列に指定されている数字は、 ロケーション・パスの構文での構文表示を示します。


表 6. ロケーション・パスの使用に関する XML エクステンダーの制限
ロケーション・パスの使用 サポートされるロケーション・パス
DAD 内の要素 3、6 (表 5 で説明されている単純ロケーション・パス)
UDF の抽出 1-9
テキスト・エクステンダーによる UDF の検索 1-9

DAD ファイル

XML 列では、DAD は基本的に、XML 列に保管された文書を索引付けする方法を指定します。 DAD は XML 形式の文書で、クライアントに存在します。 XML 文書を DTD を使用して妥当性検査することを選択した場合、 DAD ファイルをその DTD に関連付けることができます。 DAD ファイルのデータ・タイプは CLOB です。

XML 列の DAD ファイルには XML ヘッダーが含まれ、 クライアント上の DAD ファイルおよび DTD へのディレクトリー・パスを指定し、 索引付けのためにサイド表に保管する XML データのマップを提供します。

XML 列のアクセスおよび保管の方法を指定するには、 DAD ファイル内で以下のタグを使用します。

<Xcolumn>
XML データを XML 文書全体として、 XML データについて使用可能にされている DB2 列内で保管および検索するように指定します。

XML について使用可能にされた列は、XML エクステンダーの UDT です。 アプリケーションには、任意のユーザー表 内の列を含めることができます。 XML 列データには、主に SQL ステートメントおよび XML エクステンダーの UDF を介してアクセスします。

XML エクステンダー管理ウィザードまたはエディターを使用して、DAD の作成および更新を行うことができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]