XML 消息和文档中名称空间的广泛使用对应用程序开发人员如何编写查询有很大的影响。不幸的是,名称空间与流行的查询语言(例如 SQL/XML 和 XQuery)之间的关系往往遭到误解。本文通过几个常见的场景,帮助您理解如何查询包含名称空间的 XML 数据
对某些人而言,XML 名称空间是一剂良药;而对另外一些人而言,XML 名称空间则是一块绊脚石。然而,无论您喜欢它们还是讨厌它们,XML 名称空间无处不在。事实上,很多开发人员认为它们必不可少。
打开一个 Web服务定义语言(WSDL)文件或 SOAP 消息,将一个字处理文档转换成 XML,或者浏览行业相关的 XML 模式,常常可以发现其中有对多个名称空间的引用。如果想查询 XML 数据,那么就必须考虑这些名称空间,因为名称空间会影响一切东西。(所谓一切东西 是有点儿夸张。不过名称空间对查询的语义的确有着巨大的影响。)
如果忽视了名称空间的存在,那么所编写的查询很可能得不到期望的结果。这算是一个坏消息。好消息是,弄懂如何正确地查询包含名称空间的 XML 数据并不需要花太多时间。本文就可以助您起步。
XML 名称空间简介
XML 名称空间是一项 W3C XML 标准。实际上,XPath、XML Schema、XQuery 和其他 XML 技术都支持名称空间。本文并不提供关于名称空间的详细教程,而只是简述一些关键概念。
XML 名称空间允许 XML 文档将来自不同词汇表的元素和属性混合在一起,而不会产生歧义和处理上的冲突。XML 名称空间使得公司可以为他们的 XML 数据使用一个通用的惟一标记词汇表(元素和属性名称),并可以与其他组织共享这个词汇表。有些公司依赖于名称空间来帮助组合来自不同来源的 XML 数据,随业务需求的变化而更新 XML 模式,以及促进文档的重用。
对于应该如何使用名称空间这个问题,很多 IT 专家意见不一。有人提倡在文档和模式中经常、广泛地使用名称空间,而其他人则认为应该慎用或者不用。我只准备解释如何查询包含名称空间的 XML 数据,因为您在工作当中很可能会遇到名称空间。
那么,什么是名称空间?名称空间是由一些惟一的 XML 元素名称和属性名称组成的一个集合,这些名称由一个统一资源标识符(Uniform Resource Identifier,URI)标识。这些 URI 常常看上去像是 Web 站点 URL(也就是说,它们包括像 http://www.w3.org 这样的域名),但有时候也使用统一资源名称(Universal Resource Name,URN)。不管是何种情况,URI 并不真正从指定位置检索数据。如果 URI 以 URL 的形式出现,那么甚至不需要引用一个实际的 Web 页面;它可以是一个 “伪” URL,只是作为一个标识符。
XML 名称空间使用 xmlns 关键字来声明。清单 1 显示了用于一个 XML 文档中元素的两个有效名称空间声明。
清单 1. 示例名称空间声明
| . . . <employee xmlns="http://www.bogus.com/employee/1.0"/> <p: xmlns:p="urn:xmlns:bogus:partner1.0"/> . . . |
注意到这两个名称空间声明在指定的 URI 类型上的区别吗?实际上,

RSS订阅