一种针对扩展xml树型结构的查询方法

文档序号:6583709阅读:261来源:国知局
专利名称:一种针对扩展xml树型结构的查询方法
技术领域
本发明属于信息技术领域中XML数据查询技术,具体涉及一种对扩展的XML树型结构的查询方法。

背景技术
随着XML数据在商业、企业中的广泛使用以及在交换信息中的流行,有效的处理XML数据查询也变得越来越重要。一个XML查询模式通常能用一个有根的标签树(或者是小枝树)来表示。例如,图1(a)为一个XPath查询A[B][C]和一个相关的XML树模型,此查询用来找到有一个孩子结点B和C的所有结点。在图(b)的查询中,查询结果是结点A1和A2。
对XML树模型进行有效的匹配是XML查询处理中的一个核心的操作。近几年提出了多种有效地匹配XML树的查询方法,包括基于堆栈的查询方法,但其即使在查询结果很小的时候,输出的中间结果也可能很大;还提出整体处理树模型的方法TwigStack,它虽然能确保不输出无用的中间查询结果,但是只能处理含有祖先-后裔关系的查询。还提出一些整体处理方法像TwigStackList,TSGeneric,iTwigJoin,TJFast,TwigStackList-Not等等,但依然存在以下的一些问题。
以前提出的XML树模型查询的方法只集中在有父子关系和祖先-后裔关系的查询上。对于像XPath,XQuery查询语言中用到的包含了通配符,负边,有序约束的XML树模型查询的处理方法则很少。此发明将使用了负边,通配符和有序约束的XML树模型称为扩展XML树模型。图2中有四个扩展XML树模型。查询(a)包括一个通配符结点”*”,它可以匹配XML数据库中的任意单一结点。查询(b)中包括一个负边,用

表示。此查询表示A有一个孩子B,但没有孩子C。在XPath语言中,负边可用布尔型函数”not”来表示。查询(c)有一个有序约束,与一个XPath“//A/B[following-sibling::C]”相同。”<”表示A的所有孩子结点是有序的。查询(d)包含了通配符,负边和有序约束。
以前提出的XML树模型匹配方法并不能完全发挥出整体处理树模型方法的最优性。当前面临的问题是(1)如何识别能够对查询进行最优处理的查询类;(2)对无法确保最优处理的查询,如何有效的找到查询结果。
以前提出的方法通过为树模型中的所有结点找到匹配的元素而解决问题。但是,这在实际应用中是不需要的。以XPath“//A[B]//C”为例,只有元素C及其子树是最后的结果。在先前的方法中,为了找到这个查询结果,首先需要找到所有查询结点的组合,并对这些返回结点进行处理,找到最终合适的结果,这就使得查询过程中输出许多与未返回结点相匹配的元素,这对最终结果是没有用的。此发明中,提出一种新的方式来记录映射关系并避免输出未返回结点。
此发明针对可能包括父子关系,祖先-后裔关系,有序约束,负边和通配符的扩展XML树模型的查询,提出新的查询方法用来识别对查询进行最优处理的大的查询类。对扩展XML树模型的查询分为三类(1)查询Q/,//,*是有父子关系,祖先-后裔关系和通配符的查询;(2)查询Q/,//,*,<是有父子关系,祖先-后裔关系,通配符和有序约束的查询;(3)查询

是有父子关系,祖先-后裔关系,通配符,有序约束和负边的查询,如图3所示。


发明内容
此发明中首先提出最优查询类,然后针对扩展XML树模型,提出一种新的整体查询方法。通过此方法获得含有通配符查询(Q/,//,*)的结果,并经过扩展,使得能够处理包含有序约束(Q/,//,*,<)和负边(

)的查询。
具体介绍如下 1.扩展XML树模型的查询Q 一个XML数据库D通常用一个有根的,用标签表示的树来模拟,元素标签和属性被映射到树的结点上,用边表示直接的嵌套关系。以下用“结点”表示一个查询结点,用“元素”表示D中的一个数据元素。
扩展XML树的查询Q中的结点包括元素标签,属性和字符数据。用“*”表示通配符,用来匹配任意的单一树元素。其中有四种查询边,它们是(正边,负边)和(父子边,祖先-后裔边)之间的结合。比如在图2(b)中,(A,B)是一个正的父子边,(A,C)是一个负的父子边。用符号

