IBM Books

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

XML コレクションについて計画する

XML コレクションの計画を立てるとき、 DB2 データからの文書の合成と DB2 データへの XML 文書の分解の、 一方または両方に関していくつかの考慮事項があります。 以下の項では、XML コレクションを計画する上での懸案事項について述べ、 合成および分解に関する考慮事項を示します。

妥当性検査

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

推奨:XML データは DTD を使用して妥当性検査を行ってください。 妥当性検査を行うためには、DTD が XML エクステンダー・リポジトリーに存在しなければなりません。 DTD をリポジトリーに挿入する方法については、DTD リポジトリーへの DTD の保管を参照してください。 DTD の要件は、XML 文書を構成しているのか分解しているのかによって異なります。

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

考慮事項:

DAD ファイル

XML コレクションの場合、DAD ファイルは XML 文書の構造を、 文書の構成元または分解先である DB2 表にマップします。

たとえば、XML 文書内に <Tax> と呼ばれる要素がある場合、 <Tax> を TAX と呼ばれる列にマップしなければならないという具合です。 XML データとリレーショナル・データとの関係を DAD 内で定義します。

DAD ファイルは、コレクションを使用可能にする際に指定するか、 または DAD ファイルを XML コレクションのストアード・プロシージャー で使用する際に指定します。 DAD は XML 形式の文書で、クライアントに存在します。 XML 文書を DTD を使用して妥当性検査することを選択した場合、 DAD ファイルをその DTD に関連付けることができます。 XML エクステンダーのストアード・プロシージャーの入力パラメーターとして使用される場合、 DAD ファイルのデータ・タイプは CLOB です。

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

<Xcollection>
XML データを XML 文書から分解してリレーショナル表のコレクションにするか、 またはリレーショナル表のコレクションから構成して XML 文書にするかを指定します。

XML コレクションは、XML データを含むリレーショナル表のセットの仮想名です。 アプリケーションは任意のユーザー表の XML コレクションを使用可能にすることができます。 これらのユーザー表は、既存の業務データ用の既存の表、または XML エクステンダーが最近作成した表などです。 XML コレクション・データへのアクセスには、 主に XML エクステンダーに備わっているストアード・プロシージャーを使用します。

DAD ファイルは、以下の種類のノードを使用して XML 文書のツリー構造を定義します。

root_node
文書のルート要素を指定します。

element_node
要素を識別すると同時に、ルート要素または子要素となることができます。

text_node
要素の CDATA テキストを表します。

attribute_node
要素の属性を表します。

図 10 は、DAD ファイルで使用されているマッピングの一部を示しています。 このノードは、XML 文書の内容をリレーショナル表内の表列にマップします。

図 10. ノード定義

<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd">
<DAD>
  ...
<Xcollection>
<SQL_stmt>
       ...
</SQL_stmt>
<prolog>?xml version="1.0"?</prolog>
<doctype>!DOCTYPE DAD SYSTEM "c:\dxx\sample\dtd\getstart.dtd"</doctype>
<root_node>
   <element_node name="Order">         --> Identifies the element <Order>
     <attribute_node name="key">       --> Identifies the attribute "key"
        <column name="order_key"/>     --> Defines the name of the column, "order_key",
                                                to which the element and attribute are mapped
     </attribute_node>
     <element_node name="Customer">    --> Identifies a child element of <Order> as
                                                <Customer>
        <text_node>                    --> Specifies the CDATA text for the element
                                                <Customer>
          <column name="customer">     --> Defines the name of the column, "customer",
                                                to which the child element is mapped
        </text_node>
     </element_node>
        ...
   </element_node>
      ...
<root_node>
</Xcollection>
</DAD>

この例では、SQL ステートメント内の最初の 2 列に対して要素および属性がマップされます。

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

XML コレクションのマッピング体系

XML コレクションを使用している場合、 XML データをリレーショナル・データベース内で表す方法を定義するマッピング体系 を選択しなければなりません。 XML コレクションはリレーショナル構造の XML 文書内で使用される階層構造と一致しなければならないので、 それら 2 つの構造の相違点を理解している必要があります。 図 11 は、 階層構造がリレーショナル表の列にどのようにマップされるかを示しています。

図 11. リレーショナル表の列にマップされた XML 文書構造


リレーショナル表の列にマップされた XML 文書構造

XML エクステンダーは、複数のリレーショナル表内にある XML 文書を構成または分解するとき、 マッピング体系を使用します。 XML エクステンダーには、DAD ファイルの作成に役立つウィザードが備わっています。 しかし、DAD ファイルを作成する前に、 XML データを XML コレクションにマップする方法を考えなければなりません。

マッピング体系の種類

マッピング体系は、DAD ファイル内の <Xcollection> 要素に指定されます。 XML エクステンダーには、SQL マッピングリレーショナル・データベース (RDB_node) マッピング という、 2 種類のマッピング体系が備わっています。 どちらの方式も XSLT モデルを使用して XML 文書の階層を定義します。

