DAD スクリプトは XML 形式の文書で、XML 文書構造を DB2® データベース内の表に関連付けます。これは XML ファイルを DTD と関連付けて、XML ファイルまたは属性のロケーション、コンテンツ、または値を定義するために使用され、 DB2 XML エクステンダーが XML データの保管 / 検索場所を決定できるようにするためのものです。
宣言セクションの機能:
以下のコード・サンプルについて説明します。
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "/home/dxxinst/dtd/dad.dtd">
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 は、XML 文書とリレーショナル表の XML コレクション間の RDB_node マッピングを定義します。これは基本的に、XML エレメントの内容や XML 属性の値の場所を定義して、 DB2 XML エクステンダーが XML データの保管 / 検索場所を決定できるようにするためのものです。
Xcollection には以下の子エレメントがあります。
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 には、以下のものが含まれます。
最上位 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 を除く) には、以下のものが含まれます。
- 現在の XML 文書の子エレメントを表すゼロ個以上の子 element_nodes
- 現在の XML エレメントの属性を表すゼロ個以上の attribute_nodes
- 現在の 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)"/> は、データが置かれる列の名前とタイプを指定します。