CN101561817A - 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 - Google Patents
一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 Download PDFInfo
- Publication number
- CN101561817A CN101561817A CNA2009100691032A CN200910069103A CN101561817A CN 101561817 A CN101561817 A CN 101561817A CN A2009100691032 A CNA2009100691032 A CN A2009100691032A CN 200910069103 A CN200910069103 A CN 200910069103A CN 101561817 A CN101561817 A CN 101561817A
- Authority
- CN
- China
- Prior art keywords
- node
- xquery
- syntax tree
- sql
- traversal
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种XQuery到SQL查询语言的转换算法及关系数据库的查询方法,首先,将关系数据映射为XML模式,具体映射规则为:构建自定义XQuery查询子语言,包括构建自定义该XQuery查询子语言的语法和函数;将自定义XQuery查询子语言转换生成SQL查询语言:利用转换后的SQL查询语言进行关系数据查询。与现有技术相比,本发明可以将一条针对关系数据进行查询的XQuery语句转换为带多层复杂嵌套及多表连接的SQL查询语句,所生成的SQL语句符合SQL99标准;本算法可以作为关系数据库XML扩展插件的查询转换的基础,也可用来实现数据库相关的中间件,实现使用XQuery语言对数据库查询。
Description
技术领域
本发明涉及数据库领域,特别是涉及利用XQuery语言实现关系数据库查询的转换算法。
背景技术
数据作为信息载体,是一个企业的宝贵资源。在企业信息系统中,大部分数据都由关系数据库系统存储。但随着计算机网络的发展,半结构化XML数据已经成为网上数据传输事实上的标准。如何充分利用传统关系数据库在数据存储上的优势,同时又能够方便地使用目前流行的XML数据格式进行现有关系数据库的网上数据传输,引起了人们研究兴趣。
由于XML数据和关系数据在模式上的差异,因此针对XML数据的XQuery查询语言与针对关系数据的关系查询语言SQL也不同。比如,XML数据是多层树状或森林结构,关系数据是结构固定的扁平结构。关系数据可以通过外建等手段对多层次数据建模,XQuery语句带有特有的构造子句,可生成自定义结构的结果数据。除此以外,两种查询语言在功能强弱上也存在区别,如XQuery标准中可进行外部参数绑定等。为了同时查询关系数据和XML数据,很多研究人员提出了多种解决方案,主要关系数据库厂商也都在自己数据库管理系统中添加了XML扩展功能。现有的研究集中在如何将XML数据切分,建立一定的结构表,将XML数据导入关系数据库,再在XML数据关系表上进行XQuery查询恢复数据XML视图。也有对关系数据使用XQuery查询的研究,但需要对查询建立新视图和修改数据库的逻辑设计。
基于以上原因,现有技术中还没有一种很好的方法能够使用XQuery语言直接实现关系数据库的查询,并且XQuery语言到标准的SQL语言翻译存在很多困难。
现有的XQuery到SQL转换技术,不是需要通过数据库厂商提供的专有XML扩展模块进行转换,就是需要修改原有关系数据库逻辑设计。部分数据库厂商提供的XML功能扩展模块包含XQuery查询功能,但不同厂商使用不同语法或函数进行XQuery查询,没有统一标准。现有的通用XQuery到SQL转换算法限制条件较多或功能简单。孙宏伟等在《计算机辅助设计与图形学学报》文章“模式映射弱依赖的XQuery到SQL转换算法”在XML和关系数据之间添加了一个虚拟的GVRS层,降低了转换的模式映射依赖,其中XML到GVRS映射可自动生成,但GVRS与RDB之间映射仍需手动设置。龙冠卿等在《计算机应用与软件》上文章“基于Shrex的XQuery-SQL查询转换模型的设计与实现”中提出了一种基于Shrex XML到RDB映射框架的查询转换算法。Shrex实现了部分XPath到SQL的转换,它自身是一种将XML切分并存贮到关系数据库的技术,文中算法可以生成复杂嵌套的SQL查询,但它也需手工设置。以上两种方法都侧重数据由关系模式映射,尽量降低映射依赖,增加算法对不同映射的灵活性,目的都是解决XML数据利用关系数据库存储后的查询问题。
发明内容
鉴于上述技术问题,本发明提出了一种XQuery到SQL查询转换算法及关系数据的查询方法,能够将一种面向XML数据模式的查询语言XQuery转换为传统关系数据的SQL查询语言;另一方面,将XQuery语句转换为符合标准的SQL查询语句,进而实现通用的关系数据的查询。
一种XQuery到SQL查询语言的转换算法,该算法包括以下步骤:
第一步,构建自定义XQuery查询子语言,包括构建自定义该XQuery查询子语言的语法和函数;
第二步,将自定义XQuery查询子语言转换成SQL查询语言:
识别XQuery查询子语言的语法,建立XQuery语法树;
遍历XQuery语法树,根据所遍历的当前节点,指向及生成转换SQL语法树的节点,转换过程中分别设置一个指针指向当前处理的XQuery语法树和SQL语法树的节点,规则如下:
如果遍历到当前XQuery语法树节点为QueryBody,则遍历当前XQuery语法树的子节点;
如果遍历到当前XQuery语法树子节点为FLWORExpr,则在SQL语法树中新建SelectClause节点,添加到当前指向的节点的子节点数组;
如果遍历到当前XQuery语法树子节点为UnionExpr,则在SQL语法树中新建SetClause节点,添加到当前指向节点的子节点数组中;
如果遍历到XQuery语法树子树,SQL语法树指针指向新建节点;
如果遍历到当前XQuery语法树指向节点分别为XQuery语法树节点UnionExpr/IntersectExceptionExpr和SQL语法树节点set_clause:
遍历XQuery语法树左子树,建立当前SQL语法树左子节点;
遍历XQuery语法树右子树,建立当前SQL语法树右子节点;
如果遍历到XQuery语法树当前指向节点分别为FLWORExpr和select_clause,则遍历XQuery语法树的ForExpr或LetExpr子树;
如果遍历到XQuery语法树存在WhereExpr节点,则遍历XQuery语法树的WhereExpr子树;
如果遍历到XQuery语法树当前节点为ReturnExpr和select_clause,遍历子节点FLWORExpr节点或Return Columns节点;
如果遍历到XQuery语法树当前节点为Return Columns节点和
DisplayedColumns节点,则遍历XQuery子树生成SQL查询投影列;
如果遍历到XQuery语法树当前节点为FunctionCall和DisplayedColumns,生成SQL语法树相应Function节点;
如果遍历到XQuery语法树当前节点为WhereClause节点和WhereCondition节点,遍历XQuery语法树子节点;
如果遍历到XQuery语法树当前节点为RebVarRef和DisplayedColumn,则根据变量类型生成SQL查询投影列,如果变量是整张表则查询全部字段;
如果遍历到当前XQuery语法树指向节点为运算表达式,包括算术运算和逻辑运算:
将运算符设置为当前SQL节点值;
遍历XQuery左子树,生成SQL节点左子树;
遍历XQuery右子树,生成SQL节点右子树;
如果遍历到当前XQuery语法树指向节点为ForClause节点或LetClause节点,SQL语法树当前节点为select_clause节点,则
获取查询数据表名;
判断参数类型为整张表还是表中某一字段,设置参数值;
如果遍历到当前XQuery语法树指向节点为括号表达式ParenthesizedExpr,则直接遍历其子树;
输出SQL语法树根节点,转换算法及结束;
第三步,遍历SQL语法树,生成SQL语句,包括以下步骤:
接收SQL语法树根节点,新建空SQL语句;
遍历SQL语法树:
如果遍历到当前节点为根节点,则遍历子节点,连接遍历子节点结果值为SQL语句;
如果遍历到当前节点为select_clause节点:
遍历第一个子节点,生成投影列;
遍历第二个子节点,生成选择表;
如果遍历到存在第三个子节点,则遍历生成选择子句;
如果遍历到当前节点为运算表达式,包括算术和逻辑运算表达式:
遍历左子树,生成左操作树;
遍历右子树,生成右操作树;
返回运算表达式;
如果遍历到其它节点,直接返回节点值;
生成SQL语句。
利用XQuery到SQL查询语言的转换算法进行关系数据库的查询方法,该方法包括以下步骤:
第一步,将关系数据映射为XML模式,具体映射规则为:
关系数据表名或视图名作为XML文件根节点名;
关系数据表中或视图查询到的每行数据在XML文件中作为根节点下的一个<row>节点;
<row>节点下每个子节点对应关系数据表或视图中的一列,列名为子节点名,列值对应为子节点值;
第二步,构建自定义XQuery查询子语言,包括构建自定义该XQuery查询子语言的语法和函数;
第三步,将自定义XQuery查询子语言转换成SQL查询语言:
第四步,利用转换后的SQL查询语言进行关系数据查询。
与现有技术相比,本发明使用本算法可以将一条针对关系数据进行查询的XQuery语句转换为带多层复杂嵌套及多表连接的SQL查询语句,所生成的SQL语句符合SQL99标准;本算法可以作为关系数据库XML扩展插件的查询转换的基础,也可用来实现数据库相关的中间件,实现使用XQuery语言对数据库查询。
附图说明
图1为本发明的XQuery到SQL查询语言的转换系统系统结构图。
具体实施方式
本发明的设计思路是:由于标准的SQL语句在主流关系数据库上运行,因此通过将XQuery转换为SQL,可间接地使用XQuery查询关系数据。本发明的转换算法只需生成SQL查询语句,查询语句可以有任意层次嵌套,但无须生成SQL数据定义和数据操作语句。本发明的转换算法使用固定关系模式到XML模式映射算法,算法只考虑数据查询,不考虑关系模式中键、外键和约束等复杂关系。本发明可以用来实现关系数据库XQuery查询扩展。
本发明首先要将关系数据映射为XML模式。在关系数据库中数据实际存储在数据表中,或者可以通过建立视图实现一个数据窗口。本算法将某一数据库中的表和视图分别映射为一个个独立的XML文件,具体映射规则如下:
关系数据表名或视图名作为XML文件根节点名;
关系数据表中或视图查询到的每行数据在XML文件中作为根节点下的一个<row>节点;
<row>节点下每个子节点对应关系数据表或视图中的一列,列名为子节点名,列值对应为子节点值;
主要关系数据类型到XML数据类型映射如下表:
关系数据类型 | XML数据类型 |
integer | int |
Big integer | Long |
Small integer | Int |
Real | Float |
Double | Double |
Decimal | Decimal |
char | string |
Char(n) | String |
Varchar(n) | String |
Boolean | Boolean |
本发明在w3c制定的XQuery语言规范基础上定义了一个查询关系数据的XQuery子语言。任何一条查询语句如果能被自定义的XQuery子语言识别,那么它也能被规范的XQuery语言识别。XQuery子语言自定义主要在语法和fn:collection()函数两部分。自定义XQuery子语言语法EBNF表示如下:
QueryBody::=(FLWORExpr|UnionExpr)
ExprSingle::=(FLWORExpr|OrExpr)
FLWORExpr::=(ForClause|LetClause)(WhereClause)?″return″ReturnClause
ReturnClause::=(FLWORExpr|″(″FLWORExpr″)″|ReturnColumns)
ReturnColumns::=(ReturnColumn|″(″ReturnColumn(″,″ReturnColumn)*″)″)
ReturnColumn::=RdbVarRef|FunctionCall
ForClause::=″for″″$″VarName″in″RdbSourceExpr
LetClause::=″let″″$″VarName″:=″RdbSourceExpr
RdbSourceExpr::=″collection″″(″RdbDSName″)″<Slash>TableName<Slash>
“row”(<Slash>(ColumnName(<Slash>)?)?)?
WhereClause::=″where″ExprSingle
OrExpr::=AndExpr(″or″AndExpr)*
AndExpr::=ComparisonExpr(″and″ComparisonExpr)*
ComparisonExpr::=RangeExpr((ValueComp|GeneralComp)RangeExpr)?
RangeExpr::=AdditiveExpr(″to″AdditiveExpr)?
AdditiveExpr::=MultiplicativeExpr((<Plus>|<Minus>)MultiplicativeExpr)*
MultiplicativeExpr::=UnionExpr((″*″|″div″|″idiv″|″mod″)UnionExpr)*
UnionExpr::=IntersectExceptExpr((″union″|″|″)IntersectExceptExpr)*
IntersectExceptExpr::=ValueExpr((″intersect″|″except″)ValueExpr)*
ValueExpr::=PathExpr2
PathExpr2::=FLWORExpr|RdbVarRef|Literal|ParenthesizedExpr|FunctionCall
RdbVarRef::=″$″VarName(<Slash>ColumnName)?
GeneralComp::=(″=″|″!=″|<LessThanOpOrTagO>|″<=″|″>″|″>=″)
ValueComp::=(″eq″|″ne″|″lt″|″le″|″gt″|″ge″)
VarRef::=″$″VarName
ParenthesizedExpr::=″(″(ExprSignle)?″)″
FunctionCall::=FunctionQName″(″(″$″VarName(″,″″$″|VarName)*)?″)
本转换算法中对XQuery规范中fn:collection()函数赋予了额外意义,规范中fn:collection()函数定义有两种:
fn:collection()as node()*
fn:collection($arg as xs:string?)as node()*
第一种形式没有参数,返回默认collection,第二种形式返回名为参数的collection。本算法中对参数的定义为数据库中表名或视图名,不同数据库命名方法不同,例如模式空间名加上表名。Fn:collection()函数作为在查询中引入关系数据的方法。
算法转换XQuery生成SQL语句也是SQL标准的一个子语言,对生成SQL语言的定义如下:
Query::=select_command(set_clause)*
select_command::=″select″[″all″|″distinct″](″*″|displayed_columns)
″from″selected_tables[″where″condition]
displayed_columns::=displayed_column(″,″displayed_column)*
displayed_column::=(table_name″.″″*″)|(exp_simple[alias])
selected_tables::=selected_table(″,″selected_table)*
selected_table::=table_name[alias]
condition::=[″not″]logical_term(″or″logical_term)*
set_clause::=((″union″″all″)|″intersect″|″except″)select_command
order_clause::=″order″″by″sorted_def(″,″sorted_def)*
exp_simple::=[″+″|″-″]term((″+″|″-″)term)*
term::=factor((″*″|″/″)factor)
factor::=variable
|(function([″(″expression(″,″expression)*″)″]))
|(group_function″(″[″*″|″all″|″distinct″]expression″)″)
Variable::=[table_name″.″]column_name
Expression::=[″+″|″-″]term((″+″|″-″)term)*
group_function::=″avg″|″count″|″max″|″min″|″sum″
alias::=“as”identifier
logical_term::=logical_factor(″and″logical_factor)*
logical_factor::=(exp_simple comparaison_op exp_simple)
|([″not″]″in″exp_set)
|([″not″]″like″match_string)
|([″not″]″between″exp_simple″and″exp_simple)
|(″is″[″not″]″null″)
|quantified_factor
|(″(″condition″)″)
exp_set::=((number|quoted_string)(″,″(number|quoted_string))*)
|subquery
Subquery::=query
quantified_factor::=(exp_simple comparaison_op[″all″|″any″]subquery)
|([″not″]″exists″subquery)
comparaison_op::=″=″|″<″|″>″|″<>″|″!=″|″<=″|″>=″
order_clause::=″order″″by″sorted_def(″,″sorted_def)*
sorted_def::=(expression|number)(″asc″|″desc″)
function::=number_function
|char_function
|group_function
|conversion_function
本发明算法将XQuery语句转换为SQL语句主要分三步。第一步根据算法识别XQuery语法建立XQuery语句内部表示,XQuery语法树。第二步由XQuery语句内部表示生成转换结果SQL语句的语法树。第三步遍历SQL语法树生成SQL语句。其中第二步是算法核心步骤,第一步为建立数据结构,最后一步为生成输出。
算法接受XQuery语句,首先将XQuery语句转换为内部便于处理的数据结构XQuery语法树。算法输入语句语法树根据上面语法描述生成。语法树中每个节点对应语言BNF中非终结符,根节点为QueryBody节点。
第二步由XQuery语法树生成SQL结果语句的语法树是算法核心,算法运行过程中维护着XQuery语法树和SQL语法树两个树状数据结构,分别有一个指针指向当前处理节点。SQL语法树结构与第一步由XQuery语句建立的语法树类似,节点由非终结符组成。算法描述如下:
输入:XQuery语法树
输出:SQL语法树
步骤:
生成SQL语句根节点Query。
遍历XQuery语法树,根据当前XQuery语法树节点和指向生成SQL语法树节点做相应操作,规则如下:
当前XQuery语法树节点为QueryBody,则遍历子节点,如果:
子节点为FLWORExpr,则在SQL语法树中新建SelectClause节点,添加大当前指向节点的子节点数组。
子节点为UnionExpr,则在SQL语法树中新建SetClause节点,添加到当前指向节点的子节点数组中。
遍历XQuery语法树子树,SQL语法树指针指向新建节点。
当前指向节点分别为UnionExpr/IntersectExceptionExpr和set_clause(第一个为XQuery语法树节点,第二个为SQL语法树节点):
遍历左子树,建立当前SQL语法树左子节点。
遍历右子树,建立当前SQL语法树右子节点。
当前指向节点分别为FLWORExpr和select_clause:
遍历ForExpr或LetExpr子树。
如果存在WhereExpr节点,则遍历WhereExpr子树。
遍历ReturnExpr子树
当前节点为ReturnExpr和select_clause,遍历子节点。子节点可为FLWORExpr节点或ReturnColumns节点。
当前节点为ReturnColumns节点和DisplayedColumns节点,则遍历XQuery子树生成SQL查询投影列。
当前节点为FunctionCall和DisplayedColumns,生成SQL语法树相应Function节点。
当前节点为WhereClause节点和WhereCondition节点,遍历子节点。
当前节点为RebVarRef和DisplayedColumn,则根据变量类型生成SQL查询投影列,如果变量是整张表则查询全部字段。
当前XQuery语法树指向节点为运算表达式,包括算术运算和逻辑运算:
将运算符设置为当前SQL节点值;
遍历XQuery左子树,生成SQL节点左子树;
遍历XQuery右子树,生成SQL节点右子树。
当前XQuery语法树指向节点为ForClause节点或LetClause节点,SQL语法树当前节点为select_clause节点,则
获取查询表名;
判断参数类型为整张表还是表中某一字段,设置参数值。
当前XQuery语法树指向节点为括号表达式ParenthesizedExpr,则直接遍历其子树。
输出SQL语法树根节点,算法运行终止。
第三步为遍历SQL语法树,将SQL语句由内部数据结构转换为输出结构。算法描述如下:
输入:SQL语法树根节点
输出:字符串型SQL语句
步骤:
接收SQL语法树根节点,新建空SQL语句。
遍历SQL语法树:
当前节点为根节点,遍历子节点,连接遍历子节点结果值为SQL语句。
当前节点为select_clause节点:
遍历第一个子节点,生成投影列;
遍历第二个子节点,生成选择表;
如果存在第三个子节点,则遍历生成选择子句
返回select语句
当前节点为运算表达式,包括算术和逻辑运算表达式:
遍历左子树,生成左操作树;
遍历右子树,生成右操作树;
返回运算表达式
其它节点,直接返回节点值;
返回生成SQL语句。
下面通过一具体实施例进一步说明本发明的
如图1所示,本发明利用转换算法实现了一个中介架构的数据集成系统关系数据包装器。其中,数据集成系统内使用XML作为公共数据模式,XQuery作为查询语言。系统内有一个中介器和多个包装器,本发明算法用于关系数据包装器内。关系数据包装器使用算法中关系模式到XML模式映射将关系数据映射为XML模式作为关系数据源的局部模式,对外提供XQuery语言的查询接口。中介器调用关系数据包装器在局部模式上进行查询,将XQuery查询语句传递给包装器。包装器接收中介器发送基于所在数据源局部模式的XQuery查询语句,首先进行词法分析和语法分析,如果查询语句形式正确则建立相应抽象语法树。接着,包装器将上一步建立的抽象语法树根节点作为输入传递给本发明算法查询转换实现部分。算法实现遍历抽象语法树,同时建立系统内设计的SQL静态对象结构。关系数据包装器内SQL语句生成算法实现部分遍历SQL的内部表示结构,生成输出的SQL语句。最终,关系数据包装器再与数据库建立连接,进行具体的数据查询并将数据返回。
Claims (5)
1.一种XQuery到SQL查询语言的转换算法,该算法包括以下步骤:
第一步,构建自定义XQuery查询子语言,包括构建该自定义XQuery查询子语言的语法和函数;
第二步,将自定义XQuery查询子语言转换成SQL查询语言:
识别XQuery查询子语言的语法,建立XQuery语法树;
遍历XQuery语法树,根据所遍历的当前节点,指向及生成转换SQL语法树的节点,转换过程中分别设置一个指针指向当前处理的XQuery语法树和SQL语法树的节点,规则如下:
如果遍历到当前XQuery语法树节点为QueryBody,则遍历当前XQuery语法树的子节点;
如果遍历到当前XQuery语法树子节点为FLWORExpr,则在SQL语法树中新建SelectClause节点,添加到当前指向的节点的子节点数组;
如果遍历到当前XQuery语法树子节点为UnionExpr,则在SQL语法树中新建SetClause节点,添加到当前指向节点的子节点数组中;
如果遍历到XQuery语法树子树,SQL语法树指针指向新建节点;
如果遍历到当前XQuery语法树指向节点分别为XQuery语法树节点UnionExpr/IntersectExceptionExpr和SQL语法树节点set_clause:
遍历XQuery语法树左子树,建立当前SQL语法树左子节点;
遍历XQuery语法树右子树,建立当前SQL语法树右子节点;
如果遍历到XQuery语法树当前指向节点分别为FLWORExpr和select_clause,则遍历XQuery语法树的ForExpr或LetExpr子树;
如果遍历到XQuery语法树存在WhereExpr节点,则遍历XQuery语法树的WhereExpr子树;
如果遍历到XQuery语法树当前节点为ReturnExpr和select_clause,遍历子节点FLWORExpr节点或ReturnColumns节点;
如果遍历到XQuery语法树当前节点为ReturnColumns节点和DisplayedColumns节点,则遍历XQuery子树生成SQL查询投影列;
如果遍历到XQuery语法树当前节点为FunctionCall和DisplayedColumns,生成SQL语法树相应Function节点;
如果遍历到XQuery语法树当前节点为WhereClause节点和WhereCondition节点,遍历XQuery语法树子节点;
如果遍历到XQuery语法树当前节点为RebVarRef和DisplayedColumn,则根据变量类型生成SQL查询投影列,如果变量是整张表则查询全部字段;
如果遍历到当前XQuery语法树指向节点为运算表达式,包括算术运算和逻辑运算:
将运算符设置为当前SQL节点值;
遍历XQuery左子树,生成SQL节点左子树;
遍历XQuery右子树,生成SQL节点右子树;
如果遍历到当前XQuery语法树指向节点为ForClause节点或LetClause节点,SQL语法树当前节点为select_clause节点,则
获取查询数据表名;
判断参数类型为整张表还是表中某一字段,设置参数值;
如果遍历到当前XQuery语法树指向节点为括号表达式ParenthesizedExpr,则直接遍历其子树;
输出SQL语法树根节点,转换算法及结束;
第三步,遍历SQL语法树,生成SQL语句,包括以下步骤:
接收SQL语法树根节点,新建空SQL语句;
遍历SQL语法树:
如果遍历到当前节点为根节点,则遍历子节点,连接遍历子节点结果值为SQL语句;
如果遍历到当前节点为select_clause节点:
遍历第一个子节点,生成投影列;
遍历第二个子节点,生成选择表;
如果遍历到存在第三个子节点,则遍历生成选择子句;
如果遍历到当前节点为运算表达式,包括算术和逻辑运算表达式:
遍历左子树,生成左操作树;
遍历右子树,生成右操作树;
返回运算表达式;
如果遍历到其它节点,直接返回节点值;
生成SQL语句。
2.利用如权利要求1所述的XQuery到SQL查询语言的转换算法进行关系数据库的查询方法,其特征在于,该方法包括以下步骤:
第一步,将关系数据映射为XML模式,具体映射规则为:
关系数据表名或视图名作为XML文件根节点名;
关系数据表中或视图查询到的每行数据在XML文件中作为根节点下的一个<row>节点;
<row>节点下每个子节点对应关系数据表或视图中的一列,列名为子节点名,列值对应为子节点值;
第二步,构建自定义XQuery查询子语言,包括构建自定义该XQuery查询子语言的语法和函数;
第三步,将自定义XQuery查询子语言转换成SQL查询语言:
第四步,利用转换后的SQL查询语言进行关系数据查询。
3.如权利要求1所述的XQuery到SQL查询语言的转换算法,其特征在于,所述XQuery查询子语言的语法,表示如下:
QueryBody::=(FLWORExpr|UnionExpr)
ExprSingle::=(FLWORExpr|OrExpr)
FLWORExpr::=(ForClause|LetClause)(WhereClause)?″return″ReturnClause
ReturnClause::=(FLWORExpr|″(″FLWORExpr″)″|ReturnColumns)
ReturnColumns::=(ReturnColumn|″(″ReturnColumn(″,″ReturnColumn)*″)″)
ReturnColumn::=RdbVarRef |FunctionCall
ForClause::=″for″″$″VarName″in″RdbSourceExpr
LetClause::=″let″″$″VarName″:=″RdbSourceExpr
RdbSourceExpr::=″collection″″(″RdbDSName″)″<Slash>TableName<Slash>“row”(<Slash>(ColumnName(<Slash>)?)?)?
WhereClause::=″where″ExprSingle
OrExpr::=AndExpr(″or″AndExpr)*
AndExpr::=ComparisonExpr(″and″ComparisonExpr)*
ComparisonExpr::=RangeExpr((ValueComp|GeneralComp)RangeExpr)?
RangeExpr::=AdditiveExpr(″to″AdditiveExpr)?
AdditiveExpr::=MultiplicativeExpr((<Plus>|<Minus>)MultiplicativeExpr)*
MultiplicativeExpr::=UnionExpr((″*″|″div″|″idiv″|″mod″)UnionExpr)*
UnionExpr::=IntersectExceptExpr((″union″|″|″)IntersectExceptExpr)*
IntersectExceptExpr::=ValueExpr((″intersect″|″except″)ValueExpr)*
ValueExpr::=PathExpr2
PathExpr2::=FLWORExpr|RdbVarRef|Literal|ParenthesizedExpr |FunctionCall
RdbVarRef::=″$″VarName(<Slash>ColumnName)?
GeneralComp::=(″=″|″!=″|<LessThanOpOrTagO>|″<=″|″>″|″>=″)
ValueComp::=(″eq″|″ne″|″lt″|″le″|″gt″|″ge″)
VarRef::=″$″VarName
ParenthesizedExpr::=″(″(ExprSignle)?″)″
FunctionCall::=FunctionQName″(″(″$″VarName(″,″″$″VarName)*)?″)。
4.如权利要求1所述的XQuery到SQL查询语言的转换算法,其特征在于,所述XQuery查询子语言的函数,有两种定义:
fn:collection()as node()*
fn:collection($arg as xs:string?)as node()*。
5.如权利要求1所述的XQuery到SQL查询语言的转换算法,其特征在于,所述生成的SQL语言定义如下:
Query::=select_command(set_clause)*
select_command::=″select″[″all″|″distinct″](″*″|displayed_columns)
″from″selected_tables[″where″condition]
displayed_columns::=displayed_column(″,″displayed_column)*
displayed_column::=(table_name″.″″*″)|(exp_simple[alias])
selected_tables::=selected_table(″,″selected_table)*
selected_table::=table_name[alias]
condition::=[″not″]logical_term(″or″logical_term)*
set_clause::=((″union″″all″)|″intersect″|″except″)select_command
order_clause::=″order″″by″sorted_def(″,″sorted_def)*
exp_simple::=[″+″|″-″]term((″+″|″-″)term)*
term::=factor((″*″|″/″)factor)
factor::=variable
|(function([″(″expression(″,″expression)*″)″]))
|(group_function ″(″[″*″|″all″|″distinct″]expression″)″)
Variable::=[table_name″.″]column_name
Expression::=[″+″|″-″]term((″+″|″-″)term)*
group_function::=″avg″|″count″|″max″|″min″|″sum″
alias::=“as”identifier
logical_term::=logical_factor(″an d″logical_factor)*
logical_factor::=(exp_simple comparaison_op exp_simple)
|([″not″]″in″exp_set)
|([″not″]″like″match_string)
|([″not″]″between″exp_simple″and″exp_simple)
|(″is″[″not″]″null″)
|quantified_factor
|(″(″condition″)″)
exp_set::=((number|quoted_string)(″,″(number|quoted_string))*)
|subquery
Subquery::=query
quantified_factor::=(exp_simple comparaison_op[″all″|″any″]subquery)
|([″not″]″exists″subquery)
comparaison_op::=″=″|″<″|″>″|″<>″|″!=″|″<=″|″>=″
order clause::=″order″″by″sorted_def(″,″sorted_def)*
sorted_def::=(expression|number)(″asc″|″desc″)
function::=number_function
|char_function
|group_function
|conversion_function。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100691032A CN101561817A (zh) | 2009-06-02 | 2009-06-02 | 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNA2009100691032A CN101561817A (zh) | 2009-06-02 | 2009-06-02 | 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101561817A true CN101561817A (zh) | 2009-10-21 |
Family
ID=41220624
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100691032A Pending CN101561817A (zh) | 2009-06-02 | 2009-06-02 | 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101561817A (zh) |
Cited By (33)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102004766A (zh) * | 2010-11-09 | 2011-04-06 | 北京神州泰岳软件股份有限公司 | 基于信息系统的可配置信息查询方法及系统 |
CN102222097A (zh) * | 2011-06-16 | 2011-10-19 | 西北工业大学 | 复杂sql语句的生成方法 |
CN103246704A (zh) * | 2013-04-08 | 2013-08-14 | 浪潮集团山东通用软件有限公司 | 一种基于通用数据结构描述的实体与关系数据的映射方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN102073490B (zh) * | 2009-11-25 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 转译数据库语言的方法及装置 |
CN101710273B (zh) * | 2009-10-28 | 2013-09-11 | 金蝶软件(中国)有限公司 | 联机分析处理服务器中多维查询语句的解析方法和装置 |
CN103488657A (zh) * | 2012-06-14 | 2014-01-01 | 华为技术有限公司 | 一种数据表关联方法及装置 |
CN104133890A (zh) * | 2014-07-30 | 2014-11-05 | 四川中亚联邦科技有限公司 | 一种云端大数据处理方法和系统 |
CN104462091A (zh) * | 2013-09-13 | 2015-03-25 | 方正信息产业控股有限公司 | Xml数据的操作方法与装置 |
CN105335366A (zh) * | 2014-05-30 | 2016-02-17 | 北大方正信息产业集团有限公司 | 一种sql语句处理方法、装置和服务器 |
CN106339454A (zh) * | 2016-08-25 | 2017-01-18 | 北京云知声信息技术有限公司 | 查询命令转化方法及装置 |
CN106372176A (zh) * | 2016-08-30 | 2017-02-01 | 东华大学 | 一种支持对嵌套文档进行统一sql查询的方法 |
CN106570095A (zh) * | 2016-10-31 | 2017-04-19 | 凯美瑞德(苏州)信息科技股份有限公司 | 一种xml数据的操作方法及设备 |
CN106610999A (zh) * | 2015-10-26 | 2017-05-03 | 北大方正集团有限公司 | 查询处理方法和装置 |
CN106708954A (zh) * | 2016-11-29 | 2017-05-24 | 北京华胜信泰数据技术有限公司 | 非标准sql语句的内外连接的转化方法和转化装置 |
CN106933893A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 多维度数据的查询方法及装置 |
CN106980619A (zh) * | 2016-01-18 | 2017-07-25 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN107122418A (zh) * | 2017-03-31 | 2017-09-01 | 北京奇艺世纪科技有限公司 | 一种查询方法及装置 |
CN107798017A (zh) * | 2016-09-07 | 2018-03-13 | 南京中兴新软件有限责任公司 | 分布式数据库中的执行计划信息生成方法和系统 |
CN107943995A (zh) * | 2017-09-22 | 2018-04-20 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN109298857A (zh) * | 2018-10-09 | 2019-02-01 | 杭州朗和科技有限公司 | Dsl语句模型的建立方法、介质、装置和计算设备 |
CN109408528A (zh) * | 2018-10-25 | 2019-03-01 | 北京信安世纪科技股份有限公司 | 一种数据库脚本生成方法、装置、计算装置和存储介质 |
CN109656946A (zh) * | 2018-09-29 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 一种多表关联查询方法、装置及设备 |
CN109857757A (zh) * | 2019-01-22 | 2019-06-07 | 珠海格力电器股份有限公司 | 数据库间的语句转换方法、系统和终端 |
CN110007926A (zh) * | 2019-04-17 | 2019-07-12 | 广东三维家信息科技有限公司 | 语言转换方法及装置 |
CN110020006A (zh) * | 2017-07-27 | 2019-07-16 | 北京国双科技有限公司 | 查询语句的生成方法及相关设备 |
CN110109940A (zh) * | 2018-02-01 | 2019-08-09 | 微软技术许可有限责任公司 | 将函数式的图遍历语言转换成扩展的结构化查询语言 |
CN111695002A (zh) * | 2020-06-05 | 2020-09-22 | 苏州瑞云信息技术有限公司 | 一种基于xml语句的数据库无关的查询语言 |
CN112100200A (zh) * | 2020-09-27 | 2020-12-18 | 四川长虹电器股份有限公司 | 一种基于维度模型自动化生成sql语句的方法 |
CN112507098A (zh) * | 2020-12-18 | 2021-03-16 | 北京百度网讯科技有限公司 | 问题处理方法、装置、电子设备、存储介质及程序产品 |
CN113721896A (zh) * | 2021-06-25 | 2021-11-30 | 中债金科信息技术有限公司 | 一种金融欺诈建模语言的优化处理方法及装置 |
CN116010444A (zh) * | 2023-03-27 | 2023-04-25 | 中国人民解放军国防科技大学 | 低代码交互式的图查询语句构建方法 |
CN116050358A (zh) * | 2023-03-21 | 2023-05-02 | 北京飞轮数据科技有限公司 | 应用于动态数据的数据处理方法、装置和电子设备 |
-
2009
- 2009-06-02 CN CNA2009100691032A patent/CN101561817A/zh active Pending
Cited By (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101710273B (zh) * | 2009-10-28 | 2013-09-11 | 金蝶软件(中国)有限公司 | 联机分析处理服务器中多维查询语句的解析方法和装置 |
CN102073490B (zh) * | 2009-11-25 | 2013-09-11 | 阿里巴巴集团控股有限公司 | 转译数据库语言的方法及装置 |
CN102004766A (zh) * | 2010-11-09 | 2011-04-06 | 北京神州泰岳软件股份有限公司 | 基于信息系统的可配置信息查询方法及系统 |
CN102222097A (zh) * | 2011-06-16 | 2011-10-19 | 西北工业大学 | 复杂sql语句的生成方法 |
CN103488657B (zh) * | 2012-06-14 | 2016-12-21 | 华为技术有限公司 | 一种数据表关联方法及装置 |
CN103488657A (zh) * | 2012-06-14 | 2014-01-01 | 华为技术有限公司 | 一种数据表关联方法及装置 |
CN103246704A (zh) * | 2013-04-08 | 2013-08-14 | 浪潮集团山东通用软件有限公司 | 一种基于通用数据结构描述的实体与关系数据的映射方法 |
CN103279509B (zh) * | 2013-05-17 | 2016-05-25 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN103279509A (zh) * | 2013-05-17 | 2013-09-04 | 北京首钢自动化信息技术有限公司 | 一种采用动态查询语言的快速查询方法 |
CN104462091A (zh) * | 2013-09-13 | 2015-03-25 | 方正信息产业控股有限公司 | Xml数据的操作方法与装置 |
CN105335366A (zh) * | 2014-05-30 | 2016-02-17 | 北大方正信息产业集团有限公司 | 一种sql语句处理方法、装置和服务器 |
CN104133890A (zh) * | 2014-07-30 | 2014-11-05 | 四川中亚联邦科技有限公司 | 一种云端大数据处理方法和系统 |
CN104133890B (zh) * | 2014-07-30 | 2016-02-10 | 四川中亚联邦科技有限公司 | 一种云端大数据处理方法和系统 |
CN106610999A (zh) * | 2015-10-26 | 2017-05-03 | 北大方正集团有限公司 | 查询处理方法和装置 |
CN106933893A (zh) * | 2015-12-31 | 2017-07-07 | 北京国双科技有限公司 | 多维度数据的查询方法及装置 |
CN106933893B (zh) * | 2015-12-31 | 2019-12-10 | 北京国双科技有限公司 | 多维度数据的查询方法及装置 |
CN106980619A (zh) * | 2016-01-18 | 2017-07-25 | 北京国双科技有限公司 | 数据查询方法及装置 |
CN106339454A (zh) * | 2016-08-25 | 2017-01-18 | 北京云知声信息技术有限公司 | 查询命令转化方法及装置 |
CN106372176A (zh) * | 2016-08-30 | 2017-02-01 | 东华大学 | 一种支持对嵌套文档进行统一sql查询的方法 |
CN107798017B (zh) * | 2016-09-07 | 2023-06-09 | 金篆信科有限责任公司 | 分布式数据库中的执行计划信息生成方法和系统 |
CN107798017A (zh) * | 2016-09-07 | 2018-03-13 | 南京中兴新软件有限责任公司 | 分布式数据库中的执行计划信息生成方法和系统 |
CN106570095A (zh) * | 2016-10-31 | 2017-04-19 | 凯美瑞德(苏州)信息科技股份有限公司 | 一种xml数据的操作方法及设备 |
CN106570095B (zh) * | 2016-10-31 | 2020-01-07 | 凯美瑞德(苏州)信息科技股份有限公司 | 一种xml数据的操作方法及设备 |
CN106708954A (zh) * | 2016-11-29 | 2017-05-24 | 北京华胜信泰数据技术有限公司 | 非标准sql语句的内外连接的转化方法和转化装置 |
CN106708954B (zh) * | 2016-11-29 | 2020-03-10 | 北京华胜信泰数据技术有限公司 | 非标准sql语句的内外连接的转化方法和转化装置 |
CN107122418A (zh) * | 2017-03-31 | 2017-09-01 | 北京奇艺世纪科技有限公司 | 一种查询方法及装置 |
CN110020006A (zh) * | 2017-07-27 | 2019-07-16 | 北京国双科技有限公司 | 查询语句的生成方法及相关设备 |
CN107943995A (zh) * | 2017-09-22 | 2018-04-20 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN107943995B (zh) * | 2017-09-22 | 2022-03-08 | 国网重庆市电力公司电力科学研究院 | 一种sql查询结果列名及编码自动转换方法 |
CN110109940A (zh) * | 2018-02-01 | 2019-08-09 | 微软技术许可有限责任公司 | 将函数式的图遍历语言转换成扩展的结构化查询语言 |
CN110109940B (zh) * | 2018-02-01 | 2024-03-29 | 微软技术许可有限责任公司 | 将函数式的图遍历语言转换成扩展的结构化查询语言 |
CN109656946A (zh) * | 2018-09-29 | 2019-04-19 | 阿里巴巴集团控股有限公司 | 一种多表关联查询方法、装置及设备 |
CN109298857A (zh) * | 2018-10-09 | 2019-02-01 | 杭州朗和科技有限公司 | Dsl语句模型的建立方法、介质、装置和计算设备 |
CN109408528B (zh) * | 2018-10-25 | 2022-07-15 | 北京信安世纪科技股份有限公司 | 一种数据库脚本生成方法、装置、计算装置和存储介质 |
CN109408528A (zh) * | 2018-10-25 | 2019-03-01 | 北京信安世纪科技股份有限公司 | 一种数据库脚本生成方法、装置、计算装置和存储介质 |
CN109857757A (zh) * | 2019-01-22 | 2019-06-07 | 珠海格力电器股份有限公司 | 数据库间的语句转换方法、系统和终端 |
CN110007926A (zh) * | 2019-04-17 | 2019-07-12 | 广东三维家信息科技有限公司 | 语言转换方法及装置 |
CN111695002A (zh) * | 2020-06-05 | 2020-09-22 | 苏州瑞云信息技术有限公司 | 一种基于xml语句的数据库无关的查询语言 |
CN111695002B (zh) * | 2020-06-05 | 2024-01-02 | 苏州瑞云信息技术有限公司 | 一种基于xml语句的数据库无关的查询方法 |
CN112100200A (zh) * | 2020-09-27 | 2020-12-18 | 四川长虹电器股份有限公司 | 一种基于维度模型自动化生成sql语句的方法 |
CN112507098B (zh) * | 2020-12-18 | 2022-01-28 | 北京百度网讯科技有限公司 | 问题处理方法、装置、电子设备、存储介质及程序产品 |
CN112507098A (zh) * | 2020-12-18 | 2021-03-16 | 北京百度网讯科技有限公司 | 问题处理方法、装置、电子设备、存储介质及程序产品 |
CN113721896A (zh) * | 2021-06-25 | 2021-11-30 | 中债金科信息技术有限公司 | 一种金融欺诈建模语言的优化处理方法及装置 |
CN116050358A (zh) * | 2023-03-21 | 2023-05-02 | 北京飞轮数据科技有限公司 | 应用于动态数据的数据处理方法、装置和电子设备 |
CN116010444A (zh) * | 2023-03-27 | 2023-04-25 | 中国人民解放军国防科技大学 | 低代码交互式的图查询语句构建方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101561817A (zh) | 一种XQuery到SQL查询语言的转换算法及关系数据的查询方法 | |
CN102693310B (zh) | 一种基于关系数据库的资源描述框架查询方法和系统 | |
Beck et al. | Classification as a query processing technique in the CANDIDE semantic data model | |
Abiteboul et al. | Correspondence and translation for heterogeneous data | |
CN101667190B (zh) | 基于XQuery的查询引擎系统 | |
US9152735B2 (en) | Method and apparatus for composing XSL transformations with XML publishing views | |
CN104205092B (zh) | 通过变换复杂三元组建立本体的方法和系统 | |
US7031956B1 (en) | System and method for synchronizing and/or updating an existing relational database with supplemental XML data | |
US6795825B2 (en) | Database querying system and method | |
US6934712B2 (en) | Tagging XML query results over relational DBMSs | |
CN107885786B (zh) | 面向大数据的自然语言查询接口实现方法 | |
Chebotko et al. | Semantics preserving SPARQL-to-SQL query translation for optional graph patterns | |
CN107491476A (zh) | 一种适用于多种大数据管理系统的数据模型转换及查询分析方法 | |
Hazber et al. | Towards integration rules of mapping from relational databases to semantic web ontology | |
CN112394926A (zh) | 一种基于自然语言模型的码床系统 | |
CN101241503B (zh) | 数据库个性化方法 | |
Goh et al. | An integrated environment for product development using STEP/EXPRESS | |
WO2003056456A1 (en) | Method and device for presenting, managing and exploiting graphical queries in data management systems | |
Della Penna et al. | Interoperability mapping from XML schemas to ER diagrams | |
Machkour et al. | A reversible conversion methodology: between XML and object-relational models | |
Wyss et al. | A relational algebra for data/metadata integration in a federated database system | |
Hara et al. | Hypermedia databases: A specification and formal language | |
Sengupta | Toward the union of databases and document management: The design of DocBase | |
CN106560802A (zh) | 一种关系数据库与web数据的映射方法 | |
Vidhya et al. | Query translation from SQL to XPath |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20091021 |