admin 管理员组文章数量: 1184232
2024年4月19日发(作者:matlab 百度网盘)
维普资讯
第22卷第1期
金陵科技学院学报
v01.22.No.1
2006年3月
JOURNAL OF J INLING INSTITUTE OF TECHNOLOGY
Mar..2006
查询XML数据的几种常用方法
赵改连,鲍培明,王梅娟
(南京师范大学数学与计算机科学学院,江苏南京210097)
摘 要:查询XML数据的技术是XML相关技术研究中的一个重要课题。XPath、XSLT、XQuery三种语言都可
以用于对XML数据的查询。本文通过一个实例比较这三种语言在XML查询方法上的差异。其中,XPath是用
路径定位XML文档节点,但它不能单独使用;XSLT主要利用模式匹配和XPath定位来完成XML文档的查询;
XQuery应用XPath和FLWR表达式进行查询,功能比较强,而且支持多文档查询。
关键词:XPath;XSLT;XQuery
中图分类号:TP311.13 文献标识码:A 文章编号:1672—755X(2006)01—0018—05
Some Common Ways for Querying XML Data
ZHAO Gai—lian,BAO Pei—ming,WANG Mei—Juan
(cShool of Mathematics and Computer Science。Nanjing 210097,China)
Abstract:The technique of querying the XML data is one of the important dimensions concerning
XML—related technology.XPath,XSLT,XQuery are three languages for querying XML data.This
paper shows the differences among the three Ianguages in querying a XML document through an ex—
ample.XPath is used for locating an XML document’S node,but it can’t be used by itself.XSLT is
used for querying XML documents through template match and XPath location.XQuery uses XPath
and FLWR expression for querying XML documents.It’S better in function and supports multi—doe—
uments querying.
Key words:Xpath;Xslt;XQuery
在当今的IT业中,XML(Extensible Markup
随着XML应用范围的扩展以及XML信息的
Language,可扩展标识语言)越来越成为一个热门
日益普及,对XML信息处理能力也提出了更高的
的话题。XML是由W3C(万维网联合组织)制定
要求,因此XML查询技术也变得非常关键。
的标准,具有良好的数据存储格式、可扩展性、高度
XPath、XSLT、XQuery三者都可以对XML数据进
结构化和便于网络传输等优点,从而成为了新一代
行查询,只是它们各有侧重,下面我们对它们分别
的Web语言。XML提供了直接处理数据的通用
介绍。
方法,为基于Web的应用提供一个描述数据和交
换数据的有效手段,有利于信息的表达和结构化组
1 XPath(XML定位语言)
织。因此,可以更好地满足网络时代在电子商务、
远程教育、数据库与引擎等领域的多态信息的交
XPath[ ]是XML路径语言。是3c关于查询部
互、传输和再现的需求。
分XML文档的通用语言标准。XPath是实现
收稿日期:2005—11—11
基金项目:江苏省教育厅高校自然科学研究基金项目(04I<JB520075)
作者简介: ̄(1975一),女,山西忻州人,硕士研究生,研究方向:XML数据库查询索引技术。
维普资讯
第1期 赵改连,等:查询XML数据的几种常用方法 19
XML数据的周游语言,是XSLT,XQuery的基础。
XPath是一系列规则,这些规则指定了对XML文
档树型结构的访问方式。XPath给出从某个结点
起的查询路径,搜索文档。使用XPath可以在
XML层次结构中快速定位和提取信息。它的内建
函数提供了全面的功能,可以方便的处理数值及文
本数据。可以这样理解XPath,如果将XML文档
看成DOS目录结构,XPath就是cd,dir等目录操
作命令的集合。
XPath本质上是与具有层次结构的XML数据
模型相匹配的查询语言,它可以通过任何方向浏览
树来选择节点,并根据节点的值和位置应用谓词。
XPath遵循文档对象模型(DOM)的路径格式。由
于每个XML文档都可以看成是一棵拥有许多结
点的树,节点的类型有:根节点(root)、元素节点
(element)、属性节点(attribute)、文本节点(text)、
命名空间节点(namespace)、处理指令节点(pro—
cessing instruction)和注释(comment)。
XPath的目标是定义一种定位XML文档各个
部分的语言。其功能是在数据存储区中查询某一个
节点或节点集,为了实现这个目标。XPath规范定
义了两个主要部分:一部分是表达式语法,另一部
分是一组名为XPath核心库的基本函数 J。
XPath的基本语法由表达式构成。在计算表达
式的值之后产生一个对象,这种对象有以下四种基
本类型:节点集合、布尔型、数字型和字符串型。
XPath基本上和外文件系统巾的寻找类似,如果路
径是以“/一’开头的,就表明该路径表示的是一个绝
对路径;以“//'’开头则表示在文档中的任意位置查
找。通过XPath路径表达式,可以在XML文档中
轻松地定位数据、确定节点。当然,XPath还能实
现很多其他的功能,具体请参看W3C的XPath规
范[1l。
2 XSLT(XML Systlesheet Language
Transormation)
根据W3C[3 J的规范说明,最早设计XSLT的
用意是帮助XML文档转换为其它文档。但是随
着技术的发展,XSLT已不仅仅用于将XML转换
为HTML或其它文本格式,更全面的定义应该是:
XSLT是一种应用于操作XML文档的完整高级语
言,XSLT是一种用来转换XML文档结构的语言。
XSLT最主要的功能是将XML转换为
H‘l ML。
XSLT有类似数据查询的语法,是一种转换
XML文档的语言,它包含两个过程:转换和格式
化。XSLT中包含了一系列的模板规则与命令来
控制数据的结构[4l,它具有以下特点:
(1)XSLT基于严格的XML文档格式,可以自
动使用XML的所有词汇设备(如Unicode字符编
码和转义)。XSLT可以容易地将期望的XML输
出块嵌入样式表,如多个简单的样式表可以写为期
望输出文档的模板,并且可以将一些特殊指令嵌入
文本中,以便插入输入中的变量数据或计算某个
值[5,6]。
(2)XSLT样式表是易于移植的,任何符合
XSLT推荐标准的处理程序都可以使用它。
(3)基本处理范例是模式匹配。XSLT样式表
包括一组模板规则,每条规则都使用以下方式:“如
果在输入中遇到此条件,则生成下列输出”。
XSLT将输入XML文档视为树状结构,每条模板
规则都适用于树中的一个节点,模板规则本身可以
决定下一步处理哪些节点,因此不必按照输入文档
的原始顺序来扫描输入。
(4)XSLT是用XPath子语言来引入输入树中
的节点。
3 XQuery概述
XQuery[7,8]工作组于1999年9月正式成立,
其任务是创建一种灵活的查询语言以便从XML
文档中抽取数据。目前W3C所公布的最新
XQuery草案是2003年11月12日的版本,它还在
不断的修订和完善之中。作为一种新型的查询语
言,XQuery汲取了其它多种查询语言的优点。适用
于各种类型的XML数据源的查询,不仅查询功能
强大,而且简洁灵活且易于实现。同时,XQuery还
具有从多种数据库中检索信息的特点,它能对各种
数据和文档进行查询。
XQuerv建立在XPath规范之上,其核心是能
够通过XPath表达式从文档中选择特殊的节点序
列。XQuery是一种将查询表示成表达式的功能语
言。通过它所支持的多种表达式,它的查询可以有
多种不同的形式,XQuery还允许通过嵌套类SQL
的子句来创建复杂查询,以及通过将XML构造器
直接包括在输出中来创建复杂结果。XQuery模块
维普资讯
20 金陵科技学院学报 第22卷
包括三个部分:名字空间和模式声明、函数定义、查
询表达式,其中模式声明和函数定义不是必须的。
3.1 XQuery的查询
XQuery具有强大的查询和检索功能,它通过
各种由关键字、符号、操作数构成的表达式完成查
询,其表达式的操作对象可以是另一个表达式。作
为一种函数语言,它还允许各种表达式进行相互嵌
套,并且支持子查询。同时它也是一种对数据类型
有要求严格的语言,表达式中的操作数、运算符和
函数都必须是指定的类型。
XQuery的特性之一是利用功能强大的
FLWR表达式进行查询 ]。FLWR表达式是一种
典型的能够完成具有某种实际意义的查询的表达
式。FLWR表达式包含模式匹配、过滤选择和结
果构造三种操作。FLWR语句是XQuery所具有
的最接近于SQL的语句。
FLWR表达式是由FOR—LET WHERE。RE—
TURN四个关键字定义的子句构成的,在最新的
标准中则更新为“FLWOR”,其中O代表Order by
子句。FLwoR表达式可以完成很多在XSLT中
难以完成的任务。它支持迭代并且可以把变量绑
定到中间结果,对两个或多个文档进行连接和重构
数据时这种表达式非常有用。每个FLWOR表达
式都有一个或多个for子句、一个或多个let子句、
一
个可选的where子句、一个order by子句以及一
个return子句。f0r子句通过将节点绑定到变量,
以便继续循环遍历序列中的每一个节点;let子句
为一个变量赋一个值或一个序列;return子句定义
每个元组要返回的内容;对于where子句,如果其
有效布尔值为真,那么该元组就被保留,并且它的
变量绑定用在return子句中,如果其有效布尔值为
假,那么该元组就被废弃。
除路径表达式和FLWR表达式之外,XQuery
还有6种基本的表达式模式:元素构造符、算子和
函数表达式、条件表达式、限定表达式、列表构造
符、数据类型表达式。通过它们的多种组合,可以
产生具有丰富而强大的查询检索功能的查询语句。
在数据方面,XQuery具有类似于SQL的外观
和能力,XQuery和关系数据库查询语言SQL有相
似之处,例如,XQuery也提供了关键字用于投影和
变换操作(XQuery中的RETURN)、支持多个文档
之间的联合、能通过WHERE进行信息过滤、并通
过ORDER BY进行排序。此外,Xquery还提供了
函数调用和用户自定义函数等功能。
3.2 XQuery的转换
XQuery具有很多类似XSLT的从潜在的异构
数据源中转换数据的功能。因为XQuery有着非
常灵活的构建结果树的机制,它在设计时已经考虑
到了要利于结构转换,所以有些情况下用它做转换
工作比用XSLT在实现语法上更简明。
4查询语言的应用比较
为了比较这三种语言的应用情况,我们先定义
如下的关于学生、课程和选修信息的XML文档
students.xm1.courses.xml和SCS.xml:
<?xml version=‘‘1.0”encoding=“gb2312”?>
<students>
<student>
<sno>“95001”</sno>
<sname>李勇</sname>
<ssex>男</ssex>
<sage>20</sage>
<sdept>“CS”</sdept>
</student>
<student>
<sno>“95002”</sno>
<shame>刘晨</sname>
<ssex>女</ssex>
<sage>19</sage>
<sdept>“IS”</sdept>
</student>
</stI】dents>
<?xml version=“1.0”encoding=“gb2312”?
>
<courses>
<course>
<cno>“1'’</cno>
<cname>数据库</cname>
<cpno>“5”</cpno>
<ccredit>4</ccredit>
</course>
<course>
<cno>“2”</cno>
<cname>数学</cname>
维普资讯
第1期 赵改连,等:查询XML数据的几种常用方法 2l
<ccredit>2</ccredit>
</course>
</courses>
<?xml version;“1.0”encoding=“gb2312”?
>
<SOS>
<SC>
<sno>“95001”</sno>
<cno>“1”</cno>
<grade>92</grade>
</sc>
<SC>
<sno>“95002”</sno>
<cno>“2”</cno>
<grade>90</grade>
</sc>
</ses>
4.1 XSLT
(1)XSLT是一种优秀的XML转换语言。
XSLT主要用于将XML文档转换成为可以被web
浏览器识别的数据格式。XSLT还可以和脚本语
言相结合。
(2)把XML转换为PDF或其它格式的文件
时,需要把XML文件转化为XSL—FO。此时需要使
用XSLT来将XML文件格式化为XSL—FO文件。
(3)XSLT适合对单独的XML文档进行查询。
如对上面的students.xml中的学号和姓名进行查
询,可采用如下格式:
<xsl:stylesheet xmlns:xsl=“http://
WWW.w3.org/1999/XSL/Transform”version=
“1.0”>
<XSl:output method=“text”>
<XSl:template match=“/”>
Sno:<XSl:for。each select=“/students/
student/sno”/>
Sname:<XSl:value of select=“/students/
student/sname”/>(<XSl:value—of
select=“/students/student/ssex’’/
>
</xsl:for—each>
</template>
</xsl:stylesheet>
输出结果为:
Sno:“95001’’
Sname:李勇(“男”)
Sno:“95002’’
Sname:刘晨(“女”)
用XSLT查询时可以直接进行,不需要其它语
言来支持,需要显示的时候在对应的XML文档中
加入<?xm1.stylesheet type=“text/xsl”href=“1.
xsl”?>,其中的“1.xsl”是创建的XSLT文件名。
在XSLT中常用的摸板,如上面的“<xsl:template
match=“/,’>”是指从根元素开始查询:“<xsl:
f0卜each select=“/students/student/sno”/>和<
xsl:value—of select=“/students/student/sname”/>
(<xsl:value-of select=“/students/student/ssex”
>)”是查询条件。
4.2 XQuery
(1)XQuery在查询方面有类似于SQL的结
构。易于理解,易于设计。如对上面的SCS.xml进
行查询并返回所有成绩大于90的学生的sno和
grade的结果,可采用如下的方式:
for¥i in document(“SCS.xml”)/ ̄c/grade
retUrn
if(¥i/grade>90)
then<HighGrade>{¥i/sno,¥i/grade}</
HighGrade>
else<LowGrade>{¥i/sno,¥i/grade}</
LowGrade>
查询结果如下:
<HighGrade><sno>“95001”</sno><
grade>92</grade></HighGrade>
(2)XQuery可以处理多个文档的联合查
询[ 。即同时包含叙述流和量化数据的文档。下
面是一个关联数据查询的例子,返回课程名称以及
对应学生的成绩,按字母排列;
FOR¥cS IN document(“SCS.xml”)//grade,
¥s IN document(“students.xml”)//
sname[id=¥cs/sno],
¥C IN document(“courses.xml”)//
cname[id=¥cs/cno J
RETURN
<CS—pair>
¥c/cname,
¥s/grade
维普资讯
22 金陵科技学院学报 第22卷
</cs—pair>SORTBY(cname)
其输出结果为:“95001”
其结果是:
“95002”
<CS—pair>
(2)XPath是XSLT的基础,在XSLT中使用
数据库,
XPath表达式或定位路径来定位源文档中的节点。
92
XPath查询一般在XSLT中使用,如上面的“/stu—
</cs—pair>
dents/student/shame”o
<CS—pair>
(3)XPath是XML指针语言(XPointer)的基
数学。
础。
90
</cs—pair>
FOR子句遍历了由三个路径表达式返回的交
5 总结
叉结果。
该文对XPath、XSLT、XQuery三种XML的查
(3)由于XQuery不支持所有的XPath轴,也
不支持XSLT中的模板规则,这使XML数据查询
询语言各自的特点、特色及应用方面进行了描述和
比较,它们都可以对XML进行查询,发挥其作用。
易于优化。
一
般情况下,XPath是用于定位本地XML文档内
(4)XQuery查询数据语言支持XMLSchema
数据类型。
部的特定节点,它的语法比较简单,但它不能单独
使用;XSLT主要是对XML文档进行转换,主要利
(5)XQuery是为生成XML或者HTML文档
用模板匹配和XPath定位来完成查询和转换功
作为查询结果而设计的,因此不需要对查询结果进
能,可以与其它脚本语言相结合,使用比较方便。
行后处理,所以XQuery也可作为转换语言来使
XQuery是在XPath和XSLT的基础上发展起来
用。
的,主要应用XPath路径表达式和FLWR表达式
(6)大型数据库如Oracle,IBM,Miscrosoft都
实现对XML文档进行查询,另外XQuery还使用
已经在各自的产品中提供了对XQuery的规范的
了函数表达式和条件表达式等多种表达式。这种
支持,用XQuery来实现对XML数据的访问。
表述方法易于理解,在查询XML文档时类似于
4.3 XPath
SQL查询关系数据库,而且可以对多个文档进行
(1)XPath主要用于XML文档选定部分的定
位及导航,XPath主要是对一个文档的查询。如对
查询,查询功能更强,当前的一些关系数据库如O—
RACLE等都内嵌了其功能,可能是未来XML查
上面的students.xml中的student的sno进行查
询:
询语言的趋势。总之,XPath、XSLT和XQuery这
3种语言都可以用来访问数据,帮助查询XML文
/students/student/sno
档。
参考文献:
[1]J.Clark.XML Path Language(XPath)[EB.OL].http://www.w3+org/TR/xpath.
[2]刘秋香,张永胜.对XPath,XLink和XPointer的分析研究[J]+微机发展,2005(10):19—22.
13]W3C.XSL Transformations(XSLT)1.0.W3C Recommendation[EB/OL](1999—11—16).See.httD://www.w3.org/TR/
1999/REC-xslt一19991116.
[4]NeilBradley.XSL编程指南[M].北京:中国电力出版社,2001:13—24,235—254.
[5]周兆滨,等.XSLT应用于数据编程的研究[J].制造业自动化,2003(12):93—95
.
[6]周顺平,等.使用XSL表现XML的几种方N[J].计算机与现代化,2002(5):7—1O.
[7]D.Chamberlin,eta1.XQuery1.0:AnXMLquerylanguage[EB/OL].http://www.w3.org/TR/xquery/
.
[8]worId wide Web Consortium.XQuery 1.0:An XML Query Languages[EB/OL](2002—11—15).W3C Working Draft。
http://www.w3.org/TR/2002/WD.xquery+20021115.
[9]万常选+XSL数据库技术[M].北京:清华大学出版社,2005:13—38.
[10]Mark Birbeek.XML高级编程[M].jE京:机械工业出版社,2002:277—346,613—624.
版权声明:本文标题:查询XML数据的几种常用方法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1713484914a636997.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论