XQuery 初学者入门教程:XQuery 术语和语法
作者:未知 来源:www.jz123.cn 发布时间:2007-10-26 8:40:51 发布人:圈圈
XQuery 术语
在 XQuery 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档节点(或称为根节点)。
XQuery 术语
节点
在 XQuery 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
请看下面的 XML 文档:
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
上面的 XML 文档中的节点例子:
<bookstore> (文档节点) <author>J K. Rowling</author> (元素节点) lang="en" (属性节点)
基本值(或称原子值,Atomic value)
基本值是无父或无子的节点。
基本值的例子:
J K. Rowling "en"
项目
项目是基本值或者节点。
节点关系
父(Parent)
每个元素以及属性都有一个父。
在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
子(Children)
节点元素可有零个、一个或多个子。
在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
同胞(Sibling)
拥有相同的父的节点。
在下面的例子中,title、author、year 以及 price 元素都是同胞:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title 元素的先辈是 book 元素和 bookstore元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
后代(Descendant)
某个节点的子,子的子,等等。
在下面的例子中,bookstore 的后代是 book、title、author、year 以及 price元素:
<bookstore> <book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> </bookstore>
XQuery 语法
XQuery 对大小写敏感,XQuery 的元素、属性以及变量必须是合法的 XML 名称。
XQuery 的基础语法规则:
一些基本的语法规则:
- XQuery 对大小写敏感
- XQuery 的元素、属性以及变量必须是合法的 XML 名称。
- XQuery 字符串值可使用单引号或双引号。
- XQuery 变量由 “$” 并跟随一个名称来进行定义,举例,$bookstore
- XQuery 注释被 (: 和 :) 分割,举例,(: XQuery 注释 :)
XQuery 条件表达式
"If-Then-Else" 可以在 XQuery 中使用。
请看下面的例子:
for $x in doc("books.xml")/bookstore/book returnif (
$x/@category="CHILDREN")
then
<child>{data($x/title)}</child>else
<adult>{data($x/title)}</adult>
请注意 "If-Then-Else" 的语法:if 表达式后的圆括号是必需的。else 也是必需的,不过仅仅写 “else ()” 也是可以的。
上面的例子的结果:
<adult>Everyday Italian</adult> <child>Harry Potter</child> <adult>Learning XML</adult> <adult>XQuery Kick Start</adult>
XQuery 比较
在 XQuery 中,有两种方法来比较值。
- 通用比较:=, !=, <, <=, >, >=
- 值的比较:eq、ne、lt、le、gt、ge
这两种比较方法的差异如下:
请看下面的 XQuery 表达式:
$bookstore//book/@q >
10
如果 q 属性的值大于 10,上面的表达式的返回值为 true。
$bookstore//book/@q gt
10
如果仅返回一个 q,且它的值大于 10,那么表达式返回 true。如果不止一个 q 被返回,则会发生错误。