您的位置: 网界网 > 周报全文 > 正文

[周报全文]XML技术讲座之十一XPointer语言

2001年02月12日 00:00:00 | 作者:佚名 | 来源:$page.getBroMedia() | 查看本文手机版

摘要:XML技术讲座之十一XPointer语言

标签
XML技术讲座之十一
XPointer语言
□ 方正技术研究院 XML中国论坛网(www.xml.net.cn) 王绪胜

XPointer语言的主要功能是在XML文件中定位片段(fragment),在XML链接中,通常将它加到URL的结尾,更明确地表示目标资源。但是XPointer语言的使用并不局限于XML链接,它可以用于需要文档内部定位的任何地方,比如在可视化的XML编辑器中用于描述用户选择的节点或字符串。

XPointer语言概述

HTML中的文件内部定位非常简单,就是在目标文件中插入一个命名锚(named anchor),然后用链接元素< A >的href属性指定链接的位置即可。但这种机制要求你同时控制目标文件和开始文件,而这并不总是成立。由于XML是结构化的文件,借助文件结构进行内部定位就成为可能,这就是XPointer语言,它支持在XML文件中定位元素、属性、字符串等内部结构。

XPointer语言基于XSLT中的XPath,支持完整形式(Full XPointers)、无修饰名称(bare names)或子节点序列(Child Sequences)三种形式以定位片段。完整形式的XPointer的形式为xpointer(表达式),其中表达式用于定位计算,得到需要的资源片断,所有的定位计算都基于一个已知节点,该节点称为上下文节点。一般而言,最初始的上下文节点总是文档中的确定位置,如文档的根节点(注意:根节点不是根元素,它是一个抽象的节点,是根元素的父节点,用“/”表示)、文档中具有确定ID值的元素(用函数id()表示)、当前元素(用函数here()表示)等。无修饰名称只有一个名称,表示文件中ID等于指定名称的元素,它提供了与HTML文件兼容的方式以定位文档片段。子节点序列由名称、一系列数字和“/”组成的序列,其中“/”用于分隔名称和数字,数字n表示前面定位元素的第n个直接子元素,子节点序列必须以“/1”或名称打头,表示该序列从根元素或指定ID的元素开始。实际上,后面两种形式都是第一种形式的简写,下面是几种形式的XPointer例子。

xpointer(/child::lang/descendent::body[position()<=2])

xpointer(id("location")) 简写为:location

xpointer(/child::*[position()=1]/child::*[position()=2]) 简写为: /1/2

xpointer(id("loc")/child::*[position()=3]/child::*[position()=4]) 简写为:loc/3/4

XPath位置步

与XPath语言一样,XPointer语言中的表达式是多个位置步形成的一个位置路径,每个位置步间用“/”分隔,前面位置步的运算结果构成后面位置步的上下文节点。位置步的形式为axis::node-test[prediates],它包括三个部分:

关键字,有且仅有一个,它表示结果节点与上下文节点的关系;

节点测试,有且仅有一个,它表示结果节点的类型或名称;

谓词,零到多个,它可以是用于限制结果的任意表达式。

在下面的例子中,第一个“/”表示文档的根节点,“child::lang”为第一个位置步,“descendent::body[position()<=2]”为第二个位置步,这两个位置步链接形成一个位置路径。在第二个位置步中,“descendent”是关键字,“body”是节点测试,“position()<=2”是谓词。

/child::lang/descendent::body[position()<=2]

关键字的运算基于上下文节点,如果上下文节点有多个(+微信关注网络世界),它将对上下文节点逐一进行计算。

节点测试用于测试节点类型或名称,只有那些满足节点测试的节点才会保留在初始的结果集中,以待下一步的谓词过滤。

谓词是对结果集进行过滤的表达式,一般是布尔型,其他类型的表达式可以转化为布尔型。XPointer中,表示位置的谓词是最常用的谓词,包括几个谓词函数position()、last()等。

XPointer扩展和转义

前面介绍的定位方式来源于XPath,它们同时适用于XPath和XPointer,但是XPointer对XPath进行了扩展。

由于XPointer不是单独出现,而一些字符不能直接出现在包含XPointer的上下文中,因此这些字符必须转义出现。首先,XML文件中不能直接出现的“<”、“&”、“"”、“’”必须转义出现,转义方法与XML规范相同;其次,XPointer出现在URI中时,不能直接出现在URI中的字符必须转义出现,主要包括非ASCII字符,转义为“%HH”形式,HH是该字符的十六位编码;另外,XPointer语言要求不匹配的括号必须转义,转义方法是在不匹配的括号前面加上“^”,如果表达式中出现“^”,则在前再加一个“^”。(XPath位置步、Xpointer扩展详细内容请见www.cnw.com.cn)

[责任编辑:程永来 cheng_yonglai@cnw.com.cn]