表示负边;有两种查询结点有序结点和无序结点。用“<”表示有序结点关系。比如,图2(c)和(d)中的结点A是有序结点。在每个扩展树模型查询中,有一个或多个结点被选为输出结点,用下划线表示。例如,在图2(a)中,C是一个选定的输出结点。
给定一个有n个选定输出结点的扩展XML树查询Q和一个XML数据库D。与查询Q的匹配用从Q中的结点到D中元素的映射表示,并使得满足(i)查询结点类型(比如标签名称)能被相应的数据库元素满足并且通配符”*”能匹配任意单一数据库元素。(ii)查询结点间的正边(包括正的父子边和正的祖先-后裔边)能被相应的数据库元素满足;(iii)在不存在相应的数据库元素时,负边(包括负的父子边和负的祖先-后裔边)能被满足;(iv)每个有序结点的孩子的顺序关系被相应的数据库元素满足。比如,图4展示了从一个扩展XML树模型到一个文档树中的映射关系。
定义最优查询类如下 最优查询类当且仅当一个查询Q中的父子关系发生在以下边E上时,查询Q是最优查询类的子类。
(1)给定Q中任意的输出结点q,E是路径中从q到root的边;或者 (2)令E=(a,b)则a是一个有序的结点,b是a的第一个孩子结点;或者 (3)E是一个负边。
对于满足最优查询类条件的查询,查询的具体方法如下介绍。
2.获得查询Q/,//,*结果的方法 在后面的叙述中,将此发明中的查询方法称为TreeMatch。
2.1数据结构 Tq与每个查询结点q相关的输入列表。列表中包含有相同名称q的XML元素的扩展前缀编码,所有元素根据文档顺序进行排序,这些元素用eq表示。每个列表有一个指针,可以通过单向的移动来以升序浏览一遍所有的元素。每个列表中的标签只能被读取一次。
Sq与每个分支查询结点q(不是每个查询结点)相关的集合。集合中的每个元素eq用一个三元组表示(label,bitVector,outputList)。label是eq的扩展前缀编码,bitVector用来判断当前元素在文档中是否有合适的孩子或者后裔元素。bitVector(eq)的长度与q的孩子结点的数量是相等的。给定一个结点qc∈children(q),当且仅当文档中有一个元素eqc使得eq与eqc也满足q与qc的查询关系,bitVector(eq,qc)=“1”。outputList中含有可能对最后查询结果有贡献的元素。对Sq集合中的每个元素eq,(i)如果bitVector(eq)中值全为1,则eq就一定能匹配以q为根结点的子树。(ii)当且仅当eq匹配整个树查询,每个元素e∈outputList(eq)都是查询结果。
例1图5举例说明了一个文档中的查询结点A的集合SA。SA中有两个元素。由于A1(“0”)只有一个孩子B1,没有孩子元素能与C匹配,因此bitVector(A1)=”10”.相对比而言,bitVector(A2)=”11”,由于A2(“0.1”)有两个孩子B2和C1,且满足查询中的父子关系。由于在bitVector(A2)中所有的值都为1,因此对输出结点B来说,B2(“0.1.0”)一定是一个查询结果。
2.2Q/,//,*的查询方法 步骤A1在查询结点q的列表Tq中定位能与对应的根-叶路径模式相匹配的第一个元素。
步骤A2如果Tq尚未到表尾, 步骤A2-1递归的寻找最高分支结点的下一个叶结点。如果该叶结点是输出结点,则将可能匹配的元素插入到outputlist中。
步骤A2-2读取该叶结点的列表T中的下一个元素。
步骤A2-3更新该叶结点的集合S。
步骤A2-4处理与查询模式相匹配的下一个元素,循环步骤A2; 步骤A3输出查询结果。清空集合中的所有元素。
3.获得有序查询Q/,//,*,<结果的方法 扩展上述的TreeMatch方法来支持有有序约束的查询。
3.1数据结构 扩展后的Sq集合中的每个元素eq用一个五元组表示<label,bitVector,outputlist,minChild,maxChild>。minChild(eq)和maxChild(eq)的长度与q的孩子的数量相等。假设q1,…,qn是查询中q的有序孩子结点。给定一个minChild(eq)中的元素

