首页> 中国专利> 一种XML数据的查询松弛处理方法

一种XML数据的查询松弛处理方法

摘要

一种XML数据的查询松弛处理方法,其中该方法包括步骤:A、通过松弛路径查询,得到边松弛结果,并对近似结果进行紧凑的编码;B、通过递归构造叶子删除查询模式,得到利用叶子结点删除操作的松弛结果。通过本发明,可对每一个文档中的路径计算出每个可能的松弛路径在初始化元素数据结构的过程中的最少松弛耗费。这样,将会直接在初始化之后,计算出获得近似结果的最少松弛次数。

著录项

  • 公开/公告号CN101692232A

    专利类型发明专利

  • 公开/公告日2010-04-07

    原文格式PDF

  • 申请/专利权人 陆嘉恒;

    申请/专利号CN200910093492.2

  • 发明设计人 陆嘉恒;

    申请日2009-09-24

  • 分类号G06F17/30;

  • 代理机构北京中创阳光知识产权代理有限责任公司;

  • 代理人尹振启

  • 地址 100872 北京市海淀区中关村大街59号中国人民大学信息学院

  • 入库时间 2023-12-17 23:40:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-11-12

    未缴年费专利权终止 IPC(主分类):G06F17/30 授权公告日:20120627 终止日期:20130924 申请日:20090924

    专利权的终止

  • 2012-06-27

    授权

    授权

  • 2010-05-26

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20090924

    实质审查的生效

  • 2010-04-07

    公开

    公开

说明书

技术领域

本发明涉及XML数据查询技术领域,尤其是涉及一种XML数据的查询松弛处理方法。

背景技术

XML作为一种数据表示方式越来越流行,查询松弛处理也由于XML数据的灵活的模型特征而越来越引起人们的兴趣。查询松弛技术被广泛的使用到信息检索和关系型数据库中,并且被证明是一种获得近似结果的有效的技术。与关系型数据库不同的是,关系型数据库的表的模式是相对较小并且是固定的,而XML模型允许变化的或者缺失的结构和值,这就使得用户的查询要求难以保证准确和完整。最近的XML应用需要用户查询他们自己并没有完全了解的XML数据。除此之外,用户可能由于严格的查询条件而得到空的查询结果。

在图1中,当用户提交一个路径查询“BookRecord/issue/article/authors”,用户将无法得到答案,因为文档中没有准确的能和查询匹配的结果。这种情况下,用户将会尝试修改原始的查询,如“BookRecord//issue/article/authors”,“BookRecord/issue//article/authors”等等,这显然会给用户带来繁琐和不便。

本发明解决了XML松弛路径查询的问题。定义了两个松弛操作,包括P-C到A-D边的松弛操作和叶子节点删除操作。例如,“BookRecord/issue/article/authors”利用一次P-C到A-D边松弛操作后,被松弛为“BookRecord/issue//article/authors”,并利用叶子节点删除操作两次松弛到“BookRecord/issue”。本发明中将P-C到A-D边松弛操作应用于查询模式的匹配,自动返回近似的结果,并对此方法进行扩展,设定松弛限制,利用叶子节点删除操作构造松弛查询模式来获得等于或者小于松弛限制的更多结果。

发明内容

本发明是鉴于上述技术问题而产生的。本发明的一个目的是提出一种XML数据的查询松弛处理方法。

在一个方面中,根据本发明的XML数据的查询松弛处理方法包括步骤:A、通过松弛路径查询,得到边松弛结果,并对近似结果进行紧凑的编码;B、通过递归构造叶子删除查询模式,得到利用叶子结点删除操作的松弛结果。

在这个方面中,其中步骤A进一步包括:A1、找出要查询的每个文档路径中最深的查询叶结点元素,并返回该元素的扩展前缀编码;A2、清空所有的堆栈;A3、设定根结点作为父结点;A4、对步骤A1中的最深查询叶元素的扩展前缀编码进行处理,递归地将其整数编码转化为祖先结点的名称序列;A5、更新信息,利用祖先结点对堆栈进行初始化;A6、处理与叶查询结点相关的流中的下一个元素;A7、从结果文件中输出最近似的结果。

