WEB开发网
开发学院数据库DB2 DB2 的 XML 功能概述: DB2 UDB 和 DB2 XML Extend... 阅读

DB2 的 XML 功能概述: DB2 UDB 和 DB2 XML Extender 中 SQL/XML 函数的介绍

 2009-11-12 00:00:00 来源:WEB开发网   
核心提示:简介可扩展标记语言(eXtensible Markup Language,XML)可用于在计算机之间交换数据,DB2 的 XML 功能概述: DB2 UDB 和 DB2 XML Extender 中 SQL/XML 函数的介绍,DB2 XML Extender 支持 IBM DB2 Universal Database

简介

可扩展标记语言(eXtensible Markup Language,XML)可用于在计算机之间交换数据。DB2 XML Extender 支持 IBM DB2 Universal Database(DB2 UDB)与 XML 的集成。本文将介绍 DB2 UDB V8 和 DB2 XML Extender 中可用的 SQL/XML 函数。DB2 XML Extender 通过用户自定义类型(UDT)、用户自定义函数(UDF)以及存储过程来实现其功能。

XML 样本随 DB2 UDB v8.1 一起提供。样本文件位于 <DB2_install_dir>/SQLLIB/samples/db2xml 。

<?xml version="1.0"?> 
<!DOCTYPE Order SYSTEM "dxx_install/samples/db2xml/dtd/getstart.dtd"> 
<Order key="1"> 
 <Customer> 
  <Name>American Motors</Name> 
  <Email>parts@am.com</Email> 
 </Customer> 
 <Part color="black "> 
  <key>68</key> 
  <Quantity>36</Quantity> 
  <ExtendedPrice>34850.16</ExtendedPrice> 
  <Tax>6.000000e-02</Tax> 
  <Shipment> 
   <ShipDate>1998-08-19</ShipDate> 
   <ShipMode>BOAT </ShipMode> 
  </Shipment> 
  <Shipment> 
    <ShipDate>1998-08-19</ShipDate> 
    <ShipMode>AIR  </ShipMode> 
  </Shipment> 
 </Part> 
 <Part color="red  "> 
  <key>128</key> 
  <Quantity>28</Quantity> 
  <ExtendedPrice>38000.00</ExtendedPrice> 
  <Tax>7.000000e-0</Tax> 
  <Shipment> 
   <ShipDate>1998-12-30</ShipDate> 
   <ShipMode>TRUCK </ShipMode> 
  </Shipment> 
 </Part> 
</Order> 

DB2 和 XML

DB2 UDB v8 包括了新的内置 SQL/XML 发布函数,这就易于使用 DB2 数据库中的数据来发布 XML。而且使用这些函数不需要用到 XML Extender。

在 DB2 UDB v8 中,XML Extender 已经集成到 DB2 中,所以不必单独安装。XML Extender 提供了:

管理工具以帮助您管理 XML 数据的集成。

存储和访问数据库里 XML 数据的方法。

数据类型定义(DTD)仓库以存储用于验证 XML 数据的 DTD。

名为文档访问定义(Document Access Definition,DAD)的映射文件,用于将 XML 文档映射到关系数据。

SQL/XML

DB2 UDB v8 提供了下列 SQL/XML 发布函数,可用于文档的组合与发布。这些函数共同作用产生 XML 片段,而无需用到 XML Extender。

XMLELEMENT

XMLELEMENT 用于构造 XML 元素。此函数接收元素名称、可选的属性集以及零个或多个将构成元素内容的参数。其结果数据类型就是 XML。

XMLATTRIBUTE

XMLATTRIBUTE 用于构造 XML 属性。结果得到与参数相同的内部 XML 数据类型。

XMLAGG

XMLAGG 返回一组 XML 数据的连接。其结果的数据类型是 XML。如果将 XMLAGG 函数应用到空集上,那么结果就是空(null)值。否则,结果是集合中值的连接。

XML2CLOB

XML2CLOB 返回为 CLOB 值的参数。该参数必须是 XML 数据类型的表达式。而结果得到 CLOB 数据类型。

