DAD スクリプト構造

DAD スクリプトは XML 形式の文書で、XML 文書構造を DB2® データベース内の表に関連付けます。これは XML ファイルを DTD と関連付けて、XML ファイルまたは属性のロケーション、コンテンツ、または値を定義するために使用され、 DB2 XML エクステンダーが XML データの保管 / 検索場所を決定できるようにするためのものです。

生成したスクリプトの構造は、以下の 4 つのセクションに分けることができます。
  1. 宣言
  2. dtdid
  3. 検証
  4. Xcollection

宣言

宣言セクションの機能:

以下のコード・サンプルについて説明します。

<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "/home/dxxinst/dtd/dad.dtd">

dtdid

dtdid は、XML 文書を検査する DTD を指し、XML コレクション・テーブルと XML 文書間のマッピングのガイドとなります。 dtdid は、XML 文書の doctype に指定された SYSTEM ID と同じである必要があります。 dtdid は必ず指定しなければなりません。

たとえば、以下の行について説明します。

<dtdid>/home/dtd/neworder.dtd</dtdid>

この行は、DAD ファイルを XML ターゲット文書 DTD と関連付けます。

検証

DAD の DTD により XML 文書を検証するかどうかを指示します。現行バージョンにおいては、生成した DAD スクリプトの検証エレメントには、常に NO が指定されます。

たとえば、以下の行について説明します。
<validation>NO</validation>
この行は、XML ターゲット文書を、指定された DTD ファイルで検証するかどうかを指示します。

Xcollection

Xcollection は、XML 文書とリレーショナル表の XML コレクション間の RDB_node マッピングを定義します。これは基本的に、XML エレメントの内容や XML 属性の値の場所を定義して、 DB2 XML エクステンダーが XML データの保管 / 検索場所を決定できるようにするためのものです。

Xcollection には以下の子エレメントがあります。

  1. prolog
  2. doctype
  3. root_node

prolog

<prolog> は、XML prolog のテキストを定義します。コレクション全体のすべての XML 文書について、同じ prolog が指定されます。 prolog の値は固定されています。

たとえば、次の行について説明します。

<prolog>?xml version="1.0"?</prolog>

この行は、XML ターゲット文書の XML 宣言です。

doctype

<doctype> は、 XML 文書タイプ定義のテキストを定義します。コレクション全体のすべての XML 文書について、同じ doctype が指定されます。 doctype に指定された SYSTEM ID は、dtdid で指定されたものと同じである必要があります。

たとえば、次の行は、XML ターゲット文書の doctype 宣言です。

<doctype>!DOCTYPE Order SYSTEM "/home/dtd/neworder.dtd"</doctype>

Order は XML ターゲット文書のルート・エレメントであり、 neworder.dtd は XML ターゲット文書に対応する DTD です。

root_node

仮想ルート・ノードを定義します。root_node (最上位の element_node) 以下の単一の element_node は、 実際の XML ターゲット文書のルート・ノードとなります。この最上位 element_node には、以下のものが含まれます。

  1. RDB_node (結合条件により table_nodes を指定して、コレクションを指定する)
  2. ゼロ個以上の子 element_nodes
  3. ゼロ個以上の子 attribute_nodes

最上位 element_node の RDB_node

XML 文書のルート・エレメントを表す最上位の element_node には、RDB_node が必要です。最上位 element_node の RDB_node では、以下を指定する必要があります。

  • XML 文書に関連したすべての表
  • (オプション) 文書の順序を保持するための各表ごとの orderBy 属性 
  • 表をまとめるための基本キーと外部キーの関係を指定する結合条件

現行バージョンにおいては、生成される DAD スクリプトの、表エレメントにおける orderBy 属性はサポートされません。 orderBy 属性を使用することにより、複数回のオカレンスがあるエレメントや属性を含む文書の順序を、 オリジナルの構造に保持することができます。

以下のコード・サンプルを検討してみてください。

