XQuery 教程.docx
《XQuery 教程.docx》由会员分享,可在线阅读,更多相关《XQuery 教程.docx(22页珍藏版)》请在冰豆网上搜索。
![XQuery 教程.docx](https://file1.bdocx.com/fileroot1/2023-2/2/d074f3ef-27b1-443c-aa0a-abc579b2a992/d074f3ef-27b1-443c-aa0a-abc579b2a9921.gif)
XQuery教程
XQuery教程
解释XQuery的最好方式是:
XQuery相对于XML(等同于SQL相对于数据库)。
XQuery被设计用来查询XML数据。
XQuery也被称为XMLQuery。
开始学习XQuery!
XQuery参考手册
在W3School,我们提供XQuery1.0中所有operators、内置函数、数据类型的完整参考手册。
XQuery参考手册
内容目录
XQuery简介
XQuery的简介。
包括其概念和作用。
XQuery实例
本章通过一个实例演示XQuery。
XQueryFLWOR
本章讲解XQueryFLWOR表达式。
XQueryFLWOR+HTML
本章演示如何通过HTML列表提交FLWOR结果。
XQuery术语
本章讲解XQuery中普遍使用的术语。
XQuery语法
本章讲解XQuery中基本的语法规则。
XQuery向结果添加结果和属性
本章讲解如何向结果添加你自己的元素和属性。
XQuery筛选元素
本章讲解如何使用FLWOR筛选元素。
XQuery函数
XQuery内置函数和operators的总论,以及如何创建用户自定义的函数。
XQuery总结
本文包括在本教程所学内容的一个总结,以及我们向你推荐的下一步应该学习的内容。
XQuery参考手册
XQuery参考手册
包含XQuery运算符、内置函数、数据类型的完整参考手册。
XQuery简介
解释XQuery最好的方式是这样讲:
XQuery相对于XML的关系(等同于SQL相对于数据库表的关系。
XQuery被设计用来查询XML数据-不仅仅限于XML文件,还包含任何可以XML形态呈现的数据,包括数据库。
您应该具备的基础知识:
在您继续学习之前,需要对下面的知识有基本的了解:
∙HTML/XHTML
∙XML/XML命名空间
∙XPath
如果您希望首先学习这些项目,请在我们的首页访问这些教程。
什么是XQuery?
∙XQuery是用于XML数据查询的语言
∙XQuery对XML的作用类似SQL对数据库的作用
∙XQuery被构建在XPath表达式之上
∙XQuery被所有主要的数据库引擎支持(IBM、Oracle、Microsoft等等。
)
∙XQuery是W3C标准。
XQuery和XML查询有关
XQuery是用来从XML文档查找和提取元素及属性的语言。
这是一个XQuery解决实际问题的例子:
“从存储在名为cd_catalog.xml的XML文档中的CD集那里选取所有价格低于10美元的CD纪录。
”
XQuery与XPath
XQuery1.0和XPath2.0共享相同的数据模型,并支持相同的函数和运算符。
假如您已经学习了XPath,那么学习XQuery也不会有问题。
您可以在我们的《XPath教程》中阅读更多有关XPath的知识。
XQuery-应用举例
XQuery可被用来:
∙提取信息以便在网络服务中使用
∙生成摘要报告
∙把XML数据转换为XHTML
∙为获得相关信息而搜索网络文档
XQuery是一个W3C标准
XQuery与多种W3C标准相兼容,比如XML、Namespaces、XSLT、XPath以及XMLSchema。
XQuery1.0在2007年1月23日被确立为W3C标准。
如需获得更多有关W3C的XQuery活动的信息,请阅读我们的《W3C教程》。
XQuery实例
在本节,让我们通过研究一个例子来学习一些基础的XQuery语法。
XML实例文档
我们将在下面的例子中使用这个XML文档。
"books.xml":
xmlversion="1.0"encoding="ISO-8859-1"?
>
EverydayItalian
GiadaDeLaurentiis
2005
30.00
HarryPotter
JK.Rowling
2005
29.99
XQueryKickStart
JamesMcGovern
PerBothner
KurtCagle
JamesLinn
VaidyanathanNagarajan
2003
49.99
LearningXML
ErikT.Ray
2003
39.95
在您的浏览器中查看"books.xml"文件。
如何从"books.xml"选取节点?
函数
XQuery使用函数来提取XML文档中的数据。
doc()用于打开"books.xml"文件:
doc("books.xml")
路径表达式
XQuery使用路径表达式在XML文档中通过元素进行导航。
下面的路径表达式用于在"books.xml"文件中选取所有的title元素:
doc("books.xml")/bookstore/book/title
(/bookstore选取bookstore元素,/book选取bookstore元素下的所有book元素,而/title选取每个book元素下的所有title元素)
上面的XQuery可提取以下数据:
EverydayItalian
HarryPotter
XQueryKickStart
LearningXML
谓语
XQuery使用谓语来限定从XML文档所提取的数据。
下面的谓语用于选取bookstore元素下的所有book元素,并且所选取的book元素下的price元素的值必须小于30:
doc("books.xml")/bookstore/book[price<30]
上面的XQuery可提取到下面的数据:
HarryPotter
JK.Rowling
2005
29.99
XQueryFLWOR表达式
XML实例文档
我们将在下面的例子中使用这个"books.xml"文档(与上一节中的XML文件相同)。
在您的浏览器中查看"books.xml"文件。
如果使用FLWOR从"books.xml"选取节点
请看下面这个路径表达式:
doc("books.xml")/bookstore/book[price>30]/title
上面这个表达式可选取bookstore元素下的book元素下所有的title元素,并且其中的price元素的值必须大于30。
下面这个FLWOR表达式所选取的数据和上面的路径表达式是相同的:
for$xindoc("books.xml")/bookstore/book
where$x/price>30
return$x/title
结果是:
XQueryKickStart
LearningXML
通过FLWOR,您可以对结果进行排序:
for$xindoc("books.xml")/bookstore/book
where$x/price>30
orderby$x/title
return$x/title
FLWOR是"For,Let,Where,Orderby,Return"的只取首字母缩写。
for语句把bookstore元素下的所有book元素提取到名为$x的变量中。
where语句选取了price元素值大于30的book元素。
orderby语句定义了排序次序。
将根据title元素进行排序。
return语句规定返回什么内容。
在此返回的是title元素。
上面的XQuery表达式的结果:
LearningXML
XQueryKickStart
XQueryFLWOR+HTML
XML实例文档
我们将在下面的例子中使用这个"books.xml"文档(与上一节中的文件相同)。
在您的浏览器中查看"books.xml"文件。
在一个HTML列表中提交结果
请看下面的XQueryFLWOR表达式:
for$xindoc("books.xml")/bookstore/book/title
orderby$x
return$x
上面的表达式会选取bookstore元素下的book元素下的所有title元素,并以字母顺序返回title元素。
现在,我们希望使用HTML列表列出我们的书店中所有的书目。
我们向FLWOR表达式添加
和- 标签:
以上代码的结果:
- EverydayItalian
- HarryPotter
- LearningXML
- XQueryKickStart
现在我们希望去除title元素,而仅仅显示title元素内的数据。
结果将是一个HTML列表:
- EverydayItalian
- HarryPotter
- LearningXML
- XQueryKickStart
XQuery术语
在XQuery中,有七种节点:
元素、属性、文本、命名空间、处理指令、注释、以及文档节点(或称为根节点)。
XQuery术语
节点
在XQuery中,有七种节点:
元素、属性、文本、命名空间、处理指令、注释、以及文档(根)节点。
XML文档是被作为节点树来对待的。
树的根被称为文档节点或者根节点。
请看下面的XML文档:
xmlversion="1.0"encoding="ISO-8859-1"?
>
HarryPotter
JK.Rowling
2005
29.99
上面的XML文档中的节点例子:
(documentnode)
JK.Rowling(elementnode)
lang="en"(attributenode)
基本值(或称原子值,Atomicvalue)
基本值是无父或无子的节点。
基本值的例子:
JK.Rowling
"en"
项目
项目是基本值或者节点。
节点关系
父(Parent)
每个元素以及属性都有一个父。
在下面的例子中,book元素是title、author、year以及price元素的父:
HarryPotterJK.Rowling
2005
29.99
子(Children)
节点元素可有零个、一个或多个子。
在下面的例子中,title、author、year以及price元素都是book元素的子:
HarryPotterJK.Rowling
2005
29.99
同胞(Sibling)
拥有相同的父的节点。
在下面的例子中,title、author、year以及price元素都是同胞:
HarryPotterJK.Rowling
2005
29.99
先辈(Ancestor)
某节点的父、父的父,等等。
在下面的例子中,title元素的先辈是book元素和bookstore元素:
HarryPotterJK.Rowling
2005
29.99
后代(Descendant)
某个节点的子,子的子,等等。
在下面的例子中,bookstore的后代是book、title、author、year以及price元素:
HarryPotterJK.Rowling
2005
29.99
XQuery语法
XQuery对大小写敏感,XQuery的元素、属性以及变量必须是合法的XML名称。
XQuery的基础语法规则:
一些基本的语法规则:
∙XQuery对大小写敏感
∙XQuery的元素、属性以及变量必须是合法的XML名称。
∙XQuery字符串值可使用单引号或双引号。
∙XQuery变量由“$”并跟随一个名称来进行定义,举例,$bookstore
∙XQuery注释被(:
和:
)分割,举例,(:
XQuery注释:
)
XQuery条件表达式
"If-Then-Else"可以在XQuery中使用。
请看下面的例子:
for$xindoc("books.xml")/bookstore/book
returnif($x/@category="CHILDREN")
then{data($x/title)}
else{data($x/title)}
请注意"If-Then-Else"的语法:
if表达式后的圆括号是必需的。
else也是必需的,不过仅仅写“else()”也是可以的。
上面的例子的结果:
EverydayItalian
HarryPotter
LearningXML
XQueryKickStart
XQuery比较
在XQuery中,有两种方法来比较值。
1.通用比较:
=,!
=,<,<=,>,>=
2.值的比较:
eq、ne、lt、le、gt、ge
这两种比较方法的差异如下:
请看下面的XQuery表达式:
$bookstore//book/@q>10
如果q属性的值大于10,上面的表达式的返回值为true。
$bookstore//book/@qgt10
如果仅返回一个q,且它的值大于10,那么表达式返回true。
如果不止一个q被返回,则会发生错误。
XQuery添加元素和属性
XML实例文档
我们将在下面的例子中使用这个"books.xml"文档(和上面的章节所使用的XML文件相同)。
在您的浏览器中查看"books.xml"文件。
向结果添加元素和属性
正如在前面一节看到的,我们可以在结果中引用输入文件中的元素和属性:
for$xindoc("books.xml")/bookstore/book/title
orderby$x
return$x
上面的XQuery表达式会在结果中引用title元素和lang属性,就像这样:
EverydayItalian
HarryPotter
LearningXML
XQueryKickStart
以上XQuery表达式返回title元素的方式和它们在输入文档中被描述的方式的相同的。
现在我们要向结果添加我们自己的元素和属性!
添加HTML元素和文本
现在,我们要向结果添加HTML元素。
我们会把结果放在一个HTML列表中-Now,wewanttoaddsomeHTMLelementstotheresult.WewillputtheresultinanHTMLlist-togetherwithsometext:
Bookstore
以上XQuery表达式会生成下面的结果:
Bookstore
- EverydayItalian.Category:
COOKING
- HarryPotter.Category:
CHILDREN
- LearningXML.Category:
WEB
- XQueryKickStart.Category:
WEB
向HTML元素添加属性
接下来,我们要把category属性作为HTML列表中的class属性来使用:
Bookstore
}
上面的XQuery表达式可生成以下结果:
Bookstore
EverydayItalian
HarryPotter
LearningXML
XQueryKickStart
XQuery选择和过滤
XML实例文档
我们将在下面的例子中使用这个"books.xml"文档(和上面的章节所使用的XML文件相同)。
在您的浏览器中查看"books.xml"文件。
选择和过滤元素
正如在前面的章节看到的,我们使用路径表达式或FLWOR表达式来选去和过滤元素。
请看下面的FLWOR表达式:
for$xindoc("books.xml")/bookstore/book
where$x/price>30
orderby$x/title
return$x/title
for
(可选)向每个由in表达式返回的项目捆绑一个变量
let
(可选)
where
(可选)设定一个条件
orderby
(可选)设定结果的排列顺序
return
规定在结果中返回的内容
for语句
for语句可将变量捆绑到由in表达式返回的每个项目。
for可产生迭代。
在同一个FLWOR表达式中可存在多重for语句。
如需在一个for语句中循环指定的次数,您可使用关键词to:
for$xin(1to5)
return{$x}
结果:
1
2
3
4
5
关键词at可被用来计算迭代:
for$xat$iindoc("books.xml")/bookstore/book/title
return{$i}.{data($x)}
结果:
1.EverydayItalian