DAD Script 是一種 XML 格式的文件, 其會建立 XML 文件結構與 DB2® 資料庫中表格的關聯性。它可用來建立 XML 檔與 DTD 的關聯性以及協助定義 XML 或屬性的位置、內容或值,使得 DB2 XML Extender 可以決定要儲存或擷取 XML 資料的位置。
宣告區段:
在下列程式碼範例中:
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "/home/dxxinst/dtd/dad.dtd">
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 定義 XML 文件與關聯式表格的 XML 集合之間的 RDB_node 對映關係。它主要定義 XML 元素內容的位置, 或是 XML 屬性值,以便 DB2 XML Extender 可以決定儲存或擷取 XML 資料的位置。
Xcollection 具有下列子元素:
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 含有:
頂端 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)含有:
- 零或多個代表現行 XML 元素的子元素之子項 element_nodes
- 零或多個代表現行 XML 元素之屬性的 attribute_nodes
- 零或一個代表現行 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)"/> 指定資料所在之直欄的名稱和類型。