在这个方面中,其中步骤A7进一步包括步骤:初始化结构minNodeVector;如果当前的最小松弛次数比先前保留的松弛结果的最小松弛次数大的话,舍弃当前的松弛次数;否则,结果文件和记录的最小松弛次数将会被更新;对minNodeVector中存入的每个查询叶结点递归的处理,将松弛结果写入到结果文件中。

在这个方面中,其中步骤B进一步包括:B1、通过进行步骤A,得到边松弛的松弛结果;B2、从原始查询中删除最后一个叶查询结点;B3、当松弛次数限制值大于0时,则执行步骤A,并递归地从查询中删除最后一个叶查询结点,同时使松弛次数限制值减1,循环执行步骤B3,否则,如果松弛次数限制值不大于0,则转到步骤C。

在这个方面中,其中在步骤A5中:将步骤A4中产生的每个祖先结点置入与其查询结点相应的堆栈中,同时计算出该结点的level、preNum、change以及path的值,其中level表示结点在XML树中的层次;preNum是指向它的最后一个上层元素的指针,是上层元素的堆栈里最顶层的元素;change记录从根结点到当前结点路径的最小松弛次数;Path记录着导致其最小的change值的上层元素。

在这个方面中,其中进一步包括步骤:计算松弛相似性以对松弛结果进行评分。

通过本发明,可对每一个文档中的路径计算出每个可能的松弛路径在初始化元素数据结构的过程中的最少松弛耗费。这样,将会直接在初始化之后,计算出获得近似结果的最少松弛次数。

附图说明

结合随后的附图,从下面的详细说明中可显而易见的得出本发明的上述及其他目的、特征及优点。在附图中:

图1给出了根据现有技术的示例。

图2给出了查询模式与文档匹配的示例。

图3给出了查询与文档以及对应的扩展前缀编码。

图4给出了图3对应的数据结构图。

图5给出了图3变动之后的新示例。

图6给出了根据本发明的XML数据的查询松弛处理方法的流程图。

图7给出了根据本发明的XML数据的查询松弛处理方法的子流程图。

图8给出了根据本发明的XML数据的查询松弛处理方法的另一流程图。

图9给出了根据本发明的XML数据的查询松弛处理方法的又一流程图。

图10给出了RelaxPath方法与PathStack*方法的执行时间的对比。

图11给出了RelaxPath方法与PathStack*方法的执行时间趋势的对比。

具体实施方式

为了更全面地理解本发明及其优点,下面结合附图及具体实施例对本发明做进一步详细地说明。

在本发明中,XML文档模拟为有序树,则在XML查询中可利用小枝模式来匹配XML数据库中相关的数据。查询中的小枝模式边可以是父子边或者祖先-后代边。下文中用“结点”指代一个查询结点,用“元素”指代一个文档中的数据元素。

给定查询模式Q和XML文档D,一个Q在D中的匹配通过Q中的结点到D中的元素的映射来定义。该映射满足:(i)查询结点上的谓词被对应的数据结点满足;(ii)查询结点间的父子关系、祖先-后代关系也被对应的数据结点满足。如图2中给出了查询模式Q在XML文档D中的匹配为:(a1,b2,c2,e3,d2),则返回的结果为e3。为了方便起见,如果A与B的相应的上层查询结点相一致,则元素A是元素B的上层元素。

为了便于清楚理解期间,首先对以下几个定义进行简单地介绍。

