XML中XPointer的概念

        XPointer,即XML指针语言(XML Pointer Language),在 2003 3 25 成为了W 3C 推荐使用的标准,用于显示XML文件中的特定位置及要素的规格。它可以通过URI引用XML文档的片段。XLink可以链接资源,通过把XPointerXLink联合使用,就可以链接资源的任意部分,而不是整个资源。XPointer可以链接到特定位置,甚至可以链接XML文档中的某个位置范围。它还可以使用字符串来匹配搜索XML文档。

    HTML中,有一个类似于XPointer的标识<A NAME=>,它的作用就是指明了可以链接到被<A>元素标识的位置,例如有一HTML文档link.html,如例9-18所示。

9-18

<html>

<body>

<a name="section1">section1<br></a>

<a name="section2">section2<br></a>

<a name="section3">section3<br></a>

</body>

</html>

    链接到该文档的HTML文档seclink.html如例9-19所示。

9-19

<html>

<body>

<a href="link.html#section1">section1 here<br></a>

<a href="link.html#section2">section2 here<br></a>

<a href="link.html#section3">section3 here<br></a>

</body>

</html>

 

   HTML

利用符号 # 指定了所要链接到的目标文档的锚点,浏览器便会定位显示出链接到目标文档的具体位置。读者可以在 link.html 文档的三个节中多添加些内容,以查看效果。但是使用 HTML 链接文档 HTML 锚点必须 先声明,还有声明的锚点必须链接到整个文档,这是使用 HTML 链接的缺点。

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

1  xpointer(/child::sec/descendent::section[position()=5])

2  xpointer(id("section")) 简写为:section

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

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

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

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

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

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

    xpointer表达式第一个例子中,第一个/表示文档的根节点,child::sec为第一个位置步,descendent::section[position()=5]为第二个位置步,这两个位置步链接形成一个位置路径。在第二个位置步中,"descendent"是关键字,"section"是节点测试,"position()=5"是谓词。该例子表示查找文档中sec子元素下的第1-5section元素。

    第二个例子表示查找idsection的元素,该例可以简写为section

    第三个例子中child::*[position()=1]为第一个位置步,*表示所有的子元素。child::*[position()=2]为第二个位置步。这个例子表示的是查找根元素的第1个子元素的第2个子元素。

    第四个例子表示查找idloc的元素的第3个子元素下的第4个子元素。

    通过XPointer的几个例子,读者可能已经了解XPointer的基本结构及含义了,下面将给出一个具体的示例来介绍XPointerXML文档中的基本用法。目标文档如例9-20所示。

9-20

<?xml version="1.0"?>

<图书馆>

 

<图书 书名="C#技术内幕" id="1101">

  <封面 url="http://www.itzcn.net/book/cover01.jpg" />

  <出版社>机械工业出版社</出版社>

  <简介>

这是一本C#编程语言的指南和参考书。C#是一种崭新的面向对象

的编程语言。它强调以组件为基础的软件开发方法。

  </简介>

</图书>

 

<图书 书名="时间简史" id="5105">

  <封面 url="http://www.itzcn.net/book/cover51.jpg" />

  <出版社>湖南科学技术出版社</出版社>

  <简介>

《时间简史》以最通俗的语言,对一些最古老的问题做了阐述,

    向人们介绍了什么是宇宙论,以及宇宙论最新的发展状况。

  </简介>

</图书>

 <, /o:p>

</图书馆>

    目标文档中定义了图书馆的两本图书,两本图书都有各自的id标识。链接文档如例9-21所示。

9-21

<?xml version="1.0"?>

<图书借阅 xmlns:xlink="http://www.w3.org/1999/xlink">

 

<图书 xlink:type="simple"

  xlink:href="http://www.itzcn.net/book/9-20.xml#xpointer(id('1101'))">

  <描述 xlink:type="simple"

  xlink:href="http://www.itzcn.net/book/cover01.jpg">

  学习C#的书籍

  </描述>

</图书>

 

<图书 xlink:type="simple"

  xlink:href="http://www.itzcn.net/book/9-21.xml#xpointer(id('5105'))">

  <描述 xlink:type="simple"

  xlink:href="http://www.itzcn.net/book/cover51.jpg">

  科技图书

  </描述>

</图书>

 

</图书借阅>

    链接文档描述了图书借阅的情况。链接类型为简单链接。例9-22第一个图书元素声明中

xlink:href="http://www.itzcn.net/book/9-20.xml#xpointer(id('1101'))">

    通过属性xlink:href指定的目标文档9-20.xml使用XPointer链接到目标文档id1101的元素,从而显示该元素所包含的信息。这一句可以简写为:

xlink:href="http://www.itzcn.net/book/9-21.xml#1101">

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值