REC2XML

REC2XML 函数返回一个字符串,其格式由 XML 标签指定且包含列名和列数据。

例子

查询 DB2 sample 数据库。
生成 A00 和 C01 部门的雇员姓名与编号列表:

   SELECT XML2CLOB( 
  XMLELEMENT(NAME "Department", 
    XMLATTRIBUTES(workdept AS "name"), 
    XMLAGG( 
      XMLELEMENT(NAME "employee", 
        XMLATTRIBUTES(lastname, firstnme, empno)) 
      ORDER BY lastname) 
  )) 
  FROM employee 
  WHERE workdept IN('A00', 'C01') 
  GROUP BY workdept 

结果:

<Department name="A00"> 
 <employee LASTNAME="HAAS" FIRSTNME="CHRISTINE" EMPNO="000010"></employee> 
 <employee LASTNAME="LUCCHESSI" FIRSTNME="VINCENZO" EMPNO="000110"></employee> 
 <employee LASTNAME="O'CONNELL" FIRSTNME="SEAN" EMPNO="000120"></employee> 
</Department> 
<Department name="C01"> 
 <employee LASTNAME="KWAN" FIRSTNME="SALLY" EMPNO="000030"></employee> 
 <employee LASTNAME="NICHOLLS" FIRSTNME="HEATHER" EMPNO="000140"></employee> 
 <employee LASTNAME="QUINTANA" FIRSTNME="DOLORES" EMPNO="000130"></employee> 
</Department> 

查询 DB2 sample 数据库。
列举 D01 部门的若干信息:

SELECT REC2XML (1.0, 'COLATTVAL', '', DEPTNO, MGRNO, ADMRDEPT) 
   FROM DEPARTMENT 
   WHERE DEPTNO = 'D01' 

结果:

<row> 
 <column name="DEPTNO">D01</column> 
 <column name="MGRNO" null="true"/> 
 <column name="ADMRDEPT">A00</column> 
</row> 

DB2 XML Extender

DB2 XML Extender 可用于生成 XML 文档以及在 XML 仓库中存储 XML 文档。XML Extender 使用的模式名是 DB2XML。

管理工具

XML Extender 管理工具帮助您支持数据库和表中的 XML 列,以及将 XML 数据映射到 DB2 关系数据库。下列工具可用于执行 XML Extender 的管理任务:

XML Extender 管理向导为管理任务提供了图形用户界面。

dxxadm 命令允许从命令行执行管理任务。

XML Extender 管理存储过程允许在程序中调用管理命令。

XML Extender 管理向导
XML Extender 管理向导调用 XML Extender 存储过程。 表 3中列出了这些存储过程。

启动 XML Extender 管理向导
注意,样本屏幕快照均来自于 sales_db 数据库,它是随 DB2 v8.1 中的 XML 样本一起提供的。

设置类路径。确保 CLASSPATH 中已包括 dxxadmin.jar、xml4j.jar 和 db2java.zip 。

通过在命令窗口输入下列命令来执行类文件 com.ibm.dxx.admin.Admin:

jre -classpath %CLASSPATH% com.ibm.dxx.admin.Admin
java -classpath %CLASSPATH% com.ibm.dxx.admin.Admin

这将启动 XML Extender 管理向导。


图 1. XML Extender Administration LaunchPad:Logon
DB2 的 XML 功能概述: DB2 UDB 和 DB2 XML Extender 中 SQL/XML 函数的介绍

图片看不清楚?请点击这里查看原图(大图)。

Address:jdbc:db2:<数据库名>
User ID:DB2 用户 ID
Password:DB2 用户 ID 的密码
JDBC Driver:COM.ibm.db2.jdbc.app.DB2Driver
选择 Finish。


图 2. XML Extender Administration LaunchPad:Select a task
DB2 的 XML 功能概述: DB2 UDB 和 DB2 XML Extender 中 SQL/XML 函数的介绍

图片看不清楚?请点击这里查看原图(大图)。

dxxadm 管理命令 

