DAD Script 結構

DAD Script 是一種 XML 格式的文件, 其會建立 XML 文件結構與 DB2® 資料庫中表格的關聯性。它可用來建立 XML 檔與 DTD 的關聯性以及協助定義 XML 或屬性的位置、內容或值,使得 DB2 XML Extender 可以決定要儲存或擷取 XML 資料的位置。

產生的 Script 結構可以分成 4 個區段:
  1. 宣告
  2. dtdid
  3. 驗證
  4. Xcollection

宣告

宣告區段:

在下列程式碼範例中:

<?xml version="1.0"?> 
<!DOCTYPE DAD SYSTEM "/home/dxxinst/dtd/dad.dtd">

dtdid

dtdid 指向的 DTD 將驗證 XML 文件,並且指引 XML 集合表格與 XML 文件之間的對映。 請注意,dtdid 必須同於 XML 文件的 doctype 中所指定的 SYSTEM ID。您必須一律指定 dtdid。

例如,以下這一行:

<dtdid>/home/dtd/neworder.dtd</dtdid>

建立 DAD 檔與 XML 目標文件 DTD 的關聯性。

驗證

指出是否將利用 DAD 的 DTD 來驗證 XML 文件。在現行版本中,產生的 DAD Script 一律會指定 NO 給 validation 元素。

例如,以下這一行:
<validation>NO</validation>
指出是否使用指定的 DTD 檔來驗證 XML 目標文件。

Xcollection

Xcollection 定義 XML 文件與關聯式表格的 XML 集合之間的 RDB_node 對映關係。它主要定義 XML 元素內容的位置, 或是 XML 屬性值,以便 DB2 XML Extender 可以決定儲存或擷取 XML 資料的位置。

Xcollection 具有下列子元素:

  1. prolog
  2. doctype
  3. root_node

prolog

<prolog> 定義 XML prolog 的文字。 相同的 prolog 會提供給整個集合中的所有 XML 文件。因此,prolog 的值是固定的。

例如,以下這一行:

<prolog>?xml version="1.0"?</prolog>

是 XML 目標文件的 XML 宣告

doctype

<doctype> 定義 XML 文件類型定義的文字。 相同的 doctype 會提供給整個集合中的所有 XML 文件。請注意,doctype 中所指定的 SYSTEM ID 必須同於 dtdid 中所指定的 SYSTEM ID。

例如,下一行是 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 含有:

  1. RDB_node,指定含合併條件的 table_nodes 來指定集合
  2. 零或多個子項 element_nodes
  3. 零或多個 attribute_nodes

頂端 element_node 的 RDB_node

代表 XML 文件的根元素的頂端 element_node 需要 RDB_node。 最上層 element_node 的 RDB_node 必須指定:

  • 與 XML 文件相關聯的所有表格
  • (選用)每一表格的 orderBy 屬性,用來保留文件的次序
  • 一個條件,將主要和外來鍵關係指定為合併,以建立表格群組

在所產生的 DAD Script 的現行版本,不支援表格元素上的 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" 是複合的主鍵。
  • 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=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)含有:

  1. 零或多個代表現行 XML 元素的子元素之子項 element_nodes
  2. 零或多個代表現行 XML 元素之屬性的 attribute_nodes
  3. 零或一個代表現行 XML 元素之 CDATA 文字的 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)"/> 指定資料所在之直欄的名稱和類型。
相關概念
DAD Script
相關工作
產生 DAD 檔
編輯 DAD 檔
使用 DB2 XML Extender 執行 DAD 檔
使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.