定义(P-C到A-D边松弛操作):假设Q是一个路径查询,如果Q中两个相邻查询结点可从父子关系松弛到祖先后裔关系,则称松弛后的查询Q′是Q的P-C到A-D的边松弛。在用查询树表示查询语言表达式时,父子关系可用单斜线边(/)连接,祖先后裔关系用双斜线边(//)表示。例如,如果Q为“BookRecord/issue/article/authors”,Q′为“BookRecord/issue//article/authors”,则称从Q到Q’经过了一次P-C到A-D边松弛操作。

定义(松弛):假设Q,Q′是两个查询,如果Q′是从Q的k(k>=0)次松弛操作后的序列中得到的,则称Q′是Q的一个松弛。例如,Q为“BookRecord/issue/article/authors”,经过k次松弛操作后,Q′为“BookRecord//issue//article/authors”或者Q′为“BookRecord//issue//article//authors”。

定义(松弛次数):假设Q是一个原始路径查询,并且Q′是一个松弛路径查询,用RT表示松弛次数,则令k为从Q得到Q′的松弛次数,并且RT(Q′)=k,当且仅当不存在i<k使得例如,Q为“BookRecord/issue/article/authors”,经过k次松弛操作后,Q′为“BookRecord//issue//article/authors”,则RT(Q’)=k=2。

定义(松弛相似性):假设Q为一个原始路径查询,Q′为一个松弛路径查询。定义一个参数RS(Relaxation Similarity)表示松弛相似性,同时设计一个新的公式来计算RS:

RS(Q)=RT(Q)+|Q(D)||Qleaf(D)|+|Q(D)|

在该公式中,RT(Q′)代表查询Q到Q′的松弛次数。|Q′(D)|表示在给定的XML文档D中出现的松弛结果的数量,它可以用来评定一个查询Q’在文档中的重要性。Qleaf(D)代表文档中查询叶元素的数量。

接下来,参考图3和图4,对根据本发明的数据结构进行详细地说明。图3示出了查询与文档以及对应的扩展前缀编码。图4示出了图3对应的数据结构图。

查询路径中的叶子结点q有一个相关的流Tq。Tq中包含了匹配q类型的元素的扩展前缀编码,它们按照词法顺序升序排列。例如,“1.3”在“1.4”之前,“1.2”在“1.2.3.1”之前。如图4所示,叶子结点D有一个相关的流TD,所对应的流TD的元素的扩展前缀编码为(1.2.1.1.2.1)的,也就是说,其包含了图3示例中D1元素的扩展前缀编码。

每个查询结点q与一个堆栈Sq一一对应,每个在堆栈中存储的数据结点(如图4中的一个查询结点为A,由图3中可知,堆栈中的数据结点为A1,A2,同样可知查询结点B,对应堆栈中的数据结点为B1,B2)和一个值change相关,change值记录了从根结点到当前结点路径的最小松弛次数。对于叶结点而言,其change值代表了为获得与最初路径查询模式相匹配的近似的查询结果而需要的最小松弛次数。对change的定义如下:

A和B是两个查询结点,对应的堆栈SA,SB中存储的数据结点分别为结点A1到Am和结点B1到Bn。如果B是根结点,则

change[Bk]=0(0≤k),否则,令A为B的邻近上层查询结点。假设:

Bk(0≤k的preNum指向Ai,

change[Bk]=min{change[A1]+Distance(A1,Bk),...,change[Ai]+Distance(Ai,Bk)}其中Distance的定义如下:

A和B是邻近的查询结点,a,b是XML文档中对应的元素(a即图4中的A1,A2,b为B1,B2)。则定义为

在堆栈里,与元素(即数据结点)关联的数据结构还包括level、preNum、change以及path。level表示结点在XML树中的层次(如0,1,2,3...);preNum是指向它的最后一个上层元素的指针,是上层元素的堆栈里最顶层的元素;change如上所述,记录从根结点到当前结点路径的最小松弛次数。Path记录着导致其最小的change值的上层元素。

下面,参考图6,对根据本发明的XML数据的查询松弛处理方法进行说明。

如图6所示,根据本发明的XML数据的查询松弛处理方法包括如下步骤:

步骤A:通过松弛路径查询(在下文称为RelaxPath),得到边松弛结果,并对近似结果进行紧凑的编码。下面结合图3,对该步骤进行更详细的说明。

具体地说,如图7所示,该步骤进一步包括:

步骤A1:找出要查询的每个文档路径中最深的查询叶结点元素(即在该路径的所有查询叶结点元素的集合中,此元素的层次最深,编码最长),并返回该元素的扩展前缀编码。

例如,在图3的示例中,首先得到路径中最深的叶结点元素D1,并得到D1的扩展前缀编码:1.2.1.1.2.1。

步骤A2:清空所有的堆栈。

步骤A3:设定根结点作为父结点。

步骤A4:对步骤A1中的最深查询叶元素的扩展前缀编码进行处理,递归地将其整数编码转化为祖先结点的名称序列。

整数编码向祖先结点序列的转化技术为现有技术,在扩展前缀编码方法被提出时做了介绍,其中利用结构CT(t)={t0,t1,...,tn-1}来表示一个标签t的孩子名称线索,如图1中的CT(issue)={volume,number,articles},用一个整数x表示它的名称,如果x=8,则可利用CT(t)的大小对x进行模运算,从而得到元素名称t。如图1中x mod 3=2,因此整数x转化为的元素名称“articles”。

在图3中,CT(A1)={a,B1},CT(B1)={b,c,A2},CT(A2)={d,C1},CT(C1)={e,B2,f},CT(B2)={g,h,C2},CT(C2)={i,D1,j}。由D1的扩展前缀编码“1.2.1.1.2.1”,对编码中的数值进行模运算,1 mod 2=1,则编码中的1可化为元素名称“B1”(CT(A1)中的第1个元素,从0开始);接着2 mod 3=2,则下一个元素是“A2”,依次可得到从根结点到该结点的路径为“A1/B1/A2/C1/B2/C2/D1”。

步骤A5:更新信息,利用祖先结点对堆栈进行初始化,即将步骤A4中产生的每个祖先结点置入与其查询结点相应的堆栈S中,同时计算出该结点的level、preNum、change以及path的值。应该注意的是元素(除了根查询元素)的preNum,如果没有一个合适的上层元素去指向的话,就被置为一个无效的值。

例如,在图3的示例中,得到叶结点元素D1的从A1到C2的祖先结点序列。将这些祖先结点置入对应的堆栈中,如祖先结点A1,A2置入堆栈SA中,B1,B2置入堆栈SB中,C1,C2置入堆栈SC中。此过程中计算各数据结构的值,如对结点A1,其level值为0,即层次为0,根结点的change值为0,路径为空。对B1结点,其level(层次)为1,B1的preNum指向它的上层元素A1,且由于A与B时两个邻近的查询结点,因此,由定义可得Distance(A1,B1)为0,则change[B1]=change[A1]+Distance(A1,B1),因此B1的change值为0,path为使得change值最小的上层元素,即A1。对于B2结点,由于B2与A1结点不是相邻的,由定义可得Distance(A1,B2)=1,计算change[B2]=0+1=1.通过计算可得到A2的change值为0,而对于元素A2与B2,Distance(A2,B2)=1,因此得到change[B2]=1,所以B2的path中记录的是A1和A2两个元素。

步骤A6:处理与叶查询结点q相关的流Tq(如图4中的TD)中的下一个元素。重复步骤A1至A5。另外,应说明的是图3例中由于TD中只有一个元素D1,因此没有下一个元素。如果C是查询结点,则此步处理TC中C1的下一个元素C2。

步骤A7:显示结果。当到达流Tq的末尾时,从结果文件中输出直到现在的最近似的结果。

具体地说,如图8所示,该步骤A7更进一步包括:

本发明采用结构minNodeVector来记录符合条件的查询叶结点。在步骤A5中得到一个叶结点的最小松弛次数change值后,通过比较可得到当前最小松弛次数较小的叶结点,这些结点将被存入结构minNodeVector。

步骤A7-1:初始化结构minNodeVector。结构minNode从步骤A5中可得到一个叶结点的最小松弛次数change值,通过比较可将当前最小松弛次数较小的叶结点元素存入结构minNodeVector中。

步骤A7-2:如果当前的最小松弛次数即change值比先前保留的松弛结果的最小松弛次数大的话,舍弃当前的松弛次数;否则,结果文件和记录的最小松弛次数将会被更新。

步骤A7-3:对minNodeVector中存入的每个查询叶结点递归的处理,将松弛结果写入到结果文件中。具体地说:(1)将minNodeVector中的结点依次压入结果栈中;(2)如果该结点是根结点,则根据path中记录的上层元素的值输出最小的路径栈;否则,将每个在该结点路径中的路径结点作为当前结点,继续转到步骤(1);(3)弹出结果栈中的结果。

在图3示例中,由于只有叶元素D1,而且D1的最小松弛次数change值为1,因此D1被存入结构minNodeVector中。将结点D1压入到结果栈中,由于D1不是根结点,因此将其路径上的结点C2,B2,C1,A2,B1,A1也压入结果栈中,当结点A1入栈时,由于A1是根结点,因此可根据各结点path所记录的上层元素得到最小的路径栈,如图4所示,由D1,C2,B1,B2,A2,A1的path值,得到由上层元素形成的有最小change值的最小路径栈:D1,C2,B1,A1和D1,C2,B2,A1,以及D1,C2,B2,A2。弹出栈中的值后得到最后的松弛结果为:A1/B1//C2/D1,A1//B2/C2/D1,A2//B2/C2/D1。

步骤B:通过递归构造叶子删除查询模式,得到利用叶子结点删除操作的松弛结果。

具体地说,如图9所示,该步骤进一步包括:

步骤B1:通过进行步骤A,得到P-C到A-D边松弛的松弛结果。由步骤A7可得到结果文件中的松弛结果的最小松弛次数值,即通过多次比较得到的最小change值。设定一个松弛次数限制值使得等于最小松弛次数值。此限制值用来保证步骤B中的最小松弛次数比步骤A中的少。

对图3的示例,在步骤A7中,已经得到最小松弛次数为1,且由path值得到结果栈,最终得出松弛结果为:A1/B1//C2/D1,A1//B2/C2/D1和A2//B2/C2/D1。

步骤B2:从原始查询中删除最后一个叶查询结点。即图3中的叶结点D。

步骤B3:当松弛次数限制值大于0时,则执行步骤A,并递归地从查询中删除最后一个叶查询结点,同时使松弛次数限制值减1,循环执行步骤B3。否则,如果松弛次数限制值不大于0,则转到步骤C。

图3的示例中,当从原始查询中删除一个叶查询结点后查询模式为A/B/C,继续进行步骤A,得到松弛结果:A1/B1//C1,A1/B1//C2,A1//B2/C2,A2//B2/C2。当松弛次数限制值减1后,值为0,因此进入步骤C。

步骤C:根据此发明之前定义的松弛相似性的公式,来计算松弛相似性以对松弛结果进行评分,并且松弛结果按照增序排列并输出。

在步骤B3得到松弛结果后,最后对图3的示例进行评分。其中包括了两个松弛路径查询Q‘:A/B//C和A//B/C,两个查询Q’的松弛次数都为2,即RT(Q‘)=2.则计算松弛相似性RS(Q’)就取决于文档中各松弛结果出现的次数以及查询叶元素在文档中出现的次数。

如果对图3的文档部分做改动,如图5示例所示,则从图中可看出最小松弛次数为0,可得到结果A2/B2/C2/D1。在对松弛结果进行评分的时候,此结果的松弛相似性值RS较小,最后按增序排序时,此结果排名靠前会先输出。

如前所述,Q为原始路径查询,Q′为一个XML文档D的松弛路径查询。定义RS(Relaxation Similarity,松弛相似性):

RS(Q)=RT(Q)+|Q(D)||Qleaf(D)|+|Q(D)|

在该公式中,RT(Ql)代表查询Q到Q′的松弛次数.|Q′(D)|表示在给定的文档D中出现的松弛结果的数量,它可以用来评定一个查询Q’在文档中的重要性。Qleaf(D)代表文档中查询叶元素的数量。这样,RS(Ql)定义了松弛结果与原始查询Q的近似度。可得出这样的结论:

1:Q′和Q″是两个路径查询,并且RT(Q′)<RT(Q″),则有任意XML文档D中RS(Q′)≤RS(Q″)。即松弛结果的对应的松弛次数越小,其RS值越小,与原始查询更加相似。

2:Q为原始路径查询,Q′和Q″为两个路径查询,如果|Q′(D)|≤|Q″(D)|,RS(Q′)≤RS(Q″),则RT(Q′)=RT(Q″)=k(k≥0)。即对松弛次数相同的查询,松弛结果小的RS小,也更加接近原始查询。

接下来,从以下几个方面对本发明的实验效果进行说明。

(一)实验数据

将此发明中的松弛路径查询方法称为RelaxPath,与现有的另一个松弛路径查询方法PathStack*进行比较,前者是基于扩展前缀编码的,后者是基于containment编码的。利用三个不同的数据表,包括一个人工的和两个真实的数据表。人工的数据表为XMark基准数据,另两个数据表是DBLP和TreeBank。DBLP是一个浅而宽的文件,而TreeBank有很深的递归结构。

表1

在实验中,扩展前缀编码用被压缩的二进制数表示,并且实验中使用了能高效的表示整数值的UTF-8编码。这种编码可节省50%的空间。

(二)实验结果

为对比RelaxPath和PathStack*,基于上述的三个XML数据表设计出十个路径查询,如表2,来比较二者的执行时间,执行时间趋势。

表2

(三)执行时间

从图10中基于三个数据表,看出RelaxPath比pathstack*在每个查询上表现的都出色,尤其是TreeBank和DBLP。

(四)执行时间趋势。

图11给出了随着查询长度的增加,各个数据表上的执行时间的趋势。显而易见,当查询的长度较短时,两者执行时间是一样的。当长度增加时,RelaxPath也能保持稳定。

通过上述可知,本发明将P-C到A-D边松弛操作应用于查询模式的匹配中,通过动态的计算,来自动返回近似的结果.也就是对每一个文档中的路径,计算出每个可能的松弛路径在初始化元素数据结构的过程中的最少松弛耗费。这样,将会直接在初始化之后,计算出获得近似结果的最少松弛次数。同时,对此方法进行扩展之后,又构造出叶子节点删除操作。从扩展前的松弛路径查询方法中得到松弛结果的边后,将他们的最少的边松弛次数设置为松弛限制,用叶子节点删除操作递归的构造松弛查询模式,以获得等于或者小于松弛限制的更多的结果。扩展后的查询方法中,考虑了两个松弛操作,用户将能通过多种松弛模式来获得最近似的结果。

更进一步,由于松弛次数最少的查询将被作为最近似的结果返回,因此结果可能会由于两个松弛操作而包含了多样的查询模式。这样,评分方法就需要用来对每个有松弛结果的查询模式进行评分,按照他们在结构上与原始路径查询的近似度,进行评分得到最佳结果。

因此,本发明通过对定义的两种松弛操作的应用,得到多个松弛模式的结果,并通过评分的方法进行多个查询模式的排名,来得到最佳的结果。

此外,对于本领域的普通技术人员来说可显而易见的得出其他优点和修改。因此,具有更广方面的本发明并不局限于这里所示出的并且所描述的具体说明及示例性实施例。因此,在不脱离由随后权利要求及其等价体所定义的一般发明构思的精神和范围的情况下,可对其做出各种修改。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号