XML Extender 提供了管理命令 dxxadm, 用于执行管理任务。 dxxadm 命令调用 表 3中所列的 XML Extender 管理存储过程。

表 1. dxxadm 命令的语法图

     <<-CALL dxxadm--'---a--+-enable_db--parameters----------+-------> 
    
 
            +-disable_db--parameters---------+ 
    
 
            +-enable_column--parameters------+ 
    
 
            +-disable_column--parameters-----+ 
    
 
            +-enable_collection--parameters--+ 
    
 
            '-disable_collection--parameters-' 
    
 
<--'--ASIS----------------------------------------------------->< 

表 2. dxxadm 参数

参数 描述
enable_db启用数据库的 XML Extender 功能
disable_db禁用数据库的 XML Extender 功能
enable_column连接数据库并且支持 XML 列,使之可包含 XML Extender UDT
disable_column连接数据库并且禁用支持 XML 的列
enable_collection连接数据库并且根据指定的 DAD 启用一个 XML 集合
disable_collection连接数据库并且禁止支持 XML 的集合

其调用假定您已经激活了 XML Extender 加载模块库。如果没有,请使用 dxxadm 的全限定名。

XML Extender 存储过程

DB2 XML Extender 提供的存储过程可分为 3 类:

用于管理任务的管理存储过程。

用于生成 XML 文档的组合存储过程。

用于分解或者切碎 XML 文档的分解存储过程。

用于管理任务的存储过程由 XML Extender 管理向导和管理命令 dxxadm 来调用。表 3 中列举了这些过程。

表 3. XML Extender 管理存储过程

存储过程 描述
dxxEnableDB()启用数据库的 XML Extender 功能
dxxDisableDB()禁用数据库的 XML Extender 功能
dxxEnableColumn()连接数据库并且支持 XML 列,使之可包含 XML Extender UDT
dxxDisableColumn()连接数据库并且禁用支持 XML 的列
dxxEnableCollection()连接数据库并且根据指定的 DAD 启用一个 XML 集合
dxxDisableCollection()连接数据库并且禁用支持 XML 的集合

表 4. XML Extender 组合存储过程
存储过程 描述
dxxGenXML()使用 DAD 文件生成 XML 文档。不需要支持的 XML 集合
dxxRetrieveXML()使用支持的 XML 集合生成 XML 文档

表 5. XML Extender 分解存储过程
存储过程 描述
dxxShredXML()使用 DAD 文件分解 XML 文档。不需要支持的 XML 集合
dxxInsertXML()使用支持的 XML 集合分解 XML 文档

XML Extender 用户定义类型(UDT)

必须用 XML UDT 来定义用于存储 XML 文档的列。DB2 XML Extender 提供了 3 种 UDT。

XMLVarchar

XMLCLOB

XMLFILE

应该基于文档大小来定义数据类型。
表 6. XML Extender UDT

用户定义类型 源数据类型 注意
XMLVARCHARVARCHAR (varchar_len) 用于小文档。 varchar_len特定于操作系统。 UDB=3K
XMLCLOBCLOB (clob_len) 用于大文档。 clob_len特定于操作系统。 UDB=2G
XMLFILEVARCHAR(512)用于存储在 DB2 外的文档。指定全限定服务器文件名

XML Extender 用户定义函数(UDF)

XML UDF 只能用于 XML 列,不能用于 XML 集合。

XML Extender UDF 有 4 种类型:

存储函数用于在 XML 列中插入完整的 XML 文档。

检索函数用于从 XML 列检索 XML 文档。

析取函数用于从 XML 文档中析取并且转换元素内容或者属性值。不同的析取函数用于不同的数据类型。

更新函数用于修改整个 XML 文档或者特定的元素内容或者属性值。它返回含有更新值的 XML 文档的副本。

存储并且组合 XML 文档

DB2 XML Extender 提供两种方法在 DB2、XML 列和 XML 集合中存储和访问 XML 文档。在同一应用程序中可同时使用这两种方法。

XML 列
将 XML 文档完整地存储在 DB2 的一列中。

在以下情况下选择该方法:

需要归档文档。

将频繁读取文档。

