一种xml数据的查询方法

文档序号:6485928阅读:259来源:国知局
一种xml数据的查询方法
【专利摘要】本发明提供一种XML数据的查询方法,其步骤包括:1)采用Native?XML方式存储XML数据,其存储结构包括:内节点层,存储XML树的节点,XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引;2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;3)对归并排序后的XML元素按顺序进行入栈和出栈操作,从缓冲区得到查询结果。本发明能够处理带有关键字“OR”和通配符“*”的XPath,并具有很高的效率。
【专利说明】—种XML数据的查询方法
【技术领域】
[0001]本发明属于数据库【技术领域】,涉及半结构化数据XML的存储与查询方法,具体涉及一种能有效支持XML查询语言XPath的XML数据查询方法。
【背景技术】
[0002]由于越来越多的应用系统采用XML作为标准格式来发布和交换数据,XML数据的规模急剧扩大,在IDC (互联网数据中心)最近发布的一份报告显示,500家受访企业的IT部门中有29%正在大量使用XML文档和XML数据库。如何有效管理XML数据成为迫切需要解决的问题。
[0003]快速准确查找XPath在XML数据库中的所有匹配元素,是XML查询处理的核心操作。例如,一个 XPath 表达式:book [title= ‘ XML’]//author [f n= ‘Jane’AND In= ‘Doe’],这个表达式匹配的节点author需要满足:1)有一个子节点fn,它的内容是’ Jane’;2)有一个子节点In,它的内容是’ Doe’ ;3)是book节点的后代,且book节点有一个内容为’ XML’的title子节点。
[0004]XML模式匹配方法中较典型的有DB2开发的针对XML数据流的TurboXPath算法和2002年学术界提出的TwigStack算法。
[0005]TwigStack算法中,XPath上的每个节点q都对应着一个Tq和Sq。Tq代表元素序列,q是XPath上的标签名字,Tq是XML文档中与q名字匹配的所有元素,而且Tq中的元素按照文档序排列。Sq代表元素栈,存储与q名字匹配的元素,当算法正在处理的元素已经越过栈中元素的闭标签时,栈中元素要出栈。算法只对Tq中元素操作,跳过无关的XML元素,所以算法的10效率很高。但是TwigStack算法不能处理两种情况:第一是有通配符的XPath,例如//a/* [b]/c,因为TwigStack算法使用的是区间编码,即使有元素a与元素b和c的层次相差2,但也无法确定兀素b和c是否有相同的父未;第二是TwigStack算法只能处理twig之间是’ AND’关系的XPath,例如//a[bAND c]/d,却不能处理有关键字’ 0R’的XPath,例如//a[b OR c]/d。
[0006]TurboXPath算法是DB2采用的对XML流(XML stream)的查询匹配算法,既没有索引,也没有编码,XML流中的XML元素按照文档序排列,可以方便地处理有关键字’ 0R’的XPath0 TurboXpath功能较健全,但是对于数据库中的XML数据,TurboXPath算法从头到尾扫描XML文档,10代价很大,尤其对于那些较大的XML文档。

【发明内容】

