IBM Books

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

XML 列の作成

XML エクステンダーには、データベース内の XML 文書全体の保管とアクセスのための方式が備わっています。 それは XML 列と呼ばれます。 XML 列方式を使用すると、XML ファイル・タイプを使用して文書を保管し、 サイド表内の列に索引付けし、その後で XML 文書を照会または検索することができます。 この保管方式は、文書が頻繁に更新されないアーカイブ・アプリケーションで特に役立ちます。 このチュートリアルの目的上、用意されている XML 文書を XML 列に保管します。

この演習では、文書を SALES_TAB 表に保管します。 文書を保管するには、以下のように行います。

  1. XML 文書用の DTD を DTD 参照テーブル (DTD_REF) に挿入します。
  2. 構造化検索用に XML 文書の位置およびサイド表を指定する DAD ファイルを準備します。
  3. SALES_TAB 表内に、XML ユーザー定義タイプ XMLVARCHAR を持つ列を追加します。
  4. XML に関して列を使用可能にします。
  5. 構造化検索用のサイド表に索引を付けます。
  6. XML エクステンダーに備わっているユーザー定義関数を使用して文書を保管します。

DTD リポジトリーへの DTD の保管

DTD を使用して XML 列内の XML データを妥当性検査できます。 XML 対応のデータベース (DTD_REF) 内に表が作成されます。 この表は DTD 参照と呼ばれ、DTD を保管するのに使用することができます。 XML 文書を妥当性検査することにした場合、DTD をこのリポジトリーに保管しなければなりません。 このチュートリアルの DTD は c:\dxx\samples\dtd\getstart.dtdです。

DTD を挿入するには、以下のように行います。

DB2 コマンド・ウィンドウから、以下の SQL INSERT コマンドを入力します。

DB2 CONNECT TO SALES_DB
DB2 INSERT into db2xml.dtd_ref values('c:\dxx\samples\dtd\getstart.dtd',
    db2xml.XMLClobFromFile('c:\dxx\samples\dtd\getstart.dtd'), 0, 'user1',
    'user1', 'user1')

また、次のようなコマンド・ファイルを実行して DTD を挿入することもできます。

getstart_insertDTD.cmd

DAD ファイルを準備する

XML 列の DAD ファイルは、単純な構造になっています。 保管モードが XML 列であることを指定して、索引付けのための表および列を定義します。

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

DAD ファイルを準備するには、以下のように行います。

  1. テキスト・エディターをオープンして、 ファイルに getstart_xcolumn.dad という名前を付けます。

    DAD ファイル内で使うどのタグでも、大文字小文字の区別があることに注意してください。

  2. XML および Doctype 宣言を使って DAD ヘッダーを作成します。

    <?xml version="1.0"?>
    <!DOCTYPE DAD SYSTEM "c:\dxx\dtd\dad.dtd">
    
    DAD ファイルは XML 文書であり、XML 宣言を必要とします。
  3. 開始と終了の <DAD></DAD> タグを挿入します。 他のすべてのタグは、これらのタグの内側に配置されます。
  4. 開始と終了の <DTDID></DTDID> タグを挿入して、 XML 文書の DTD に DAD を関連付ける DTDID 識別子を指定し、 クライアント上での DAD の位置を指定します。

    <dtdid>c:\dxx\samples\dtd\getstart.dtd</dtdid>
    

    このストリングが、DTD リポジトリーへの DTD の保管の中の DTD 参照表への DTD の挿入時の 最初のパラメーター値として使った値に一致することを確認します。 たとえば、別のマシン・ドライブで作業していれば、 DTDID に使用するパスは上記のストリングとは異なることがあります。

  5. 開始と終了の <validation></validation> タグを指定します。 それによって、XML エクステンダーが、DTD リポジトリー表に挿入された DTD を使用して、 XML 文書構造の妥当性検査を行うことを指示します。

    <validation>YES</validation>
    
    <validation> の値は英大文字で指定しなければなりません。
  6. 開始と終了の <Xcolumn></Xcolumn> タグを挿入して、XML 列を保管方式と定義します。 この方式は、XML データが XML 列に保管されることを定義します。

    <Xcolumn>
    </Xcolumn>
    
  7. 生成されるサイド表ごとに、開始と終了の <table></table> タグを入力します。

    <Xcolumn>
    <table name="order_side_tab">
    </table>
    <table name="part_side_tab">
    </table>
    <table name="ship_side_tab">
    </table>
    </Xcolumn>
    
  8. サイド表に入れる列ごとに、開始と終了の <column></column> タグを入力します。 各 <column> タグには、以下の 4 つの属性があります。

    <Xcolumn>
    <table name="order_side_tab">
      <column name="order_key"
              type="integer"
              path="/Order/@key"
              multi_occurrence="NO"/>
      <column name="customer"
              type="varchar(50)"
              path="/Order/Customer/Name"
              multi_occurrence="NO"/> 
    </table>
    <table name="part_side_tab">
      <column name="price"
              type="decimal(10,2)"
              path="/Order/Part/ExtendedPrice"
              multi_occurrence="YES"/>
    </table>
    <table name="ship_side_tab">
      <column name="date"
              type="DATE"
              path="/Order/Part/Shipment/ShipDate"
              multi_occurrence="YES"/>
    </table>
    </Xcolumn>
    
  9. 終了のための </Xcolumn> が最後の </table> タグの後にあることを確認します。
  10. 終了のための </DAD> が最後の </Xcolumn> タグの後にあることを確認します。
  11. getstart_xcolumn.dad という名前を付けてファイルを保管します。

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

