CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

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

作者: C. M. Saracco,  出处:developerWorks 中国, 责任编辑: 叶江, 
2007-07-02 14:19
  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 文档中元素的两个有效名称空间声明。 有一个基于 URL 的 URI,而 元素则有一个基于 URN 的 URI。

  清单 1. 示例名称空间声明

. . .
<employee xmlns="http://www.bogus.com/employee/1.0"/>
<p: xmlns:p="urn:xmlns:bogus:partner1.0"/>
. . .

  注意到这两个名称空间声明在指定的 URI 类型上的区别吗?实际上, 元素包括一个定义且包含一个前缀(在这个例子中为 p)的名称空间。名称空间前缀的使用是可选的,但是这更像是一种风格上的选择。如果一个元素有名称空间前缀,那么它就属于为前缀定义的名称空间;但是,它的子元素除非也加前缀,否则不属于这个名称空间。包含名称空间声明但没有名称空间前缀的元素(例如前一个例子中的 元素)属于被声明的名称空间。而它们的子元素除非特别覆盖名称空间,否则也属于这个名称空间。最后,如果无前缀的元素没有显式的名称空间声明,那么将被绑定到作用域内的默认名称空间。如果没有那样的绑定,那么该元素就不属于任何名称空间。

共2页。 1 2 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i