单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,XQuery,XQuery,1,什么是,XQuery,什么是,XQuery,XQuery,是用于,XML,数据查询的语言,XQuery,对,XML,的作用类似,SQL,对数据库的作用,XQuery,被构建在,XPath,表达式之上,XQuery,被所有主要的数据库引擎支持(,IBM,、,Oracle,、,Microsoft,等等),XQuery,是,W3C,标准。,什么是 XQuery什么是 XQuery,2,什么是,XQuery,XQuery,和,XML,查询有关,XQuery,是用来从,XML,文档查找和提取元素及属性的语言。,例如:从存储在名为,cd_catalog.xml,的,XML,文档中的,CD,集那里选取所有价格低于,10,美元的,CD,纪录。,什么是 XQueryXQuery 和 XML 查询有关,3,什么是,XQuery,XQuery,与,XPath,XQuery 1.0,和,XPath 2.0,共享相同的数据模型,并支持相同的函数和运算符。,XQuery-,应用,XQuery,可被用来:,提取信息以便在网络服务中使用,生成摘要报告,把,XML,数据转换为,XHTML,为获得相关信息而搜索网络文档,什么是 XQueryXQuery 与 XPath,4,XQuery,实例,XQuery,实例,通过研究一个例子来学习一些基础的,XQuery,语法。,如何从“,books.xml”,选取节点?,函数,XQuery,使用函数来提取,XML,文档中的数据。,doc(),用于打开,books.xml,文件:,doc(books.xml),XQuery 实例XQuery 实例,5,XQuery,实例,路径表达式,XQuery,使用路径表达式在,XML,文档中通过元素进行导航。,下面的路径表达式用于在,books.xml,文件中选取所有的,title,元素:,doc(books.xml)/bookstore/book/title,(/bookstore,选取,bookstore,元素,,/book,选取,bookstore,元素下的所有,book,元素,而,/title,选取每个,book,元素下的所有,title,元素,),上面的,XQuery,可提取以下数据:,Everyday Italian,Harry Potter,XQuery Kick Start,Learning XML,XQuery 实例路径表达式,6,XQuery,实例,谓语,XQuery,使用谓语来限定从,XML,文档所提取的数据。,下面的谓语用于选取,bookstore,元素下的所有,book,元素,并且所选取的,book,元素下的,price,元素的值必须小于,30,:,doc(books.xml)/bookstore/bookprice30/title,上面这个表达式可选取,bookstore,元素下的,book,元素下所有的,title,元素,并且其中的,price,元素的值必须大于,30,。,XQuery FLWOR 表达式XQuery FLWOR 表,8,XQuery FLWOR,表达式,下面这个,FLWOR,表达式所选取的数据和上面的路径表达式是相同的:,for$x in doc(books.xml)/bookstore/book where$x/price30,return$x/title,结果是:,XQuery Kick Start,Learning XML,通过,FLWOR,,您可以对结果进行排序:,for$x in doc(books.xml)/bookstore/book,where$x/price30,order by$x/title,return$x/title,XQuery FLWOR 表达式下面这个 FLWOR 表达,9,XQuery FLWOR,表达式,FLWOR,是,For,Let,Where,Order by,Return,的只取首字母缩写。,for,语句把,bookstore,元素下的所有,book,元素提取到名为,$x,的变量中。,where,语句选取了,price,元素值大于,30,的,book,元素。,order by,语句定义了排序次序。将根据,title,元素进行排序。,return,语句规定返回什么内容。在此返回的是,title,元素。,上面的,XQuery,表达式的结果:,Learning XML XQuery Kick Start,XQuery FLWOR 表达式FLWOR 是 For,10,XQuery FLWOR+HTML,XQuery FLWOR+HTML,在一个,HTML,列表中提交结果,请看下面的,XQuery FLWOR,表达式:,for$x in doc(books.xml)/bookstore/book/title,order by$x,return$x,上面的表达式会选取,bookstore,元素下的,book,元素下的所有,title,元素,并以字母顺序返回,title,元素。,XQuery FLWOR+HTMLXQuery FLWO,11,XQuery FLWOR+HTML,如果希望使用,HTML,列表列出我们的书店中所有的书目。我们向,FLWOR,表达式添加,和,标签:,for$x in doc(books.xml)/bookstore/book/title,order by$x,return$x,以上代码的结果:,Everyday Italian,Harry Potter,Learning XML,XQuery Kick Start,XQuery FLWOR+HTML如果希望使用 HTM,12,XQuery FLWOR+HTML,如果希望去除,title,元素,而仅仅显示,title,元素内的数据。,for$x in doc(books.xml)/bookstore/book/title,order by$x,return data($x),结果将是一个,HTML,列表:,Everyday Italian,Harry Potter,Learning XML,XQuery Kick Start,XQuery FLWOR+HTML如果希望去除 tit,13,XQuery,术语,XQuery,术语,节点,在,XQuery,中,有七种节点:元素、属性、文本、命名空间、处理指令、注释、以及文档(根)节点。,XML,文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。,基本值(或称原子值,,Atomic value,),基本值是无父或无子的节点。,基本值的例子:,J K.Rowling,en,项目,项目是基本值或者节点。,XQuery 术语XQuery 术语,14,XQuery,术语,节点关系,父(,Parent,),子(,Children,),同胞(,Sibling,),先辈(,Ancestor,),后代(,Descendant,),XQuery 术语节点关系,15,XQuery,语法,XQuery,语法,XQuery,的基础语法规则:,XQuery,对大小写敏感,XQuery,的元素、属性以及变量必须是合法的,XML,名称。,XQuery,字符串值可使用单引号或双引号。,XQuery,变量由“,$”,并跟随一个名称来进行定义,举例,,$bookstore,XQuery,注释被,(:,和,:),分割,举例,,(:XQuery,注释,:),XQuery 语法XQuery 语法,16,XQuery,语法,XQuery,条件表达式,If-Then-Else,可以在,XQuery,中使用。,请看下面的例子:,for$x in doc(books.xml)/bookstore/book,return if($x/category=CHILDREN),then data($x/title),else data($x/title),请注意,If-Then-Else,的语法:,if,表达式后的圆括号是必需的。,else,也是必需的,不过仅仅写“,else()”,也是可以的。,上面的例子的结果:,Everyday Italian,Harry Potter,Learning XML,XQuery Kick Start,XQuery 语法XQuery 条件表达式,17,XQuery,语法,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,被返回,则会发生错误。,XQuery 语法XQuery 比较,18,XQuery,添加元素和属性,XQuery,添加元素和属性,向结果添加元素和属性,在结果中引用输入文件中的元素和属性:,for$x in doc(books.xml)/bookstore/book/title,order by$x,return$x,上面的,XQuery,表达式会在结果中引用,title,元素和,lang,属性,就像这样:,Everyday Italian,Harry Potter,Learning XML,XQuery Kick Start,以上,XQuery,表达式返回,title,元素的方式和它们在输入文档中被描述的方式的相同的。,XQuery 添加元素和属性XQuery 添加元素和属性,19,XQuery,添加元素和属性,要向结果添加我们自己的元素和属性!,添加,HTML,元素和文本,现在,我们要向结果添加,HTML,元素。我们会把结果放在一个,HTML,列表中:,Bookstore,for$x in doc(books.xml)/bookstore/book,order by$x/title,return data($x/title).Category:data($x/category),XQuery 添加元素和属性要向结果添加我们自己的元素和属,20,XQuery,添加元素和属性,上面的,XQuery,表达式可生成以下结果:,Bookstore Everyday Italian.Category:COOKING Harry Potter.Category:CHILDREN Learning XML.Category:WEB XQuery Kick Start.Category:WEB ,XQuery 添加元素和属性上面的 XQuery 表达式可,21,XQuery,选择和过滤,XQuery,选择和过滤,可以使用路径表达式或,FLWOR,表达式来选则和过滤元素。,请看下面的,FLWOR,表达式:,for$x in doc(books.xml)/bookstore/book,where$x/price30,order by$x/title,return$x/title,XQuery 选择和过滤XQuery 选择和过滤,22,XQuery,选择和过滤,for,(可选)向每个由,in,表达式返回的项目捆绑一个变量,let,(可选)可完成变量分配,where,(可选)设定一个条件,order by,(可选)设定结果的排列顺序,return,规定在结果中返回的内容,XQuery 选择和过滤for,23,XQuery,选择和过滤,for,语句,for,语句可将变量捆绑到由,in,表达式返回的每个项目。,for,语句可产生迭代。在同一个,FLWOR,表达式中可存在多重,for,语句。