[0007]本发明的目的是针对现有技术中的问题,提供一种新的XML数据的查询方法,能够处理带有关键字“0R”和通配符的XPath,并具有很高的效率。
[0008]为实现上述目的,本发明采用如下技术方案:
[0009]一种XML数据的查询方法,其步骤包括:
[0010]I)采用Native XML方式存储XML数据,其存储结构包括:内节点层,存储按照文档序排列的XML树的节点,其中XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引,每个索弓I项是标签名字相同的元素按照文档序排列成的序列;
[0011]2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;
[0012]3)对归并排序后的XML元素按顺序进行入栈和出栈操作,并从缓冲区得到查询结
果O
[0013]进一步地,所述内节点层中每条记录的信息包括:由节点名字映射成的整数标识符、DDE编码和节点类型。
[0014]进一步地,所述倒排层中每个元素的信息包括:元素类型、该元素在内节点层的地址和DDE编码。
[0015]进一步地,所述内节点层通过指针指向所述叶节点层。
[0016]进一步地,所述采用败者树进行归并排序,是对两个元素的DDE编码进行比较,得到所述两个元素的前后关系,并设定在前的元素为胜者,在后的元素为败者。
[0017]进一步地,所述XPath中每个节点q有两个数据结构:元素序列Tq和栈Sq ;Tq是XML文档中与q名字匹配的所有元素,并按照文档序排列;Sq用于存储与q名字匹配的元素,并进行入栈和出栈操作。
[0018]进一步地,在入栈操作时,栈中只保留新元素的祖先,栈中的所有元素都是祖先后代关系。
[0019]进一步地,若元素e要入栈SE,在XPath上节点E的父节点是A,则元素e入栈的判断条件是:
[0020]a)SA中有未出链的元素;所述出链是指将不是e的祖先的记录从连接栈中所有元素的链表中删除;
[0021]b) e是SA中未出链且最靠近栈顶的元素的孩子;
[0022]c) e的类型与XPath上E的类型相同。
[0023]进一步地,当XPath中出现通配符时,引申出三种新轴:祖父子轴、绝对祖先后代轴、特殊祖先后代轴,并采用所述三种新轴对含有通配符的XPath进行等值改写。
[0024]本发明的XML数据查询方法,解决了 TwigStack方法不能支持带有关键字“0R”和通配符的XPath问题;对于数据库中XML数据的查询处理,具有与TwigStack方法同样的IO效率,且比TurboXPath方法的效率更高。目前,越来越多的应用系统采用XML作为标准格式来发布和交换数据,XML数据的规模急剧扩大,金融、医疗、电子政务、新闻等领域已经采用各自制定的XML标准来实现不同部门、不同企业之间的数据交换,本发明方法可广泛应用于这些领域,高效地实现对XML数据的有效查询和管理。
【专利附图】