和maxChild(eq)中的


是比元素

(如果存在的话)大的最小元素,

是比元素

(如果存在的话)小的最大元素。因此,

是eq的最左边的孩子,

是最右边的孩子。
例2如图6中的查询和文档。表I展示了minChild和maxChild属性的值。当浏览B1和C1时,由于C1在B1之前,因此,不会将C1作为一个minChild插入,因为C1不比B1大。只有当浏览到C2时,才将C2插入到minChild中,当B2和C3被浏览时,它们分别是B结点和C结点的maxChild。

表I 3.2 Q/,//,*,<的查询方法 对TreeMatch进行扩展,只对其中的两步有所变化 步骤B1对Q/,//,*的查询方法进行扩展,在更新集合S时,还包括更新minChild和maxChild值。
步骤B2在判断元素是否为可能匹配的元素时,对其有序性进行了判断。
4.获得查询

结果的方法 扩展TreeMatch方法来支持查询中的有序约束和负边。
4.1数据结构 集合S中添加属性negBitVector用来记录关于负边的匹配信息。给定一个结点qc是q的一个负的孩子,当且仅当在文档中没有元素

使得eq和

满足q和qc之间的查询关系,negBitVector(eq,qc)=”0”。因此,q的所有负的孩子结点是否满足条件,只需要看所有孩子的negBitVector是否为”0”。
4.2

的查询方法 对Q/,//,*,<的查询方法进行扩展,只对其中的两步有所变化 步骤C1对Q/,//,*,<的查询方法进行扩展,在更新集合S时,还包括更新negBitVector的值。
步骤C2在判断元素是否为可能匹配的元素时,考虑到查询中的负边,对该negBitVector值进行了判断。



