複数の表内に既にデータが存在するので、 それらの表を XML 文書に関連付ける XML コレクションを作成します。 XML コレクションを作成するには、DAD ファイルを準備してコレクションを定義します。
計画では、 データが存在するリレーショナル・データベース内の列をどれにするか、 および表からのデータを構造化して XML 文書とする方法を決めました。 この節では、表と XML 文書の構造との間の関係を指定する DAD ファイル内のマッピング体系を作成します。
以下のステップで、DAD 内の要素はタグと呼ばれ、 XML 文書構造の要素は要素と呼ばれます。 作成する DAD ファイルに類似したサンプルが、 c:\dxx\samples\dad\getstart_xcollection.dadにあります。 このサンプルは、以下のステップで生成するファイルとは若干異なります。 サンプルを演習で使用する場合、 環境によってはファイル・パスが異なる可能性があることに注意してください。
XML 文書を構成するための DAD ファイルを作成するには、 以下のように行います。
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
XML エクステンダーは、製品が c:\dxx にインストールされていると想定します。 そうでない場合、ここおよび以下のステップで、 この値をインストール時に指定したドライブおよびディレクトリーに変更してください。
<validation>NO</validation>
<Xcollection> </Xcollection>
<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>
この SQL ステートメントは、SQL マッピングの使用時に次のようなガイドラインに準じます。 文書構造の詳細は、図 6 を参照してください。
SQL ステートメントの作成時の要件の詳細は、マッピング体系の要件を参照してください。
<prolog>?xml version="1.0"?</prolog>
これと全く同じテキストがすべての DAD ファイルに必要です。
<doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
これらのノードについての詳細は、DAD ファイル を参照してください。
図 6 は、XML 文書および DB2 表列の階層構造を図示し、 使用されるノードの種類を示しています。 陰影のあるボックスは、XML 文書を構成するためにデータが取り出される DB2 表の列名を示します。
以下のステップでは、ノードの各タイプを 1 タイプずつ追加することになります。
<root_node> <element_node name="Order"> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node name="Email"> </element_node> </element_node> <element_node name="Part"> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> <element_node name="ExtendedPrice"> </element_node> <element_node name="Tax"> </element_node> <element_node name="Shipment" multi_occurrence="YES"> <element_node name="ShipDate"> </element_node> <element_node name="ShipMode"> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<Shipment> 子要素には、multi_occurence="YES" の属性があることに注意してください。 この属性は属性を持たない要素のために使用され、それは文書内で繰り返されています。 <Part> には色の属性があり、そのため固有のものとなっているので、 multi-occurence 属性は使用しません。
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> </element_node> <element_node names"Email"> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> </element_node> <element_node name="Quantity"> </element_node> ... </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> </text_node> </element_node> <element_node name="Email"> <text_node> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> </attribute_node> <element_node name="key"> <text_node> </text_node> </element_node> <element_node name="Quantity"> <text_node> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> </text_node> </element_node> <element_node name="Tax"> <text_node> </text_node> </element_node> <element_node name="Shipment" multi-occurence="YES"> <element_node name="ShipDate"> <text_node> </text_node> </element_node> <element_node name="ShipMode"> <text_node> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
<root_node> <element_node name="Order"> <attribute_node name="key"> <column name="order_key"/> </attribute_node> <element_node name="Customer"> <element_node name="Name"> <text_node> <column name="customer_name"/> </text_node> </element_node> <element_node name="Email"> <text_node> <column name="customer_email"/> </text_node> </element_node> </element_node> <element_node name="Part"> <attribute_node name="color"> <column name="color"/> </attribute_node> <element_node name="key"> <text_node> <column name="part_key"/> </text_node> <element_node name="Quantity"> <text_node> <column name="quantity"/> </text_node> </element_node> <element_node name="ExtendedPrice"> <text_node> <column name="price"/> </text_node> </element_node> <element_node name="Tax"> <text_node> <column name="tax"/> </text_node> </element_node> <element_node name="Shipment" multi-occurence="YES"> <element_node name="ShipDate"> <text_node> <column name="date"/> </text_node> </element_node> <element_node name="ShipMode"> <text_node> <column name="mode"/> </text_node> </element_node> </element_node> <!-- end Shipment --> </element_node> <!-- end Part --> </element_node> <!-- end Order --> </root_node>
作成したばかりのファイルを、 サンプル・ファイル c:\dxx\samples\dad\getstart_xcollection.dadと比較することができます。 このファイルは、XML 文書を合成するのに必要な DAD ファイルの作業用コピーです。 このサンプル・ファイルには、 個々の環境に合わせて変更しないと実行しても正常に完了しない可能性のあるパス・ステートメントが入っています。
アプリケーションで頻繁に XML コレクションを使って文書を合成する場合、 そのコレクションを使用可能にすることでコレクション名を定義することができます。 コレクションを使用可能にすると、それは XML_USAGE 表に登録されるので、 ストアード・プロシージャーの実行時にそのコレクション名を (DAD ファイル名の代わりに) 指定して、 パフォーマンスを向上させることができます。 この演習では、コレクションを使用可能化しません。 コレクションの使用可能化の詳細は、XML コレクションの使用可能化を参照してください。