SALES_TAB 表を作成する

この節では、SALES_TAB 表を作成します。 そこには初期状態で、注文についての販売情報を含む 2 つの列があります。

表を作成するには、以下のように行います。

DB2 コマンド・ウィンドウで、 以下の CREATE TABLE ステートメントを入力します。

DB2 CONNECT TO SALES_DB
 
DB2 CREATE TABLE SALES_TAB(INVOICE_NUM CHAR(6) NOT NULL PRIMARY KEY,
         SALES_PERSON VARCHAR(20))

あるいは、次のようなコマンド・ファイルを実行して表を作成することもできます。

getstart_createTabCol.cmd

XML タイプの列を追加する

ここで、新規の列を SALES_TAB 表に追加します。 この列には以前に生成した原形の XML 文書が含まれることになり、 それは XML UDT のものでなければなりません。 XML エクステンダーには、XML エクステンダーのユーザー定義タイプに説明されている複数のデータ・タイプが備わっています。 このチュートリアルでは、文書を XMLVARCHAR として保管します。

XML タイプの列を追加するには、以下のように行います。

DB2 コマンド・ウィンドウで、以下の SQL ステートメントを入力します。

DB2 ALTER TABLE SALES_TAB ADD ORDER DB2XML.XMLVARCHAR

あるいは、次のようなコマンド・ファイルを実行して表を更新することもできます。

getstart_alterTabCol.cmd

XML 列を使用可能にする

XML タイプの列を作成した後、それを XML エクステンダーに関して使用可能にします。 列を使用可能にすると、XML エクステンダーは DAD ファイルを読み込んで、サイド表を作成します。 列を使用可能にする前に、以下のことを行う必要があります。

列を XML に関して使用可能にするには、以下のように行います。

DB2 コマンド・ウィンドウで、以下のコマンドを入力します。

dxxadm enable_column SALES_DB SALES_TAB ORDER GETSTART_XCOLUMN.DAD
        -v SALES_ORDER_VIEW -r INVOICE_NUM

あるいは、次のようなコマンド・ファイルを実行して XML の列を使用可能にすることもできます。

getstart_enableCol.cmd

XML エクステンダーは、INVOICE_NUM 列の入ったサイド表を作成し、デフォルト視点を作成します。

重要: サイド表は決して変更しないでください。 XML エクステンダーに付属している UDF を使って XML 文書の更新だけを行うようにしてください。 XML 列内の XML 文書を更新すると、サイド表は自動的に更新されます。

列およびサイド表を表示する

XML 列を使用可能にしたとき、XML 列およびサイド表のビューが作成されています。 このビューを使用して、XML 列を扱うことができます。

XML 列およびサイド表の列を表示するには、以下のように行います。

DB2 コマンド・ウィンドウで、以下の SQL SELECT ステートメントを入力します。

DB2 SELECT * FROM SALES_ORDER_VIEW

この視点は、getstart_xcolumn.dad ファイルに指定されているとおり、サイド表内の列を示します。

サイド表での索引の作成