<RDB_node>
     <table name="order_tab"key="order_key1 order_key2 order_key3"/>
     <table name="part_tab" key="part_key1 part_key2"/>
     <table name="ship_tab" key="date"/>
     <condition>
										order_tab.order_key1=part_tab.o_key1 AND
										order_tab.order_key2=part_tab.o_key2 AND
                      		order_tab.order_key3=part_tab.o_key3 AND
                      		part_tab.order._key1=ship_tab.p_key1 AND
                      		part_tab.part_key2=ship_tab.p_key2
     </condition>
 </RDB_node>

このサンプルで、

  • <table name="order_tab" key="order_key1 order_key2 order_key3"/>
    <table name="part_tab" key="part_key1 part_key2"/>
    <table name="ship_tab" key="date"/>
    は、XML 文書に関連付けられた表です。
  • key="order_key1 order_key2 order_key3" is a composite primary key,
  • key="date" is a primary key, and
  • <condition>order_tab.order_key1=part_tab.o_key1 AND
               order_tab.order_key2=part_tab.o_key2 AND
               order_tab.order_key3=part_tab.o_key3 AND
               part_tab.order._key1=part_tab.p_key1 AND
               part_tab.part_key2=ship_tab.p_key1 AND
     </condition>
    は、基本キーと外部キーの関係を指定する結合条件ステートメントです。

element_node

element_node は、XML エレメントを表します。これは、コレクションに指定された DTD において定義されなければなりません。 element_node (最上位の element_node を除く) には、以下のものが含まれます。

  1. 現在の XML 文書の子エレメントを表すゼロ個以上の子 element_nodes 
  2. 現在の XML エレメントの属性を表すゼロ個以上の attribute_nodes
  3. 現在の XML エレメントの CDATA テキストを表すゼロまたは 1 つの text_node

RDB_node のマッピング方式では、データは各 element_node の attribute_node および text_node 内に置かれます。したがって、それぞれの attribute_node および text_node ごとに RDB_node が定義されて、 データを取得するための表および列を指定します。

attribute_node

attribute_node は、XML 属性を表します。これは、XML 属性とリレーショナル表の列データ間のマッピングを定義するノードです。 attribute_node には、表と列がともに定義された RDB_node が含まれなくてはなりません。

以下のコード・サンプルを検討してみてください。

<attribute_node name="Key1">
     <RDB_node>
         <table name="order_tab"/>
         <column name="order_key1" type="integer"/>
     </RDB_node>
 </attribute_node>

このサンプルで、

  • name="Key1" は、属性名を指定し、
  • <RDB_node>
             <table name="order_tab"/>
             <column name="order_key1" type="integer"/>
        </RDB_node>
     は、属性と列データ間のマッピングを定義し、
  • <table name="order_tab"/> は、 データが置かれるリレーショナル表の名前を指定し、
  • <column name="order_key1" type="integer"/> は、 データが置かれる列の名前とタイプを指定します。

text_node

text_node は、XML エレメントのテキスト内容を表します。これは、XML エレメントの内容とリレーショナル表の列データ間のマッピングを定義するノードです。 text_node には、表と列がともに定義された RDB_node が含まれなくてはなりません。

以下のコード・サンプルを検討してみてください。

<text_node>
		<RDB_node>
         <table name="order_tab"/>
         <column name="customer_name" type="varchar(16)"/>
     </RDB_node>
 </text_node>

このサンプルで、

  • <RDB_node>
             <table name="order_tab"/>
             <column name="customer_name" type="varchar(16)"/>
         </RDB_node>
    は、エレメントの内容と列データ間の実際のマッピングを定義し、
  • <table name="order_tab"/> は、 データが置かれるリレーショナル表の名前を指定し、
  • <column name="customer_name" type="varchar(16)"/> は、データが置かれる列の名前とタイプを指定します。
関連概念
DAD スクリプト
関連タスク
DAD ファイルの生成
DAD ファイルの編集
DB2 XML エクステンダー を用いた DAD ファイルの実行
ご利用条件 | フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.