查询包含名称空间的XML数据

http://tech.ddvip.com   2007年07月03日    社区交流

内容摘要:如果想学习关于 XQuery 与 SQL/XML 的基础以外的更多知识,那么必须理解文档和消息中的 XML 名称空间对查询的语义的影响。否则,就可能收到意外的结果。幸运的是,学习如何查询包含名称空间的 XML 文档并不难。本文提供了一些例子来帮助您起步。

  下面看看如何重新编写 清单 12 中的 XQuery,在其中使用一个名称空间前缀,而不是使用默认名称空间:

  清单 16. 在 XQuery 中使用名称空间前缀xquery declare namespace x="urn:xmlns:saracco-sample:company1.0";
db2-fn:xmlcolumn('PARTNERS.DETAILS')/x:company

  类似地,下面看看如何重新编写对应的 SQL/XML,以便在其中使用名称空间前缀:

  清单 17. 与前一 XQuery 等效的 SQL/XMLselect xmlquery('declare namespace x="urn:xmlns:saracco-sample:company1.0";
 $c/x:company' passing details as "c")
from partners
where xmlexists('declare namespace x="urn:xmlns:saracco-sample:company1.0"; 
 $c/x:company' passing details as "c") %

  查询中使用的名称空间前缀可以与数据中使用的前缀不同。需要注意的是,查询中的前缀被绑定到数据中所使用的同一个名称空间 URI。可以在查询中使用一个带前缀的名称空间来检索文档中有默认名称空间的元素,或者进行相反的操作。

  案例 5:检索 XML 片段

  案例 1 到 4 都是检索 DB2 中存储的整个 XML 文档,实际上往往需要编写只检索文档的某些片段的查询。当然,名称空间的存在对这样的查询也有影响。

  考虑这样一个 XQuery,它指示 DB2 检索其中的 <company> 元素及其子元素 <name> 属于一个相同的名称空间(urn:xmlns:saracco-sample:company1.0)的所有业务伙伴的公司名称:

  清单 18. 检索属于特定名称空间的公司名称的 XQueryxquery declare namespace c="urn:xmlns:saracco-sample:company1.0";
db2-fn:xmlcolumn('PARTNERS.DETAILS')/c:company/c:name %

来源:ibm.com    作者:C. M. Saracco    责编:豆豆技术应用

正在加载评论...