将不会更新文档。

XML 文档将被插入支持 XML 的列并且可被更新、检索和搜索。元素和属性数据可映射到 DB2 副表,并且可被索引。

XML 集合
将 XML 文档的数据存储在一个或多个 DB2 表中。该方法不保存 XML 文档的格式。

在以下情况下选择该方法:

需要使用现有关系表中的数据组合 XML 文档。

需要保存 XML 文档的数据。

要在应用程序间交换数据。

将频繁更新 XML 文档的内容。

可使用现有的 DB2 数据组合 XML 文档,或者将 XML 文档分解并将没有标签的数据存储在 DB2 表中。已提供存储过程来组合或者分解 XML 文档。

集合就是一组包含了 XML 文档数据的列。要使用 XML 集合,就必须在文档访问定义(DAD)中定义该集合名称并且启用它。DAD 文件指定如何将元素和属性映射到一个或多个 DB2 数据表中。在调用存储过程去组合或者分解 XML 文档的时候,就要用到集合名称。

数据类型定义(DTD)

DTD 用于验证 XML 文档的结构。它是一组 XML 元素和属性的声明。当数据库支持 XML 时,XML Extender 就创建名为 DTD_REF 的 DTD 仓库表。DTD 就存储在该表中。DTD_REF 表中的每一行表示一个 DTD。用户还可以插入自己的 DTD。

XML 集合中,DTD 用于定义 XML 文档的结构。

来自于 XML Extender Administration and Programming手册的样本 DTD:

<!xml encoding="US-ASCII"?> 
 
    
 
