本发明专利技术提供一种XML数据的查询方法,其步骤包括:1)采用Native?XML方式存储XML数据,其存储结构包括:内节点层,存储XML树的节点,XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引;2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;3)对归并排序后的XML元素按顺序进行入栈和出栈操作,从缓冲区得到查询结果。本发明专利技术能够处理带有关键字“OR”和通配符“*”的XPath,并具有很高的效率。
【技术实现步骤摘要】
一种XML数据的查询方法
本专利技术属于数据库
,涉及半结构化数据XML的存储与查询方法,具体涉及一种能有效支持XML查询语言XPath的XML数据查询方法。
技术介绍
由于越来越多的应用系统采用XML作为标准格式来发布和交换数据,XML数据的规模急剧扩大,在IDC(互联网数据中心)最近发布的一份报告显示,500家受访企业的IT部门中有29%正在大量使用XML文档和XML数据库。如何有效管理XML数据成为迫切需要解决的问题。快速准确查找XPath在XML数据库中的所有匹配元素,是XML查询处理的核心操作。例如,一个XPath表达式:book[title=‘XML’]//author[fn=‘Jane’ANDln=‘Doe’],这个表达式匹配的节点author需要满足:1)有一个子节点fn,它的内容是’Jane’;2)有一个子节点ln,它的内容是’Doe’;3)是book节点的后代,且book节点有一个内容为’XML’的title子节点。XML模式匹配方法中较典型的有DB2开发的针对XML数据流的TurboXPath算法和2002年学术界提出的TwigStack算法。TwigStack算法中,XPath上的每个节点q都对应着一个Tq和Sq。Tq代表元素序列,q是XPath上的标签名字,Tq是XML文档中与q名字匹配的所有元素,而且Tq中的元素按照文档序排列。Sq代表元素栈,存储与q名字匹配的元素,当算法正在处理的元素已经越过栈中元素的闭标签时,栈中元素要出栈。算法只对Tq中元素操作,跳过无关的XML元素,所以算法的IO效率很高。但是TwigStack算法不能处理两种情况:第一是有通配符“*”的XPath,例如//a/*[b]/c,因为TwigStack算法使用的是区间编码,即使有元素a与元素b和c的层次相差2,但也无法确定元素b和c是否有相同的父亲;第二是TwigStack算法只能处理twig之间是’AND’关系的XPath,例如//a[bANDc]/d,却不能处理有关键字’OR’的XPath,例如//a[bORc]/d。TurboXPath算法是DB2采用的对XML流(XMLstream)的查询匹配算法,既没有索引,也没有编码,XML流中的XML元素按照文档序排列,可以方便地处理有关键字’OR’的XPath。TurboXpath功能较健全,但是对于数据库中的XML数据,TurboXPath算法从头到尾扫描XML文档,IO代价很大,尤其对于那些较大的XML文档。
技术实现思路
本专利技术的目的是针对现有技术中的问题,提供一种新的XML数据的查询方法,能够处理带有关键字“OR”和通配符“*”的XPath,并具有很高的效率。为实现上述目的,本专利技术采用如下技术方案:一种XML数据的查询方法,其步骤包括:1)采用NativeXML方式存储XML数据,其存储结构包括:内节点层,存储按照文档序排列的XML树的节点,其中XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引,每个索引项是标签名字相同的元素按照文档序排列成的序列;2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;3)对归并排序后的XML元素按顺序进行入栈和出栈操作,并从缓冲区得到查询结果。进一步地,所述内节点层中每条记录的信息包括:由节点名字映射成的整数标识符、DDE编码和节点类型。进一步地,所述倒排层中每个元素的信息包括:元素类型、该元素在内节点层的地址和DDE编码。进一步地,所述内节点层通过指针指向所述叶节点层。进一步地,所述采用败者树进行归并排序,是对两个元素的DDE编码进行比较,得到所述两个元素的前后关系,并设定在前的元素为胜者,在后的元素为败者。进一步地,所述XPath中每个节点q有两个数据结构:元素序列Tq和栈Sq;Tq是XML文档中与q名字匹配的所有元素,并按照文档序排列;Sq用于存储与q名字匹配的元素,并进行入栈和出栈操作。进一步地,在入栈操作时,栈中只保留新元素的祖先,栈中的所有元素都是祖先后代关系。进一步地,若元素e要入栈SE,在XPath上节点E的父节点是A,则元素e入栈的判断条件是:a)SA中有未出链的元素;所述出链是指将不是e的祖先的记录从连接栈中所有元素的链表中删除;b)e是SA中未出链且最靠近栈顶的元素的孩子;c)e的类型与XPath上E的类型相同。进一步地,当XPath中出现通配符“*”时,引申出三种新轴:祖父子轴、绝对祖先后代轴、特殊祖先后代轴,并采用所述三种新轴对含有通配符“*”的XPath进行等值改写。本专利技术的XML数据查询方法,解决了TwigStack方法不能支持带有关键字“OR”和通配符“*”的XPath问题;对于数据库中XML数据的查询处理,具有与TwigStack方法同样的IO效率,且比TurboXPath方法的效率更高。目前,越来越多的应用系统采用XML作为标准格式来发布和交换数据,XML数据的规模急剧扩大,金融、医疗、电子政务、新闻等领域已经采用各自制定的XML标准来实现不同部门、不同企业之间的数据交换,本专利技术方法可广泛应用于这些领域,高效地实现对XML数据的有效查询和管理。附图说明图1是本专利技术实施例的XML数据查询方法的步骤流程图。图2是本专利技术实施例的NativeXML存储方式示意图。图3是图2中内节点层的示意图。图4是本专利技术实施例中对//a[//c]/b的查询流程图。图5是本专利技术实施例中对//a[//c]/b进行查询的的入栈出栈操作示意图。图6是本专利技术实施例中对//a/*[c]/b进行查询的的入栈出栈操作示意图。具体实施方式下面通过具体实施例,并配合附图,对本专利技术做详细的说明。图1是本专利技术的XML数据查询方法的流程图,具体步骤包括:1)采用NativeXML方式存储数据库中的XML数据。本专利技术的XML数据查询方法属于整体小枝连接方法,与早期结构化连接相比,整体小枝连接技术可以避免大量无效的中间结果。本专利技术方法的基础是NativeXML存储,对XML元素采用DDE编码方式。Native存储机制维持了XML元素的文档序,通过一个元素的开标签物理地址就可取出以该元素为根的子文档。DDE编码用来对XML元素的常见结构关系(祖先后代,父子,兄弟等)进行判断。本专利技术的存储设计分为三层:内节点层、叶节点层和倒排层,如图2所示。a)内节点层把XML树的节点按照文档序排列,存储在内节点层。该层的每条记录是一个XML树节点,每条记录的信息包括由节点名字映射成的整数标识符tagID(方便存储,方便比较)、DDE编码、节点类型(元素、属性、文本)等。图3是一个简单的内节点层的实例,其中,(a)为XML树;(b)为与(a)对应的顺序存储,以“/”开头的为闭标签记录;“Database”和“25.00”两个叶节点在这里只是指针,实际内容存储在叶节点层。XML编码是用来判断XML元素之间的结构关系的。TwigStack算法不能处理带有通配符“*”的XPath,因为它采用的区间编码不能判断兄弟轴。本专利技术采用DDE编码,DDE编码比区间编码的好处有:区间编码能判定的轴DDE都能判定,而且DD本文档来自技高网...
【技术保护点】
一种XML数据的查询方法,其步骤包括:1)采用Native?XML方式存储XML数据,其存储结构包括:内节点层,存储按照文档序排列的XML树的节点,其中XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引,每个索引项是标签名字相同的元素按照文档序排列成的序列;2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;3)对归并排序后的XML元素按顺序进行入栈和出栈操作,并从缓冲区得到查询结果。
【技术特征摘要】
1.一种XML数据的查询方法,其步骤包括:1)采用NativeXML方式存储XML数据,其存储结构包括:内节点层,存储按照文档序排列的XML树的节点,其中XML元素采用DDE编码方式进行编码;叶节点层,存储XML树叶节点的文本数据;倒排层,存储内节点层的倒排索引,每个索引项是标签名字相同的元素按照文档序排列成的序列;2)根据输入的XPath查询语句,从所述倒排层中取出与所述XPath的节点对应的元素序列,并采用败者树进行归并排序;所述采用败者树进行归并排序,是对两个元素的DDE编码进行比较,得到所述两个元素的前后关系,并设定在前的元素为胜者,在后的元素为败者;当XPath中出现通配符“*”时,引申出三种新轴:祖父子轴、绝对祖先后代轴、特殊祖先后代轴,采用所述三种新轴对含有通配符“*”的XPath进行等值改写;3)对归并排序后的XML元素按顺序进行入栈和出栈操作,并从缓冲区得到查询结果。2.如权利要求1所述的方法,其特征在于,所述内节点层中每条记录的信息包括:...
【专利技术属性】
技术研发人员:郭少松,包小源,陈薇,王腾蛟,杨冬青,
申请(专利权)人:北京大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。