图1XML树查询以及文档。
图2扩展XML树模型查询的例子。_表示查询的输出结点 图3扩展XML树模型的三类查询例子。
图4扩展XML树模型到一个文档树的映射关系。
图5示例介绍集合S中各属性的取值。
图6一个有序XML树模型查询的例子。
图7包括通配符的查询(Q/,//,*)的示例。
图8各类查询所需要用到的随机数据。
图9基于DBLP(Q7-Q9)和TreeBank(Q10-Q13)数据的查询. 图10随机数据中保证最优性需要缓冲的元素的数量。
图11各查询方法的比较。
图12主存变化时的性能和I/O花费的比较. 图13包含通配符,有序约束和负边的查询(

)。
图14基于DBLP和TreeBank数据的各类查询。
图15扩展XML树模型查询方法流程图。
图16a为包括通配符的查询方法TreeMatch的实现流程图;b为a方法中的两个过程的具体实现。c为寻找下一个待处理结点的过程。
图17扩展TreeMatch,实现包括通配符,有序约束的查询方法的流程图。
图18扩展TreeMatch,实现包括通配符,有序约束和负边的查询方法的流程图。

具体实施例方式 此发明的实现是对扩展XML树结构查询方法的实现。具体包括查询中包含了通配符,有序约束和负边的查询方法的实现。
1.查询Q/,//,*方法的实现 步骤A1在查询叶结点的列表Tq中定位能与个别的根-叶路径模式相匹配的第一个元素。
步骤A2如果尚未到达Tq的表尾,则继续步骤A2-1,否则,进入步骤A3. 步骤A2-1通过递归找到最高分支结点的下一个叶子结点fact。
步骤A2-2如果fact是一个输出结点,则在与fact的最近祖先分支结点f相关的集合Sf中添加可能匹配的当前元素,判断是否可能匹配是根据Sf中的元素与列表

当前的元素所对应的bitVector值是否为1,即两个元素的关系是否与查询中的关系相同,如果相同即值为1,则将当前元素填入到Sf中。
步骤A2-3读取列表

中的下一个元素。
步骤A2-4更新该叶结点的集合 步骤A2-4-1根据当前浏览过的元素清空集合。
步骤A2-4-2将可能匹配的元素e添加到集合S中,并设置正确的bitVector值。
步骤A2-4-3如果fact结点不是根结点而且元素e的bitViector=”1...1”,则递归的更新e的祖先集合。由于e的插入,祖先结点的bitVector值不断更新。
步骤A2-5处理与查询模式相匹配的下一个元素,循环步骤2. 步骤A3清空所有的相关集合 步骤A3-1对与每个查询结点(叶结点除外)相关的集合Sq中的元素,如果bitVector中各个值都为1,而且如果此时该结点是一个输出结点,则将当前元素插入到该结点的最近祖先分支结点的集合中;如果此时该结点是一个最高分支结点,而它的集合S中只有一个元素,就输出outputlist中的所有元素。如果有多个元素,则将元素与它的最近祖先分支结点对应的元素的outputlist中的所有元素进行合并。
步骤A3-2将集合S中的元素全部删除。
对步骤A2-1中的寻找下一个叶子结点的方法,具体步骤如下(输入一个结点n,返回一个叶结点) 步骤A2-1-1如果当前结点是叶结点,则返回n; 步骤A2-1-2如果n有最近的后裔分支结点ni,即ni是一个分支结点或者叶子结点而且是一个后裔结点,从n到ni的路径上不存在其他的分支结点或叶子结点。如果存在ni,则对每个ni进入步骤A2-1-3处理,否则进入步骤A2-1-4。
步骤A2-1-3包括 步骤A2-1-3-1将ni作为当前结点,寻找ni的下一个叶子结点fi。
步骤A2-1-3-2如果ni是一个分支结点并且ni对应的集合

非空,则返回fi;否则,进入下一步。
步骤A2-1-3-3如果ni是分支结点,则将

中的最大元素赋值给e。否则,令e为列表

中的当前元素。返回e的祖先a的一个集合。
步骤A2-1-3-4在上一步返回的集合中,找最大的元素,赋值给ei. 步骤A2-1-4求ei中的最深的元素emax. 步骤A2-1-5对每个n的最近后裔分支结点ni,如果存在元素e属于步骤A2-1-3返回的集合中,但e不是emax的祖先元素,即当前元素不能参与到其他列表的后续解,则返回当前结点fi。
步骤A2-1-6找到所有返回的fi中最小的结点fmin,fi不是一个输出结点。
步骤A2-1-7进入步骤A2-1-3,其中ni是指nmin,即步骤A2-1-6中的返回的最小结点。
步骤A2-1-8对步骤A2-1-7得到的集合中的每个元素,如果该元素是emax的祖先元素,则将e插入集合Sn中。
步骤A2-1-9返回最小结点fmin。
例3考虑图1中的数据和查询。A是一个单一的输出结点。首先,读取B1和C1.由于A1只有一个孩子结点B1和一个后裔结点C1(没有孩子结点),将A1插入到SA集中,并且bitVector(A1)=”10”(查看表II)。接着,当浏览结点B2和C1时,由于A2有两个孩子结点B2和C1,将A2添加到集合中并且bitVector(A2)=”11”。然后,当浏览C2时,由于A1也有一个孩子C2,因此更新bitVector(A1)为”11”。最后,清空SA集合,并输出outputlists中的两个元素A1和A2。与先前的方法TwigStack和TJFast相比,此方法用bitVector准确的记录匹配的结果。如果没有元素C2,则不能输出A1。

表II 例4利用图7中的查询和文档查看此方法。表III展示了当前访问的元素,集合S以及相应的输出元素。查询中有两个分支结点。当TreeMatch读取E2时,递归的更新C1和A2的bitVector。最后算法输出{B1,B2}作为最后的结果。

表III 2.查询Q/,//,*,<方法的实现 实现的步骤同Q/,//,*方法相比,区别是,对步骤A2-2中判断元素是否为可能匹配的元素部分,重新进行实现 步骤B1假设Q中q的孩子结点按序为q1,….qn。
如果当前元素

比前一个结点的元素的编码大,即而且当前元素比后一个结点的元素的编码小,即而且该元素与Sf中的元素的bitVector值为1,即两元素满足查询中的关系,则将该元素添加到集合Sf中。
步骤B2在步骤A2-4的更新叶结点相关的集合时,除了要设置bitVector值,还需要设置minChild和maxChild值。
此方法扩展的目的是处理查询的过程中,考虑与查询兄弟结点相匹配的元素之间的有序关系,然后进行查询。
3.查询

的实现。
扩展前面的方法来支持查询中的有序约束和负边。
步骤C1在步骤B1中判断元素是否为可能匹配的元素部分,重新进行实现如果当前元素

比minChild(eq,qi-1)大,比maxChild(eq,qi+1)小,而且该元素与Sf中的元素的bitVector值为1,同时negBitVector值为“0”,则将该元素添加到集合Sf中。
步骤C2在步骤B2的更新叶子结点相关集合时,需要根据当前元素设置适当的的negBitVector值 实验效果 实验使用CPU为奔腾IV1.7G,内存为768M的计算机。
实验数据 在JDK1.4上用文件系统来存储,实现上述的方法。实验基于真实数据集和人工数据集。人工数据集随机产生。数据集中有7个标签,A,B,C,...F,G,标签依此统一分配。真实的数据集是DBLP和Treebank,保证了结构的复杂性。TreeBank的递归结构是深的(平均深度7.8,最大深度36). 表IV总结了数据集的特点。
表IV 与以前提出的四个方法TwigStack,TJFast,OrderedTJ,和TwigStackListNot进行比较,来评价此方法。选择这四个方法是由于与TreeMatch相似,TJFast和TwigStack是两个整体小枝模式匹配方法,但他们不能处理有有序约束或者负边的查询。而OrderTJ是一个能够处理有序的XML树模式的整体小枝查询方法,但是不能处理有负边的查询。TwigStackListNot是针对有负边的查询而提出的,但是无法处理有序的查询。只有本发明中的TreeMatch方法能有效处理包含有序约束,负边以及通配符的查询。
实验结果 (1)查询类Q/,//,*的实验结果 实验中所有的查询所需要的随机数据集在图8中可找到。图8中同时展示了每个查询的最优性。对DBLP和TreeBank的数据在图9中展示。限制主存的情况第一个实验中,不允许TreeMatch中的outputlist在主存中缓存任何元素。这样,任意添加到outputlist中的元素应该输出到硬盘中。对主存大小的需求是相当小的。这个实验的目的是模拟文档很大但可用主存很小的应用。表V展示了输出元素的数量和最后查询结果的数量。用三个不同大小的随机文档来做实验。特别是D1有100k个结点,D2有500K,D3有1M个结点。从表V可看出对大多数的查询,每个输出元素都不属于最后的结果,在这个意义上讲TreeMatch中是最优的。唯一的例外是Q3和Q6,不能确保其最优性。Q6对D1和D2是最优的,但仅对D3有略微的次优性。由于文档D3比D1和D2大,使得D3展示出了D1和D2隐藏的次优性。

表V输出元素的数量,D1有100K结点,D2有500K结点,D3有1M结点 主存很大的情况第二个实验,允许outputlist在主存中缓存所有的元素。这个实验的目的是模拟可用主存比较大,以至文档的一大部分可缓存在主存中的应用。图10(a)展示了需要被缓存来确保TreeMatch最优性的元素的最大数量。一个明显的结果是Q3和Q6需要缓存许多元素,而其他的查询仅需要缓存数量非常小的元素。
当与先前的方法TwigStack和TJFast进行比较时,TreeMatch方法的优势更加明显。在图11(a)和(b)比较三个方法的性能。显然,TreeMatch比TwigStack和TJFast更好,对所有的查询,在执行时间上达到了20%-95%的改善。
为了测试TreeMatch方法是否有能力完全利用现有的主存空间,我们通过改变主存的大小而得到不同的输出元素的数量来进行比较。通过图12(b)和(c),我们可看出此方法的性能。在这个实验中,选择了Q1和Q6,由于Q1是TreeMatch的最优查询,而Q6是次优的。实验结果显示了TreeMatch方法输出元素的数量总是比TwigStack和TJFast输出的少。特别是,对Q1,随着可用主存大小的增加,TwigStack和TJFast输出元素的数量呈线性减少,这是由于TwigStack和TJFast在主存中缓存了中间结果,减少了中间结果的输出。但是TreeMatch方法输出元素的数量保持相同,总是等于最后结果的大小。这个实验结果说明TreeMatch总是能够利用已有的内存空间,从而减少输出中间结果,达到很高的查询效率。
(2)查询类

的实验结果 查询中包含了有序约束,负边和通配符。实验所用的查询如图13和14所示。

表VI有序查询的输出结点数量与有用结点数量 用三个大小不同的随机文档进行实验。表VI显示了输出结点的数量和最后查询结果的数量,其中不允许TreeMatch中的outputlist在主存中缓存任意的元素。对所有最优的查询(Q15-Q19),输出结果的数量与最后的结果相等。
基于DBLP和TreeBank,用图1 4中的查询进行实验。在图11(c)和12(a)中显示了执行时间。由于Q14-Q16,Q20-Q22是基于有序查询的,比较TreeMatch和OrderedTJ。此外,Q17,Q18,Q23,Q24有负边,因此比较TreeMatch与TwigStackListNot。在所有的实验的查询中,TreeMatch比先前提出的方法有更好的性能。主要由于TreeMatch方法有更大的最优查询类。对查询Q19和Q25,由于两个查询包含了通配符,负边和有序约束,因此只有TreeMatch能够得到如此复杂的查询结果。以上实验使用了一个相对较小的缓存空间,预期此方法能够通过扩展使得对当前机器上的甚至是千兆(Gigabytes)的XML数据进行处理。
最后,此发明针对以前的整体查询方法所无法解决的通过输出一些不确定的元素避免在主存受限时丢失有用解的问题,通过识别最优查询类,然后对最优查询类中所包括的三种查询,即Q/,//,*,Q/,//,*,<和

提出了新的解决方法。此方法不仅能最优的处理更多的查询而且避免了输出无用的中间结果。而对于不满足最优查询类的查询模式,虽然一些与查询结果无关的中间结果会输出,但是与以前提出的方法相比,此方法能利用主存空间的缓存,使得输出更少的中间结点。而能处理更多的最优查询类的优势也是值得注意的。
基于以上优点,本发明提出的针对扩展XML树型结构的查询方法可应用于XML数据库的查询处理,尤其是XPath,XQuery等查询语言中,以及其他对XML信息进行查询处理的系统中。
此外,对于本领域的普通技术人员来说可显而易见的得出其他优点和修改。因此,具有更广方面的本发明并不局限于这里所示出的并且所描述的具体说明及示例性实施例。因此,在不脱离由随后权利要求及其等价体所定义的一般发明构思的精神和范围的情况下,可对其做出各种修改。
权利要求
1.一种针对扩展XML树型结构的查询方法,其特征在于,提出扩展XML树模型是指包含了通配符,有序约束和负边的XML树模型。
2.一种针对扩展XML树型结构的查询方法,其特征在于,实现的具体步骤如下
A.基于扩展前缀编码,通过使用与分支查询结点相关的集合S保存可能匹配的元素,通过记录映射关系,输出最终匹配的包含通配符的查询的结果。
B.通过在S中添加元素的属性值,记录元素之间的有序关系,输出最终匹配的包含通配符和有序约束的查询的结果。
C.在S中添加关于负边的属性值,使得此方法可处理包含通配符,有序约束以及负边的查询。
3.根据权利要求2所述的方法,其特征在于,所述的包含通配符的查询(Q/,//,*)方法的实现如下
步骤A1在查询结点q的列表Tq中定位能与对应的根-叶路径模式相匹配的第一个元素。
步骤A2如果Tq尚未到表尾,
步骤A2-1递归寻找最高分支结点的下一个叶结点。
步骤A2-2如果该叶结点是输出结点,则将可能匹配的元素插入到该叶结点的最近祖先分支结点的相关集合S中。
步骤A2-3读取该叶结点的相关列表T中的下一个元素。T中包含与查询结点有相同名称的所有元素,元素按照文档顺序排序。
步骤A2-4更新该叶结点的集合S。S中元素用<label,bitVector,outputList>表示。分别表示元素的扩展前缀编码,记录当前处理元素与S中元素的关系是否符合孩子或后裔关系,记录最可能的输出结果。
步骤A2-5处理与查询模式相匹配的下一个元素,循环步骤A2;
步骤A3输出查询结果。清空集合中的所有元素。
4.根据权利要求2所述的方法,其特征在于,所述的包含通配符以及有序约束的查询(Q/,//,*,<)的实现方法是在对Q/,//,*的查询方法进行扩展的基础上实现的
步骤B1对Q/,//,*的查询方法进行扩展,在判断元素是否为可能匹配的元素时,同时对元素之间的有序性进行判断。
步骤B2在更新集合S时,S中的元素用
<label,bitVector,outputlist,minChild,maxChild>表示。minChild与maxChild值记录元素的有序关系。
5.根据权利要求2所述的方法,其特征在于,所述的包含通配符,有序约束以及负边的查询
的实现方法是在对Q/,//,*,<的查询方法进行扩展的基础上实现的
步骤C1对Q/,//,*,<的查询方法进行扩展,在判断元素是否为可能匹配的元素时,考虑到查询中的负边,对negB计Vector值进行了判断。
步骤C2在更新集合S时,S中的元素用<label,bitVector,outputlist,minChild,maxChild,negBitVector>表示negBitVector记录关于负边的匹配信息。
全文摘要
本发明属于信息技术领域XML数据查询技术,具体涉及对一种扩展的ZML树型结构的查询方法。针对当前所提出的查询方法的问题,即由于主存的限制不得不输出一些不确定元素,以及能处理的最优查询类范围较小的问题,本发明提出一种新的整体方法,能够处理含有父子关系,祖先-后裔关系,通配符,有序约束和负边的查询。通过利用与分支查询结点相关的集合S来保存可能匹配的元素,并记录映射关系,当元素匹配查询模式时,输出最终的查询结果。此方法不仅能最优的处理更多的查询类,而且使得中间结果大大减少,同时避免了无用结果的输出。通过实验表明,此方法在性能,输出结点数量上都有优势,而且在主存空间变化时,此方法仍具有明显的最优性。
文档编号G06F17/30GK101763406SQ20091022233
公开日2010年6月30日 申请日期2010年3月24日 优先权日2010年3月24日
发明者陆嘉恒 申请人:陆嘉恒
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1