一、DOM
使用DOM扫描器程序:DOM扫描器是一种非常通用的程序,它不需知道用户定制的XML标记的确切含义。DOMAPI具有某些能把任何数据存储到树形结构中的接口。扫描器具有一组实现了这些接口的类,可以实例化这些类的对象。
这些接口和类允许插入和卸下不同的扫描器,不会影响应用程序,也可以调用DOMAPI的主要数据类型。它提供几种方法,可以引导到子节点。其他许多接口如Document、ELement、Entity和Attr都扩展了Node。
局限性:DOM适合处理少量及中等数据量的数据,但不适合处理非常大的数据。因为DOM处理文档时,只要一开始,必须到结束才能停止返回,对于非常大的数据,效率则比较低,当我们所需要的只不过是文件中的某些少量元素时,它却要浪费大量的时间处理整个文档。
二、SAX
SAX 扫描器:SAX与DOM工作方式有所不同,当它发现了所需要的元素时,会立即把XML元素返回给调用程序。也就是说,当SAX扫描器开始读取XML数据时,无论何时遇到给定元素的起始标记符,它将立即通知通用程序,而不需要每次都处理整个文档。遇到结束标记符也是如此。SAX扫描器与调用程序的通信方式是通过回调来实现的。又由于SAX不必在内存中建立语法树,从而节省了内存。
SAX扫描能够非常有效而方便地利用计算机资源,灵活地处理比较大的数据,但也有不足。与DOM扫描器相比,必须编写较多的接口代码才能调用SAX扫描器,而且一旦需要,程序员还必须增加代码以便跟踪它己经扫描到什么位置了。
三、XML查询语言XQuery
XML Query:通常缩写为 XQuery,是一种能灵活地从 XML 文档中抽取数据的查询语
(1) 字符表达式
字符表达式包括字符字符串和数字字符串二种,字符字符串是由所有schema中类型为xs:sting的字符组成,数字字符串是由数字0~9以及“·”“e”和“E”组成。
(2) 变量
变量表达式为:“$变量名”,如“$book”表达变量为book,它是区分属性、节点等其他元素的标志。变量通常直接使用,既可在for语句中给变量赋值,又可在条件限定语句和函数调用时给变量赋值;若变量没有赋值,则值为error。
(3)路径
用以确定每个节点在树中的位置。分为绝对路径和相对路径。
绝对路径——从文档的根目录开始,直到目标的子节点或属性,之间用“//”隔开。
相对路径——是直接从当前路径的下一级开始,然后至目标子节点或属性。路径是一个表达式,有前向和后向表达式。
四、前后向表达式
前向表达式有:
child:: 子节点名——表示当前节点的子节点,如child::book ;child::* 表示当前节点的所有子节点。
descendant:: 子孙节点名——表示当前节点的子孙节点,如descendant::book ;
attribute:: 属性名——表示当前节点的属性,如attribute::title ;
self:: 节点名——表示节点自身,如self::auther;
descendant-or-self:: 节点名——表示当前节点自身或它的子孙节点,如descendant-or-self:: auther 。
后向表达式有:
parent:: 父节点名——表示当前节点的父节点,如parent::price 。
前向、后向表达式每次运行时,都会返回一个元素,并对这个元素系列进行检查,具体有:①节点名的合法性检查。 ②节点类型检查。包括文本类型测试text()、注释类型测试comment()、节点类型测试node()、处理信息类型测试processing-instruction等。
简略写法
“child::”可以完全省略,“attribute::”可以省略为“@”,“descendant-or-self::node()/”可省为“//”,self:: node()的省略写法是“.”,parent:: node()的缩写为“..”。又,para代表当前节点的子节点,*代表当前节点的所有子节点,text()代表当前节点的所有文本类型的子节点,name代表当前节点的name属性。
五、各种类型的查询
Xquery要查找的信息可以包含在一个或多个表达式中,Xquery可以用XML表现查询结果;Xquery又可根据查询的不同,用各种不同的语句表达式,如FLWR表达式、[条件]表达式、及排序表达式等,并允许各个表达式相互嵌套。
(1) 用XML表现查询结果 Xquery可以用XML表现查询结果,即通过构造XML结构的方法,使结果表现出XML的结构方式。在查询结果中制定节点、属性、注释、处理指针及CDATA(其中的数据照原样输出)。
(2) 指出查找范围 可以用FOR语句将查找的对象限定为某个文档或节点。
(3) 限定查找条件 通过WHERE语句限定查找条件。
(4) if-then-else语句 用于需要分条件判断的情况。
(5) 对查询结果进行排序 按照需要对查询的结果进行排序,如按书名排序,按作者排序等。
六、FLWR表达式
XQuery 中最强大的新特性是 FLWR 表达式。FLWR(发音为 flower)是 For-Let-Where-Return 的首字母缩略词,每个 FLWR 表达式都有一个或多个 for 子句、一个或多个 let 子句、一个可选的 where 子句以及一个 return 子句,这些子句都允许在这些表达式的任何一个中。
FLWR的语句格式为:
for 变量1 in 表达式1,变量2 in 表达式2,……变量n in 表达式n 。
let 变量1:=1,变量2:=2,……
where条件
return 返回的内容
(1) for 子句 for 子句对表达式中的变量进行范围限定,若没有for 子句,则变量在当前文档的范围内。
(2) let 子句 let子句为for子句中所有的变量进行赋值,通常一个变量赋一个值或一个序列。 (3) where子句 where条件语句对变量作进一步的限制。如果特定的元组不能满足特殊条件,那么where 子句命令程序废弃这些元组。
(4) return 子句 return 子句定义每个元组要返回的内容,它指定了返回的结果及形式。Return语句可以嵌套FLWR语句。
七、XML与数据库的关系
数据库在XML应用中的角色
XML作为数据交换的标准,更着重于统一数据格式,而不是提供数据库的特性,数据库作为数据管理的地位没有改变!
XML数据库
XML作为数据交换的标准,更着重于统一数据格式,而不是提供数据库的特性,数据库作为数据管理的地位没有改变!
XML数据库的类型
目前XML数据库有三种类型:
(1)XMLEnabledDatabase(XEDB),即能处理XML的数据库。其特点是在原有的数据库系统上扩充对XML数据的处理功能,使之能适应XML数据存储和查询的需要。一般的做法是在数据库系统之上增加XML映射层,这可以由数据库供应商提供,也可以由第三方厂商提供。映射层管理XML数据的存储和检索,但原始的XML元数据和结构可能会丢失,而且数据检索的结果不能保证是原始的XML形式。XEDB的基本存储单位与具体的实现紧密相关。
(2)NativeXMLDatabase(NXD),即纯XML数据库。其特点是以自然的方式处理XML数据,以XML文档作为基本的逻辑存储单位,针对XML的数据存储和查询特点专门设计适用的数据模型和处理方法。
(3)HybridXMLDatabase(HXD),即混合XML数据库。根据应用的需求,可以视其为XEDB或NXD的数据库。
XML数据库的优势
1、XML数据库能够对半结构化数据进行有效的存取和管理
2、提供对标签和路径的操作。
3、当数据本身具有层次特征时,由于XML数据格式能够清晰表达数据的层次特征,因此XML数据库便于对层次化的数据进行操作。
XML数据库的典型应用 :数据交换、 Web应用和服务、 信息集成、 内容管理、 电子商务、 电子政务。