论文部分内容阅读
摘要:XML的应用变得日益广泛,XML数据库技术也得到了迅速发展,当越来越多的数据资料以XML为标准格式进行存储时,却由于其格式的不同导致了传统的数据库及查询语法无法适用。分析了一种全新的XML查询语言XQuery,并对FLWOR表达式进行了重要阐述。
关键词:XML查询;XQuery;表达式
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)23-865-02
Research and Analysis of XQuery,a XML Query Language
ZHANG Jing-jing1,LI Nan2
(1.Northwest Normal Uniuersity, Lanzhou 730070, China; 2.Bohai Uniuersity, Jingzhou 121000, China)
Abstract:XML becomes more and more popular in Web implementation .XML database and related technologies are also rapidly developing.When more and more data are stored up in the standard format of XML,the traditional datebase and inquiring grammar can't be used due to different format.The article intends to analyze a brand-new query language,XQuery for XML,and it also introduces FLWOR expression exactly.
Key words: XML querying; XQuery; expression
1 引言
随着Web的广泛应用,W3C提出了新的可扩展性标记语言XML,它能对各种数据源的信息内容进行标记,包括结构化和半结构化的文档、关系数据库和对象库。XML得到了广泛的应用[5],越来越多的数据采用XML格式进行存储、交换或表现,但当这些数据资料以XML为标准格式进行存储时,由于其格式的不同而导致传统的数据库及查询语法无法使用,鉴于非结构性数据的查询工作以及关系数据库自己的缺陷,人们需要一种更优化的数据查询语言来解决这些问题。
XQuery1.0在2007年1月23日被确立为W3C推荐标准[1],XQuery起源于Quilt,并将Xpath2.0作为其子集,综合了SQL、OQL、XML-QL、XQL及Lorel等诸多语言的特点,XQuery吸取了多种查询语言的优点,适用于各种类型的XML数据源的查询,不仅查询功能强大,而且简洁灵活且易于实现。此外,XQuery还具有从多种数据库中检索信息的功能,能对各种数据和文档进行查询,是专门为处理XML数据的查询而设计的查询语言。
2 XQuery的模块结构及特点
XQuery查询模块主要由三部分组成:名字空间和模式声明,函数定义和查询表达式。前两部分和起来称为查询序(query prolog),查询序不是必需的[2],可省略。下节我们将通过FLWOR表达式来进行详细的分析。
XQuery能较好的满足目前XML对查询语言的要求,能够实现对基于数据的、基于文档的以及混合型的XML数据源的查询,提高用户查询效率。下面我们对XQuery的几点主要特性做一简要的说明[3,5]:
1)组合性:XQuery语言通常是由多种表达式(如路径表达式、条件表达式以及元素构造函数等)构成,它们是完全通用的,其中任何一个表达式的结果都可用作另一个表达式的操作数。组合性能使其实现简单或复杂的模式匹配功能,如过滤,选择,重构等。
2)简洁性:XQuery定义了运算符的语义,使其包括了某种隐式操作。例如,将算术运算符(如+)施加于某个元素时,该运算符会自动提取该元素的数值。类似地,将比较运算符(如=)施加于一系列值时,则会自动地对该序列进行迭代,寻找满足比较条件的一对值。
3)静态分析:XQuery查询语法主要有三层:首先是表层语法,它是可视性最高的并且是用户最有可能与之发生联系的语法;其次是可以替换表层语言的基于XML的语法XQuery;最后是形式代数语言,它使用正规定义的形式十分详细地描述了XQuery处理器内部工作,为XQuery处理器查询优化奠定了基础。查询的三个层主要体现在静态分析和动态求值的过程中。静态分析的目标是把XQuery表层语句通过XQuery核心语法XQueryX转换为标准的XQuery运算树,并对其进行类型检查,静态分析阶段是执行优化和检测某种错误的阶段,它能够及时发现查询错误并进行反馈。
3 XQuery表达式的特性及实例的应用分析
XQuery具有强大的查询和检索功能,它通过各种由关键字、符号和操作数所组成的表达式来完成查询。作为一门函数化的语言,它允许各个表达式进行相互嵌套,同时它又是一门类型明确的语言,一个运算涉及的表达式、函数、常量和变量必须符合类型要求。XQuery的基础是表达式,目前,最新版本的XQuery 1. 0规范共有14种表达式:初级表达式(Primary Expressions),路径表达式(Path Expressions),序列表达式(Sequence Expressions),算术表达式(Arithmetic Expressions),比较表达式(Comparison Expressions),逻辑表达式(Logical Expressions),构造器(Constructors), FLWOR表达式(FLWOR Expressions),有序和无序表达式( Ordered and Unordered Expressions),条件表达式(ConditionalExpressions),量化表达式(Quantified Expressions),序列类型表达式(Expressions on SequenceTypes),效用表达式(Validate Expressions),扩展表达式(Extension Expressions)。本文主要介绍和实现FLOWR表达式。
3.1 FLWOR表达式的语法规范[1]
XQuery 中最强大的新特性是FLOWR表达式,FLWOR在XQuery中的作用类似于SQL中的“SELECT FROM WHERE ORDER BY”, FLWOR是“For,Let,Where,Order by,Return”的缩写,其语法构成为:
FLWORExpr::=(ForClause|LetClause)+WhereClause?+OrderByClause?“return”ExprSingle
ExprSingle::=FLWORExp
| QuantifiedExpr
| TypeswitchExpr
| IfExpr
| OrExpr
ForClause ::= "for" "$" VarName TypeDeclaration? PositionalVar? "in" ExprSingle ("," "$" VarName TypeDeclaration? PositionalVar? "in" ExprSingle)*
LetClause ::="let" "$" VarName TypeDeclaration? ":=" ExprSingle ("," "$" VarName TypeDeclaration? ":=" ExprSingle)*
WhereClause ::= "where"ExprSingle
OrderByClause ::= (("order" "by") | ("stable" "order" "by")) OrderSpecList
3.2 FLWOR表达式的执行过程及语句含义
FLWOR表达式的执行过程如图1所示。
FLWOR具体的含义如下:
For 遍历结果集,并把当前条目绑定到给定的变量。
Let 将匹配结果绑定到给定的变量。
Where 条件子句,用来过滤结果集。
Order by 排序子句,对结果进行排序。
Return 对For ,Let ,Where, Order by子句进行求值,也就是返回FLWOR的结果。
3.3 XQuery对XML文档的查询示例
FLWOR表达式的结果是一个包含连接这些求值结果的有序序列。首先看一个简单的"bib.xml" XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bib>
<book><title >SQL Server</title><author>Stevens </author><year>2008</year><price>30.00</price>
</book>
<book>
<title>asp.net 2.0</title>
<author>J K</author>
<year>2007</year>
<price>30.80</price>
</book>
<title >c#</title>
<author>H.M</author>
<year>2006</year>
<price>40.95</price>
</book>
</bib>
该文档的数据模型示于图2。
下面用一简单的例子进行查询说明:
for $x in document("bib.xml")/bib/book
let $y:=$book/@year
where $x/price>30 AND $y>=2006
order by ($y) decending
return
<results>
{$x/title}
</results>
表示选取 bib 元素下的 book 元素下所有的 title元素,并且其中的 price 元素的值必须大于 30,year元素的值大于等于2006,并对year元素进行升序排序。其中document() 用于打开 "bib.xml" 文件。
上面的 XQuery 查询的结果为:
<results>
<title >c#</title>
<title>asp.net 2.0</title>
</results>
4 结束语
本文通过对非结构性数据的查询工作以及关系数据库自己的缺陷这一问题引出了XQuery语言,并对XQuery的特点进行了简要的分析,对于W3C发布的查询语言标准,文中我们从源语言的语言规范开始,尤其对于XQuery中的FLWOR表达式的整体应用过程,进行了详细的介绍。
由于XML本身还是比较新的东西,尤其是XML查询语言,它的研究现在也在大部分限于理论研究阶段。尽管XQuery还不太成熟稳定,但是对于查询和恢复XML文档和文档集,XQuery仍然是一种很有前途的创新语法定义,并且在生成XML文档等方面,XQuery有着其他查询语言无可比拟的优势。随着计算机领域的不断扩大,XQuery也将会被广泛的接受,大规模的采用XQuery的浪潮不会太遥远。
参考文献:
[1] XQuery 1.0: An XML Query Language W3C Recommendation[EB/OL].[2008-1-23].http://www.w3.org/TR/xquery/.
[2] W3C Working Group:XML Syntax for XQuery 1.0(XQueryX)[EB/OL].http://www.w3.org/TR/xqueryx/.
[3] 谢荣传,谢铉洋.XQuery语言的实现[J].安徽大学学报:自然科学版,2005,29(1):23-26.
[4] 基于XQuery的XML查询平台研究与设计[J].河南大学硕士论文,2006.
[5] 程和侠,黄国兴.XQuery简介及在.NET中的应用[J].微型电脑应用,2005,21(7):62-63.
关键词:XML查询;XQuery;表达式
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)23-865-02
Research and Analysis of XQuery,a XML Query Language
ZHANG Jing-jing1,LI Nan2
(1.Northwest Normal Uniuersity, Lanzhou 730070, China; 2.Bohai Uniuersity, Jingzhou 121000, China)
Abstract:XML becomes more and more popular in Web implementation .XML database and related technologies are also rapidly developing.When more and more data are stored up in the standard format of XML,the traditional datebase and inquiring grammar can't be used due to different format.The article intends to analyze a brand-new query language,XQuery for XML,and it also introduces FLWOR expression exactly.
Key words: XML querying; XQuery; expression
1 引言
随着Web的广泛应用,W3C提出了新的可扩展性标记语言XML,它能对各种数据源的信息内容进行标记,包括结构化和半结构化的文档、关系数据库和对象库。XML得到了广泛的应用[5],越来越多的数据采用XML格式进行存储、交换或表现,但当这些数据资料以XML为标准格式进行存储时,由于其格式的不同而导致传统的数据库及查询语法无法使用,鉴于非结构性数据的查询工作以及关系数据库自己的缺陷,人们需要一种更优化的数据查询语言来解决这些问题。
XQuery1.0在2007年1月23日被确立为W3C推荐标准[1],XQuery起源于Quilt,并将Xpath2.0作为其子集,综合了SQL、OQL、XML-QL、XQL及Lorel等诸多语言的特点,XQuery吸取了多种查询语言的优点,适用于各种类型的XML数据源的查询,不仅查询功能强大,而且简洁灵活且易于实现。此外,XQuery还具有从多种数据库中检索信息的功能,能对各种数据和文档进行查询,是专门为处理XML数据的查询而设计的查询语言。
2 XQuery的模块结构及特点
XQuery查询模块主要由三部分组成:名字空间和模式声明,函数定义和查询表达式。前两部分和起来称为查询序(query prolog),查询序不是必需的[2],可省略。下节我们将通过FLWOR表达式来进行详细的分析。
XQuery能较好的满足目前XML对查询语言的要求,能够实现对基于数据的、基于文档的以及混合型的XML数据源的查询,提高用户查询效率。下面我们对XQuery的几点主要特性做一简要的说明[3,5]:
1)组合性:XQuery语言通常是由多种表达式(如路径表达式、条件表达式以及元素构造函数等)构成,它们是完全通用的,其中任何一个表达式的结果都可用作另一个表达式的操作数。组合性能使其实现简单或复杂的模式匹配功能,如过滤,选择,重构等。
2)简洁性:XQuery定义了运算符的语义,使其包括了某种隐式操作。例如,将算术运算符(如+)施加于某个元素时,该运算符会自动提取该元素的数值。类似地,将比较运算符(如=)施加于一系列值时,则会自动地对该序列进行迭代,寻找满足比较条件的一对值。
3)静态分析:XQuery查询语法主要有三层:首先是表层语法,它是可视性最高的并且是用户最有可能与之发生联系的语法;其次是可以替换表层语言的基于XML的语法XQuery;最后是形式代数语言,它使用正规定义的形式十分详细地描述了XQuery处理器内部工作,为XQuery处理器查询优化奠定了基础。查询的三个层主要体现在静态分析和动态求值的过程中。静态分析的目标是把XQuery表层语句通过XQuery核心语法XQueryX转换为标准的XQuery运算树,并对其进行类型检查,静态分析阶段是执行优化和检测某种错误的阶段,它能够及时发现查询错误并进行反馈。
3 XQuery表达式的特性及实例的应用分析
XQuery具有强大的查询和检索功能,它通过各种由关键字、符号和操作数所组成的表达式来完成查询。作为一门函数化的语言,它允许各个表达式进行相互嵌套,同时它又是一门类型明确的语言,一个运算涉及的表达式、函数、常量和变量必须符合类型要求。XQuery的基础是表达式,目前,最新版本的XQuery 1. 0规范共有14种表达式:初级表达式(Primary Expressions),路径表达式(Path Expressions),序列表达式(Sequence Expressions),算术表达式(Arithmetic Expressions),比较表达式(Comparison Expressions),逻辑表达式(Logical Expressions),构造器(Constructors), FLWOR表达式(FLWOR Expressions),有序和无序表达式( Ordered and Unordered Expressions),条件表达式(ConditionalExpressions),量化表达式(Quantified Expressions),序列类型表达式(Expressions on SequenceTypes),效用表达式(Validate Expressions),扩展表达式(Extension Expressions)。本文主要介绍和实现FLOWR表达式。
3.1 FLWOR表达式的语法规范[1]
XQuery 中最强大的新特性是FLOWR表达式,FLWOR在XQuery中的作用类似于SQL中的“SELECT FROM WHERE ORDER BY”, FLWOR是“For,Let,Where,Order by,Return”的缩写,其语法构成为:
FLWORExpr::=(ForClause|LetClause)+WhereClause?+OrderByClause?“return”ExprSingle
ExprSingle::=FLWORExp
| QuantifiedExpr
| TypeswitchExpr
| IfExpr
| OrExpr
ForClause ::= "for" "$" VarName TypeDeclaration? PositionalVar? "in" ExprSingle ("," "$" VarName TypeDeclaration? PositionalVar? "in" ExprSingle)*
LetClause ::="let" "$" VarName TypeDeclaration? ":=" ExprSingle ("," "$" VarName TypeDeclaration? ":=" ExprSingle)*
WhereClause ::= "where"ExprSingle
OrderByClause ::= (("order" "by") | ("stable" "order" "by")) OrderSpecList
3.2 FLWOR表达式的执行过程及语句含义
FLWOR表达式的执行过程如图1所示。
FLWOR具体的含义如下:
For 遍历结果集,并把当前条目绑定到给定的变量。
Let 将匹配结果绑定到给定的变量。
Where 条件子句,用来过滤结果集。
Order by 排序子句,对结果进行排序。
Return 对For ,Let ,Where, Order by子句进行求值,也就是返回FLWOR的结果。
3.3 XQuery对XML文档的查询示例
FLWOR表达式的结果是一个包含连接这些求值结果的有序序列。首先看一个简单的"bib.xml" XML文档:
<?xml version="1.0" encoding="ISO-8859-1"?>
<bib>
<book><title >SQL Server</title><author>Stevens </author><year>2008</year><price>30.00</price>
</book>
<book>
<title>asp.net 2.0</title>
<author>J K</author>
<year>2007</year>
<price>30.80</price>
</book>
<title >c#</title>
<author>H.M</author>
<year>2006</year>
<price>40.95</price>
</book>
</bib>
该文档的数据模型示于图2。
下面用一简单的例子进行查询说明:
for $x in document("bib.xml")/bib/book
let $y:=$book/@year
where $x/price>30 AND $y>=2006
order by ($y) decending
return
<results>
{$x/title}
</results>
表示选取 bib 元素下的 book 元素下所有的 title元素,并且其中的 price 元素的值必须大于 30,year元素的值大于等于2006,并对year元素进行升序排序。其中document() 用于打开 "bib.xml" 文件。
上面的 XQuery 查询的结果为:
<results>
<title >c#</title>
<title>asp.net 2.0</title>
</results>
4 结束语
本文通过对非结构性数据的查询工作以及关系数据库自己的缺陷这一问题引出了XQuery语言,并对XQuery的特点进行了简要的分析,对于W3C发布的查询语言标准,文中我们从源语言的语言规范开始,尤其对于XQuery中的FLWOR表达式的整体应用过程,进行了详细的介绍。
由于XML本身还是比较新的东西,尤其是XML查询语言,它的研究现在也在大部分限于理论研究阶段。尽管XQuery还不太成熟稳定,但是对于查询和恢复XML文档和文档集,XQuery仍然是一种很有前途的创新语法定义,并且在生成XML文档等方面,XQuery有着其他查询语言无可比拟的优势。随着计算机领域的不断扩大,XQuery也将会被广泛的接受,大规模的采用XQuery的浪潮不会太遥远。
参考文献:
[1] XQuery 1.0: An XML Query Language W3C Recommendation[EB/OL].[2008-1-23].http://www.w3.org/TR/xquery/.
[2] W3C Working Group:XML Syntax for XQuery 1.0(XQueryX)[EB/OL].http://www.w3.org/TR/xqueryx/.
[3] 谢荣传,谢铉洋.XQuery语言的实现[J].安徽大学学报:自然科学版,2005,29(1):23-26.
[4] 基于XQuery的XML查询平台研究与设计[J].河南大学硕士论文,2006.
[5] 程和侠,黄国兴.XQuery简介及在.NET中的应用[J].微型电脑应用,2005,21(7):62-63.