【xml】深入认识XPath 2.0

来源:
http://www.searchsoa.com.cn/showcontent.aspx?aid=4031

 

在2007年1月23日W3C批准的很多新的推荐标准中,你会发现崭新的XPath版本——即2.0版本——值得关注。这篇正式名称为TR/xpath20/XML Path Language (XPath) 2.0的文档总结出了所谓的XML中的三位一体,即XPath 2.0、XQuery 1.0和XSLT 2.0,它们都在最近被更新。用推荐标准中的原话说:“XPath 2.0是一种表达式语言,允许按照XQuery/XPath Data Model(XDM)中定义的模型对数值的处理。这种数据模型提供了对XML文档和整型、字符串及布尔型等原子数据类型的数据的树状表示,同时还提供序列类型变量,这种序列类型变量可能同时包含对XML文档中节点的引用和原子类型的数据。XPath表达式的结果可能是输入文档中的节点选集,或者式原子类型数据,或者更一般,任何数据模型允许的序列类型变量。”

  用更简单的术语来表述,这就意味着XQuery和XPath可以结合起来让XML用户定位和查询XML文档,同时对这些文档的树状表示进行遍历以便进行系统级的端到端处理。XQuery负责查询,而XPath负责遍历。XPath表达式提供了一种方法来定位任何XML文档的树状表示中的某一个、一些或者所有的节点。

  XPath 1.0版本和2.0版本中的区别在于2.0版本中加入了更丰富的数据类型,同时获得了访问类型信息的能力,这些类型信息是XML Schema中用于证实XML文档合法性的。事实上,严格来说XPath 1.0是XPath 2.0的子集,后者的80%来源于前者。剩下的20%是最让人感兴趣的,它包括了下面的材料和机制:

  XPath和XQuery经常被视为同一个整体的两个部分,因此你必须理解从XPath 2.0的需求方面来理解XPath 2.0,也需要从XML Query language的需求方面来理解它。

  XQuery相关的一些添加物包括查询包装器(query wrapper),它处理名字空间定义、模式导入和功能定义,还包括元素的构造器。因为XSLT 2.0是XML三位一体中的另一方,但是它并不需要这些功能(它有自己的一套),这一部分并不属于XQuery和XSLT之间的共同交集。

  模式的支持意味着XPath 2.0支持XML 模式中所有的原始类型(这包含19种简单的类型(比如日期和时间)、URI和其他的复杂类型,比如数字、字符和其他的原子类型)。各种处理和构造XML模式中数据类型的相关的功能都出现在XPath 2.0版本中,这些在“XQuery 1.0和XPath 2.0功能和操作符”中有介绍。

  上面提到的XDM文档中对XPath 2.0表达式能够产生的数据类型有完整的描述。从较高的层次来说,我们只需注意这些表达式可以产生简单类型的数据或者由节点和简单类型数据组成的序列类型变量(在前面的摘要中谈到)。

  序列类型是XPath中的焦点,而序列可以通过Evan Lenz在他为XML.com写的文章“What's New in XPath 2.0”中提到的一些规则更好的理解:

  1. 任何东西都是序列:这是因为XPath 2.0所有的表达式都返回序列。

  2. 序列很浅:序列之间不会发生嵌套,如果你试图在序列中嵌套序列,当然在句法上可以接受,不过你得到的是一个“膨胀的”序列,子序列和包含它的序列仍然是依次排列的。

  3. 序列是有序的:XPath 2.0清楚的理解和表示序列中的次序,可以保持或者创造任何你指明的顺序作为结果。在XPath 2.0中,序列取代了1.0中所谓的节点集(node-sets)。

  Xpath加入了一些重要的关键字包括序列操作符,比如for、条件表达式、定量修饰符(quantifiers)和集合操作(集合的交、差和并)。同样还有一个except操作符,它允许一项操作应用于一个序列中除了特定的成员之外的其他所有成员。你也会发现很多类型映射和强制转换(coercion)的关键字。

  我必须同意Lenz对XPath 2.0的断言,尽管变化的比例很小,XPath 2.0是对XPath 1.0的修订和扩充。它提供了很多强大的功能,并且XML内容程序员会觉得这些功能实用有趣。

 

你可能感兴趣的:(xml)