DB2 和 XML 专家 Susan Malaika 指明了使用 DB2 和 XML 时可用于处理数据的选项。
Susan Malaika 从 1995 年以来一直是 IBM 技术研究院(Academy of Technology)的成员。她在 1996 年与人合著了一本有关 Web 的书。她从 1998 年开始从事 DB2 工作,并专长于 XML 和 Web 技术,包括网格计算。她的个人兴趣包括歌剧、电影、戏剧以及后来的科幻小说。
在 Susan 的上一篇 专栏文章中,她讨论了 XML 标准,并指出在数据库管理系统(如 DB2)中,显著地增加了 XML 功能,如发布、存储、查询和转换 XML 的重要特性。在本专栏文章中,Susan 回答了关于 DB2 中的 XML 工具的问题,并对截至本次采访结束为止可用的工具提供了简要介绍。
DB2DD:Susan,上次您使我们相信数据库人员应该时刻关注 XML 领域中所发生的事情。对于正在实现结合 XML 的系统的数据库架构设计师和管理员们,您有什么建议?他们应该从哪里入手呢?
Susan:第一步是确定他们所使用的应用程序是否需要:
下一步是更详细地研究合适的选项。我将尽量提供指向关于每个选项信息的指示,如 图 1所示。
DB2DD:逻辑上的第一步是什么?
Susan:当应用程序为了在组织内或向外部以常用格式将关系数据传输到另一个系统或应用程序,而开始使用 XML 时,最常见的第一步是根据关系数据发布 XML。
DB2DD:那么,在 DB2 中根据关系数据发布 XML 有哪些选择呢?
Susan:根据保存在 DB2 表中的关系数据发布 XML 文档的选项有很多,包括:
这些函数使您能够从常规 SQL SELECT 语句直接产生以 CLOB 表示的带标记的 XML 文档。在 DB2 V8.1 for UNIX® 和 DB2 V8.1 for Windows® 中可以使用 SQL/XML 发布函数。可以阅读 SQL Reference 第 1 卷中的 XML functions 一节,以获取更多关于它们的信息。还可参阅由 Seeling Cheung 撰写的关于本主题的很棒的 教程。
这些存储过程使您能够以 CLOB 或表的形式发布一个或多个 XML 文档。所产生文档的特定标记模式和外观是由称为文档访问定义(DAD)的 XML 文件的内容管理的。可以在运行时覆盖 DAD 的内容,或者说,实际上可以实时地提供全新的 DAD。可以使用 WebSphere® Studio 来帮助您构建 DAD,以定义想要发布的文档。David Russell 撰写的 XML and WebSphere Studio Application Developer — Part 5:Exploring the RDB to XML Mapping Editor 一文描述了该过程。
Web 服务向程序提供了一种调用通常在 Web 上的其它程序的方法,程序中的输入参数和输出结果是作为 XML 传输的。您可以在 DB2 WORF(DB2 Web 服务对象运行时框架,Web Services Object Runtime Framework for DB2)中使用 DADX(文档访问定义扩展,Document Access Definition Extension)定义来注释 SQL SELECT 语句的结果,并将所生成的文档作为 Web 服务传递。通过 DB2 WORF,甚至可以将从存储过程返回的输出参数和结果集作为 XML 文档发布。
Christina Lau 和 Arthur Ryman 合著的题为 Developing XML Web services with WebSphere Studio Application Developer 的 IBM Systems Journal 文章中,介绍了关于如何使用 WebSphere Studio 构建 DADX 文件的信息。
例如,WebSphere Studio 对根据关系数据发布 XML 文档提供了帮助,例如,就象 Joan Haggarty 的 XML and WebSphere Studio Application Developer — Part 3:SQL and XML Together一文描述的那样。
DB2DD:选项很多啊!在这些发布选项中您推荐哪些呢?
Susan:如果您是在 UNIX 或 Windows 上使用 DB2 V8.1,请一定尝试一下用于发布的 SQL/XML 函数。我们认为您会喜欢它们的。您也可能会喜欢通过创建 SQL/XML 视图进行实验,以便可以将应用程序与所用的特定标记方案隔离开来。连同通过 DADX 定义实现的 DB2 Web 服务支持,还可以将 SQL/XML 发布函数的结果作为 Web 服务发布。上面提到的 SQL/XML 发布函数教程中包括 DADX 示例。
DB2DD:当从关系数据发布文档时有没有什么特别的考虑事项呢?
Susan:有几点需要考虑:
此外,DB2 XML Extender 拥有将所生成的 XML 文档放置在 WebSphere MQ 中的存储过程:dxxmqGen、dxxmqRetrieve、dxxmqGenClob 和 dxxmqRetrieveClob。XML Extender 手册以及由 Morgan Tong 与 Dan Wolfson 撰写的 文章中记录了这些存储过程。
DB2DD:那么您会推荐使用这些可能的保存方式中的哪些呢?
Susan:输出方法(内存、Web 服务或 WebSphere MQ)通常是根据应用程序需求确定的。因此,如果您在 UNIX 或 Windows 上使用 DB2 V8.1,那么我建议您在下列情况下使用 SQL/XML 函数:
DB2DD:好,接下来让我们来讨论转换。让我们假定有人向我发送了一些 XML 文档 — 转换和操作这些文档有哪些选项呢?
Susan:DB2 XML Extender 提供了许多通过 SQL 操作 XML 的函数。假定您允许数据库或系统使用 DB2 XML Extender,则您就可以使用这些函数。如果使用以常规 CLOB 或 VARCHAR 形式保存的 XML(函数分别对 XMLCLOB 类型或 XMLVARCHAR 类型进行操作),则可以将参数数据类型转换成常规 CLOB 或 VARCHAR。下面是 SQL 函数的分类摘要列表。您可以在 XML Extender 文档中找到更多信息。
可以使用这些函数处理您创建、接收和存储的 XML — 我未对操作 WebSphere MQ 和 XML 的 SQL 函数进行总结。
DB2DD:即使省略了不少内容,但还是有很多函数啊!让我们继续,讨论存储。要在 DB2 中存储 XML,我的选项有哪些呢?
Susan:您需要作出的第一个决定是:您是希望将 XML 连同标记原封不动地存储起来,还是剥离标记,只存储内容和属性值。后一种方法称为分解(shredding 或 decomposition)。您可以使用多种标准来确定最合适的存储方法:
可以将原封不动的 XML 存储与分解组合使用;例如,可以原封不动地存储 XML 保险索赔表单,同时用 XML 索赔表单 内容驱动现有索赔处理系统。如果您不需要所有内容或内容有重复,也可以进行部分分解,如果您愿意的话。
DB2DD:当我分解文档时,是否意味着我再也无法重新构建该文档了?
Susan:通常,当分解时,您会丢失空格和行结束符:数据库人员通常认为空格和行结束符之间的东西是重要内容。丢失空格会影响 XML 的布局,这意味着您也许不能精确地重组文档,无法将它恢复到接收时的外观。对于数据驱动的 XML,这通常无关紧要,而对于文档驱动的 XML,这通常会有影响。
DB2DD:对于存储,我可以使用什么存储机制?
Susan:总的来说:
DB2DD:对于通过不同来源生成的 XML 会怎么样呢?我能存储它吗?
Susan:是的,和发布一样,可以存储通过各种方式生成的 XML,如 图 3 所示:
DB2DD:有很多种可能性。您能否指明哪种功能适用于哪种情况?
Susan:表 1 是可用性摘要表,也许它会有助于回答这个问题。当然,事情总是在不断变化的。
表 1. 功能和平台摘要
| 功能 | UNIX 和 Windows 上的 DB2 | iSeries™ 上的 DB2 | zSeries™ 上的 DB2 |
| SQL/XML 发布 | V8.1 | 计划中 | 计划中 |
| XML Extender | V7.2 | V5.1 | V7 |
| XML Extender MQ 函数和存储过程 | V7.2 | 计划中 | 计划中 |
| MQ 函数 | V7 | 计划中 | V7 通过 PTF UQ71197 获得 |
| 通过 DB2 WORF 的 Web 服务 |
|
请参阅 WebSphere 产品页面 | 计划中 |
DB2DD:当发布、转换或存储 XML 时,是否有特定于平台的问题?
Susan:在 iSeries 或 zSeries 上使用 EBCDIC 时要清楚一些要点:
这里是一些仅适用于 zSeries 的要点:
DB2DD:使用 XML 时会有什么风险吗?
Susan:“风险”这个词可能太严重了些,但有许多方面是需要特别关注的,包括:
DB2DD:最后,您是否还有一些建议?
Susan:DB2 和 XML 关系很密切。主要的方向包括:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9403012/viewspace-163505/ ,如需转载,请注明出处,否则将追究法律责任。