简述XPath,XSLT,XLink与XPointer
XSLT、XLink 和 XPointer 都是 W3C 标准。XSLT 和 XPath,以及 XSL Formatting Object (XSL-FO) 构成了 W3C eXtensible Stylesheet Language (XSL) 系列规范。
XSLT、XLink 和 XPointer 都是 W3C 标准。XSLT 和 XPath,以及 XSL Formatting Object (XSL-FO) 构成了 W3C eXtensible Stylesheet Language (XSL) 系列规范。
表示:XSLT 广泛使用 XPath 进行匹配――也就是,测试节点是否匹配指定模式。XSLT 指定了 XPath 使用的上下文。如果想使用 XSLT,就应该了解 XPath。在 关于本教程中使用的例子 中,您看到了 AuctionItemSummary-Base.xsl 样式表包含了 XPath 表达式。XSLT 使用这些 XPath 表达式,在源文档中查找匹配条件的元素,也使用它们来显示结果文档中的信息。XSLT 使用 XPath 函数来执行算术和字符串操纵操作。
链接:XLink 在 XML 中提供了 HTML 超链接概念的一般化。XLink 为要插入 XML 文档的元素提供了某种语法,以便把资源链接在一起,及描述它们的关系。这些链接可以是单向的,比如 HTML 的超链接,或者更加复杂的。XLink 使用 XPointer 来查找资源。
指向:XPointer 是 XPath 的扩展,提供了到 XML 文档及其内部的寻址。XPointer 一般化了 XPath 节点的概念,使用了 XPointer 位置、点和范围的概念。XPointer 也指定了在 XPath 计算过程中使用的上下文,并提供了在 XPath 中不可用的其他函数。
一句话小结:
XML:其他技术的基础(数据)。
XML Schema:数据格式规则。
XSLT:数据表示/匹配。
XLink:链接。
XPointer and XPath:寻址。
XML语法
一.位置路径
1.路径
位置路径是 XPath 中最有用也是应用最广泛的特性。位置路径是 XPath 表达式的特化(参见 表达式)。位置路径标识了和上下文有关的一组 XPath 节点。XPath 定义了两种语法:简化语法和非简化语法。
位置路径有相对和绝对两种类型。
相对位置路径由使用 / 分隔的定位步序列组成。比如:
list/item[currentPrice<20.0]
绝对位置路径由 / 和后面可选的相对位置路径组成,其中 / 表示根节点。
/list/item[currentPrice<20.0]
XPath 表达式 /list 就确定了一个单独的节点――list 根元素。
The XPath 表达式 /list/item 确定了所有 item 元素。
XPath 表达式可以引用属性及 XML 文档中的元素。当引用属性时,使用 @ 字符。例如,下面的 XPath 表达式确定了 currentPrice 元素,其 currency 属性包含值 EUR:
/list/item/currentPrice[@currency="EUR"]
@ 用于引用属性。比如,位置路径 @currency 标识了 currency 属性。list/item[@private] 标识带有 private 属性的 item 元素,意即 AuctionItemList.xml 中的所有 item 元素。
* 用于引用上下文结点的所有子元素。@* 用于引用上下文结点的所有属性。
[] 也可用于引用有序序列中的特定元素。比如,list/item[2] 代表第二个 item 元素。实际上 [] 是一个谓词(参见谓词)。
// 用于引用上下文节点的所有孩子。比如,//item 表示所有的 item 元素,而 //list/item 引用以 list 为父元素的所有 item 元素(在该例中即所有的 item 元素)。
. 用于引用上下文节点自身。比如,. 选择上下文节点,而 .//item 代表作为上下文节点孩子的所有 item 元素。
.. 用于引用上下文节点的父节点。比如,在第一个bidIncrement 元素的上下文中, ../item 就表示第一个 item 元素。
2.谓词
谓词在位置路径中用于筛选当前节点集。谓词包含一个 boolean 表达式(或者很容易转化成 boolean 值的表达式)。用这个布尔表达式测试当前节点集的每个成员,如果表达式成立则保留该成员否则丢弃。谓词放在方括号[]中。比如下面的位置路径:
list/item/currentPrice[@currency="EUR"]
在计算过程中,AuctionItemList.xml 中所有的 currentPrice 元素都放在选择的节点集中。然后计算谓词 @currency="EUR",货币中不包含值 EUR 的 currentPrice 元素被抛弃。
谓词也可以使用关系运算符 >、<、>=、<= 和 !=。
二.表达式
1.布尔表达式
XML 文档中包含 XPath 表达式时,必须遵循 XML 1.0 的结构良好性规则,任何 < 或 <= 字符必须分别用 < 和 <= 表示。比如,XPath 表达式 bidIncrement < 5 在 XPointer 中是合法的,但是在 XSLT 文档中必须写成 bidIncrement < 5。
2.数字
XPath 数字是 64 位双精度浮点数。XPath 数字包括“非数字” NaN 值、正无穷和负无穷、正零和负零。
XPath 提供的数值运算符有:+(加)、-(减)、*(乘)、div(除)和 mod(整除求余)。
提示:减法(-)运算符的前面必须有空格,因为 XML 允许字符串中包含“-”字符。
下面是 XPath 数字表达式的一些例子:
7 + 3 返回 10
7 - 3 返回 4
7 * 3 返回 21
7 div 3 返回 2.3333333333333335
7 mod 3 返回 1
3.字符串
XPath 中的字符串使用引号(' 或 ")包围起来。如果 XML 文档中的 XPath 字符串包含引号,可以选择:
分别使用 ' 或 " 引起来。比如,description = 'New 256m "USB" MP3 player'
三.函数库
XPath 定义了一组函数,称为核心函数库。每个函数从三个方面来定义:
(1)函数名
(2)返回类型(必须的,不能使用 void)
(3)参数类型(可以没有参数或者带有多个参数,参数可以是必需的也可以是可选的)
函数被分成四类,以下分别介绍:
1.节点集函数
节点集函数提供关于一组节点(一个或多个节点)的信息。常用的节点集函数有:
last()――返回一个称为上下文大小的数字,即给定上下文中的节点数,不同于最后一个节点。
position()――返回一个称为上下文位置的数字,集当前节点在给上下文节点集(列表)中的位置。比如,可以用表达式 position()=last() 测试处理的是否是集合中的最后一个节点。
count(node-set)――返回实参节点集中的节点数。比如,在 AuctionItemList.xml 文档的上下文中,count(//item) 返回 item 元素的个数,即 7。
id(object)――返回一个节点集,根据在 DTD 中声明为 ID 类型的唯一标识符选择元素。因为在 AuctionItemList.xml 中没有使用 DTD,这个例子中得到的节点集总是空集。Id("ItemId0001") 返回一个空节点集。
XPath 还定义了和节点名及名称空间有关的其他三个函数:
local-name()
namespace-uri()
name()
2.字符串函数
通过字符串函数您可以操纵字符串。常用的字符串函数有:
string()――把参数对象或者上下文结点转化成字符串。合法的参数包括节点集、数字、布尔值或者其他任何类型――但是对于最后一种情况转换的结果不可预料。建议使用 XSLT 函数 format-number 把数字转化成字符串,或者使用 XSLT 元素 xsl:number 提供给用户。
concat()――以两个或更多字符串作为参数并返回这些字符串的连接。比如,concat("Original ","recording ","Blue Train LP record") 返回 "Original recording Blue Train LP record"。
starts-with()――如果第一个字符串参数以第二个字符串参数开始则返回 true,否则返回 false。比如,starts-with("Miles Smiles album, CD", "Miles") 返回 true。
contains()――如果第一个字符串参数包含第二个字符串参数则返回 true,否则返回 false。比如,contains("Miles Smiles album, CD", "album") 返回 true。
其他的 XPath 字符串函数包括:substring()、substring-before()、substring-after()、string-length()、normalize-space() 和 translate()。
3.布尔函数
布尔函数用于把一个对象或字符串转化成 true 或者 false,或者直接获得真或假的值。布尔函数有:
boolean()――根据以下规则返回作为参数传递的对象转换成布尔值的结果:不同于 0 或者 NaN 的数字为 true;非空的节点集或者字符串为 true。其他类型的对象已不可预料的方式转换。
not()――如果作为参数传递的布尔值为 false 返回 true,否则返回 false。
true() 和 false()――分别返回 true 或 false。这些函数很有用,因为在 XPath 中 true 和 false 被看作是普通的字符串而不是真和假的值。
lang()――如果上下文节点的语言和字符串参数中指定的语言相同,或者是它的一种子语言返回 true,否则返回 false。
4.数字函数
数字函数是 XPath 的数值函数,都返回数字。其中包括:
number()――把可选的对象参数(如果没有指定参数则使用上下文节点)转化成数字,转换的规则如下:
布尔值 true 转换成1,false 转换成 0。
字符串转换成合理的数字。
节点集首先转换成字符串,然后把这个字符串转换成数字。
其他类型对象以不可预料的方式转换。比如,number("250") 返回 250,而 number("miles1965") 返回 NaN。
sum()――对节点集参数中的所有节点应用 number() 函数后返回它们的和。
floor()――返回不大于数字参数的最大整数数字。比如,floor(2.75) 返回 2。
ceiling()――返回不小于数字参数的最小整数数字。比如,ceiling(2.75) 返回 3。
round()――返回和数字参数最接近的整数数字。比如,round(2.75) 返回 3。