【附图说明】
[0025]图1是本发明实施例的XML数据查询方法的步骤流程图。
[0026]图2是本发明实施例的Native XML存储方式示意图。
[0027]图3是图2中内节点层的示意图。
[0028]图4是本发明实施例中对//a[//c]/b的查询流程图。[0029]图5是本发明实施例中对//a[//c]/b进行查询的的入栈出栈操作示意图。
[0030]图6是本发明实施例中对//a/*[c]/b进行查询的的入栈出栈操作示意图。
【具体实施方式】
[0031]下面通过具体实施例,并配合附图,对本发明做详细的说明。
[0032]图1是本发明的XML数据查询方法的流程图,具体步骤包括:
[0033]I)采用Native XML方式存储数据库中的XML数据。
[0034]本发明的XML数据查询方法属于整体小枝连接方法,与早期结构化连接相比,整体小枝连接技术可以避免大量无效的中间结果。本发明方法的基础是Native XML存储,对XML元素采用DDE编码方式。Native存储机制维持了 XML元素的文档序,通过一个元素的开标签物理地址就可取出以该元素为根的子文档。DDE编码用来对XML元素的常见结构关系(祖先后代,父子,兄弟等)进行判断。
[0035]本发明的存储设计分为三层:内节点层、叶节点层和倒排层,如图2所示。
[0036]a)内节点层
[0037]把XML树的节点按照文档序排列,存储在内节点层。该层的每条记录是一个XML树节点,每条记录的信息包括由节点名字映射成的整数标识符tagID (方便存储,方便比较)、DDE编码、节点类型(元素、属性、文本)等。图3是一个简单的内节点层的实例,其中,(a)为XML树;(b)为与(a)对应的顺序存储,以“/”开头的为闭标签记录,Database”和“25.00”两个叶节点在这里只是指针,实际内容存储在叶节点层。
[0038]XML编码是用来判断XML元素之间的结构关系的。TwigStack算法不能处理带有通配符的XPath,因为它采用的区间编码不能判断兄弟轴。本发明采用DDE编码,DDE编码比区间编码的好处有:
[0039]区间编码能判定的轴DDE都能判定,而且DDE还能判定兄弟轴,区间编码却不能;
[0040]DDE编码能很好地支持XML文档的更新,即当XML文档变化时,原有的编码不需更改,区间编码做不到。
[0041]b)叶节点层
[0042]每条记录存储一个叶节点的文本数据,存储XML树叶节点的文本数据。内节点层有指针指向这里,通过这些指针找到文本数据所在的物理页。
[0043]c)倒排层
[0044]倒排层类似于IR系统中的倒排索引。倒排层中所有标签名字相同的元素组成一个序列,并按照文档序排列。序列中每个元素的信息有:它在内节点层的地址、元素类型、DDE编码等。根据倒排层存储的信息就可以完成对XPath的查询匹配,根据查询到的元素地址再去内节点层获取元素开闭标签之间的子文档。在图2所示的倒排层中,E1、E2、E3是表示XML元素信息。
[0045]2)根据输入的XPath查询语句,从倒排层中取出与XPath上的节点对应的元素序列,并采用败者树进行归并排序。
[0046]对于XPath上的每一个节点q,有两个数据结构:元素序列Tq和栈Sq。Tq是XML文档中与q名字匹配的所有元素,而且Tq中的元素按照文档序排列。Sq在算法进行过程中存储与q名字匹配的元素,一个新元素入栈,那些非其祖先的元素就会出栈。[0047]本发明的方法可以称为“TurboStack”方法。假设XPath有η个节点:q1,q2,……,qn,与每个节点对应的Tqi (1≤i≤n)从倒排层获取,Tqi中的XML元素已经是有序了。
TurboStack方法的输入是按照文档序排列的XML元素,因此需要对Tql,Tq2,......,Tqn这η
个元素序列进行归并排序,把n个序列合并成一个按照文档序排列的序列,作为算法的输入。
[0048]可以依靠DDE编码并采用败者树来进行归并排序:对于两个元素的编码ddel和dde2,用这两个编码进行比较,可以判断出两个元素的前后关系,并设定在前的元素为胜者,在后的元素为败者。
[0049]3)对于归并排序后的元素,按顺序进行入栈和出栈操作,从缓冲区得到查询结果。
[0050]下面所示为本发明整体方法的执行流程,记为算法1,对其中的函数说明如下:constructStack(q)为节点q建立栈,GetStream(q)从底层存储中获取节点q的元素序列,MultiMergeSort (XPath)对XPath上所有节点的Tq进行归并排序,getPopElement (e)从栈中选取不是e的祖先的元素,match(e)判断e是否能入栈。
[0051]
【权利要求】
1.一种XML数据的查询方法,其步骤包括: 1)采用NativeXML方式存储XML数据,其存储结构包括:内节点层,存储按照文档序排列的XML树的节点,其中XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引,每个索引项是标签名字相同的元素按照文档序排列成的序列; 2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序; 3)对归并排序后的XML元素按顺序进行入栈和出栈操作,并从缓冲区得到查询结果。
2.如权利要求1所述的方法,其特征在于,所述内节点层中每条记录的信息包括:由节点名字映射成的整数标识符、DDE编码和节点类型。
3.如权利要求1所述的方法,其特征在于,所述倒排层中每个元素的信息包括:元素类型、该元素在内节点层的地址和DDE编码。
4.如权利要求1所述的方法,其特征在于,所述内节点层通过指针指向所述叶节点层。
5.如权利要求1所述的方法,其特征在于,所述采用败者树进行归并排序,是对两个元素的DDE编码进行比较,得到所述两个元素的前后关系,并设定在前的元素为胜者,在后的元素为败者。
6.如权利要求1所述的方法,其特征在于:所述XPath中每个节点q有两个数据结构:元素序列Tq和栈Sq ;Tq是XML文档中与q名字匹配的所有元素,并按照文档序排列;Sq用于存储与q名字匹配的元素,并进行入栈和出栈操作。
7.如权利要求1所述的方法,其特征在于,在入栈操作时,栈中只保留新元素的祖先,栈中的所有元素都是祖先后代关系。
8.如权利要求7所述的方法,其特征在于,若元素e要入栈SE,在XPath上节点E的父节点是A,则元素e入栈的判断条件是: a)SA中有未出链的元素;所述出链是指将不是e的祖先的记录从连接栈中所有元素的链表中删除; b)e是Sa中未出链且最靠近栈顶的元素的孩子; c)e的类型与XPath上E的类型相同。
9.如权利要求1所述的方法,其特征在于,当XPath中出现通配符时,引申出三种新轴:祖父子轴、绝对祖先后代轴、特殊祖先后代轴。
10.如权利要求9所述的方法,其特征在于,采用所述三种新轴对含有通配符的XPath进行等值改写。
【文档编号】G06F17/30GK103488639SQ201210192018
【公开日】2014年1月1日 申请日期:2012年6月11日 优先权日:2012年6月11日
【发明者】郭少松, 包小源, 陈薇, 王腾蛟, 杨冬青 申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1