管理およびプログラミングの手引き
XML コレクションを使用する時には、DAD ファイルを作成する必要があります。
DAD ファイルは、XML データと複数のリレーショナル表との関連を定義します。
XML エクステンダーは DAD を使用して以下のことを行います。
- リレーショナル・データから XML 文書を構成する
- XML 文書をリレーショナル・データに分解する
XML 表と DB2 表の間でデータをマップする方式には SQL マッピングと RDB_node マッピングがあり、
このどちらかを使用できます。
- SQL マッピング
- SQL ステートメント要素を使用して、
XML データを入れる表と列の SQL 照会を指定します。
SQL マッピングは、XML 文書を合成するためにのみ使用できます。
- RDB_node マッピング
- XML エクステンダー独特の要素であるリレーショナル・データベース・ノードまたは RDB_node を使用します。
この要素は XML データ用の表、列、条件、および順序を指定します。
RDB_node マッピングでは、
SQL ステートメントによるマッピングよりも複雑なマッピングが可能です。
RDB_node マッピングは、XML 文書の合成と分解の両方を行うために使用できます。
これら 2 つのマッピング方式は、
どちらも XPath データ・モデル を使用しています (DAD ファイルを参照)。
- DB2 表と XML 文書の間の関連をマップします。
このステップには、XML 文書の階層をマップして、
文書内のデータが DB2 表にマップされる方法を指定することが含まれます。
- XML 文書の妥当性検査を行う場合、
合成または分解している XML 文書用の DTD を DTD 参照表 db2xml.DTD_REF に挿入します。
XML 文書を合成し、SQL を使用したいときには、SQL マッピングを使用してください。
以下のステップに従って、XML コレクションの SQL マッピングを使用して DAD ファイルを作成します。
SQL マッピングを使用して合成用の DAD ファイルを作成するには、
以下のようにします。
XML 文書内のデータを取り出す表および列を定義するために XML 文書を合成し、
SQL ステートメントを使用したいときには、SQL マッピングを使用してください。
- 管理ウィザードをセットアップして開始します。
詳しくは 管理ウィザードの開始を参照してください。
- 「ランチパッド (LaunchPad)」ウィンドウから
「DAD ファイルを処理する (Work with DAD files)」をクリックします。
「DAD の指定 (Specify a DAD)」ウィンドウが表示されます。
- 既存の DAD ファイルを編集するか、または新規の DAD ファイルを作成するかを指定します。
新規の DAD ファイルを作成するには、以下のようにします。
- 「ファイル名 (File name)」フィールドをブランクのままにしておきます。
- 「タイプ (Type)」メニューから、
「XML コレクションの SQL マッピング (XML collection SQL mapping)」を選択します。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
既存の DAD ファイルを編集するには、以下のようにします。
- DAD ファイル名を「ファイル名 (File name)」フィールドに入力するか、
または「...」をクリックして既存の DAD ファイルをブラウズします。
- 指定した DAD ファイルがウィザードに認識されるかどうかを確認します。
- 指定した DAD ファイルをウィザードが認識した場合は
「次へ (Next)」が選択可能になり、
「タイプ (Type)」フィールドに、
XML コレクションの SQL マッピング (XML collection SQL mapping) が表示されます。
- 指定した DAD ファイルをウィザードが認識しない場合は、
「次へ (Next)」が選択不可になります。
DAD ファイル名を再入力するか、
「...」をクリックして既存の DAD ファイルを再びブラウズします。
「次へ (Next)」が選択可能になるまで入力フィールドの値を訂正してください。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
- 「妥当性検査の選択 (Select Validation)」ウィンドウで、
DTD を使用して XML を妥当性検査するかどうかを選択します。
- 「次へ (Next)」をクリックして、
「テキストの指定 (Specify Text)」ウィンドウを開きます。
- 「プロローグ (Prolog)」フィールドにプロローグ名を入力し、
合成される XML 文書のプロローグを指定します。
<?xml version="1.0"?>
既存の DAD を編集している場合は、
「プロローグ (Prolog)」フィールドにプロローグが自動的に表示されます。
- 「テキストの指定 (Specify Text)」ウィンドウの
「文書タイプ (Doctype)」フィールドに、
XML 文書のタイプを入力します。
たとえば次のようにします。
! DOCTYPE DAD SYSTEM "c:\dxx\samples\dtd\getstart.dtd"
既存の DAD を編集している場合は、
「文書タイプ (Doctype)」フィールドに文書タイプが自動的に表示されます。
- 「次へ (Next)」をクリックして、
「SQL ステートメントの指定 (Specify SQL Statement)」ウィンドウを開きます。
- 「SQL ステートメント (SQL statement)」フィールドに有効な SQL SELECT ステートメントを入力します。
たとえば次のようにします。
SELECT o.order_key, customer_name, customer_email, p.part_key, color, quantity,
price, tax, ship_id, date, mode from order_tab o, part_tab p,
table (select substr(char(timestamp(generate_unique())),16)
as ship_id, date, mode, part_key from ship_tab) s
WHERE o.order_key = 1 and
p.price > 20000 and
p.order_key = o.order_key and
s.part_key = p.part_key
ORDER BY order_key, part_key, ship_id
既存の DAD を編集している場合は、
「SQL ステートメント (SQL statement)」フィールドに SQL ステートメントが自動的に表示されます。
- 「SQL のテスト (Test SQL)」をクリックして、
SQL ステートメントの妥当性をテストします。
- SQL ステートメントが有効であれば、結果のサンプルが
「結果のサンプル (Sample results)」フィールドに表示されます。
- SQL ステートメントが無効であれば、エラー・メッセージが
「結果のサンプル (Sample results)」フィールドに表示されます。
エラー・メッセージは SQL SELECT ステートメントを訂正して再試行するよう指示します。
- 「次へ (Next)」をクリックして、
「SQL マッピング (SQL Mapping)」ウィンドウを開きます。
- 「SQL マッピング (SQL Mapping)」ウィンドウの左側のフィールドで、
マップ元の要素または属性ノードをクリックしてこれを選択します。
XML 文書内の要素および属性を、DB2 データに対応する要素および属性のノードにマップします。
これらのノードは、XML データから DB2 データへのパスを提供します。
- 変更後の DAD の出力ファイル名を、「DAD の指定 (Specify a DAD)」ウィンドウの
「ファイル名 (File name)」フィールドに入力します。
- 「終了 (Finish)」をクリックして、
「ランチパッド (LaunchPad)」ウィンドウに戻ります。
XML 文書を合成し、SQL を使用したいときには、SQL マッピング表記を使用します。
DAD ファイルは、任意のテキスト・エディターで作成できる XML ファイルです。
以下のステップは、文書アクセス定義ファイルの付録サンプルの一部です。
さらに包括的な情報やコンテキストについては、これらの例を参照してください。
- テキスト・エディターを開きます。
- 次のようにして DAD ヘッダーを作成します。
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "path\dad.dtd"> --> the path and file name of the DTD
for the DAD
- <DAD></DAD> タグを挿入します。
- <DAD> タグの後に、DAD ファイルを XML 文書 DTD に関連付ける DTD ID を指定します。
<dtdid>path\dtd_name.dtd> --> the path and file name
of the DTD for your application
- 妥当性検査 (つまり XML 文書が有効かどうかを DTD を使って検査すること) を行うかどうかを指定します。
たとえば次のようにします。
<validation>NO</validation> --> specify YES or NO
- <Xcollection> 要素を使用して、
アクセスおよび保管の方式を XML コレクションと定義します。
アクセスおよび保管の方式は、
XML 文書の内容が DB2 表内に保管されているデータから派生することを定義します。
<Xcollection>
</Xcollection>
- DB2 表からの照会を行う SQL ステートメント、
または DB2 表にデータを挿入する SQL ステートメントを 1 つまたは複数指定します。
詳しくは、マッピング体系の要件を参照してください。
たとえば、以下の例のように、1 つの SQL 照会を指定します。
<SQL_stmt>
SELECT o.order_key, customer_name, customer_email, p.part_key, color, quantity,
price, tax, ship_id, date, mode from order_tab o, part_tab p,
table (select substr(char(timestamp(generate_unique())),16)
as ship_id, date, mode, part_key from ship_tab) s
WHERE o.order_key = 1 and
p.price > 20000 and
p.order_key = o.order_key and
s.part_key = p.part_key
ORDER BY order_key, part_key, ship_id
</SQL_stmt>
- 以下のプロローグ情報を追加します。
<prolog>?xml version="1.0"?</prolog>
上記と全く同じテキストが必要です。
- <doctype></doctype> タグを追加します。
たとえば次のようにします。
<doctype>! DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
- <root_node></root_node> タグを使用してルート・ノードを定義します。 root_node内で、XML 文書を形成する要素および属性を指定します。
- XML 文書内の要素および属性を、DB2 データに対応する要素および属性のノードにマップします。
これらのノードは、XML データから DB2 データへのパスを提供します。
- DB2 表内の列にマップする XML 文書内のそれぞれの要素ごとに <element_node> を 1 つ定義します。
<element_node name="name"></element_node>
element_node には、以下のノードを入れることができます。
- attribute_node
- child element_node
- text_node
- XML 文書内のそれぞれの属性ごとに、
DB2 表の 1 つの列にマップする <attribute_node> を 1 つ定義します。
DTD ファイルの例については、
このセクションの最初に SQL マッピングを示しています。
また、DAD ファイルの構文を詳細に説明した 付録 A, DAD ファイル用の DTDでは、
DAD ファイル用の DTD を示しています。
たとえば、要素 <Order> の属性キーが必要です。
キーの値は列 PART_KEY に保管されています。
DAD ファイル: DAD ファイル内で、
このキーの属性ノードを作成して、値 1 が保管される表の場所を指定します。
<attribute_node name="key">
<column name="part_key"/>
</attribute_node>
合成された XML 文書: キーの値は PART_KEY 列から取られています。
<Order key="1">
- DB2 表から派生している内容を持つそれぞれの要素または属性ごとに <text_node> を作成します。
テキスト・ノードには、内容が提供されている列を指定する <column> 要素が含まれています。
たとえば、TAX という列から取られている値を持つ XML 要素 <Tax> を持っているとしましょう。
DAD 要素:
<element_node name="Tax">
<text_node>
<column name="tax"/>
</text_node>
</element_node>
列名は、DAD ファイルの最初にある SQL ステートメント内になければなりません。
合成された XML 文書:
<Tax>0.02</Tax>
0.02 という値は、列 TAX から派生されます。
- 終了のための </root_node> タグが最後の </element_node> タグの後にあることを確認します。
- 終了のための </Xcollection> タグが </root_node> タグの後にあることを確認します。
- 終了のための </DAD> タグが </Xcollection> タグの後にあることを確認します。
XML 類似構造を使って XML 文書を合成するには、RDB_node マッピングを使用します。
この方式では、<RDB_node> を使用して、
DB2 表、列、および条件に要素または属性ノードを指定します。 <RDB_node> は、以下の要素を使用します。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義します。
- <condition>: 任意選択で、列上に条件を指定します。
<RDB_node> 内に使われる子要素はノードのコンテキストに依存し、以下の規則に従います。
ノード・タイプ:
| RDB 子要素が使用されます。
|
| 表
| 列
| 条件1
|
---|
ルート要素
| Y
| N
| Y
|
属性
| Y
| Y
| 任意選択
|
テキスト
| Y
| Y
| 任意選択
|
(1) 複数の表を使用する場合に必要
|
RDB_node マッピングを使用して合成用の DAD を作成するには、以下のようにします。
- 管理ウィザードをセットアップして開始します。
詳しくは 管理ウィザードの開始を参照してください。
- 「ランチパッド (LaunchPad)」ウィンドウから
「DAD ファイルを処理する (Work with DAD files)」をクリックします。
「DAD の指定 (Specify a DAD)」ウィンドウが表示されます。
- 既存の DAD ファイルを編集するか、または新規の DAD ファイルを作成するかを指定します。
既存の DAD を編集するには、以下のようにします。
- DAD ファイル名を「ファイル名 (File name)」フィールドに入力するか、
または「...」をクリックして既存の DAD ファイルをブラウズします。
- 指定した DAD ファイルがウィザードに認識されるかどうかを確認します。
- 指定した DAD ファイルをウィザードが認識した場合は、
「次へ (Next)」が選択可能になり、
「タイプ (Type)」フィールドに、
XML コレクションの RDB ノード・マッピング (XML collection RDB node mapping) が表示されます。
- 指定した DAD ファイルをウィザードが認識しない場合は、
「次へ (Next)」が選択不可になります。
DAD ファイル名を「ファイル名 (File name)」フィールドに再び入力するか、
または「...」をクリックして既存の DAD ファイルを再びブラウズします。
「次へ (Next)」が選択可能になるまで、
これらのステップを繰り返します。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
新規の DAD を作成するには、以下のようにします。
- 「ファイル名 (File name)」フィールドをブランクのままにしておきます。
- 「タイプ (Type)」メニューから、
「XML コレクションの RDB_node マッピング (XML collection RDB node mapping)」を選択します。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
- 「妥当性検査の選択 (Select Validation)」ウィンドウで、
DTD を使用して XML を妥当性検査するかどうかを選択します。
- 「次へ (Next)」をクリックして、
「テキストの指定 (Specify Text)」ウィンドウを開きます。
- 「テキストの指定 (Specify Text)」ウィンドウの
「プロローグ (Prolog)」フィールドにプロローグ名を入力します。
<?xml version="1.0"?>
既存の DAD を編集している場合は、
「プロローグ (Prolog)」フィールドにプロローグが自動的に表示されます。
- 「テキストの指定 (Specify Text)」ウィンドウの
「文書タイプ (Doctype)」フィールドに、
XML 文書のタイプを入力します。
既存の DAD を編集している場合は、
「文書タイプ (Doctype)」フィールドに文書タイプが自動的に表示されます。
- 「次へ (Next)」をクリックして、
「RDB マッピング (RDB Mapping)」ウィンドウを開きます。
- 「RDB マッピング (RDB Mapping)」ウィンドウの左側のフィールドで、
マップ元の要素または属性ノードをクリックしてこれを選択します。
XML 文書内の要素および属性を、DB2 データに対応する要素および属性のノードにマップします。
これらのノードは、XML データから DB2 データへのパスを提供します。
- ルート・ノードを追加するには、以下のようにします。
- 「ルート (Root)」アイコンを選択します。
- 「新規要素 (New Element)」をクリックして、
新規ノードを定義します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「要素 (Element)」として指定します。
- 「ノード名 (Node name)」フィールドに最上位ノードの名前を入力します。
- 「追加 (Add)」をクリックして、新規ノードを作成します。
これで、ルート・ノードまたは要素 (マップ内のその他すべての要素および属性ノードの親である) の作成が完了しました。ルート・ノードには、表の子要素および結合条件があります。
- コレクションの部分であるそれぞれの表ごとに表ノードを追加します。
- ルート・ノード名を強調表示して、
「新規要素 (New Element)」を選択します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「表 (Table)」として指定します。
- 「表名 (Table name)」から表名を選択します。
表はすでに存在していなければなりません。
- 「追加 (Add)」をクリックして、表ノードを追加します。
- 各表ごとに、以下のステップを繰り返します。
- 表ノード用の結合条件を追加します。
- ルート・ノード名を強調表示して、
「新規要素 (New Element)」を選択します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「条件 (Condition)」として指定します。
- 「条件 (Condition)」フィールドで、
以下の構文を使って結合条件を入力します。
table_name.table_column = table_name.table_column AND
table_name.table_column = table_name.table_column ...
- 「追加 (Add)」をクリックして、条件を追加します。
- 要素または属性ノードを追加するには、以下のようにします。
- 左側のフィールドで親ノードをクリックし、子要素または子属性を追加します。
- 「新規要素 (New Element)」をクリックします。 親ノードを選択していない間は、
「新規要素 (New Element)」が選択可能になりません。
- 「詳細 (Details)」ボックスの
「ノード・タイプ (Node type)」メニューから、
ノード・タイプを選択します。
「ノード・タイプ (Node type)」メニューには、
マップ内のその場所で有効なノード・タイプのみが示されます。
「要素 (Element)」または
「属性 (Attribute)」。
- 「ノード名 (Node name)」フィールドにノード名を指定します。
- 「追加 (Add)」をクリックして、
新規ノードを追加します。
- 要素または属性ノードの内容をリレーショナル表にマップするには、
以下のようにします。
- テキスト・ノードを指定します。
- 親ノードをクリックします。
- 「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「テキスト (Text)」を選択します。
- 「追加 (Add)」を選択して、ノードを追加します。
- 表ノードを追加します。
- 作成したばかりのテキスト・ノードを選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「表 (Table)」を選択し、表名に要素を指定します。
- 「追加 (Add)」をクリックして、ノードを追加します。
- 列ノードを追加します。
- テキスト・ノードを再び選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「列 (Column)」を選択し、列名に要素を指定します。
- 「追加 (Add)」をクリックして、ノードを追加します。
制限: 新規の列は、管理ウィザードを使って作成することができません。
ノード・タイプとして Column (列) を指定した場合には、
ご使用の DB2 データベースにすでに存在する列のみを選択できます。
- 任意選択で、列の条件を追加します。
- テキスト・ノードを再び選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「条件 (Condition)」および以下の構文を持つ条件を選択します。
operator LIKE|<|>|= value
- 「追加 (Add)」をクリックして、ノードを追加します。
- RDB マップの編集を続けるか、
または「次へ (Next)」をクリックして
「DAD の指定 (Specify a DAD)」ウィンドウを開きます。
- ノードを除去するには、以下のようにします。
- 左側のフィールドで、ノードをクリックします。
- 「除去 (Remove)」をクリックします。
- RDB_node マップの編集を続けるか、
または「次へ (Next)」をクリックして
「DAD の指定 (Specify a DAD)」ウィンドウを開きます。
- 変更後の DAD の出力ファイル名を、「DAD の指定 (Specify a DAD)」ウィンドウの
「ファイル名 (File name)」フィールドに入力します。
- 「終了 (Finish)」をクリックして、
ノードを除去し、「ランチパッド (LaunchPad)」ウィンドウに戻ります。
DAD ファイルは、任意のテキスト・エディターで作成できる XML ファイルです。
以下のステップは、文書アクセス定義ファイルの付録サンプルの一部です。
さらに包括的な情報やコンテキストについては、これらの例を参照してください。
- テキスト・エディターを開きます。
- 次のようにして DAD ヘッダーを作成します。
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "path\dad.dtd"> --> the path and file name of the DTD
for the DAD
- <DAD></DAD> タグを挿入します。
- <DAD> タグの後に、DAD ファイルを XML 文書 DTD に関連付ける DTD ID を指定します。
<dtdid>path\dtd_name.dtd> --> the path and file name of the DTD
for your application
- 妥当性検査 (つまり XML 文書が有効かどうかを DTD を使って検査すること) を行うかどうかを指定します。
たとえば次のようにします。
<validation>NO</validation> --> specify YES or NO
- <Xcollection> 要素を使用して、
アクセスおよび保管の方式を XML コレクションと定義します。
アクセスおよび保管の方式は、XML データが DB2 表のコレクション内に保管されることを定義します。
<Xcollection>
</Xcollection>
- 以下のプロローグ情報を追加します。
<prolog>?xml version="1.0"?</prolog>
上記と全く同じテキストが必要です。
- <doctype></doctype> タグを追加します。
たとえば次のようにします。
<doctype>! DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
- <root_node> を使用してルート・ノードを定義します。root_node内で、XML 文書を形成する要素および属性を指定します。
- XML 文書内の要素および属性を、DB2 データに対応する要素および属性のノードにマップします。 これらのノードは、XML データから DB2 データへのパスを提供します。
- ルートにルートの element_node を定義します。
この element_node には、以下のものが含まれています。
- コレクションを指定するための結合条件を持つ table_nodes を指定する RDB_node
- 子要素
- 属性
表ノードおよび条件を指定するには、以下のようにします。
- RDB_node 要素を作成します。たとえば、次のようにします。
<RDB_node>
</RDB_node>
- XML 文書内に組み込まれるデータを含むそれぞれの表ごとに <table_node> を定義します。
たとえば、列データが文書内にある 3 つの表 (ORDER_TAB、PART_TAB、
および SHIP_TAB) を持っている場合には、それぞれの表ごとに表ノードを作成します。
たとえば次のようにします。
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB"></RDB_node>
- このコレクションを使用可能にする計画がある場合は、
任意選択で、表それぞれのキー列を指定してください。
通常、キー属性は合成のためには必要とされません。
しかし、コレクションを使用可能にする場合は、
使用される DAD ファイルが合成と分解の両方をサポートする必要があります。
たとえば次のようにします。
<RDB_node>
<table name="ORDER_TAB" key="order_key">
<table name="PART_TAB" key="part_key">
<table name="SHIP_TAB" key="date mode">
</RDB_node>
- コレクション内に表の結合条件を定義します。
構文は、以下のとおりです。
expression = expression AND
expression = expression
たとえば次のようにします。
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB">
<condition>
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
</RDB_node>
- DB2 表内の列にマップする XML 文書内のそれぞれの要素ごとに <element_node> タグを定義します。
たとえば次のようにします。
<element_node name="name">
</element_node>
要素ノードは、以下のタイプの要素のいずれかを持つことができます。
- <text_node>: 要素が DB2 表に内容を持つことを指定します。
要素には子要素がありません。
- <attribute_node>: 属性を指定します。
属性ノードは、次のステップで定義されます。
text_node には、内容を DB2 表および列名にマップするための <RDB_node> が含まれています。
RDB_nodes は、内容を DB2 表にマップする最下位レベルの要素に使用されます。
RDB_node には次のような子要素があります。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義し、
タイプ属性を持つ列タイプを指定します。
- <condition>: 任意選択で、列上に条件を指定します。
たとえば、TAX という列にマップする XML 要素 <Tax> を以下に示します。
XML 文書:
<Tax>0.02</Tax>
この場合、TAX 列の値は 0.02 になります。
<element_node name="Tax">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="tax"/>
</RDB_node>
</text_node>
</element_node>
この例では、<RDB_node> が、<Tax> 要素の値がテキスト値であることと、
データの保管場所が PART_TAB 表の TAX 列であることを指定します。
DAD ファイルの例については、
文書アクセス定義ファイルで RDB_node マッピングを示しています。
また、DAD ファイルの構文を詳細に説明した 付録 A, DAD ファイル用の DTDでは、
DAD ファイル用の DTD を示しています。
- このコレクションを使用可能にする計画がある場合には、
任意選択で、各 <column> 要素にタイプ属性を追加してください。
通常、タイプ属性は合成のためには必要とされません。
しかし、コレクションを使用可能にする場合は、
使用される DAD ファイルが合成と分解の両方をサポートする必要があります。
たとえば次のようにします。
<column name="tax" type="real"/>
- XML 文書内のそれぞれの属性ごとに、
DB2 表の 1 つの列にマップする <attribute_node> を 1 つ定義します。
たとえば次のようにします。
<attribute_node name="key">
</attribute_node>
attribute_node には、
属性値を DB2 表および列にマップするための <RDB_node> が含まれています。
<RDB_node> には次のような子要素があります。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義します。
- <condition>: 任意選択で、列上に条件を指定します。
たとえば、要素 <Order> に属性 key を持ちたいとします。ここでは、キーの値が列 PART_KEY にすでに保管されていなければなりません。
DAD ファイルで、このキーの <attribute_node> を作成して、値が保管される表の場所を指定します。
DAD ファイル
<attribute_node name="key">
<RDB_node>
<table name="part_tab">
<column name="part_key"/>
<RDB_node>
</attribute_node>
合成された XML 文書:
<Order key="1">
- 終了のための </root_node> タグが最後の </element_node> タグの後にあることを確認します。
- 終了のための </Xcollection> タグが </root_node> タグの後にあることを確認します。
- 終了のための </DAD> タグが </Xcollection> タグの後にあることを確認します。
XML 文書を分解するには、RDB_node マッピングを使用します。
この方式では、<RDB_node> を使用して、
DB2 表、列、および条件に要素または属性ノードを指定します。
<RDB_node> は、以下の要素を使用します。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義します。
- <condition>: 任意選択で、列上に条件を指定します。
<RDB_node> 内に使われる子要素はノードのコンテキストに依存し、以下の規則に従います。
ノード・タイプ:
| RDB 子要素が使用されます。
|
| 表
| 列
| 条件1
|
---|
ルート要素
| Y
| N
| Y
|
属性
| Y
| Y
| 任意選択
|
テキスト
| Y
| Y
| 任意選択
|
(1) 複数の表を使用する場合に必要
|
分解用の DAD を作成するには、以下のようにします。
- 管理ウィザードをセットアップして開始します。
詳しくは 管理ウィザードの開始を参照してください。
- 「ランチパッド (LaunchPad)」ウィンドウから
「DAD ファイルを処理する (Work with DAD files)」をクリックします。
「DAD の指定 (Specify a DAD)」ウィンドウが表示されます。
- 既存の DAD ファイルを編集するか、または新規の DAD ファイルを作成するかを指定します。
既存の DAD を編集するには、以下のようにします。
- DAD ファイル名を「ファイル名 (File name)」フィールドに入力するか、
または「...」をクリックして既存の DAD ファイルをブラウズします。
- 指定した DAD ファイルがウィザードに認識されるかどうかを確認します。
- 指定した DAD ファイルをウィザードが認識した場合は、
「次へ (Next)」が選択可能になり、
「タイプ (Type)」フィールドに、
XML コレクションの RDB ノード・マッピング (XML collection RDB node mapping) が表示されます。
- 指定した DAD ファイルをウィザードが認識しない場合は、
「次へ (Next)」が選択不可になります。
DAD ファイル名を「ファイル名 (File name)」フィールドに再び入力するか、
または「...」をクリックして既存の DAD ファイルを再びブラウズします。
「次へ (Next)」が選択可能になるまで、
これらのステップを繰り返します。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
新規の DAD を作成するには、以下のようにします。
- 「ファイル名 (File name)」フィールドをブランクのままにしておきます。
- 「タイプ (Type)」メニューから、
「XML コレクションの RDB_node マッピング (XML collection RDB node mapping)」を選択します。
- 「次へ (Next)」をクリックして、
「妥当性検査の選択 (Select Validation)」ウィンドウを開きます。
- 「妥当性検査の選択 (Select Validation)」ウィンドウで、
DTD を使用して XML を妥当性検査するかどうかを選択します。
- 「次へ (Next)」をクリックして、
「テキストの指定 (Specify Text)」ウィンドウを開きます。
- XML 文書のみを分解する場合には、
「プロローグ (Prolog)」フィールドを無視します。
合成用と分解用の両方の DAD ファイルを使用している場合には、
「テキストの指定 (Specify Text)」ウィンドウの
「プロローグ (Prolog)」フィールドにプロローグ名を入力します。
XML 文書を DB2 データに分解している場合には、プロローグは必要ありません。
<?xml version="1.0"?>
既存の DAD を編集している場合は、
「プロローグ (Prolog)」フィールドにプロローグが自動的に表示されます。
- XML 文書のみを分解する場合には、
「文書タイプ (Doctype)」フィールドを無視します。
合成用と分解用の両方の DAD ファイルを使用している場合には、
「文書タイプ (Doctype)」フィールドに XML 文書のタイプを入力します。
既存の DAD を編集している場合は、
「文書タイプ (Doctype)」フィールドに文書タイプが自動的に表示されます。
- 「次へ (Next)」をクリックして、
「RDB マッピング (RDB Mapping)」ウィンドウを開きます。
- 「RDB マッピング (RDB Mapping)」ウィンドウの左側のフィールドで、
マップ元の要素または属性ノードをクリックしてこれを選択します。
XML 文書内の要素および属性を、DB2 データに対応する要素および属性のノードにマップします。 これらのノードは、XML データから DB2 データへのパスを提供します。
- ルート・ノードを追加するには、以下のようにします。
- 「ルート (Root)」アイコンを選択します。
- 「新規要素 (New Element)」をクリックして、
新規ノードを定義します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「要素 (Element)」として指定します。
- 「ノード名 (Node name)」フィールドに最上位ノードの名前を入力します。
- 「追加 (Add)」をクリックして、新規ノードを作成します。
これで、ルート・ノードまたは要素 (マップ内のその他すべての要素および属性ノードの親である) の作成が完了しました。
ルート・ノードには、表の子要素および結合条件があります。
- コレクションの部分であるそれぞれの表ごとに表ノードを追加します。
- ルート・ノード名を強調表示して、
「新規要素 (New Element)」を選択します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「表 (Table)」として指定します。
- 「表名 (Table name)」から表名を選択します。
表はすでに存在していなければなりません。
- 「表のキー (Table key)」フィールド内に表のキー列を指定します。
- 「追加 (Add)」をクリックして、表ノードを追加します。
- 各表ごとに、以下のステップを繰り返します。
- 表ノード用の結合条件を追加します。
- ルート・ノード名を強調表示して、
「新規要素 (New Element)」を選択します。
- 「詳細 (Details)」ボックスで、
「ノード・タイプ (Node type)」を
「条件 (Condition)」として指定します。
- 「条件 (Condition)」フィールドで、
以下の構文を使って結合条件を入力します。
table_name.table_column = table_name.table_column AND
table_name.table_column = table_name.table_column ...
- 「追加 (Add)」をクリックして、条件を追加します。
このノードに子要素および子属性を追加することができます。
- 要素または属性ノードを追加するには、以下のようにします。
- 左側のフィールドで親ノードをクリックし、子要素または子属性を追加します。
親ノードを選択していない間は、
「新規 (New)」が選択可能になりません。
- 「新規要素 (New Element)」をクリックします。
- 「詳細 (Details)」ボックスの
「ノード・タイプ (Node type)」メニューから、
ノード・タイプを選択します。
「ノード・タイプ (Node type)」メニューには、
マップ内のその場所で有効なノード・タイプのみが示されます。
「要素 (Element)」または
「属性 (Attribute)」。
- 「ノード名 (Node name)」フィールドにノード名を指定します。
- 「追加 (Add)」をクリックして、
新規ノードを追加します。
- 要素または属性ノードの内容をリレーショナル表にマップするには、
以下のようにします。
- テキスト・ノードを指定します。
- 親ノードをクリックします。
- 「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「テキスト (Text)」を選択します。
- 「追加 (Add)」を選択して、ノードを追加します。
- 表ノードを追加します。
- 作成したばかりのテキスト・ノードを選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「表 (Table)」を選択し、表名に要素を指定します。
- 「追加 (Add)」をクリックして、ノードを追加します。
- 列ノードを追加します。
- テキスト・ノードを再び選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「列 (Column)」を選択し、列名に要素を指定します。
- 「タイプ (Type)」フィールド内に列の基本データ・タイプを指定し、
タグなしデータを保管するためにはどの列タイプでなければならないかを指定します。
- 「追加 (Add)」をクリックして、ノードを追加します。
制限: 新規の列は、管理ウィザードを使って作成することができません。
ノード・タイプとして Column (列) を指定した場合には、
ご使用の DB2 データベースにすでに存在する列のみを選択できます。
- 任意選択で、列の条件を追加します。
- テキスト・ノードを再び選択し、
「新規要素 (New Element)」をクリックします。
- 「ノード・タイプ (Node type)」フィールドで、
「条件 (Condition)」および以下の構文を持つ条件を選択します。
operator LIKE|<|>|= value
- 「追加 (Add)」をクリックして、ノードを追加します。
これらのノードを変更するには、ノードを選択し、
「詳細 (Details)」ボックス内のフィールドを変更し、
「変更 (Change)」をクリックします。
- RDB マップの編集を続けるか、
または「次へ (Next)」をクリックして
「DAD の指定 (Specify a DAD)」ウィンドウを開きます。
- ノードを除去するには、以下のようにします。
- 左側のフィールドで、ノードをクリックします。
- 「除去 (Remove)」をクリックします。
- RDB_node マップの編集を続けるか、
または「次へ (Next)」をクリックして
「DAD の指定 (Specify a DAD)」ウィンドウを開きます。
- 変更後の DAD の出力ファイル名を、「DAD の指定 (Specify a DAD)」ウィンドウの
「ファイル名 (File name)」フィールドに入力します。
- 「終了 (Finish)」をクリックして、
ノードを除去し、「ランチパッド (LaunchPad)」ウィンドウに戻ります。
DAD ファイルは、任意のテキスト・エディターで作成できる XML ファイルです。
以下のステップは、文書アクセス定義ファイルの付録サンプルの一部です。
さらに包括的な情報やコンテキストについては、これらの例を参照してください。
- テキスト・エディターを開きます。
- 次のようにして DAD ヘッダーを作成します。
<?xml version="1.0"?>
<!DOCTYPE DAD SYSTEM "path\dad.dtd"> --> the path and file name of the DTD
for the DAD
- <DAD></DAD> タグを挿入します。
- <DAD> タグの後に、DAD ファイルを XML 文書 DTD に関連付ける DTD ID を指定します。
<dtdid>path\dtd_name.dtd> --> the path and file name of the DTD
for your application
- 妥当性検査 (つまり XML 文書が有効かどうかを DTD を使って検査すること) を行うかどうかを指定します。
たとえば次のようにします。
<validation>NO</validation> --> specify YES or NO
- <Xcollection> 要素を使用して、
アクセスおよび保管の方式を XML コレクションと定義します。
アクセスおよび保管の方式は、XML データが DB2 表のコレクション内に保管されることを定義します。
<Xcollection>
</Xcollection>
- 以下のプロローグ情報を追加します。
<prolog>?xml version="1.0"?</prolog>
上記と全く同じテキストが必要です。
- <doctype></doctype> タグを追加します。
たとえば次のようにします。
<doctype>! DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
- <root_node></root_node> タグを使用して root_node を定義します。
root_node内で、XML 文書を形成する要素および属性を指定します。
- <root_node> タグの後に、XML 文書内の要素および属性を、
DB2 データに対応する要素および属性のノードにマップします。 これらのノードは、XML データから DB2 データへのパスを提供します。
- 最上位のルート element_node を定義します。
この element_node には、以下のものが含まれています。
- コレクションを指定するための結合条件を持つ表ノード
- 子要素
- 属性
表ノードおよび条件を指定するには、以下のようにします。
- RDB_node 要素を作成します。たとえば、次のようにします。
<RDB_node>
</RDB_node>
- XML 文書内に組み込まれるデータを含むそれぞれの表ごとに <table_node> を定義します。
たとえば、列データが文書内にある 3 つの表 (ORDER_TAB、PART_TAB、
および SHIP_TAB) を持っている場合には、それぞれの表ごとに表ノードを作成します。
たとえば次のようにします。
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB"></RDB_node>
- コレクション内に表の結合条件を定義します。
構文は、以下のとおりです。
expression = expression AND
expression = expression ...
たとえば次のようにします。
<RDB_node>
<table name="ORDER_TAB">
<table name="PART_TAB">
<table name="SHIP_TAB">
<condition>
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
</RDB_node>
- 各表ごとに基本キーを指定します。
基本キーは、単一の列または複合キーという複数の列から構成されます。
基本キーを指定するには、属性キーを RDB_node の表要素に追加します。
以下の例では、
Order というルート element_node の RDB_node 内のそれぞれの表ごとに基本キーを定義します。
<element_node name="Order">
<RDB_node>
<table name="order_tab" key="order_key"/>
<table name="part_tab" key="part_key price"/>
<table name="ship_tab" key="date mode"/>
<condition>
order_tab.order_key = part_tab.order_key AND
part_tab.part_key = ship_tab.part_key
</condition>
<RDB_node>
分解の際に指定された情報は、XML 文書の構成の時には無視されます。
コレクションを使用可能にする場合、
使用される DAD ファイルは合成と分解の両方をサポートする必要があるため、
キー属性は分解に必要です。
- DB2 表内の列にマップする XML 文書内のそれぞれの要素ごとに <element_node> タグを定義します。たとえば次のようにします。
<element_node name="name">
</element_node>
要素ノードは、以下のタイプの要素のいずれかを持つことができます。
- <text_node>: 要素が DB2 表に内容を持つことを指定します。
要素には子要素がありません。
- <attribute_node>: 属性を指定します。
属性ノードは次のステップで定義されます。
- 子要素
text_node には、内容を DB2 表および列名にマップするための RDB_node が含まれています。
RDB_nodes は、内容を DB2 表にマップする最下位レベルの要素に使用されます。
RDB_node には次のような子要素があります。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義します。
- <condition>: 任意選択で、列上に条件を指定します。
たとえば、TAX という列にタグなしの内容を保管したい XML 要素 <Tax> を持っているとしましょう。
XML 文書:
<Tax>0.02</Tax>
この場合、TAX 列に保管される値は 0.02 になります。
DAD ファイルでは、<RDB_node> を指定して、XML 要素を DB2 表および列にマップします。
DAD ファイル:
<element_node name="Tax">
<text_node>
<RDB_node>
<table name="part_tab"/>
<column name="tax"/>
</RDB_node>
</text_node>
</element_node>
<RDB_node> は、<Tax> 要素の値がテキスト値であることと、
データの保管場所が PART_TAB 表の TAX 列であることを指定します。
- XML 文書内のそれぞれの属性ごとに、
DB2 表の 1 つの列にマップする <attribute_node> を 1 つ定義します。
たとえば次のようにします。
<attribute_node name="key">
</attribute_node>
attribute_node には、属性値を DB2 表および列にマップするための RDB_node が含まれています。
RDB_node には次のような子要素があります。
- <table>: 要素に対応する表を定義します。
- <column>: 対応する要素を含む列を定義します。
- <condition>: 任意選択で、列上に条件を指定します。
たとえば、要素 <Order> の属性キーの例を以下に示します。
ここでは、キーの値が列 PART_KEY にすでに保管されていなければなりません。
XML 文書:
<Order key="1">
DAD ファイル内でこのキーの attribute_node を作成して、
値 1 が保管される表の場所を指定します。
DAD ファイル:
<attribute_node name="key">
<RDB_node>
<table name="part_tab">
<column name="part_key"/>
<RDB_node>
</attribute_node>
- それぞれの attribute_node および text_node の RDB_node の列タイプを指定します。
これにより、タグなしのデータが保管される各列のデータ・タイプが適切であることが保証されます。
列タイプを指定するには、属性タイプを列要素に追加します。
以下の例では、列のタイプを INTEGER と定義します。
<attribute_node name="key">
<RDB_node>
<table name="order_tab"/>
<column name="order_key" type="integer"/>
</RDB_node>
</attribute_node>
- 終了のための </root_node> タグが最後の </element_node> タグの後にあることを確認します。
- 終了のための </Xcollection> タグが </root_node> タグの後にあることを確認します。
- 終了のための </DAD> タグが </Xcollection> タグの後にあることを確認します。
[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]