サイド表で索引を作成すると、XML 文書の構造の高速検索が可能になります。 このステップでは、 XML 列 ORDER を使用可能にしたときに作成されたサイド表内のキー列に索引を作成します。 社員がどの列を最も頻繁に照会するかは、サービス部門から知らされています。 表 3 はそのような列を示しています。これらに索引を付けます。

表 3. 索引を付けるサイド表の列
サイド表
ORDER_KEY ORDER_SIDE_TAB
CUSTOMER ORDER_SIDE_TAB
PRICE PART_SIDE_TAB
DATE SHIP_SIDE_TAB

サイド表に索引を付けるには、次のようにします。

DB2 コマンド・ウィンドウで次のような SQL コマンドを入力します。

DB2 CREATE INDEX KEY_IDX
      ON ORDER_SIDE_TAB(ORDER_KEY)
 
DB2 CREATE INDEX CUSTOMER_IDX
      ON ORDER_SIDE_TAB(CUSTOMER)
 
DB2 CREATE INDEX PRICE_IDX
     ON PART_SIDE_TAB(PRICE)
 
DB2 CREATE INDEX DATE_IDX
      ON SHIP_SIDE_TAB(DATE)

あるいは、次のようなコマンド・ファイルを実行して索引を作成することもできます。

getstart_createIndex.cmd

XML 文書の保管

XML 文書を入れる列を使用可能にし、サイド表に索引を付け終わったので、 XML エクステンダーに備わっている関数を使用して文書を保管できるようになりました。 データを XML 列に保管するとき、 デフォルト・キャスト関数または XML エクステンダー UDF のどちらかを使用します。 基本タイプ VARCHAR のオブジェクトを XML UDT XMLVARCHAR の列に保管することになるので、 デフォルト・キャスト関数を使用します。 保管のデフォルト・キャスト関数および XML エクステンダーに備わっている UDF についての詳細は、 データを保管するを参照してください。

XML 文書を保管するには、以下のように行います。

重要: XML 文書 c:\dxx\samples\xml\getstart.xml を開きます。 DOCTYPE にあるファイル・パスが、 DTD リポジトリーに DTD を挿入するときに DAD に指定する DTD ID と一致するかどうかを確認してください。 この確認は、 db2xml.DTD_REF 表を照会し、 DAD ファイルの DTDID 要素を調べることによって行えます。 デフォルトとは異なるドライブおよびディレクトリー構造を使用している場合、 DOCTYPE 宣言のパスを変更する必要があります。

DB2 コマンド・ウィンドウで、以下の SQL INSERT コマンドを入力します。

DB2 INSERT INTO SALES_TAB (INVOICE_NUM, SALES_PERSON, ORDER) VALUES('123456',
   'Sriram Srinivasan', db2xml.XMLVarcharFromFile('c:\dxx\samples\cmd\getstart.xml'))

XML 文書を保管するとき、XML エクステンダーは自動的にサイド表を更新します。

あるいは、次のようなコマンド・ファイルを実行して文書を保管することもできます。

getstart_insertXML.cmd

表が更新されたことを確認するには、 DB2 コマンド・ウィンドウでその表に対して以下の SELECT ステートメントを実行します。

DB2 SELECT * FROM SALES_TAB
 
DB2 SELECT * FROM PART_SIDE_TAB
 
DB2 SELECT * FROM ORDER_SIDE_TAB
 
DB2 SELECT * FROM SHIP_SIDE_TAB

XML 文書の検索

サイド表を直接照会することによって、XML 文書を検索できます。 このステップでは、価格が 2500.00 を超えるすべての注文を検索します。

サイド表を照会するには、以下のように行います。

DB2 コマンド・ウィンドウで次のような SELECT ステートメントを入力します。

DB2 "SELECT DISTINCT SALES_PERSON FROM SALES_TAB S, PART_SIDE_TAB P
   WHERE PRICE > 2500.00 AND
   S.INVOICE_NUM=P.INVOICE_NUM"

結果セットには、価格が 2500.00 を超える品目を販売した販売員の名前が示されているはずです。

あるいは、次のようなコマンド・ファイルを実行して文書を検索することもできます。

getstart_queryCol.cmd

以上で、XML 文書を DB2 表に保管する入門用のチュートリアルを完了しました。 本書に示す例の多くは、これらの学習課程に基づいています。


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