读XML in a Nutshell (8)
2006-06-29 10:14
330 查看
本篇包括Chapter 11 XPointers。
XPointer是通过在一般的url后面加#号来指定某个url里面的某些内容。它基于xpath,同时也对xpath进行的一些扩充,在数据类型上增加了point跟range两种类型,同时增加了遇这些类型相关的方法(除此之外还有一些与xpoi nter相关的特殊方法)。在xpath的基础上,它也提供了一些常用xpath的简化表达方式。
要点如下:
1.使用xpath的格式为xpointer(xpath expression),在此之上,xpointer可以由若干上述表达式构成,如果第一个表达式无法定为到任何内容,则采用第二个表达式,以此类推。如果xpointer里面用到的某些字符在url下是不合法的,则必须用UTF-8 encoding来escape。XPointer可以跟xlink混合使用,同时如果某个xpointer是指向当前文档,则可省略url,直接用#开头,例子如下: http://www.cafeconleche.org/people.xml#xpointer(//name[position( )=1])
#xpointer(//first_name)xpointer(//last_name)xpointer(//middle_initial)
2.当要定位到含有ID类型的attribute的element时,可以直接在#后面加id值,当要选择root node下面的第n个子节点的第m个子节点(以此类推),可以使用/n/m/i/j/k的表达方式。例子如下:
<div1 id='sec-intro'> http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#sec-intro http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#/1/2/1
3.当要使用到namespace的时候,可以提前用xmlns(prefix=URI)来声明,当需要用到多个namespace的时候,可以用多个xmlns来声明,需要注意的是,xml文档中的namespace声明不会影响xpointer中的namespace声明,所以任何需要被xpointer用到的namespace都必须明确声明,我想这应该是为了保证xpointer的可移植性,就是在某份xml文档中的xpointer,只要被复制下来,放到任何地方都能指向同个地址。
4.XPointer中的point被定义如下,如果context node是只含有string,那么point就在string的前后以及每个character的中间,否则,point就在element的start tag之后,end tag之前,以及每个子node的中间。Range则由两个point构成,表示这两个point中间的内容,range所表示的内容不一定要是well formed。跟point相关的函数有start-point(),end-point()等,跟range相关的函数有range(),range-to(),range-inside(),string-range()。
5.XPointer中有一些特殊的函数,比如here()表示包含这个xpointer的node,origin()表示在历史纪录中含有打开当前文档的link的那个node。
XPointer是通过在一般的url后面加#号来指定某个url里面的某些内容。它基于xpath,同时也对xpath进行的一些扩充,在数据类型上增加了point跟range两种类型,同时增加了遇这些类型相关的方法(除此之外还有一些与xpoi nter相关的特殊方法)。在xpath的基础上,它也提供了一些常用xpath的简化表达方式。
要点如下:
1.使用xpath的格式为xpointer(xpath expression),在此之上,xpointer可以由若干上述表达式构成,如果第一个表达式无法定为到任何内容,则采用第二个表达式,以此类推。如果xpointer里面用到的某些字符在url下是不合法的,则必须用UTF-8 encoding来escape。XPointer可以跟xlink混合使用,同时如果某个xpointer是指向当前文档,则可省略url,直接用#开头,例子如下: http://www.cafeconleche.org/people.xml#xpointer(//name[position( )=1])
#xpointer(//first_name)xpointer(//last_name)xpointer(//middle_initial)
2.当要定位到含有ID类型的attribute的element时,可以直接在#后面加id值,当要选择root node下面的第n个子节点的第m个子节点(以此类推),可以使用/n/m/i/j/k的表达方式。例子如下:
<div1 id='sec-intro'> http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#sec-intro http://www.w3.org/TR/1999/REC-xml-names-19990114/xml-names.xml#/1/2/1
3.当要使用到namespace的时候,可以提前用xmlns(prefix=URI)来声明,当需要用到多个namespace的时候,可以用多个xmlns来声明,需要注意的是,xml文档中的namespace声明不会影响xpointer中的namespace声明,所以任何需要被xpointer用到的namespace都必须明确声明,我想这应该是为了保证xpointer的可移植性,就是在某份xml文档中的xpointer,只要被复制下来,放到任何地方都能指向同个地址。
4.XPointer中的point被定义如下,如果context node是只含有string,那么point就在string的前后以及每个character的中间,否则,point就在element的start tag之后,end tag之前,以及每个子node的中间。Range则由两个point构成,表示这两个point中间的内容,range所表示的内容不一定要是well formed。跟point相关的函数有start-point(),end-point()等,跟range相关的函数有range(),range-to(),range-inside(),string-range()。
5.XPointer中有一些特殊的函数,比如here()表示包含这个xpointer的node,origin()表示在历史纪录中含有打开当前文档的link的那个node。
相关文章推荐
- 读XML in a Nutshell (3)
- 读XML in a Nutshell (5)
- 读XML in a Nutshell (9)
- 读XML in a Nutshell (2)
- 读XML in a Nutshell (10)
- 读XML in a Nutshell (6)
- 读XML in a Nutshell (1)
- 读XML in a Nutshell (7)
- 读XML in a Nutshell (4)
- J2SE 1.5 in a Nutshell 中文版
- J2SE 1.5 in a Nutshell 中文版 --1.5新特性
- ASP in a Nutshell
- J2ME in a Nutshell(翻译版) :第二章 连接有限设备配置CLDC,2.2CLDC类库
- J2SE 1.5 in a Nutshell 中文版(转载)
- Advanced C#(Chapter 4 of C# 4.0 in a nutshell)
- Framework Fundamentals(Chapter 6 of C# 4.0 in a nutshell)
- J2SE 1.5 in a Nutshell 中文版
- C# 5.0 in a Nutshell 读书笔记(一)
- .Net Code Listings for C# 5.0/6.0 in a Nutshell
- 《C#3.0 in a Nutshell,3rd Edition》之C#3.0和.net3.5基本介绍篇