IBM Books

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

XML コレクションの作成: DAD ファイルの準備

複数の表内に既にデータが存在するので、 それらの表を XML 文書に関連付ける XML コレクションを作成します。 XML コレクションを作成するには、DAD ファイルを準備してコレクションを定義します。

計画では、 データが存在するリレーショナル・データベース内の列をどれにするか、 および表からのデータを構造化して XML 文書とする方法を決めました。 この節では、表と XML 文書の構造との間の関係を指定する DAD ファイル内のマッピング体系を作成します。

以下のステップで、DAD 内の要素はタグと呼ばれ、 XML 文書構造の要素は要素と呼ばれます。 作成する DAD ファイルに類似したサンプルが、 c:\dxx\samples\dad\getstart_xcollection.dadにあります。 このサンプルは、以下のステップで生成するファイルとは若干異なります。 サンプルを演習で使用する場合、 環境によってはファイル・パスが異なる可能性があることに注意してください。

XML 文書を構成するための DAD ファイルを作成するには、 以下のように行います。

  1. c:\dxx\samples\cmd ディレクトリーから、 テキスト・エディターをオープンして、 getstart_xcollection.dad という名前のファイルを作成します。
  2. 以下のテキストを使用して、DAD ヘッダーを作成します。

    <?xml version="1.0"?>
    <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
    

    XML エクステンダーは、製品が c:\dxx にインストールされていると想定します。 そうでない場合、ここおよび以下のステップで、 この値をインストール時に指定したドライブおよびディレクトリーに変更してください。

  3. <DAD></DAD> タグを挿入します。 他のすべてのタグは、これらのタグの内側に配置されます。
  4. <validation></validation> タグを指定して、 DTD リポジトリー表に挿入した DTD を使用して XML エクステンダーが XML 文書構造の妥当性検査を行うかどうかを示します。
    <validation>NO</validation>
    
  5. <Xcollection></Xcollection> タグを使用して、 XML コレクションとしてのアクセスおよび保管の方式を定義します。 アクセスおよび保管の方式は、XML データが DB2 表のコレクション内に保管されることを定義します。
    <Xcollection>
    </Xcollection>
    
  6. SQL ステートメントを指定して、XML コレクションに使用する表および列を指定します。 この方式は SQL マッピングと呼ばれ、 リレーショナル・データを XML 文書構造にマップする 2 つの方法の 1 つです。 (マッピング体系について詳しくは、マッピング体系の種類 を参照してください。) 以下のステートメントを入力します。
    <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 ステートメントの作成時の要件の詳細は、マッピング体系の要件を参照してください。

  7. 合成した XML 文書で使用する次のようなプロローグ情報を追加します。
    <prolog>?xml version="1.0"?</prolog>
    

    これと全く同じテキストがすべての DAD ファイルに必要です。

  8. 合成しようとする XML 文書で使う <doctype></doctype> タグを追加します。 <doctype> タグには、クライアントで保管される DTD のパスが入ります。
    <doctype>!DOCTYPE Order SYSTEM "c:\dxx\samples\dtd\getstart.dtd"</doctype>
    
  9. <root_node></root_node> タグを使用して、XML 文書のルート要素を定義します。 root_node 内で、XML 文書を形成する要素および属性を指定します。
  10. 以下の 3 つのタイプのノードを使用して、 XML 文書構造を DB2 リレーショナル表構造にマップします。

    element_node
    XML 文書内の要素を指定します。 element_node には子の element_node があってもかまいません。

    attribute_node
    XML 文書内の要素の属性を指定します。

    text_node
    要素のテキスト内容とリレーショナル表内の列データを、 最下位の element_node について指定します。

    これらのノードについての詳細は、DAD ファイル を参照してください。

    図 6 は、XML 文書および DB2 表列の階層構造を図示し、 使用されるノードの種類を示しています。 陰影のあるボックスは、XML 文書を構成するためにデータが取り出される DB2 表の列名を示します。

    以下のステップでは、ノードの各タイプを 1 タイプずつ追加することになります。

    1. XML 文書の各要素について、<element_node> タグを定義します。
      <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 属性は使用しません。

    2. XML 文書内の各属性について <attribute_node> タグを定義します。 これらの属性は、element_node 内でネストしています。 追加された attribute_nodes は太字で強調表示されます。
      <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>
      
    3. 最下位の element_node ごとに、<text_node> タグを定義します。 それは文書構成時に DB2 から取り出される文字データが XML 要素に含まれることを示しています。
      <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>
      
    4. 最下位の element_node ごとに、<column> タグを定義します。 これらのタグは、XML 文書の構成時にどの列からデータを取り出すかを指定し、 通常は <attribute_node> または <text_node> タグ内にあります。 ここで定義される列は、 <SQL_stmt> SELECT 文節内になければならないことを覚えておいてください。
      <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>
      
  11. 終了のための </root_node> タグが最後の </element_node> タグの後にあることを確認します。
  12. 終了のための </Xcollection> タグが </root_node> タグの後にあることを確認します。
  13. 終了のための </DAD> タグが </Xcollection> タグの後にあることを確認します。
  14. ファイルを getstart_xcollection.dad として保管します。

作成したばかりのファイルを、 サンプル・ファイル c:\dxx\samples\dad\getstart_xcollection.dadと比較することができます。 このファイルは、XML 文書を合成するのに必要な DAD ファイルの作業用コピーです。 このサンプル・ファイルには、 個々の環境に合わせて変更しないと実行しても正常に完了しない可能性のあるパス・ステートメントが入っています。

アプリケーションで頻繁に XML コレクションを使って文書を合成する場合、 そのコレクションを使用可能にすることでコレクション名を定義することができます。 コレクションを使用可能にすると、それは XML_USAGE 表に登録されるので、 ストアード・プロシージャーの実行時にそのコレクション名を (DAD ファイル名の代わりに) 指定して、 パフォーマンスを向上させることができます。 この演習では、コレクションを使用可能化しません。 コレクションの使用可能化の詳細は、XML コレクションの使用可能化を参照してください。


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