DAD 脚本是一个 XML 格式的文档,它使 XML 文档结构与 DB2® 数据库中的表相关联。它用来将 XML 文件与 DTD 相关联并帮助定义 XML 或属性的位置、内容或值,以便 DB2 XML Extender 可以确定在何处存储或检索 XML 数据。
声明部分:
在以下代码样本中:
<?xml version="1.0"?> <!DOCTYPE DAD SYSTEM "/home/dxxinst/dtd/dad.dtd">
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 定义 XML 文档与关系表的 XML 集合之间的 RDB_node 映射。实质上,它定义 XML 元素内容的位置或者 XML 属性的值,以便使 DB2 XML Extender 可以确定在何处存储或检索 XML 数据。
Xcollection 具有下列子元素:
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 包含下列内容:
顶层 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 外)包含以下内容:
- 表示当前 XML 元素的子元素的零个或多个子 element_node
- 表示当前 XML 元素属性的零个或多个 attribute_node
- 表示当前 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)"/> 指定数据所驻留的列的名称和类型。