一种在关系型数据库中无缝集成纯xml查询引擎的系统的制作方法

文档序号:6585564阅读:494来源:国知局

专利名称::一种在关系型数据库中无缝集成纯xml查询引擎的系统的制作方法一种在关系型数据库中无缝集成纯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查询语言XQuery1.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等内置数据类型相同。createtableBookstore{BookStoreIDint,BookStoreNamenvarchar(50),BooksSoldxml}上述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表示节点名称;typeG{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、路径索引路径索引用于对由多个连续父子关系连接的st印进行快速求值,返回符合该路径的节点集合。对于XPath路径表达式/bib/book/author,利用路径索引可直接查询到所有符合上述路径的book节点集,而不需要每步都进行二元连接操作。3、XML查询引擎关系数据库的查询引擎主要由解析器、分析器和执行器三个组件构成。我们对关系数据库查询引擎的解析器、分析器和执行器进行了扩充和重造,使其支持XML查询。3.1、在关系数据库SQL查询语言中无缝集成XQuery的语法形式要实现在关系数据库中集成XML查询引擎,就必须考虑如何按照用户习惯的关系数据库的查询方式来实现对XML查询的支持,即实现"无缝集成"关系数据库的查询引擎。要体现"无缝集成"的特性,就需要在SQL语法中实现XPath/XQuery的内嵌式查询。这项工作需要开发完整的XQuery语法解析器和语义生成器,并将它们无缝融合到SQL解析器层中。本发明中,遵照SQL/XML标准,为了体现出"无缝集成"查询引擎的特性,确定在关系数据库中进行XML查询的表达式语法形式selectXmlQuery('/bib/book,,BooksSold)fromBookstorewhereBookStoreID=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查询语句解析为查询语法树解析器的功能是处理用户输入的字符串形式的查询语句,并根据规定的文法将其转换为相应的语法树供进一步处理。本发明中的查询语言解析模块根据XPath2.0和XQuery1.0标准,制定了XQuery文法;将根据XQuery文法生成的语法树挂接到关系查询语言SQL的target—list上。在解析器设计过程中,添加XmlQuery结构来存储XmlQuery函数解析后的内容,具体形式如下typedefstructXmlQueryNodeTagtype;Node*xmlqueryParseTree;Node*target;list*stepList;}XmlQuery;其中,xmlqueryParseTree表示XmlQuery函数第一个参数,存放对解析查询语言后形成的语法树结构;target表示XmlQuery函数的第二个参数即关系表中的xml列;st印List在解析器阶段暂不进行填充。解析器对字符串处理完毕后,返回一棵语法树,供分析器处理。本发明根据XPath2.0和XQuery1.0的标准,解析器中能够识别出的核心模块如下(1)基本表达式包括字符、字符串、整数、浮点数、布尔值、变量、标识符、关键字、算术运算符、逻辑运算符、结点运算符、通配符等。这些基本表达式由词法分析器分析出来,并将其值与属性传递给文法分析器,根据上下文判断其语义。(2)路径表达式XPath中的路径表达式是本发明中解析器的重要分析对象,包括相对定位路径和绝对定位路径。每个定位路径都是由一个或多个定位步组成,每个定位步之间由'7"分开。绝对路径以'7"开始,从文档的根结点开始定位路径;相对路径则以某个定位步开始定位路径。每个定位步由三部分组成①轴值指定了定位步选择结点和上下文选择结点之间的关系。根据W3C的标准,本发明能够识别包括前向轴和反向轴在内的13种轴值,每种轴值都有一个基本结点类型。同时,本发明中的解析器能够识别定位路径表达式的縮写形式。②结点测试(NodeTest):指定定位步选择结点的结点类型或结点名。本发明中的解析器能够判断结点是类型还是名称测试。类型测试包括text(),判断是否为文本结点;comment(),判断是否为注释结点processing-instruction(),判断是否为处理指令结点;node()。名称测试则判断上下文结点是否与该名称相符。③谓词,使用专有的谓词表达式来进一步筛选定位步选择的结点集合。谓词位于定位步末端的方括号中,可以是路径表达式、比较表达式、函数等。对于上下文结点中每一个结点计算谓词的值,若为假则剔除该结点。(3)序列表达式序列是XQuery中的一个基本概念,XQuery提供了序列的构造、过滤、合并等操作。序列由一个或多个项组成,各项之间用逗号操作符隔开,或是使用范围表达式,例如(1,2,3)或(1to3)。同时,解析器能够识别序列的合并(Union或|)、交(intersect)和差(except)操作。[OO54](4)算术表达式XPath支持数值运算,本发明能够识别加(+)、减(_)、乘(*)、除(div)、取模(mod)运算,在执行每个运算前总是把操作数转化为一个数字。[OO56](5)比较表达式比较表达式进行两个值之间的比较。本发明能够识别XQuery标准中的3种比较类型——值比较、一般比较和结点比较。值比较用来比较单个值,使用操作符eq、ne、lt、le、gt、ge;—般比较用来在两个任意长度的序列间进行比较,使用操作符"="、"!="、"<"、"<="、">"、">=";结点比较用来在两个结点间根据结点的id或者文档序进行比较,使用操作符18、"<<"、">>"。(6)逻辑表达式解析器能够识别与(and)和或(or)逻辑运算符。例如,对于表达式1<2andnot(3>4),经过解析后比较表达式1<2和表达式not(3>4)作为and的两个子结点,为重写器做好准备。[OOSO](7)函数调用本发明为用户提供了[XQuery1.0andXPath2.0FunctionsandOperators]文档中的常用函数调用。解析器能够生成函数结点,将函数名及其参数填入语法树,供后面处理。内置函数包括结点集合函数、字符串函数、布尔函数、数字函数、上下文函数等。(8)FLW0R表达式XQuery查询包含但不仅限于FLW0R表达式。但FLW0R作为XQuery的主体,是XQuery最有特色且最重要的语法。其特点是包含完整的XPath路径表达式,支持灵活循环嵌套。每个FLW0R表达式都由一个或多个for子句、一个或多个let子句、一个可选的where子句、一个可选的order子句和一个return子句构成。在本发明的解析器中,FLW0R模块下有若干子模块①for子句模土央将一个或多个变量同表达式结合在一起,每一个变量都会被赋予一个序列;②let子句模块将变量直接与一个完整的表达式绑定在一起,将变量绑定到整个结点序列;③where子句模块依据一些条件对绑定的变量进行过滤;@order子句模块根据用户输入的排列方式指定结果的顺序;⑤ret證子句模块构建FLW0R表达式中的结果,并对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中的st印并填充至XmlQuery类型的st印List域。st印List是执行器中进行二元结构连接算法的基础,它是由多个顺序执行的st印构成的链表。对于st印List中的每个st印,需要填充查询需要的相关信息,主要填充的内容包括轴值、名称、谓词等域。例如对于for子句for$bookin〃book,在解析器阶段得到ForClause节点,ForClause的InExpression域指向其中的XPath部分"〃book"。但是这样的结构无法体现具体执行过程中需要的轴值关系和文档结点信息,因此本发明中在分析器阶段将这些需要的内容提取出来填充到一个st印结构中,该结构中包含XPath查询需要的全部信息。(3)对于FLW0R表达式,整个FLW0R节点被解析后作为一个st印填充到st印List中。FLW0R节点有若干子句,每个子句都被递归地进行分析,其中的所有XPath路径表达式都被解析成st印List,分别成为各自子句的一个成员。这些工作完成之后,即可得到如说明书附图5所示的结构。图6所示的结构中,FL0WR表达式中的各个子句是平行结构,这样的结构不利于执行器的执行。因此,本发明中在分析器的最后阶段,对上述由链表表示循环的平行结构进行调整,将内层循环递归挂接到外层的Return子句上,最终得到如说明书附图7所示的结构,交由执行器执行。3.4、执行器3.4.1执行器执行步骤在关系数据库的查询引擎中,执行器的主要工作为接受分析器传下来的Query结构并对它进行处理,完成一条查询语句最终的执行。执行器包括准备执行阶段和实际执行阶段。(1)准备执行阶段准备执行阶段的工作是处理Query结构中的target—list及其他执行前准备。在执行器中设置execInitExpr函数,为每个Expr生成一个ExpressionState用以最终执行。E邓ressionState主要包含通过函数指针指定的这个表达式的实现函数,以及经过递归execInitE邓r处理过的函数所需要的参数。执行器在执行阶段调用这个函数来对XmlQuery函数进行求值。一般这个函数会调用最终实际的处理函数。[OO94](2)实际执行阶段实际执行阶段进行真正的XQuery求值工作。实际执行工作如下①执行最外层For/Let子句的in表达式,得到一个结果序列Seq;②对于Seq中的每个节点分别将其赋给所指定的绑定变量$i;③对于$i表示的每个节点进行Where条件判断;对于$i表示的每个节点执行一次Return表达式;⑤获得最终结果,通过Datum格式包装执行结果,纳入关系查询引擎处理流程。3.4.2基于路径索引的XPath专用查询算法在执行器的实际执行阶段,进行对XPath表达式的实际求值工作,本发明中采用二元结构连接算法进行XPath表达式求值。在通常情况下,我们对于XPath表达式中的每个st印,应用元素索引和值索引求出符合要求的节点集,作为下一步求值的上下文。这样的方式简单易用,但是由于每一步都需要读取索引及调用节点关系判断函数进行计算,极大地影响了XPath的执行效率。在本发明的XML索引模块中提到,为了加速求值,为XML文档建立了路径索引,用于对由多个连续父子关系连接的st印进行快速求值。例如,对于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查询算法,对st印List进行分割,使其能够最大程度的应用路径索引,加速XPath求值。例如,对于XPath表达式/bib/book〃author/first,将表达式划分为/bib/book和author/first两个部分,分别应用路径索引求值,再将结果做连接计算,得到最终的查询结果。应用本发明所提出的XPath专用查询算法后,对于可以应用路径索引的部分,读取一次索引可以直接获得查询结果,最大程度减少了频繁应用普通元素索引所造成的开销,使查询速度获得了很大提升,当可应用路径索引的部分较长时,提升效果更为明显。在获得最终的节点集之后,将节点集的所有子树转换为XML文档片段的形式返回给用户。对于XQuery查询语句for$bookin//booklet$author:=$book/authorwhereposition()=2return$author其返回的结果为〈author>PerBothner〈/Wthor>至此,XML查询引擎的工作全部完成。本发明的优点和积极效果本发明避免了"XML使能"数据库XML结构语义丢失、XML查询性能下降和纯XML数据库必须重新开发基础模块的问题,充分利用了关系数据库的现有模块,利用DLN编码,将XML文档存储在关系表中,实现了无缝集成关系数据库的XML查询引擎系统。本发明在关系数据库查询引擎的各个组件中,分别加入了对XML查询语言XQuery和XPath的支持,实现了XQuery的全部功能,实现了完整的XML查询引擎。本发明充分利用了数据库底层建立的元素索引、值索引,特别是路径索引,打破了路径索引只能应用于仅包含父子轴值且无谓词的XPath表达式的限制,针对路径索引设计了专用XML查询算法,对st印List进行分割,使其能够最大程度的应用路径索引,加速XPath求值。应用了本发明提出的XPath专用查询算法后,对于可以应用路径索引的部分,读取一次索引直接获得查询结果,最大程度减少了频繁应用普通元素索引所造成的开销,使查询速度获得了很大提升,当可应用路径索引的部分较长时,提升效果更为明显。图1是系统框架图;其中,图1A是XML文档存储流程,图IB是XQuery执行流程;图2是扩展XML数据类型后的用户表结构;图3是XML节点关系表结构;图4是在SQL语法树中挂接XmlQuery节点的示意图;图5是实施例3语法树结构示意图;图6是FLOWR语句平行结构框图;图7是FLOWR语句嵌套结构图;图8是实施例4语法树结构示意图;图9是st印List填充方式框图;图10是基于路径索引的XPath专用查询算法的实施例。具体实施方式实施例1:创建含有XML类型字段的用户表创建用户表BookStore,该表中的BooksSold字段为XML类型,用来存放保存书籍信息的XML文档。建表SQL语句如下createtableBookStore{BookStoreIDint,BookStoreNamenvarchar(50),BooksSoldxml}创建BookStore表的同时创建存储BooksSold字段的关系表,假设该关系表的relationID为17003。扩展XML数据类型后的用户表如说明书附图2所示。向该表中插入一条记录insertintoBookstorevalue(210310001,'XinHuaBookStore','〈bib>:0139]:0140]:0141]〈bookcategory=〃COOKING">〈titlelang=〃en">EverydayItalian〈/title>〈author>GiadaDeLaurentiis〈/author>:0142]〈year>2005〈/year>:0143]〈price〉30.00〈/price>:0144]〈/book>:0145]〈bookcategory=〃CHILDREN">:0146]〈titlelang=〃en">HarryPotter〈/title>〈/book>〈/bib〉')则插入记录的过程中,对BooksSold字段中包含的XML文档进行解析,对文档中的每个节点进行DLN编码,将每个节点的四元组形式作为一条记录插入到XML节点关系表中,插入后XML节点关系表中的内容如说明书附图3所示。实施例2:索引使用方法对于说明书附图3中所示XML文档,分别应用三种索引(1)元素索引:输入name=,book,,type=1输出{1.l,l.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表达式:0147]:0148]:0149]:0150]:0151]:0152]:0153]:0154]:0155]:0156]:0157]:0158]:0159]〈bookcategory〈titlelang=en">XQueryKickStart〈/title>for$bookin//booklet$title:=$book/titlewhereposition()=2return$title用户输入上述XQuery表达式后,解析器会调用lex&feyacc工具接口,根据本发明中制定的XQuery文法产生式,对用户输入语句进行解析,形成查询语法树。查询语法树的形式如说明书附图5所示。此时形成的语法树为如说明书附图6所示的平行结构,这样的结构不利于执行器的进一步处理。本发明对上述由链表表示循环的平行结构进行调整,将内层循环递归挂接到外层的Return子句上,最终得到如说明书附图7所示的结构,交由执行器执行。实施例4:分析器st印List填充方法我们给出如下形式的XPath表达式/bib/book/author[last()]采用与实施例2中相同的方法获得该查询语句的语法树,如说明书附图8所示。在分析器阶段,根据语法树填充Query结构,主要是st印List结构的填充。st印List是由多个st印构成的链表,每个st印由轴值(axis)、节点测试(node-test)禾口谓词(predicate)构成,st印中需要的信息可从语法树中分析获得。st印List的填充工作主要包括(1)分析每个st印的各项内容,包括轴值、节点测试、谓词等;(2)将每个st印按照顺序形成链表st印List。对于实施例4中给出的示例,st印List填充过程如说明书附图9所示。实施例5:基于路径索引的XPath专用查询算法,具体算法如下算法.利用路径索引的专用XPath查询算法输入一条XPath查询语句的st印List输出符合该查询语句的节点集①记FirstSt印、CurSt印为st印List中的首个st印;记KeyPath链表保存路径索引关键字,ResultSet为最终节点集,CurResult为当前节点集,TempResult为临时节点集,均初始化为空;②从CurSt印开始依次向后遍历st印List,若CurSt印中包含谓词,则将CurSt印添加到KeyPath链表末尾,并将CurSt印赋值为st印List中的下一个st印,转向③;若CurSt印的轴值类型为父子关系,则将CurSt印添加到KeyPath链表末尾,转向②,否则记AxisType为CurSt印的轴值类型,转向③;③以KeyPath为关键字,调用路径索引接口,获得对应节点集赋值给CurResult,若CurResult为空,清空ResultSet并转向⑥;若最终结果集ResultSet为空,将ResultSet赋值为CurResult,转向②,否则转向④;记KeyPathLen为KeyPath链表长度,对CurResult中的每个节点(记CurResultNode为当前节点),对ResultSet中的每个节点(记CurResultSetNode为当前节点),获取CurResultNode前KeyPathLen-l层祖先节点,记为{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-l)层祖先,记为{Ancestor};对于{Book}禾P{Ancestor},根据AxisType=AXIS_ASCENDANT进行计算,求出{Ancestor}集合中所有与{Book}中节点满足祖先后裔关系的节点,记为{Tmp};{First}中与{Tmp}存在映射关系的节点即为最终结果,记为ResultSet。具体求值过程如说明书附图10所示。权利要求一种在关系型数据库中无缝集成纯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的方法,具体语法形式为selectXmlQuery('/bib/book',BooksSold)fromBookstorewhereBookStoreID=1其中XmlQuery为SQL/XML标准中的标准函数,第一个参数为XQuery或者XPath表达式,第二个参数为用户表中XML类型的列。7.根据权利要求1所述的系统,其特征在于步骤第3.2中所述的在解析器中将XQuery查询语句解析为查询语法树的具体方法为根据XPath2.0和XQuery1.0标准,制定XQuery文法,接受用户输入的字符串形式的查询语句,根据文法将其解析为相应的语法树供进一步处理;本发明中能够识别出的XQuery核心模块包括今基本表达式今路径表达式今序列表达式今算术表达式今比较表达式今逻辑表达式今函数调用令FLWOR表达式今条件表达式今定量表达式今构造器8.根据权利要求1所述的系统,其特征在于步骤第3.3中所述的在分析器中将查询语法树填充为执行器可分析的Query结构的具体方法为(1)遍历XmlQuery原始语法子树,检查子树中的XQuery表达式;(2)对于FLWOR表达式,整个FLWOR节点作为一个st印±真充到st印List中;(3)对于FLWOR表达式中的每个子句,检出其中的st印并填充至XmlQuery类型的st印List域。9.根据权利要求1所述的系统,其特征在于步骤第3.4中所述执行器的执行步骤包括第3.4.1、准备执行阶段和实际执行阶段,准备执行阶段处理Query结构中的targetJist,完成执行前准备工作,实际执行阶段进行真正的XQuery求值工作。10.根据权利要求1所述的系统,其特征在于步骤第3.4中所述执行器的基于路径索引的XPath专用查询算法是第3.4.2、本发明中打破路径索引只能应用于仅包含父子轴值且无谓词的XPath表达式的限制,针对路径索引设计了专用XPath查询算法,主要方法为将st印List分割成多个可以应用路径索引的片段,对每个片段分别求值后进行连接,获得最终查询结果,该算法能够最大程度的应用路径索引,加速XPath求值。全文摘要本发明属于数据库
技术领域
,公开了一种在关系型数据库中无缝集成纯XML查询引擎的系统。该系统建立了XML文档存储机制,引入了XML数据类型;为XML文档建立了多种索引,提高了查询效率;实现了XML标准查询语言XPath和XQuery;设计了基于多种索引结构的XML专用高效查询算法,实现对用户输入的XQuery查询语句的最终执行,得到最终结果返回给用户。文档编号G06F17/30GK101719156SQ20091024520公开日2010年6月2日申请日期2009年12月30日优先权日2009年12月30日发明者张海威,张路,王敏辉,胡翔宇,袁晓洁申请人:南开大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1