SQL マッピング
リレーショナル・データから XML 文書への簡単で直接的なマッピングを可能にします。 これは、単一の SQL ステートメントと XSLT データ・モデル を介して行います。 SQL マッピングは構成に使用され、分解には使用されません。 SQL マッピングは DAD ファイル内の SQL_stmt 要素によって定義されます。 SQL_stmt の内容は、有効な SQL ステートメントです。 SQL_stmt は、SELECT 文節の列を、XML 文書で使用される XML 要素または属性にマップします。 XML 文書の構成のために定義されたとき、SQL ステートメントの SELECT 文節にある列名が、 attribute_node の値または text_node の内容を定義するために使用されます。 FROM 文節は、データを含む表を定義します。 WHERE 文節は、結合 と検索条件 を指定します。

SQL マッピングにより、DB2 ユーザーは SQL を使用してデータをマップすることができます。 SQL マッピングを使用するとき、 1 つの SELECT ステートメント内ですべての表を結合して照会を形成しなければなりません。 1 つの SQL ステートメントでは十分でない場合、RDB_node マッピングの使用を考慮してください。 すべての表を結び合わせるため、これらの表に基本キー外部キー の関係があることが推奨されます。

RDB_node マッピング
XML 要素の内容または XML 属性の値の位置を定義して、 XML エクステンダーが XML データを保管または取得する場所を判別できるようにします。

RDB_node には、 表、任意指定の列、および任意指定の条件についてのノード定義が 1 つ以上含まれます。 表および列は、XML データをデータベースに保管する方法を定義するために使用されます。 条件は、XML データの選択基準、または XML コレクション表を結合する方法を指定します。

マッピング体系を定義するには、<Xcollection> 要素のある DAD を作成します。 図 12 は、 3 つのリレーショナル表内のデータから XML 文書のセットを構成する、 XML コレクション SQL マッピングのあるサンプルの DAD ファイルの一部を示しています。

図 12. SQL マッピング体系

<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "c:\dtd\dad.dtd">
<DAD>
  <dtdid>c:\dxx\samples\dad\getstart.dtd</dtdid>
  <validation>YES</validation>
  <Xcollection>
    <SQL_stmt>
       SELECT o.order_key, customer, p.part_key, quantity, price, tax, date,
              mode, comment
         FROM order_tab o, part_tab p,
               table(select substr(char(timestamp(generate_unique())),
               as ship_id, date, mode, from ship_tab) as s
        WHERE p.price > 2500.00 and s.date > "1996-06-01" AND
              p.order_key = o.order_key and s.part_key = p.part_key
    </SQL_stmt>
    <prolog>?xml version="1.0"?</prolog>
    <doctype>!DOCTYPE DAD SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
    <root_node>
	   <element_node name="Order">
		  <attribute_node name="key">
			<column_name="order_key"/>
		  </attribute_node>
		  <element_node name="Customer">
			  <text_node>
				  <column name="customer"/>
			  </text_node>
		  <element_node>
		
		...
		  </element_node><!-end Part->
	   </element_node><!-end Order->
    </root_node>
  </Xcollection>
</DAD>

XML エクステンダーには、XML コレクション内のデータを管理するいくつかのストアード・プロシージャーが備わっています。 これらのストアード・プロシージャーは両方のタイプのマッピングをサポートしますが、 DAD ファイルは マッピング体系の要件で説明されている規則に従う必要があります。

マッピング体系の要件

以下の節では、それぞれの XML コレクションのマッピング体系の要件について解説します。

SQL マッピングを使用する際の要件

このマッピング体系では、SQL_stmt 要素を DAD <Xcollection> 要素に指定しなければなりません。 SQL_stmt には、複数のリレーショナル表を照会述部 に結び合わせる単一の SQL ステートメントが含まれていなければなりません。 さらに、以下の文節が必要です。

SQL_stmt には前述の要件がありますが、 述部の式が表内に列を使用する限り WHERE 文節に任意の述部を指定できるので、たいへん強力です。

RDB_node マッピングを使用する際の要件

このマッピング方式を使用するとき、 要素 SQL_stmt を DAD ファイルの <Xcollection> 要素内で使用しないでください。 その代わりに、RDB_node 要素を element_node の各トップ・ノードに対して、 および各 attribute_node と text_node に対して使用します。

RDB_node マッピング・アプローチでは、SQL ステートメントを与える必要はありません。 しかし、RDB_node 要素に複合的な照会条件を入れることはさらに難しくなります。 たとえば、共用体、式、または演算を使用しても、 SQL-to-XML アプローチほど強力な機能は得られません。

分解表サイズの要件

分解では RDB_node マッピングを使って、 表行への要素と属性値の抽出によって XML 文書を DB2 表に分解する方法を指定します。 各 XML 文書の値は、1 つ以上の DB2 表に保管されます。 どの表にも、各文書から分解した最大 1024 行までを入れることができます。

たとえば、XML 文書を 5 つの表に分解する場合、 その 5 つの表のおのおのに、該当する文書中の 1024 行までを入れることができます。 複数の文書用の行をもつ表でも、各文書につき 1024 行までを入れることができます。 20 個の文書をもつ表の場合、各文書につき 1024 行ずつ、20,480 行を入れることができます。

複数回出現要素 (XML 構造内で複数回出現する可能性のある ロケーション・パスをもつ要素) を使うと、行数が影響を受けます。 たとえば、20 回出現する要素 <Part> の入った文書は、 表内で 20 行として分解されることがあります。 複数回出現要素を使用する場合、このような表サイズの制限事項に配慮してください。


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