载入支持
DB2 9 主要支持两种用 XML 值填充表的方式。insert 语句向表中插入 XML 值,import 实用程序用于将大量数据导入表中。
DB2 V9.5 扩展了对 load 实用程序的支持。load 支持 import 支持的大多数 XML 数据选项。可以使用 FROM 子句为 XML 数据指定路径。在 load 期间可以使用 XMLVALIDATE USING 子句对 XML 数据进行验证。load 有 3 个不同的选项:XDS、SCHEMA 和 SCHEMALOCATION HINTS。当指定 XDS 选项时,可以使用 DEFAULT, IGNORE 和 MAP 子句。这些选项的含义与 import 中对应选项的含义相同。可以使用文件类型修改器 XMLCHAR 和 XMLGRAPHIC 指定数据的代码页。XML 数据指定程序(XML data specifier,XDS)在数据文件中指定 XML 值。load 重启的行为和原来一样。它通过扫描所有 XML 文档重新构建所有索引。
示例代码 xmlload.db2 演示了 DB2 V9.5 中可用的 XML 数据载入选项。可以在 sqllib/samples/xml/clp 目录中找到该示例。
XSLT支持
DB2 V9.5提供了使用数据库本身的XSL转换来处理XML文档的功能。可以使用XSLT样式表将存储在数据库中的XML文档转换为HTML格式。为 此,DB2 V9.5引入了xsltransform函数。该函数还支持使用参数的样式表。xsltransform函数可以将作为XML文档存储在数据库表列中的 XSLT样式表应用到XML文档上。这为用户提供了灵活性,用户可以检索来自数据库的经过转换的XML文档,并可以直接在Web上显示。
现在,假设您已有下面的XML文档:
清单10.XML文档
Ice Scraper, Windshield 4 inch
Basic Ice Scraper 4 inches wide, foam handle
3.99
以及相应的 XSLT 样式表:
清单11. XSLT 样式表
﹤?xml version="1.0" encoding="UTF-8"?﹥﹤xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"﹥ ﹤xsl:template match="products"﹥ ﹤html﹥ ﹤head/﹥ ﹤body﹥ ﹤table border="1"﹥ ﹤th﹥ ﹤tr﹥ ﹤td width="80"﹥product ID﹤/td﹥ ﹤td width="200"﹥product name﹤/td﹥ ﹤td width="200"﹥price﹤/td﹥ ﹤td width="50"﹥details﹤/td﹥ ﹤/tr﹥ ﹤/th﹥ ﹤xsl:apply-templates/﹥ ﹤/table﹥ ﹤/body﹥ ﹤/html﹥ ﹤/xsl:template﹥ ﹤xsl:template match="product"﹥ ﹤tr﹥ ﹤td﹥﹤xsl:value-of select="@pid"/﹥﹤/td﹥ ﹤td﹥﹥﹤xsl:value-of select="./description/name"/﹥﹤/td﹥ ﹤td﹥﹤xsl:value-of select="./description/price"/﹥﹤/td﹥ ﹤td﹥﹤xsl:value-of select="./description/details"/﹥﹤/td﹥ ﹤/tr﹥ ﹤/xsl:template﹥ ﹤/xsl:stylesheet﹥ |
这些文档需要存储在表中,或者当作参数传递。当将这些值作为参数传递时,请确保它们是格式良好的XML文档。参数的数据类型可以是XML、 VARCHAR、CLOB或BLOB。假设文档和样式表都存储在表中,可以用以下语句转换XML文档:
注意:示例假设存储文档的表名称为xslt,XML文档的列名为xmldoc,XSL文档的列名为xsldoc。
清单12.XSLTransform表达式
SELECT XSLTRANSFORM (description USING stylesheet AS CLOB (10M)) FROM product_details |
这个查询输出一个 HTML 文档,可以在浏览器中进行查看。清单 13 显示该 HTML 输出:
清单13. XSLTransform 表达式的 HTML 输出
﹤html﹥ ﹤head﹥ ﹤METAhttp-equiv="Content-Type"content="text/html;charset=UTF-8"﹥ ﹤/head﹥ ﹤body﹥ ﹤tableborder="1"﹥ ﹤th﹥ ﹤tr﹥ ﹤tdwidth="80"﹥productID﹥td﹥ ﹤tdwidth="200"﹥productname﹥/td﹥ ﹤tdwidth="200"﹥price﹥/td﹥ ﹤tdwidth="50"﹥details﹥/td﹥ ﹤/tr﹥ ﹤/th﹥ ﹤tr﹥ ﹤td﹥100-201-01﹥/td﹥ ﹤td﹥IceScraper,Windshield4inch﹥/td﹥ ﹤td﹥3.99﹥/td﹥ ﹤td﹥BasicIceScraper4incheswide,foamhandle﹥/td﹥ ﹤/tr﹥ ﹤/table﹥ ﹤/body﹥ ﹤/html﹥ |
用户也可以将XML文档和一个XSLT样式表存储在不同的表中,而且可以通过连接表将单个XSLT样式表应用到多个XML值。
发布函数
发布函数用来将关系数据转换为XML值。DB2 9引入了SQL/XML支持,该支持在DB2 V9.5中得到了增强和简化。一些DB2 9SQL/XML函数,比如xmlelement,需要提供所有XML元素的名称、属性和其他节点,而这些元素来自表的关系列或者被显式地提供。有时用户 需要生成XML值,但是不想牵涉到元素名称。
通过引入新函数xmlrow和xmlgroup,DB2 V9.5对现有的发布函数进行了扩展。这些函数从表列获得XML元素的名称和值。xmlrow输出是一个表示为XML的行值的序列,xmlgroup函数 将所有值集合到一个根节点下。