CN101719156A - 一种在关系型数据库中无缝集成纯xml查询引擎的*** - Google Patents

一种在关系型数据库中无缝集成纯xml查询引擎的*** Download PDF

Info

Publication number
CN101719156A
CN101719156A CN200910245204A CN200910245204A CN101719156A CN 101719156 A CN101719156 A CN 101719156A CN 200910245204 A CN200910245204 A CN 200910245204A CN 200910245204 A CN200910245204 A CN 200910245204A CN 101719156 A CN101719156 A CN 101719156A
Authority
CN
China
Prior art keywords
xml
node
query
xquery
xpath
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.)
Granted
Application number
CN200910245204A
Other languages
English (en)
Other versions
CN101719156B (zh
Inventor
张海威
袁晓洁
张路
王敏辉
胡翔宇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nankai University
Original Assignee
Nankai University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Nankai University filed Critical Nankai University
Priority to CN2009102452040A priority Critical patent/CN101719156B/zh
Publication of CN101719156A publication Critical patent/CN101719156A/zh
Application granted granted Critical
Publication of CN101719156B publication Critical patent/CN101719156B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明属于数据库技术领域,公开了一种在关系型数据库中无缝集成纯XML查询引擎的***。该***建立了XML文档存储机制,引入了XML数据类型;为XML文档建立了多种索引,提高了查询效率;实现了XML标准查询语言XPath和XQuery;设计了基于多种索引结构的XML专用高效查询算法,实现对用户输入的XQuery查询语句的最终执行,得到最终结果返回给用户。

Description

一种在关系型数据库中无缝集成纯XML查询引擎的***
【技术领域】
本发明属于XML数据库管理技术领域。
【背景技术】
可扩展标记语言XML是W3C组织推荐的一种通用标记语言,它凭借可自描述、扩展性高、半结构化、具有层次结构等特点,已成为Web应用程序中表示和交换数据的标准格式。随着XML技术的不断发展和完善以及大量XML文档的出现,如何有效管理大规模XML文档数据,如何对XML文档进行高效率的查询已经成为当前数据库领域中一个亟待解决的问题。
当前的数据库管理***主要使用两种方案来存储XML文档。一种方案是在传统的关系数据库管理***的基础上扩展XML处理功能而形成的“XML使能”数据库,通常采用的方式是将XML数据拆分并映射为多张关系表,试图用关系模型模拟XML数据的原生存储。这种方法忽略了XML数据模型特有的树形结构,从而导致XML结构语义丢失、XML查询表达力下降和查询性能下降等问题;另一种方案是纯XML数据库,它以XML数据模型为中心,用更加自然的方式管理XML数据。纯XML数据库***面临的最大问题是,必须重新实现关系数据库已经非常成熟的理论和技术,造成大量人力物力的浪费。为了既体现XML数据模型,又重用关系数据库已有的基础模块,本发明提出了一种在关系型数据库中无缝集成纯XML查询引擎的***。
随着XML文档的广泛应用,XML数据量急剧增长,用户迫切地希望通过查询快速获取到满足某些条件的XML数据。因此,XML查询处理成为近几年数据库领域的一个研究热点。在研究者们提出的众多XML查询语言中,XPath和XQuery脱颖而出,并最终成为W3C的推荐标准。这两种语言均使用路径表达式作为在XML数据中定位节点的基本手段,XPath可以作为XML查询语言单独使用,XML查询语言XQuery 1.0是XPath2.0的扩展版本,它在XPath的基础上增加了FLOWR表达式等内容,功能更加强大。要支持XML查询,就要实现这两种XML标准查询语言。
近年来,在XML结构连接方面,研究者们提出了一系列计算XML结构关系的连接算法。但是,这些连接算法均假设XML数据存在于DBMS环境之外。由于没有索引结构的支持,这些算法只能利用最简单的倒排表去寻找具有指定标签的节点,这种方式成为了结构连接的效率瓶颈。要提高XML查询操作的执行效率,必须将XML数据置于数据库管理***的环境中,充分设计并利用各种索引,使XML查询效率有质的飞跃。本发明针对XML文档数据模型的特点,充分利用了元素索引、值索引和路径索引,实现了适用于关系数据库的XPath和XQuery查询语言的查询处理方法。
【发明内容】
本发明的目的是在重用关系数据库已有模块的基础上,体现XML数据模型的特点,提供一种在关系型数据库中无缝集成纯XML查询引擎的***。
本发明针对XML文档数据模型的特点,设计了XML文档在关系表中的存储方式,充分利用了元素索引、值索引和路径索引,设计并实现了充分利用多种索引结构的XPath和XQuery查询语言的查询处理方法。
本发明提供的在关系型数据库中无缝集成纯XML查询引擎的***包括:
1、将XML文档存入关系数据库关系表的模块
1.1、为关系数据库增加XML类型
为体现与关系数据库的无缝集成,本发明中以增加XML数据类型的方式来体现对XML的支持。声明为XML类型的字段表示该字段为XML文档,在***数据的时候会将该字段的内容按照XML的方式存储。XML类型中的两个关键内容为relationID和docID,其中relationID表示存储该用户表中所有XML节点的关系表的唯一标识,docID用于标识所存储的XML文档。XML类型的使用方法与int等内置数据类型相同。
create table BookStore
{
              BookStoreID      int,
              BookStoreName    nvarchar(50),
              BooksSold        xml
}
上述SQL语句创建了BookStore表。该表中的BooksSold字段为XML类型,则在创建BookStore表的同时创建一个XML节点表XMLTable,XMLTable表的唯一标识记作relationID。
1.2、存储XML文档
向BookStore表***数据时,***到BooksSold字段的XML文档会被分配一个docID,以docID为前缀对每个节点进行DLN编码,分析节点内容,将每个节点存为关系表中的一个元组。每个节点由四元组(NodeID,tagname,type,val)表示。其中NodeID为节点的DLN编码,是节点的唯一标识;tagname表示节点名称;type∈{Document,Element,Attribute,Value},表示节点类型;val表示节点值。
1.3、将用户表中的XML类型字段映射到XmlTable表的方法
本发明提供了一个名为XMLpointer的指针结构,该结构将用户表中XML类型字段映射到存储XML文档的关系表中。XMLpointer结构包含relationID和docID,通过relationID可以查询到存储该XML文档的关系表,而通过docID可以找到该XML文档的所有节点--以该docID为前缀的所有NodeID所对应的节点都隶属于该XML文档。
2、为XML文档建立元素索引、值索引及路径索引的模块
本发明中,为了加速节点的获取速度,在将XML文档存入关系表的同时,为XML文档建立元素索引、值索引、路径索引。通过各种索引,可以迅速获得符合要求的节点集合。需要指出的是,此发明中出现的索引都是基于XML文档对应的关系表的相关内容。也就是说,本发明中的所有索引结构都是利用关系数据库的索引机制对XML数据查询进行效率改善,这应与其它基于原生的XML数据索引方法所区别。
2.1、元素索引
根据元素名称(name)和元素类型(type)获得符合条件的节点集合。
2.2、值索引
根据元素值(val)获得查询条件的节点集合。
2.3、路径索引
路径索引用于对由多个连续父子关系连接的step进行快速求值,返回符合该路径的节点集合。对于XPath路径表达式/bib/book/author,利用路径索引可直接查询到所有符合上述路径的book节点集,而不需要每步都进行二元连接操作。
3、XML查询引擎
关系数据库的查询引擎主要由解析器、分析器和执行器三个组件构成。我们对关系数据库查询引擎的解析器、分析器和执行器进行了扩充和重造,使其支持XML查询。
3.1、在关系数据库SQL查询语言中无缝集成XQuery的语法形式
要实现在关系数据库中集成XML查询引擎,就必须考虑如何按照用户习惯的关系数据库的查询方式来实现对XML查询的支持,即实现“无缝集成”关系数据库的查询引擎。要体现“无缝集成”的特性,就需要在SQL语法中实现XPath/XQuery的内嵌式查询。这项工作需要开发完整的XQuery语法解析器和语义生成器,并将它们无缝融合到SQL解析器层中。
本发明中,遵照SQL/XML标准,为了体现出“无缝集成”查询引擎的特性,确定在关系数据库中进行XML查询的表达式语法形式:
select XmlQuery(‘/bib/book’,BooksSold)from BookStore where BookStoreID=1
其中,XmlQuery为SQL/XML标准中的标准函数,第一个参数是XQuery或者XPath表达式,第二个参数为用户表中XML类型的列。XmlQuery这样的语法形式遵循SQL/XML标准并符合关系数据库用户SQL语言的使用习惯。在处理表达式的过程中,关系数据库***自身的解析模块能够将SQL表达式进行解析,得到SQL语法树;XML查询引擎的解析器对XmlQuery的XML查询表达式进行解析,将解析得到的语法子树挂接到关系查询语言SQL语法树的target_list节点上,这样,即实现将XML查询无缝地融合到SQL解析器层中。融合方式如说明书附图4所示。
3.2、解析器:将XQuery查询语句解析为查询语法树
解析器的功能是处理用户输入的字符串形式的查询语句,并根据规定的文法将其转换为相应的语法树供进一步处理。
本发明中的查询语言解析模块根据XPath 2.0和XQuery 1.0标准,制定了XQuery文法;将根据XQuery文法生成的语法树挂接到关系查询语言SQL的target_list上。在解析器设计过程中,添加XmlQuery结构来存储XmlQuery函数解析后的内容,具体形式如下:
其中,xmlqueryParseTree表示XmlQuery函数第一个参数,存放对解析查询语言后形成的语法树结构;target表示XmlQuery函数的第二个参数即关系表中的xml列;stepList在解析器阶段暂不进行填充。解析器对字符串处理完毕后,返回一棵语法树,供分析器处理。
本发明根据XPath 2.0和XQuery 1.0的标准,解析器中能够识别出的核心模块如下:
(1)基本表达式
包括字符、字符串、整数、浮点数、布尔值、变量、标识符、关键字、算术运算符、逻辑运算符、结点运算符、通配符等。这些基本表达式由词法分析器分析出来,并将其值与属性传递给文法分析器,根据上下文判断其语义。
(2)路径表达式
XPath中的路径表达式是本发明中解析器的重要分析对象,包括相对定位路径和绝对定位路径。每个定位路径都是由一个或多个定位步组成,每个定位步之间由“/”分开。绝对路径以“/”开始,从文档的根结点开始定位路径;相对路径则以某个定位步开始定位路径。
每个定位步由三部分组成:
①轴值:指定了定位步选择结点和上下文选择结点之间的关系。根据W3C的标准,本发明能够识别包括前向轴和反向轴在内的13种轴值,每种轴值都有一个基本结点类型。同时,本发明中的解析器能够识别定位路径表达式的缩写形式。
②结点测试(NodeTest):指定定位步选择结点的结点类型或结点名。本发明中的解析器能够判断结点是类型还是名称测试。类型测试包括:text(),判断是否为文本结点;comment(),判断是否为注释结点;processing-instruction(),判断是否为处理指令结点;node()。名称测试则判断上下文结点是否与该名称相符。
③谓词,使用专有的谓词表达式来进一步筛选定位步选择的结点集合。谓词位于定位步末端的方括号中,可以是路径表达式、比较表达式、函数等。对于上下文结点中每一个结点计算谓词的值,若为假则剔除该结点。
(3)序列表达式
序列是XQuery中的一个基本概念,XQuery提供了序列的构造、过滤、合并等操作。序列由一个或多个项组成,各项之间用逗号操作符隔开,或是使用范围表达式,例如(1,2,3)或(1 to 3)。同时,解析器能够识别序列的合并(Union或|)、交(intersect)和差(except)操作。
(4)算术表达式
XPath支持数值运算,本发明能够识别加(+)、减(-)、乘(*)、除(div)、取模(mod)运算,在执行每个运算前总是把操作数转化为一个数字。
(5)比较表达式
比较表达式进行两个值之间的比较。本发明能够识别XQuery标准中的3种比较类型——值比较、一般比较和结点比较。值比较用来比较单个值,使用操作符eq、ne、lt、le、gt、ge;一般比较用来在两个任意长度的序列间进行比较,使用操作符“=”、“!=”、“<”、“<=”、“>”、“>=”;结点比较用来在两个结点间根据结点的id或者文档序进行比较,使用操作符is、“<<”、“>>”。
(6)逻辑表达式
解析器能够识别与(and)和或(or)逻辑运算符。例如,对于表达式1<2 andnot(3>4),经过解析后比较表达式1<2和表达式not(3>4)作为and的两个子结点,为重写器做好准备。
(7)函数调用
本发明为用户提供了[XQuery 1.0and XPath 2.0 Functions and Operators]文档中的常用函数调用。解析器能够生成函数结点,将函数名及其参数填入语法树,供后面处理。内置函数包括结点集合函数、字符串函数、布尔函数、数字函数、上下文函数等。
(8)FLWOR表达式
XQuery查询包含但不仅限于FLWOR表达式。但FLWOR作为XQuery的主体,是XQuery最有特色且最重要的语法。其特点是包含完整的XPath路径表达式,支持灵活循环嵌套。每个FLWOR表达式都由一个或多个for子句、一个或多个let子句、一个可选的where子句、一个可选的order子句和一个return子句构成。在本发明的解析器中,FLWOR模块下有若干子模块:
①for子句模块:
将一个或多个变量同表达式结合在一起,每一个变量都会被赋予一个序列;
②let子句模块:
将变量直接与一个完整的表达式绑定在一起,将变量绑定到整个结点序列;
③where子句模块:
依据一些条件对绑定的变量进行过滤;
④order子句模块:
根据用户输入的排列方式指定结果的顺序;
⑤return子句模块:
构建FLWOR表达式中的结果,并对where过滤子句中符合条件的每一个捆绑变量进行一次操作。
(9)条件表达式
条件表达式由if-then-else语句组成,它的作用就像在传统编程语言中一样。条件表达式的值应为布尔型,或者它能够被转换为布尔值。解析器还能支持条件表达式的嵌套。
(10)定量表达式
定量表达式支持存在量词some和全称量词every。其以量词开头,后跟若干个in子句,然后是关键词satisfies和一个测试表达式,每个in子句将一个变量和一个表达式关联。
(11)构造器
本发明中能够解析XQuery标准中的两种构造器-直接构造器和计算式构造器。直接构造器使用XML式的表示法;计算式构造器使用闭合表达式的表示法,值一般是动态计算生成的。
3.3、分析器:将查询语法树填充为执行器可分析的Query结构
原关系查询引擎中分析器的功能是将原始语法树进行初步分类处理,遍历原始语法树,检出相关表项、目标列、目标表项以及排序方式等,同时生成整个查询的全局信息,包括命名空间,Query类型等,并将这些信息填充到Query结构中。
对于XML查询引擎,本发明中重新构造了分析器。分析器的主要任务是:
(1)遍历XmlQuery原始语法子树,检查子树中的XQuery表达式;
此处的语法子树即为XmlQuery结构中的xmlqueryParseTree域。
(2)检出XQuery中的step并填充至XmlQuery类型的stepList域。
stepList是执行器中进行二元结构连接算法的基础,它是由多个顺序执行的step构成的链表。对于stepList中的每个step,需要填充查询需要的相关信息,主要填充的内容包括轴值、名称、谓词等域。例如:对于for子句:for $book in//book,在解析器阶段得到ForClause节点,ForClause的InExpression域指向其中的XPath部分“//book”。但是这样的结构无法体现具体执行过程中需要的轴值关系和文档结点信息,因此本发明中在分析器阶段将这些需要的内容提取出来填充到一个step结构中,该结构中包含XPath查询需要的全部信息。
(3)对于FLWOR表达式,整个FLWOR节点被解析后作为一个step填充到stepList中。
FLWOR节点有若干子句,每个子句都被递归地进行分析,其中的所有XPath路径表达式都被解析成stepList,分别成为各自子句的一个成员。这些工作完成之后,即可得到如说明书附图5所示的结构。图6所示的结构中,FLOWR表达式中的各个子句是平行结构,这样的结构不利于执行器的执行。因此,本发明中在分析器的最后阶段,对上述由链表表示循环的平行结构进行调整,将内层循环递归挂接到外层的Return子句上,最终得到如说明书附图7所示的结构,交由执行器执行。
3.4、执行器:
3.4.1执行器执行步骤
在关系数据库的查询引擎中,执行器的主要工作为接受分析器传下来的Query结构并对它进行处理,完成一条查询语句最终的执行。执行器包括准备执行阶段和实际执行阶段。
(1)准备执行阶段:
准备执行阶段的工作是处理Query结构中的target_list及其他执行前准备。在执行器中设置execInitExpr函数,为每个Expr生成一个Expression State用以最终执行。Expression State主要包含通过函数指针指定的这个表达式的实现函数,以及经过递归execInitExpr处理过的函数所需要的参数。执行器在执行阶段调用这个函数来对XmlQuery函数进行求值。一般这个函数会调用最终实际的处理函数。
(2)实际执行阶段:
实际执行阶段进行真正的XQuery求值工作。实际执行工作如下:
①执行最外层For/Let子句的in表达式,得到一个结果序列Seq;
②对于Seq中的每个节点分别将其赋给所指定的绑定变量$i;
③对于$i表示的每个节点进行Where条件判断;
④对于$i表示的每个节点执行一次Return表达式;
⑤获得最终结果,通过Datum格式包装执行结果,纳入关系查询引擎处理流程。
3.4.2基于路径索引的XPath专用查询算法
在执行器的实际执行阶段,进行对XPath表达式的实际求值工作,本发明中采用二元结构连接算法进行XPath表达式求值。在通常情况下,我们对于XPath表达式中的每个step,应用元素索引和值索引求出符合要求的节点集,作为下一步求值的上下文。这样的方式简单易用,但是由于每一步都需要读取索引及调用节点关系判断函数进行计算,极大地影响了XPath的执行效率。
在本发明的XML索引模块中提到,为了加速求值,为XML文档建立了路径索引,用于对由多个连续父子关系连接的step进行快速求值。例如,对于XPath路径表达式/bib/books/book,利用路径索引可直接查询到所有符合上述路径的book节点集{1.1.2,1.2.2,1.3.2},而不需要每步都读取索引并根据轴值关系进行二元连接计算。在以往的研究中也有应用路径索引的相关文献,但是对于路径索引的应用有诸多的限制,例如,只能对仅包含父子轴值且无谓词的XPath表达式(如/bib/book/author/first)应用路径索引,而其他形式的XPath表达式(如/bib/book//author/first)仍然要利用二元结构连接算法。本发明中针对路径索引设计了专用XPath查询算法,对stepList进行分割,使其能够最大程度的应用路径索引,加速XPath求值。例如,对于XPath表达式/bib/book//author/first,将表达式划分为/bib/book和author/first两个部分,分别应用路径索引求值,再将结果做连接计算,得到最终的查询结果。
应用本发明所提出的XPath专用查询算法后,对于可以应用路径索引的部分,读取一次索引可以直接获得查询结果,最大程度减少了频繁应用普通元素索引所造成的开销,使查询速度获得了很大提升,当可应用路径索引的部分较长时,提升效果更为明显。
在获得最终的节点集之后,将节点集的所有子树转换为XML文档片段的形式返回给用户。对于XQuery查询语句
for $book in//book
let $author:=$book/author
where position()=2
return $author
其返回的结果为:
<author>Per Bothner</author>
至此,XML查询引擎的工作全部完成。
【本发明的优点和积极效果】:
本发明避免了“XML使能”数据库XML结构语义丢失、XML查询性能下降和纯XML数据库必须重新开发基础模块的问题,充分利用了关系数据库的现有模块,利用DLN编码,将XML文档存储在关系表中,实现了无缝集成关系数据库的XML查询引擎***。
本发明在关系数据库查询引擎的各个组件中,分别加入了对XML查询语言XQuery和XPath的支持,实现了XQuery的全部功能,实现了完整的XML查询引擎。
本发明充分利用了数据库底层建立的元素索引、值索引,特别是路径索引,打破了路径索引只能应用于仅包含父子轴值且无谓词的XPath表达式的限制,针对路径索引设计了专用XML查询算法,对stepList进行分割,使其能够最大程度的应用路径索引,加速XPath求值。应用了本发明提出的XPath专用查询算法后,对于可以应用路径索引的部分,读取一次索引直接获得查询结果,最大程度减少了频繁应用普通元素索引所造成的开销,使查询速度获得了很大提升,当可应用路径索引的部分较长时,提升效果更为明显。
【附图说明】:
图1是***框架图;其中,图1A是XML文档存储流程,图1B是XQuery执行流程;
图2是扩展XML数据类型后的用户表结构;
图3是XML节点关系表结构;
图4是在SQL语法树中挂接XmlQuery节点的示意图;
图5是实施例3语法树结构示意图;
图6是FLOWR语句平行结构框图;
图7是FLOWR语句嵌套结构图;
图8是实施例4语法树结构示意图;
图9是stepList填充方式框图;
图10是基于路径索引的XPath专用查询算法的实施例。
【具体实施方式】:
实施例1:创建含有XML类型字段的用户表
创建用户表BookStore,该表中的BooksSold字段为XML类型,用来存放保存书籍信息的XML文档。建表SQL语句如下:
create table BookStore
{
       BookStoreID      int,
       BookStoreName    nvarchar(50),
       BooksSold        xml
}
创建BookStore表的同时创建存储BooksSold字段的关系表,假设该关系表的relationID为17003。扩展XML数据类型后的用户表如说明书附图2所示。
向该表中***一条记录:
insert into BookStore value(210310001,’XinHuaBookStore’,
’<bib>
<book category=″COOKING″>
  <title lang=″en″>Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category=″CHILDREN″>
  <title lang=″en″>Harry Potter</title>
  <author>J K.Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
<book category=″WEB″>
  <title lang=″en″>XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>
</bib>’)
则***记录的过程中,对BooksSold字段中包含的XML文档进行解析,对文档中的每个节点进行DLN编码,将每个节点的四元组形式作为一条记录***到XML节点关系表中,***后XML节点关系表中的内容如说明书附图3所示。
实施例2:索引使用方法
对于说明书附图3中所示XML文档,分别应用三种索引:
(1)元素索引:
输入:name=’book’,type=1
输出:{1.1,1.2,1.3}
(2)值索引:
输入:name=’en’
输出:{1.1.2.1,1.2.2.1,1.3.2.1}
(3)路径索引:
输入:bib->book->author
输出:{1.1.3,1.2.3,1.3.3,1.3.4,1.3.5,1.3.6,1.3.7}
实施例3:XQuery表达式语法树形式及结构转换
我们给出如下形式的XQuery表达式:
for $book in//book
  let $title:=$book/title
  where position()=2
  return $title
用户输入上述XQuery表达式后,解析器会调用lex&&yacc工具接口,根据本发明中制定的XQuery文法产生式,对用户输入语句进行解析,形成查询语法树。查询语法树的形式如说明书附图5所示。此时形成的语法树为如说明书附图6所示的平行结构,这样的结构不利于执行器的进一步处理。本发明对上述由链表表示循环的平行结构进行调整,将内层循环递归挂接到外层的Return子句上,最终得到如说明书附图7所示的结构,交由执行器执行。
实施例4:分析器stepList填充方法
我们给出如下形式的XPath表达式:
/bib/book/author[last()]
采用与实施例2中相同的方法获得该查询语句的语法树,如说明书附图8所示。在分析器阶段,根据语法树填充Query结构,主要是stepList结构的填充。stepList是由多个step构成的链表,每个step由轴值(axis)、节点测试(node-test)和谓词(predicate)构成,step中需要的信息可从语法树中分析获得。stepList的填充工作主要包括:
(1)分析每个step的各项内容,包括轴值、节点测试、谓词等;
(2)将每个step按照顺序形成链表stepList。
对于实施例4中给出的示例,stepList填充过程如说明书附图9所示。
实施例5:基于路径索引的XPath专用查询算法,具体算法如下:
算法.利用路径索引的专用XPath查询算法
输入:一条XPath查询语句的stepList
输出:符合该查询语句的节点集
①记FirstStep、CurStep为stepList中的首个step;记KeyPath链表保存路径索引关键字,ResultSet为最终节点集,CurResult为当前节点集,TempResult为临时节点集,均初始化为空;
②从CurStep开始依次向后遍历stepList,若CurStep中包含谓词,则将CurStep添加到KeyPath链表末尾,并将CurStep赋值为stepList中的下一个step,转向③;若CurStep的轴值类型为父子关系,则将CurStep添加到KeyPath链表末尾,转向②,否则记AxisType为CurStep的轴值类型,转向③;
③以KeyPath为关键字,调用路径索引接口,获得对应节点集赋值给CurResult,若CurResult为空,清空ResultSet并转向⑥;若最终结果集ResultSet为空,将ResultSet赋值为CurResult,转向②,否则转向④;
④记KeyPathLen为KeyPath链表长度,对CurResult中的每个节点(记CurResultNode为当前节点),对ResultSet中的每个节点(记CurResultSetNode为当前节点),获取CurResultNode前KeyPathLen-1层祖先节点,记为{Ancestor},若CurResultSetNode与Ancestor满足AxisType指定的轴值类型,则将CurResultNode添加到临时结果集TempResult中,否则继续下一次循环;
⑤清空ResultSet,若TempResult为空,转向⑥;若TempResult不为空,则将TempResult中的节点全部添加到ResultSet中,清空TempResult,转向②;
⑥算法结束,返回结果节点集ResultSet。
对于XPath查询语句/bib/book//author/first,应用基于路径索引的XPath专用查询算法,其求值过程为:
①将查询语句根据轴值类型和是否存在谓词,分为bib/book和author/first两部分,两部分间的AxisType为AXIS_ASCENDANT(祖先后裔)。
②对于bib/book和author/first分别应用路径索引,获得book节点集{Book}和first节点集{First};
③author/first的长度为KeyPathLen=2,计算{First}中每个节点的前1(KeyPathLen-1)层祖先,记为{Ancestor};
④对于{Book}和{Ancestor},根据AxisType=AXIS_ASCENDANT进行计算,求出{Ancestor}集合中所有与{Book}中节点满足祖先后裔关系的节点,记为{Tmp};{First}中与{Tmp}存在映射关系的节点即为最终结果,记为ResultSet。具体求值过程如说明书附图10所示。

Claims (10)

1.一种在关系型数据库中无缝集成纯XML查询引擎的***,该***包括:第1、将XML文档存入关系数据库关系表的模块;
第1.1、为关系数据库增加XML类型;
第1.2、存储XML文档的方法;
第1.3、将用户表中的XML类型字段映射到关系表的方法;
第2、为XML文档建立元素索引、值索引及路径索引的模块;
第2.1、元素索引;
第2.2、值索引;
第2.3、路径索引;
第3、XML查询引擎;
第3.1、在关系数据库SQL查询语言中无缝集成XQuery的方法;
第3.2、解析器中将XQuery查询语句解析为查询语法树的方法;
第3.3、分析器中将查询语法树填充为执行器可分析的Query结构的方法;
第3.4、执行器中设置挂载函数,实现基于路径索引的XPath专用查询算法。
2.根据权利要求1所述的***,其特征在于步骤第1.1中所述的为关系数据库增加XML类型,具体方法为:创建新的数据类型,存储XML文档。
3.根据权利要求1所述的***,其特征在于步骤第1.2中所述的存储XML文档的具体方法为:***在读入XML文档时,对每个节点进行DLN编码,分析节点内容,将每个节点存储为关系表中的一个元组;每个节点由四元组(NodeID,tagname,type,val)表示,其中,NodeID为该节点的DLN编码,是节点的唯一标识;tagname表示节点名称;type表示节点类型;val表示节点值;将节点DLN编码、节点名称、节点类型及节点值作为元组的属性、每个节点作为一个元组存储在一张关系表中,同一张用户表中的xml字段存储在同一张关系表中。
4.根据权利要求1所述的***,其特征在于步骤第1.3中所述的将用户表中的XML类型字段映射到关系表的方法:提供一个名为XMLpointer的指针结构,包含relationID和docID两个字段,通过relationID可以找到存储该XML文档的关系表,通过docID可以找到该XML文档的所有节点--以该docID为前缀的所有NodeID所对应的节点都隶属于该XML文档。
5.根据权利要求1所述的***,其特征在于步骤第2在该***中实现了元素索引、值索引及路径索引;元素索引:指给定元素名称,通过元素索引返回节点名称为指定值的节点集合;值索引:指给定元素值,通过元素索引返回节点值为指定值的节点集合;路径索引:用于对由多个连续父子关系连接的查询进行快速求值,返回符合该路径的节点集合。
6.根据权利要求1所述的***,其特征在于步骤第3.1中所述的在关系数据库SQL查询语言中无缝集成XQuery的方法,具体语法形式为:
select XmlQuery(‘/bib/book’,BooksSold)from BookStore where BookStoreID=1
其中XmlQuery为SQL/XML标准中的标准函数,第一个参数为XQuery或者XPath表达式,第二个参数为用户表中XML类型的列。
7.根据权利要求1所述的***,其特征在于步骤第3.2中所述的在解析器中将XQuery查询语句解析为查询语法树的具体方法为:根据XPath 2.0和XQuery 1.0标准,制定XQuery文法,接受用户输入的字符串形式的查询语句,根据文法将其解析为相应的语法树供进一步处理;
本发明中能够识别出的XQuery核心模块包括:
Figure F2009102452040C00021
基本表达式
Figure F2009102452040C00022
路径表达式
Figure F2009102452040C00023
序列表达式
Figure F2009102452040C00024
算术表达式
比较表达式
Figure F2009102452040C00026
逻辑表达式
函数调用
Figure F2009102452040C00028
FLWOR表达式
Figure F2009102452040C00029
条件表达式
Figure F2009102452040C000210
定量表达式
构造器
8.根据权利要求1所述的***,其特征在于步骤第3.3中所述的在分析器中将查询语法树填充为执行器可分析的Query结构的具体方法为:
(1)遍历XmlQuery原始语法子树,检查子树中的XQuery表达式;
(2)对于FLWOR表达式,整个FLWOR节点作为一个step填充到stepList中;
(3)对于FLWOR表达式中的每个子句,检出其中的step并填充至XmlQuery类型的stepList域。
9.根据权利要求1所述的***,其特征在于步骤第3.4中所述执行器的执行步骤包括:第3.4.1、准备执行阶段和实际执行阶段,准备执行阶段处理Query结构中的target_list,完成执行前准备工作,实际执行阶段进行真正的XQuery求值工作。
10.根据权利要求1所述的***,其特征在于步骤第3.4中所述执行器的基于路径索引的XPath专用查询算法是:
第3.4.2、本发明中打破路径索引只能应用于仅包含父子轴值且无谓词的XPath表达式的限制,针对路径索引设计了专用XPath查询算法,主要方法为:将stepList分割成多个可以应用路径索引的片段,对每个片段分别求值后进行连接,获得最终查询结果,该算法能够最大程度的应用路径索引,加速XPath求值。
CN2009102452040A 2009-12-30 2009-12-30 一种在关系型数据库中无缝集成纯xml查询引擎的*** Expired - Fee Related CN101719156B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102452040A CN101719156B (zh) 2009-12-30 2009-12-30 一种在关系型数据库中无缝集成纯xml查询引擎的***

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102452040A CN101719156B (zh) 2009-12-30 2009-12-30 一种在关系型数据库中无缝集成纯xml查询引擎的***

Publications (2)

Publication Number Publication Date
CN101719156A true CN101719156A (zh) 2010-06-02
CN101719156B CN101719156B (zh) 2012-07-25

Family

ID=42433730

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102452040A Expired - Fee Related CN101719156B (zh) 2009-12-30 2009-12-30 一种在关系型数据库中无缝集成纯xml查询引擎的***

Country Status (1)

Country Link
CN (1) CN101719156B (zh)

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894143A (zh) * 2010-06-28 2010-11-24 北京用友政务软件有限公司 一种联邦检索及检索结果集成展现方法及***
CN102033954A (zh) * 2010-12-24 2011-04-27 东北大学 关系数据库中可扩展标记语言文档全文检索查询索引方法
CN102760164A (zh) * 2012-06-12 2012-10-31 上海方正数字出版技术有限公司 一种关系数据库管理***与xml数据库管理***之间数据交换的方法
CN103049494A (zh) * 2012-12-07 2013-04-17 华为技术有限公司 一种xml文档的表格存储方法及装置
CN103092869A (zh) * 2011-11-01 2013-05-08 镇江华扬信息科技有限公司 一种使能xml数据库的映射转换方法
CN105005606A (zh) * 2015-07-03 2015-10-28 华南理工大学 基于MapReduce的XML数据查询方法和***
CN105335366A (zh) * 2014-05-30 2016-02-17 北大方正信息产业集团有限公司 一种sql语句处理方法、装置和服务器
CN105335402A (zh) * 2014-07-23 2016-02-17 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
CN106528797A (zh) * 2016-11-10 2017-03-22 上海轻维软件有限公司 基于Elasticsearch的DSL查询方法
CN106980619A (zh) * 2016-01-18 2017-07-25 北京国双科技有限公司 数据查询方法及装置
CN107818091A (zh) * 2016-09-12 2018-03-20 百度在线网络技术(北京)有限公司 文档处理方法及装置
CN108304483A (zh) * 2017-12-29 2018-07-20 东软集团股份有限公司 一种网页分类方法、装置及设备
CN110096555A (zh) * 2019-04-17 2019-08-06 北京奇安信科技有限公司 一种分布式***的表匹配处理方法及装置
CN111046131A (zh) * 2019-12-27 2020-04-21 杭州依图医疗技术有限公司 一种文档处理方法及装置

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101894143A (zh) * 2010-06-28 2010-11-24 北京用友政务软件有限公司 一种联邦检索及检索结果集成展现方法及***
CN102033954A (zh) * 2010-12-24 2011-04-27 东北大学 关系数据库中可扩展标记语言文档全文检索查询索引方法
CN102033954B (zh) * 2010-12-24 2012-10-17 东北大学 关系数据库中可扩展标记语言文档全文检索查询索引方法
CN103092869A (zh) * 2011-11-01 2013-05-08 镇江华扬信息科技有限公司 一种使能xml数据库的映射转换方法
CN102760164A (zh) * 2012-06-12 2012-10-31 上海方正数字出版技术有限公司 一种关系数据库管理***与xml数据库管理***之间数据交换的方法
CN102760164B (zh) * 2012-06-12 2016-01-20 北大方正集团有限公司 一种关系数据库管理***与xml数据库管理***之间数据交换的方法
CN103049494A (zh) * 2012-12-07 2013-04-17 华为技术有限公司 一种xml文档的表格存储方法及装置
CN103049494B (zh) * 2012-12-07 2017-05-24 华为技术有限公司 一种xml文档的表格存储方法及装置
CN105335366A (zh) * 2014-05-30 2016-02-17 北大方正信息产业集团有限公司 一种sql语句处理方法、装置和服务器
CN105335402A (zh) * 2014-07-23 2016-02-17 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
CN105335402B (zh) * 2014-07-23 2018-12-04 阿里巴巴集团控股有限公司 基于静态Cache的搜索方法、索引数据生成方法以及装置
CN105005606A (zh) * 2015-07-03 2015-10-28 华南理工大学 基于MapReduce的XML数据查询方法和***
CN105005606B (zh) * 2015-07-03 2018-06-29 华南理工大学 基于MapReduce的XML数据查询方法和***
CN106980619A (zh) * 2016-01-18 2017-07-25 北京国双科技有限公司 数据查询方法及装置
CN107818091A (zh) * 2016-09-12 2018-03-20 百度在线网络技术(北京)有限公司 文档处理方法及装置
CN106528797A (zh) * 2016-11-10 2017-03-22 上海轻维软件有限公司 基于Elasticsearch的DSL查询方法
CN108304483A (zh) * 2017-12-29 2018-07-20 东软集团股份有限公司 一种网页分类方法、装置及设备
CN110096555A (zh) * 2019-04-17 2019-08-06 北京奇安信科技有限公司 一种分布式***的表匹配处理方法及装置
CN111046131A (zh) * 2019-12-27 2020-04-21 杭州依图医疗技术有限公司 一种文档处理方法及装置
CN111046131B (zh) * 2019-12-27 2023-09-26 杭州依图医疗技术有限公司 一种文档处理方法及装置

Also Published As

Publication number Publication date
CN101719156B (zh) 2012-07-25

Similar Documents

Publication Publication Date Title
CN101719156B (zh) 一种在关系型数据库中无缝集成纯xml查询引擎的***
CN102693310B (zh) 一种基于关系数据库的资源描述框架查询方法和***
Abiteboul et al. Correspondence and translation for heterogeneous data
CN102033954B (zh) 关系数据库中可扩展标记语言文档全文检索查询索引方法
US6721727B2 (en) XML documents stored as column data
US7031956B1 (en) System and method for synchronizing and/or updating an existing relational database with supplemental XML data
Pal et al. XQuery implementation in a relational database system
CN107169033A (zh) 基于数据模式转换和并行框架的关系数据查询优化方法
Hachicha et al. A survey of XML tree patterns
Brunel et al. Supporting hierarchical data in SAP HANA
Amann et al. Integrating ontologies and thesauri for RDF schema creation and metadata querying
CN107577752B (zh) 一种基于关键字的xml检索排序处理***及方法
CN101719162A (zh) 基于片段模式匹配的多版本开放式地理信息服务访问方法及***
Zhang et al. Symmetrically exploiting XML
Moro et al. XML: some papers in a haystack
Lu An Introduction to XML Query Processing and Keyword Search
Dang-Ngoc et al. Tree Graph View: On Efficient Evaluation of XQuery in an XML Mediator.
CN107256218B (zh) 一种xml流数据的快速查询方法
Wang et al. XML-based data processing in network supported collaborative design
Van de Maele et al. An ontology-based crawler for the semantic web
Vidhya et al. Query translation from SQL to XPath
Finis On Supporting Hierarchical Data in Relational Main-Memory Database Systems
Zhang Supporting polymorphism in XML data
Fong et al. Positioning-based query translation between SQL and XQL with location counter
Pluempitiwiriyawej A new hierarchical clustering model for speeding up the reconciliation of XML-based, semistructured data in mediation systems

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120725

Termination date: 20141230

EXPY Termination of patent right or utility model