DAD 脚本结构

DAD 脚本是一个 XML 格式的文档,它使 XML 文档结构与 DB2® 数据库中的表相关联。它用来将 XML 文件与 DTD 相关联并帮助定义 XML 或属性的位置、内容或值,以便 DB2 XML Extender 可以确定在何处存储或检索 XML 数据。

生成的脚本结构可分成四个部分:
  1. 声明
  2. dtdid
  3. 验证
  4. Xcollection

声明

声明部分:

在以下代码样本中:

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

dtdid

dtdid 指向验证 XML 文档并指导 XML 集合表与 XML 文档之间的映射的 DTD。注意,dtdid 必须与在 XML 文档中的 doctype 指定的“SYSTEM 标识”相同。必须始终指定 dtdid。

例如,下面这一行:

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

使 DAD 文件与 XML 目标文档 DTD 相关联。

验证

指示是否将用 DAD 的 DTD 验证 XML 文档。在当前版本中,生成的 DAD 脚本对 validation 元素总是指定 NO。

例如,下面这一行:
<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 的文本。向整个集合中的所有 XML 文档提供了同一 prolog。prolog 的值是固定的。

例如,下面这一行:

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

是 XML 目标文档的 XML 声明

doctype

<doctype> 定义 XML 文档类型定义的文本。向整个集合中的所有 XML 文档提供了同一文档类型(doctype)。注意,在 doctype 中指定的“SYSTEM 标识”必须与在 dtdid 中指定的标识相同。

例如,下面这一行是 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_node(且有一连接条件来指定集合)
  2. 零个或多个子 element_node
  3. 零个或多个 attribute_node

顶层 element_node 的 RDB_node

对于表示 XML 文档根元素的顶层 element_node,RDB_node 是必需的。顶层 element_node 的 RDB_node 必须指定下列各项:

  • 与 XML 文档相关联的所有表
  • (可选)每个表的 orderBy 属性,以便保持文档顺序 
  • 一个条件,它将主键和外键关系指定为连接,以便将表组合在一起

在生成的 DAD 脚本的当前版本中,不支持 table 元素上的 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_node
  2. 表示当前 XML 元素属性的零个或多个 attribute_node
  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 脚本
相关任务
生成 DAD 文件
编辑 DAD 文件
使用 DB2 XML Extender 来运行 DAD 文件
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.