<!ELEMENT Order (Customer, Part+)> 
<!ATTLIST Order key CDATA #REQUIRED> 
<!ELEMENT Customer (Name, Email)> 
<!ELEMENT Name (#PCDATA)> 
<!ELEMENT Email (#PCDATA)> 
<!ELEMENT Part (key, Quantity, ExtendedPrice, Tax, Shipment+)> 
<!ELEMENT key (#PCDATA)> 
<!ELEMENT Quantity (#PCDATA)> 
<!ELEMENT ExtendedPrice (#PCDATA)> 
<!ELEMENT Tax (#PCDATA)> 
<!ATTLIST Part color CDATA #REQUIRED> 
<!ELEMENT Shipment (ShipDate, ShipMode)> 
<!ELEMENT ShipDate (#PCDATA)> 
<!ELEMENT ShipMode (#PCDATA)> 

文档访问定义(DAD)

必须要用 DAD 文件来管理 XML Extender。DAD 指定了 XML Extender 将如何处理 XML 文档以及像 DTD 这样的关键文件的位置。DAD 文件是一个 XML 文档,将 XML 文档结构映射到一个或多个 DB2 表中。DAD 文件可用于 XML 列和 XML 集合这两种方法。DAD 文件中将指定当前采用的方法。

DAD 中的元素称为标签,而 XML 文档中的元素称为元素。

对于 XML 列,需要 DAD 文件将 XML 文档映射到副表中。DAD 文件将 XML 元素和属性映射到 DB2 副表中,以用于搜索。

来自于 XML Extender Administration and Programming手册用于 XML 列的样本 DAD:

<?xml version="1.0"?> 
<!DOCTYPE Order SYSTEM "dxx_install/samples/db2xml/dtd/dad.dtd"> 
<DAD> 
  <dtdid> "dxx_install/samples/db2xml/dtd/getstart.dtd" 
  </dtdid> 
  <validation>YES</validation> 
 
  <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"/> 
   </tabl> 
   <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> 
 
</DAD> 

对于 XML 集合,DAD 文件用于定义集合名称以及将元素和属性映射到一个或多个 DB2 表中。将使用映射方案来指定如何在 DB2 数据库中表示 XML 数据。

可使用像 WebSphere Studio Application Developer(WSAD)这样的工具来生成 DAD 文件。请查阅下面的 工具小节。

映射方案
必须为 XML 集合选择映射方案。DAD 文件既可使用 SQL 映射,也可使用 RDB_node 映射。

SQL 映射
SQL 映射只能用于组合 XML 文档,而不能用于分解 XML 文档。

可通过一条 SQL 语句就直接从关系数据映射到 XML 文档。DAD 文件中,在 <SQL_stmt> 标签里定义了一条有效的 SQL 语句。该 SQL 语句定义用于组合 XML 文档的表和列。

来自于 XML Extender Administration and Programming 手册、针对使用 SQL 映射的 XML 集合的样本 DAD:

<?xml version="1.0"?> 
<!DOCTYPE DAD SYSTEM "dxx_installsamples/db2xml/dtd/dad.dtd"> 
<DAD> 
<validation>NO</validation> 
<Xcollection> 
<SQL_stmt>SELECT o.order_key, customer_name, customer_email, p.part_key, color, 
  quantity, price, tax, ship_id, date, mode from order_tab o, part_tab p, 
  table(select substr(char(timestamp(generate_unique())),16), 
   as ship_id, date, mode, part_key from ship_tab) 
 s 
     WHERE o.order_key = 1 and 
        p.price > 20000 and 
        p.order_key = o.order_key and 
        s.part_key = p.part_key 
     ORDER BY order_key, part_key, ship_id</SQL_stmt> 
<prolog>?xml version="1.0"?</prolog> 
<doctype>!DOCTYPE Order SYSTEM "dxx_install/samples/db2xml/dtd/getstart.dtd" 
</doctype> 
 
<root_node> 
<element_node name="Order"> 
 <attribute_node name="key"> 
  <column name="order_key"/> 
 </attribute_node> 
 <element_node name="Customer"> 
  <element_node name="Name"> 
   <text_node><column name="customer_name"/></text_node> 
  </element_node> 
  <element_node name="Email"> 
   <text_node><column name="customer_email"/></text_node> 
  </element_node> 
 </element_node> 
 <element_node name="Part"> 
  <attribute_node name="color"> 
   <<column name="color"/> 
  </attribute_node> 
  <element_node name="key"> 
   <text_node><column name="part_key"/></text_node> 
  </element_node> 
  <element_node name="Quantity"> 
   <text_node><column name="quantity"/></text_node> 
  </element_node> 
  <element_node name="ExtendedPrice"> 
   <text_node><column name="price"/></text_node> 
  </element_node> 
  <element_node name="Tax"> 
   <text_node><column name="tax"/></text_node> 
  </element_node> 
  <element_node name="Shipment" multi_occurrence="YES"> 
   <element_node name="ShipDate"> 
    <text_node><column name="date"/></text_node> 
   </element_node> 
   <element_node name="ShipMode"> 
    <text_node><column name="mode"/></text_node> 
   </element_node> 
  </element_node> 
 </element_node> 
</element_node> 
</root_node> 
</Xcollection> 
</DAD> 

SQL 映射

SQL 映射只能用于组合 XML 文档,而不能用于分解 XML 文档。

可通过一条 SQL 语句就直接从关系数据映射到 XML 文档。DAD 文件中,在 <SQL_stmt> 标签里定义了一条有效的 SQL 语句。该 SQL 语句定义用于组合 XML 文档的表和列。

来自于 XML Extender Administration and Programming 手册、针对使用 SQL 映射的 XML 集合的样本 DAD:

<?xml version="1.0"?> 
<!DOCTYPE DAD SYSTEM "dxx_installsamples/db2xml/dtd/dad.dtd"> 
<DAD> 
<validation>NO</validation> 
<Xcollection> 
<SQL_stmt>SELECT o.order_key, customer_name, customer_email, p.part_key, color, 
  quantity, price, tax, ship_id, date, mode from order_tab o, part_tab p, 
  table(select substr(char(timestamp(generate_unique())),16), 
   as ship_id, date, mode, part_key from ship_tab) 
 s 
     WHERE o.order_key = 1 and 
        p.price > 20000 and 
        p.order_key = o.order_key and 
        s.part_key = p.part_key 
     ORDER BY order_key, part_key, ship_id</SQL_stmt> 
<prolog>?xml version="1.0"?</prolog> 
<doctype>!DOCTYPE Order SYSTEM "dxx_install/samples/db2xml/dtd/getstart.dtd" 
</doctype> 
 
<root_node> 
<element_node name="Order"> 
 <attribute_node name="key"> 
  </column name="order_key"/> 
 </attribute_node> 
 <element_node name="Customer"> 
  <element_node name="Name"> 
   <text_node><column name="customer_name"/></text_node> 
  </element_node> 
  <element_node name="Email"> 
   <text_node><column name="customer_email"/></text_node> 
  </element_node> 
 </element_node> 
 <element_node name="Part"> 
  <attribute_node name="color"> 
   <column name="color"/> 
  </attribute_node> 
  <element_node name="key"> 
   <text_node><column name="part_key"/></text_node> 
  </element_node> 
  <element_node name="Quantity"> 
   <text_node><column name="quantity"/></text_node> 
  </element_node> 
  <element_node name="ExtendedPrice"> 
   <text_node><column name="price"/></text_node> 
  </element_node> 
  <element_node name="Tax"> 
   <text_node><column name="tax"/></text_node> 
  </element_node> 
  <element_node name="Shipment" multi_occurrence="YES"> 
   <element_node name="ShipDate"> 
    <text_node><column name="date"/></text_node> 
   </element_node> 
   <element_node name="ShipMode"> 
    <text_node><column name="mode"/></text_node> 
   </element_node> 
  </element_node> 
 </element_node> 
</element_node> 
</root_node> 
</Xcollection> 
</DAD> 

关系数据库映射(RDB_node)
RDB_node 映射可用于组合和分解 XML 文档。

这将用于定义 XML 元素内容的位置或者 XML 属性的值。DAD 文件中, <RDB_node> 标签用于指定 DB2 表、列以及对于元素或者属性节点的条件。此类型的映射类似于 XML 结构。

来自于 XML Extender Administration and Programming 手册、针对使用 RDB_node 映射的 XML 集合的样本 DAD:

<?xml version="1.0"?> 
<!DOCTYPE DAD SYSTEM "SQLLIB/samples/db2xml/dtd/dad.dtd> 
<DAD> 
 <dtdid>E:\\dtd\\lineItem.dtd</dtdid> 
 <validation>YES</validation> 
 <Xcollection> 
 <prolog>?xml version="1.0"?</prolog> 
 <doctype>!DOCTYPE Order SYSTEM 
          "SQLLIB/samples/db2xml/dtd/getstart.dtd" 
 </doctype> 
 <root_node> 
 <element_node name="Order"> 
 <RDB_node> 
 <table name="order_tab"/> 
 <table name="part_tab"/> 
 <table name="ship_tab"/> 
 <condition>order_tab.order_key=part_tab.order_key AND 
       part_tab.part_key=ship_tab.part_key 
 </condition> 
 </RDB_node> 
 <attribute_node name="Key"> 
 <RDB_node> 
 <table name="order_tab"/> 
 <column name="order_key"/> 
 </RDB_node> 
 </attribute_node> 
 <element_node name="Customer"> 
 
    <element_node name="Name"> 
      <text_node> 
        <RDB_node> 
         <table name="order_tab"/> 
         <column name="customer_name"/>   
        </RDB_node> 
      </text_node> 
    </element_node> 
    <element_node name="Email"> 
      <text_node> 
        <RDB_node> 
          <table name="order_tab"/> 
          <column name="customer_email"/> 
        </RDB_node> 
      </text_node> 
    </element_node> 
 </element_node> 
   <element_node name="Part"> 
     <attribute_node name="Key"> 
        <RDB_node> 
          <table name="part_tab"/> 
          <column name="part_key"/> 
        </RDB_node> 
     </attribute_node> 
     <element_node name="ExtendedPrice"> 
        <text_node> 
          <RDB_node> 
           <table name="part_tab"/> 
           <column name="price"/>  
           <condition>price > 2500.00</condition> 
          </RDB_node> 
         </text_node>  
      </element_node> 
      <element_node name="Tax">  
        <text_node> 
          <RDB_node> 
            <table name="part_tab"/> 
            <column name="tax"/>  
          </RDB_node> 
        </text_node>  
      </element_node> 
 
      <element_node name="Quantity">  
        <text_node> 
          <RDB_node> 
            <table name="part_tab"/> 
            <column name="qty"/>  
          </RDB_node> 
        </text_node>  
     </element_node> 
     <element_node name="Shipment" multi_occurrence="YES"> 
        <element_node name="ShipDate"> 
          <text_node> 
           <RDB_node> 
             <table name="ship_tab"/>  
             <column name="date"/>  
             <condition>date > '1966-01-01'</condition> 
           </RDB_node> 
          </text_node>  
        </element_node> 
        <element_node name="ShipMode">  
          <text_node> 
           <RDB_node> 
             <table name="ship_tab"/> 
             <column name="mode"/>  
           </RDB_node> 
          </text_node>  
        </element_node> 
        <element_node name="Comment"> 
          <text_node> 
           <RDB_node> 
             <table name="ship_tab"/> 
             <column name="comment"/>  
           </RDB_node> 
          </text_node>  
        </element_node> 
     </element_node>  
   </element_node>  
  </element_node>  
</root_node> 
 
</Xcollection> 
 
</DAD> 

副表
副表用于 XML 列。XML 列的内容将被映射到副表中。副表是用于存储将被频繁搜索的 XML 文档中元素和属性的 DB2 表。更新 XML 文档时,其副表中的值也将被自动更新。

可向副表添加索引以提高搜索性能。

注意:不要修改副表。当 XML 列中的 XML 文档被更新时,XML Extender 将自动更新其副表。

位置路径
位置路径指定 XML 文档里元素或属性的位置。XML Extender 使用位置路径来导航 XML 文档以定位元素和属性。

XML 列中,位置路径用于将 XML 元素或属性的内容映射到副表中。在使用 XML Extender 用户定义函数时,位置路径还用于识别将要析取或者更新的元素和属性。

而在 XML 集合中,位置路径用于重写存储过程中的 XML 集合 DAD 文件的值。

如何使用 DB2 XML Extender

使用 XML Extender 之前,应该确定需要如何存储文档。例如,作为完整的文档存储在 DB2 列中,或者分解并存储在多个 DB2 表中。

当将 XML 文档完整地存储为一个 XML 列时,您需要:

理解文档的结构。

确定需要如何搜索文档。

确定存储该文档的 XML 用户定义类型。

确定将被频繁搜索的 XML 元素和属性,使之可以存储在副表中并且被索引。

当使用 XML 集合组合或者分解 XML 文档时,您需要:

理解文档的结构。

判断 XML 数据是否有效(推荐)。

确定如何将 XML 数据映射到 DB2 表中。

确定所使用的映射方案:SQL 映射或者 RDB_node 映射。

创建 DAD 文件。

XML 列

在 XML 列中存储 XML 文档

创建数据库和表(如果还不存在的话)。

用 XML Extender 存储过程和 DB2 CLI 绑定数据库。

启用 XML Extender 的数据库。调用 dxxEnableDB() 存储过程。

插入 DTD,用于验证 XML 列中的 XML 文档。

创建包含支持 XML 列的表。

启用 XML 列。

在副表上针对 XML 列创建索引。

将 XML 文档 插入 XML 列。

测试。执行将返回 XML 文档的 select 语句。

XML 集合

从 XML 集合中组合 XML 文档

创建数据库和表(如果还不存在的话)。

用 XML Extender 存储过程和 DB2 CLI 绑定数据库。

启用 XML Extender 的数据库。调用 dxxEnableDB() 存储过程。

将 XML 文档的结构映射到包含了元素和属性数据的 DB2 表。

选择映射方法:SQL 映射或者 RDB_node 映射。

创建 XML 集合。为 XML 集合创建 DAD 文件。这将定义 XML 集合的名称并将元素和属性映射到 DB2 表中。

启用 XML 集合。如果使用 dxxRetrieveXML() 存储过程来组合 XML 文档就是必要的。而使用 dxxGenXML() 存储过程来组合 XML 文档时就不需要。调用 dxxEnableCollection() 存储过程,这将在 XML_USAGE 表中注册集合,并且有助于在调用存储过程并指定集合名称时提高性能。

创建结果表以存储 XML 文档(如果还不存在的话)。该表将包含一个 XMLVARCHAR 或 XMLCLOB 类型的列。

组合 XML 文档。对于只是偶尔会被更新的文档:通过 DAD 文件的名字调用 dxxGenXML() 存储过程。dxxGenXML() 将使用 DAD 文件中的 <Xcollection> 元素指定的 XML 集合表中所存储的数据来组合 XML 文档。XML 文档将被插入结果表。对于将被频繁更新的文档:通过支持的 XML 集合的名称调用 dxxRetrieveXML() 存储过程。dxxRetrieveXML() 将检索分解了的 XML 文档。XML 文档也将被插入结果表。

验证是否已经组合 XML 文档。从结果表中选择 XML 文档。

将 XML 文档从表中导出至一个文件中。调用 Content() 检索 UDF。

可选:将 XML 文档转换为 HTML 文件。创建样式表。调用 XSLTransformToFile() UDF。

在 XML 集合中分解并且存储 XML 文档

创建数据库和表(如果还不存在的话)。

用 XML Extender 存储过程和 DB2 CLI 绑定数据库。

启用 XML Extender 的数据库。调用 dxxEnableDB() 存储过程。

将 XML 文档的结构映射到包含了元素和属性数据的 DB2 表。

创建 XML 集合。为 XML 集合创建 DAD 文件。使用 RDB_node 映射。这将定义 XML 集合的名称并将元素和属性映射到 DB2 表中。

启用 XML 集合。
在下列情况下这一步是必要的:

XML 集合中的表还不存在。

dxxShredXML() 存储过程将用于分解 XML 文档。

在下列情况下这一步是不必要的:

XML 集合中的表已经存在。

dxxInsertXML() 存储过程将用于分解 XML 文档。


调用 dxxEnableCollection() 存储过程。当启用集合时,XML Extender 将创建 XML 集合中所有的表。

分解 XML 文档。调用其中一个分解存储过程:dxxShredXML() 或 dxxInsertXML()。

dxxShredXML() —— 分解存储过程 如果只是偶尔进行更新,或者不希望有管理 XML 数据的开销,就选择此方法。将使用 DAD 文件,但不必启用 XML 集合。

通过 DAD 文件和 XML 文档调用 dxxShredXML() 存储过程。在 DAD 文件的 <Xcollection> 中使用的表必须包含 DAD 映射中指定的列。来自于 XML 文档中没有标签的 XML 数据将被插入根据 DAD 文件中的 <Xcollection> 规范指定的表中的 XML 集合。

dxxInsertXML() —— 分解存储过程如果将定期进行更新,就选择此方法。将需要支持的 XML 集合。

通过与 DAD 文件关联的支持的 XML 集合调用 dxxInsertXML() 存储过程。将根据 <Xcollection> 中的规范检查或者创建集合表。根据映射分解 XML 文档并且将没有标签的 XML 数据插入 XML 集合的表中。

工具

WebSphere Studio Application Developer

WebSphere Studio 提供了 XML 开发环境,其中包括用于构建 DTD、XML 模式和 XML 文件的工具。提供了下列 XML 工具:

XML editor —— 创建、查看和验证 XML 文件。

DTD editor —— 创建、查看和验证 DTD。

XML schema editor —— 创建、查看和验证 XML 模式。

XSL trace editor —— 将 XSL 样式表应用到 XML 文档以将 XML 文档转换为 HTML、文本或者其他 XML 文档类型。

XML to XML mapping editor —— 将一个或多个源 XML 文档映射到一个目标 XML 文档。

XML to SQL query wizard —— 由 SQL 查询结果创建 XML 文件。

RDB to XML mapping editor —— 定义关系表和 DTD 文件间的映射,并且生成一个 DAD 文件。

Tags:DB XML 功能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接