在文档中搜索的方法

文档序号:6489501阅读:389来源:国知局
专利名称:在文档中搜索的方法
技术领域
本发明涉及一种在文档集合中搜索的方法,所述文档具有树状结构并且文档集合中的每个文档都符合文档结构定义集合中的至少一个文档结构定义,具体来讲涉及一种方法,其包括下列步骤接收一个特定的分支;以及在文档集合中搜索至少部分的特定分支。
本发明还涉及一种使可编程装置能执行在文档集合中搜索的方法的计算机程序产品。
本发明还涉及一种用于在文档集合中搜索的电子装置。
本发明还涉及一种索引文档集合的方法,具体来讲涉及一种允许在结构化文档集合中搜索的方法。
本发明还涉及一种使可编程装置能执行索引文档集合的方法的计算机程序产品。
本发明还涉及一种用于索引结构化文档集合的电子装置。
背景技术
一个这种在文档集合中搜索的方法的例子可以从称作XPath的万维网协会标准中获知。这个标准描述了搜索XML文档包含一个特定的路径。XML文档具有树状结构,其中每个节点都具有标记并还可能具有数值。在每两个节点之间存在至多一条路径。一般惯例是通过在每个单独的XML文档中搜索来在XML文档中检索路径。已知的在文档集合中搜索的方法的缺陷在于搜索可能需要很长时间,特别是如果所述文档被加密并且需要解密的话更是如此。

发明内容
本发明的第一个目的是提供一种实现更有效搜索的、在文档集合中进行搜索的方法。
本发明的第二个目的是提供一种实现更有效搜索的、索引文档集合的方法。
根据本发明,所述第一目的是通过在文档集合中搜索的方法实现的,该方法包括下列步骤接收一个特定的分支;确定文档结构定义集合的子集;子集中的每个文档结构定义允许该特定分支存在于符合文档结构定义的文档当中;确定文档集合的子集,所述文档的子集包括符合子集中任何其中一个文档结构定义的文档集合的所有文档;以及在每个文档中搜索至少部分的特定分支。分支可以在一个以上的节点处起始或结束。路径和分支两者都包括一个或多个标记,并且路径同样也是分支。路径例如可以表示成像′book/name′或′book.name′之类的。分支例如可以表示成像′book/name′、′book.name′或′book(name+author(name+age))′之类的。分支可以由多条路径来表示,例如像{′book.name′,′book.author.name′,′book.author.age′}。文档例如可以是XML或SGML文档。文档结构定义例如可以是XML数据类型定义(DTD)或XML模式。通过使用文档结构定义来确定一组候选文档,使搜索更加有效。不再需要在所有文档中搜索。
在本发明所述的在文档集合中搜索的方法的实施例中,还包括下列步骤尝试解密文档子集中的每个加密的文档。减少对已加密文档不必要的解密,因为并非所有加密的文档都必须被解密,而是只需对子集中的加密文档进行解密。
确定文档集合子集的步骤可以包括通过将散列函数应用于至少部分的特定分支以及在从编号到文档的映射中查找哪个文档将被映射到所计算的编号来计算至少部分的特定分支的编号,所述映射与文档结构定义子集的文档结构定义以及符合文档结构定义的映射中的文档相关联。这不仅提供了安全性(映射没有显示出哪个分支存在于哪个文档中),而且还允许有效的文档查找。可以根据文档集合来修改散列映射的大小(且很可能是散列函数所返回的最大编号)。
作为选择,不去存储分支名字的散列,而可以在从分支名字到文档的映射中存储分支名字本身。同不使用索引的情况下进行搜索相比,这也允许更有效的搜索,但是与使用散列映射相比较这不太有利。为了提供安全性,将不得不采取额外的措施。为了确保分支不是明显地映射到文档,可以必须得将分支映射到不包含该分支的文档。这使得搜索更低效,但是提供了某种程度的保密性。
所述方法可以进一步包括下列步骤接收与特定分支相关联的特定数值。所述映射可以进一步包括映射中的文档与数域分区值之间的关联性。确定文档集合子集的步骤可以进一步包括检查关联于映射到所计算编号的文档的数值域分区是否匹配另一数值域分区,该另一数值域分区包括所接收的数值。安全性是通过在映射中仅安插数值域分区而非数值来提供的。该数值域分区仅仅给出可能数值的弱指示,但是允许更有效的搜索。数值域分区例如可以是′a-e′,′a,b,c,d,e′、′1-5′、′1,2,3,4,5′、′Europe′或′Netherlands,Germany,France,...′。
确定文档集合子集的步骤可以包括在从文档结构定义到文档的映射中查找哪个文档符合文档结构定义子集的任何其中一个。有利的是,由于不必为每个文档结构定义创建映射或不必使文档与数值域分区相关联,所以从文档结构定义到文档的映射能够容易地人工创建(例如,使用文本编辑器)。
确定文档结构定义集合的子集的步骤包括通过将另一散列函数应用于至少部分特定分支并且在从编号到文档结构定义的映射中查找哪个文档结构定义将被映射到所计算的编号来计算至少部分特定分支的另一编号。散列映射(例如,以散列表的形式)使确定文档结构定义集合的子集的步骤更有效,这是因为它不再需要对文档结构定义进行解密。散列映射还提供了安全性,因为散列映射未揭示出哪个分支存在于哪个文档结构定义中。
确定文档结构定义集合的子集的步骤可以包括尝试解密文档结构定义集合中的每个加密的文档结构定义,并且尝试为每个文档结构定义确定该文档结构定义是否允许特定分支存在于符合该文档结构定义的文档中。由此能够通过例如在搜索中使用已有的XML DTD或模式文件来限制索引量。在执行搜索之前,所述XML DTD或模式文件例如可以用存储器中的树来表示。可以遍历该树以确定XML DTD是否允许特定的分支存在于符合XML DTD的XML文档中。
在本发明的另一方面中,一种用于在文档集合中搜索的电子装置,包括电子电路,其功能上包括输入接收器,用于接收一个特定的分支;定义子集确定器,用于确定文档结构定义集合的子集,该子集中的每个文档结构定义都允许该特定分支存在于符合文档结构定义文档中;文档子集确定器,用于确定文档集合的子集,该文档的子集包括符合子集任何其中一个文档结构定义的文档集合的所有文档;和搜索器,用于在每个文档中搜索至少部分的特定分支。
根据本发明,第二个目的是通过索引文档集合的方法实现的,所述方法包括下列步骤为文档结构定义集合的每个文档结构定义创建一个空的索引;所述索引将来自于一个整数范围的每个整数映射到文档集合的文档;通过将散列函数应用于至少部分分支来计算文档集合的文档中的至少部分分支的编号;所述编号局限于所述整数范围并且计算可能会为不同的分支产生相同的编号;以及为所述文档符合的文档结构定义在索引中创建一个条目,所述条目包括从所述所计算编号到包含至少部分分支的所述文档的映射。这不仅提供了安全性(该索引没有示出哪个分支存在于哪个文档中),而且还允许有效的文档查找(不必检索/读取每个符合候选文档结构定义的文档)。
在索引文档集合的替换方法中,可以代替创建从一个文档结构定义到文档的多个索引映射,而是创建从所有文档结构定义到文档的一个索引映射。这一个索引例如可以是散列表,其既能提供安全性又能提供效率。用在这种表中的整数的可选范围很可能比所述整数范围或所述另一整数范围更大。
在本发明的索引文档集合的方法的实施例中,创建索引中的条目包括使映射中的文档关联于数值域分区,所述数值域分区包括与分支相关联的数值。
所述方法进一步可以包括下列步骤创建另一空的索引,其中来自于另一整数范围的每个整数能够被映射到文档结构定义;进一步的步骤包括通过将另一散列函数应用于所述分支来为至少部分所述分支计算另一编号,所述另一编号局限于另一整数范围,并且所述计算可能会为不同的分支产生相同的另一编号,并且进一步的步骤包括在另一索引中创建一个条目,另一索引中的所述条目包括从所计算的另一编号到所述文档符合的所述文档结构定义的映射。
在本发明的另一方面,一种用于索引文档集合的电子装置,包括电子电路,其功能上包括索引创建器,用于为文档结构定义集合的每个文档结构定义创建一个空的索引,所述索引将来自于一个整数范围的整数映射到文档集合的文档;散列计算器,用于通过将散列函数应用于至少部分分支来为文档集合的文档中的至少部分分支计算编号,所述编号局限于所述整数范围并且所述计算可能会为不同的分支产生相同的编号;和索引填充器,用于为所述文档符合的文档结构定义在索引中创建一个条目,所述条目包括从所述所计算编号到所述包括至少部分分支的文档的映射。


将参照附图进一步阐明和描述本发明的电子装置和方法的这些及其它方面,其中图1是依照本发明的索引文档集合的方法的流程图;图2示出第一文档示例和对应的第一DTD示例;图3是包括从第一DTD示例提取的路径的表;图4示出索引的示例;图5是包括第一文档示例的数值域分区的表;图6示出另一索引的示例;图7示出第二DTD示例;图8是依照本发明的用于索引文档集合的电子装置的框图;图9是依照本发明的在文档集合中搜索的方法的流程图;图10是依照本发明的用于在文档集合中搜索的电子装置的框图。
附图内的相应元件是由相同的参考标记来标识的。
具体实施例方式
在图1中示出了依照本发明的索引文档集合的方法。该方法包括至少三个步骤。步骤51包括为文档结构定义集合的每个文档结构定义创建一个空的索引,所述索引将来自于一个整数范围的整数映射到文档集合的文档。步骤53包括通过将散列函数应用于至少部分分支来计算文档集合的文档中的至少部分分支的编号,所述编号局限于整数范围并且计算可能会为不同的分支产生相同的编号。最后,步骤55包括为所述文档符合的文档结构定义在索引中创建一个条目,所述条目包括从所述所计算编号到包含至少部分分支的所述文档的映射。
符合一个文档结构定义(例如,XML DTD或XML模式)的文档(例如,XML文档)具有相似的结构,但是带有可能不同的元素内容和/或属性值以便区别不同的文档。例如,图2中所示的dtd1的符合文档doc1具有数值1000的limit属性,为简明起见将其表示成limit=1000。其元素number、name、address和amount分别具有以下内容123456789、″Alice″、″Twente,Enschede,Netherlands″和100.0。
XML DTD或XML模式定义了其所符合的XML文档的合法构造块,比如像在文档中允许什么元素、属性等等。这些组成部分构建了基于文档内容的分层树形结构,其中树的每一条路径都编址特定的文档部分。路径和路线长度的概念按如下定义定义1.路径p是节点n1,n2,...,nk的序列,表示为p=(n1/n2/.../nk),其中对于任何两个连续的节点ni和ni+1(1≤i≤k-1,k≥1),在它们之间都存在一条边缘。
路径长度p表示为|p|,它是路径中的边缘的总数。即,|p=(n1/n2/.../nk)|=k-1。
图3列出了从图2中的示例DTD dtd1中抽出的不同长度的路径。在此,不考虑虚线下面的内容节点,因为它们并未出现在dtd1中。
索引文档集合可以包括为每一个dtdi建造文档散列表DOCHashTabledtdi。在图4中,来自于dtd1中的每一对c=(cname,cval)(其中cname表示元素/属性,而cval表示对应的元素内容/属性值)编码到散列表DOCHashTabledtd1中(作为选择,将cname编码到不带有cval的散列表DOCHahTabledtd1中)。通过函数HashFunc(p)计算出每一对的散列地址(算法1),但是该计算使用的散列表尺寸是SizeDOCHashTabledtdi,而非SizeDTDHashTable|p|。相同的散列函数能用来为文档结构定义创建散列表。在这个示例中,路径p总是只包含一个节点,其为p=(cname),并且|p|=0。例如,令s=4,并且散列表SizeDOCHashTabledtd1的尺寸等于4(即,SizeDOCHashTabledtd1=4)。其结果为ChopName(″limit″)=″limi″,Base26ValueOf(″limit″)=11*263+8*262+12*26+8=199064,并且HashFune(limit)=199064*100mod 4=0。
算法1散列函数HashFunc(p)输入路径p=(n1/n2/...nk),对于节点名称固定的尺寸s,散列表尺寸SizeDTDHashTable|p|;输出散列值pa)对于每个节点ni(1≤i≤k),使其名称一致截成s字母串ChopName(ni,s)=xni,1xni,2...xni,s,其中xni,1,xni,2,...,xni,s是节点n的名称串中的字母。
b)对于每个s字母节点名xni,1xni,2...xni,s,将它转换成十进制整数Base26ValueOf(xni,1xni,2...xni,s)=offset(xni,1)*26s-1+offset(xni,2)*26s-2+...+offset(xni,s)*260=Vni,其中offset(xni,1)(1≤j≤s)返回26个字母当中的字母xni,j的位置。
c)计算p=(n1/n2/.../nk)的散列值HasFunc(n1/n2/.../nk)=(Vn1*10k-1+Vn2*10k-2+...+Vnk*100)modSizeDTDHashTable|p|算法1细分在为路径p=(n1/n2/.../nk)计算散列值的过程。它继续执行以下三步-首先,通过函数ChopName将可能具有不同长度的路径|p|中的节点名一致截成用户作为输入参数所给定的相同尺寸s(算法1,步骤a)。例如,令s=4,ChopName(″creditCard″,4)=″cred″,ChopName(″payInfo″,4)=″payI″,ChopName(″name″,4)=″name″。
-其次,通过函数Base26ValueOf将在步骤a之后所截成的具有固定尺寸的节点名串进一步转换成十进制整数(算法1,步骤b)。示例1示出了当将节点名串的尺寸设置为4时它如何工作。
示例1当忽略大小写的4字母节点名x1x2x3x4表示基数为26的整数时,字母′a′表示数字值0,字母′b′表示数字值1,字母′c′表示数字值2,字母′d′表示数字值3,诸如此类,直到表示数字值25的字母′z′为止。假定一字母,函数″offset″返回这样的数字值。由此,能够利用下列公式将所述4字母节点名x1x2x3x4转换成十进制整数Base26ValueOf(x1x2x3x4)=offset(x1)*263+offset(x2)*262+offset(x3)*261+offset(x4)*260
假定x1x2x3x4=″name″,因为′n′、′a′、′m′和′e′的数字值分别为offset(′n′)=13、offset(′a′)=0、offset(′m′)=12和offset(′e′)=4。Base26ValueOf(″name″)=13*263+0*262+12*261+4*260=13*17576+0+312+4=228802。同理,Base26ValueOf(″cred″)=2*263+17*262+4*261+3*260=2*17576+17*676+104+3=35152+11492+104+3=46751。Base26ValueOf的一般计算法为Base26ValueOf(x1x2...xs)=offset(x1)*26s-1+offset(x2)*26s-2+...+offset(xs)*260。
-最后,散列函数HashFunc根据从每个节点ni上的函数Base26ValueOf返回的数值Vni来导出路径p=(n1/n2/.../nk)的散列值(算法1,步骤c)。
HashFunc(n1/n2/.../nk)=(Vn1*10k-1+Vn2*10k-2+...+Vnk*100)modSizeDTDHashTablek-1示例2假定路径p=(creditCard/name),其中k=2并且|p|=1,令s=4并且SizeDTDHashTable|p|=SizeDTDHashTable1=8。
步骤1ChopName(″creditCard″,4)=″cred″,ChopName(″name″,4)=″name″。
步骤2Base26ValueOf(″name″)=228802,Base26ValueOf(″cred″)=46751。
步骤3Hash Func(creditCard/name)=(Base26ValueOf(″cred″)*101+Base26ValueOf(″name″)*10^0)mod SizeDTDHashTable1(46751*10+228802)mod 8=0在索引中创建条目可以包括使映射中的文档关联于数值域分区,所述数值域分区包括与分支相关联的数值。在计算至少部分文档分支(例如,cname)的编号并且将该文档映射到该编号之后,能够使该文档与数值域分区相关联。例如,把数值域分区放入相同的散列表元(bucket)中以作为文档标识符,参见图4。在这个示例中,参见图4和图5,只有路径的节点部分被散列。将被放入散列表元的条目可以利用″H.Hacigumus、B.Lyer、C.Li和S.Mehrotra所著的在数据库服务供应商模型中对已加密数据执行SQL(数据管理方面的Proc.ACMSIGMOD国际会议,第216-227页,美国威斯康辛州,2002年6月)″所开发出的技术,基于cname和cval来进行计算。基本思想是首先将节点cname的域划分成一组完整的且不相交的分区。也就是说,这些分区合起来覆盖整个域;并且任何两个分区都不重叠。给每个分区分配一个唯一整数标识符。接着,将元素/属性节点cname的数值cval映射到与它所落入到的分区相对应的整数。例如,可以将属性域极限分别分区成标识符0、1、2的
、(500,1000]、(1000,∞)。因此,由于HashFunc(limit)=0,故而将极限值1000映射到整数1,并且将其存储在DOCHashTabledzd1的第一散列表元当中。以同样的方式来为示例文档中的其它对计算散列值,这在图5中示出了。
注意域的分区能够根据数据的语义以及相关应用来进行。例如,元素name的域可以根据字母顺序排列法来加以分类。元素address的域可以根据所位处的省或国家来加以分区。可以对这样的映射″MapFuncdomain(cname)->Integer″强制实施保序约束条件,其意味着对于cname的域中的任何两个数值cval1和cval2,如果(cval1≤cval2),则MapFunc(cval1)≤MapFunc(cval2)。
假定用于number、name、address和amount的映射函数返回标识符,正如图5中所示的那样。图4标绘出了得出的编码,即DOCHashTabledtd1,例如XML文档doc1。所有遵循一个DTD的文档都共享相同的文档散列表。在冲突散列地址上,使冲突的对在散列表元下面链接在一起。
索引文档集合的方法可以进一步包括步骤57、59和61。这些步骤可以在步骤51、53和55之前、之后或并行执行。步骤57包括创建另一空的索引,其中来自于另一整数范围的每个整数都能被映射到文档结构定义。步骤59包括通过将另一散列函数应用于所述分支来为至少部分所述分支计算另一编号,所述另一编号局限于所述另一整数范围并且所述计算可能会为不同的分支产生相同的另一编号。步骤61包括在另一索引中创建一个条目,另一索引中的所述条目包括从所计算的另一编号到所述文档符合的文档结构定义的映射。
有利地,不同长度的路径能够被散列到不同的索引中。例如,不同长度的路径能够分别被散列到名为DTDHashTable0、DTDHashTable1、DTDHashTable2、...、DTDHashTablemax-pathLen的不同散列表中,参见图6。长度为l(其中1≤1≤max_pathLen)的所有路径,不论它来自于哪个DTD,都将共享单个散列表DTDHashTable1,而且每个散列表元都表示其路径已被散列到散列表元中的一组DTD。假设存在一个从dtd1抽出的路径p,散列函数HashFunc(p)(算法1)计算它的散列值,即散列表DTDHashTabley|p|中的散列表元地址。在相应的散列表元下面,dtd1的标识符被链接,这表示p所位于的DTD。为了提供有关基于散列的编码方法的更完整概述,在图7中示出了另一个DTD示例dtd2。在图6中,来自于dtd1和dtd2的带有其在各自散列表元中标记的相应DTD的所有路径,都利用相同的散列函数加以散列。当然,还可以散列相同索引中的不同长度的路径。
依照本发明,一种用于索引文档集合的电子装置71,参见图8,包括电子电路73。电子电路73功能上包括索引创建器75、散列计算器77和索引填充器79。所述索引创建器75可操作用于为文档结构定义集合的每个文档结构定义创建一个空的索引,所述索引将来自于整数范围的整数映射到文档集合的文档。所述散列计算器77可操作用于通过将散列函数应用于至少部分分支来为文档集合的文档中的至少部分分支计算编号,所述编号局限于该整数范围并且所述计算可能会为不同的分支产生相同的编号。所述索引填充器79可操作用于为所述文档符合的文档结构定义在索引中创建一个条目,所述条目包括从所述所计算编号到包含至少部分分支的所述文档的映射。
电子装置71例如可以是计算机或消费电子装置。逻辑电路例如可以是通用CPU(例如,AMD Athlon或Intel Pentium CPU),其可操作用于运行计算机程序。有利地,所述索引创建器75、散列计算器77和索引填充器79都是计算机程序的功能组件。所述电子装置71可耦合于输入装置45,例如键盘,以用于例如配置电子装置71和/或用于初始化索引进程。所述电子装置71可耦合于输出装置47,例如CRT或LCD监视器,以用于例如配置电子装置71和/或用于人工核对索引。所述电子装置71可以包括存储单元43。所述存储单元43例如可以包括一个或多个硬盘和/或一个或多个光盘。所述存储装置43例如可以包括已创建的索引、文档结构定义(例如,XML DTD和/或XML模式)以及文档(例如,XML文档)。所述电子装置71可以连接于包括一个或多个带有存储单元的电子装置的计算机网络,所述存储单元用于存储已创建的索引、一个或多个文档结构定义和/或一个或多个文档。
在图9中示出了依照本发明的在文档集合中搜索的方法。所述方法包括至少四个步骤。步骤1包括接收一个特定的分支。步骤3包括确定文档结构定义集合的子集,该子集中的每个文档结构定义允许该特定分支存在于符合文档结构定义的文档中。步骤5包括确定文档集合的子集,所述文档的子集包括符合该子集任何其中一个的文档结构定义的文档集合的所有文档。最后,步骤7包括在每个文档中搜索至少部分的特定分支。所述特定分支例如可以是作为用户在键盘上的输入并且被转换成路径的XPath表达式。
XPath语言是用于编址部分XML文档的W3C推荐标准。它把XML文档当作为与元素/属性相对应的节点的树,并且提供了一种可表达的方式以规定和定位这个树内的节点。
XPath表达式声明了能够与路径相配的结构模式,其由XML数据树中的节点序列组成。这类路径可能要么是来自于数据树的根部的绝对路径,要么是从一些已知上下文节点起始的相对路径。节点之间的层次关系是利用双亲-孩子运算符(″/″)和祖先-后裔运算符(″//″)在XPath表达式中规定的。例如,Xpath表达式″/payInfo/creditCard/@limit″编址creditCard的limit属性,所述creditCard是文档中的payinfo根元素的孩子元素。相对路径表达式″//creditCardlname″的name元素是相对于它的双亲creditCard元素的孩子。表达式″/payInfo//name″编址该payInfo根元素的name后裔元素。
XPath还允许使用通配符(″*″或″@*″),所述通配符能够相对于文档数据树中的上下文节点来匹配任何元素或属性节点。此外,可以将方括号(″[]″)包围的断言应用于进一步精炼XPath表达式中的所选节点集。例如,如果creditCard的属性limit具有小于1000的数值,则″/payInfo/creditCard[@limit<1000]/name″选择XML文档的name元素。还可以应用像(″|″)和(″and″)这样的运算符来选择路径的组成节点。例如,″/payInfo/(creditCard|cash)/name″表达式选择具有双亲要么是creditCard要么是cash元素的每个名称元素,所述每个名称元素又是根元素payInfo的孩子。相反地,″/payInfo/creditCard[@limit and@dueDate]″表明根元素payInfo的所有creditCard孩子都必须既具有limit属性又具有dueDate属性。
用来定位部分数据树的XPath表达式e需要通过下列三个步骤而与路径集相匹配步骤a将XPath表达式e在″//″运算符的点上分解成几个。
由于在脱机查询预备阶段期间,将要编码的路径仅仅在连续的节点之间具有双亲-孩子关系(″/″)(如图3所示),因此XPath表达式需要从″//″运算符所位于的点上被分解成几个,其中仅仅在除第一个节点外的每个节点上加上前缀″/″。由此,所得到的XPath表达式在每两个连续的节点之间不包含祖先-后裔关系(″//″)。
示例3可以将XPath表达式e=″/payInfo[amount>100]//name″分解成两个较短的XPath表达式e1′=″/payInfo[amount>100]″和e2′=″//name″。我们使用e=e1′Λe2′来表示这种语义等效的分解。
为了容易解释,XPath表达式是在步骤a之后利用像e′这样的原始(prime)符号导出的。它们形成了步骤b的输入。
步骤b使每个XPath表达式e′中的断言约束条件简化成只有层次关系。
由于DTD编码解除了路径节点上的数值约束条件,并且仅仅集中于它们的层次关系,从而简化了候选DTD过滤,因此能够约束XPath断言条件中所规定的像″[amount>100]″和″[@limit=1000]″这样的节点上的数值约束条件,并且仅仅保持它们的固有的双亲-孩子关系或元素-属性关系。
示例4e1′=″/payInfo[amount>100]″中的断言约束条件暗指amount是payInfo的孩子元素,其数值约束条件是通过在payInfo与amount之间增补双亲-孩子关系而消除的,在步骤2之后这导致更放宽的XPath表达式e1′=″/payInfo/amount″。=>2用于表示这类简化变换,即e1′=>2e1″。
示例5位于像″/payInfo[amount>100]/creditCard″这样的XPath表达式中间的断言导致在步骤b之后产生的两个XPath表达式,它们是″/payInfo/amount″和″/payInfo/creditCard″。即,″/payInfo[amount>100]/creditCard″=>2″/payInfo/amount″Λ″/payInfo/creditCard″。
e″表示在步骤b之后返回的XPath表达式。
步骤c通过将表达式改写成几个逻辑上用″Λ″或″V″相连的表达式来消除每个XPath表达式e″中的逻辑″|″和″and″运算符。
为了匹配定义1中的路径的概念,在步骤b之后包含逻辑运算符″|″和″and″的每个XPath表达式被一组更短的XPath表达式所代替,这些更短的XPath表达式逻辑上用″Λ″或″V″相连。
示例6XPath表达式e″=″/payInfo/(creditCard|cash)/name″可以看作为两个分离的表达式e1=″/payInfo/creditCard/name″和e2=″/payInfo/cash/name″,表示为e″=>3e1V e2。
同样,表达式″/payInfo/creditCard[name and dueDate]″能够同样被变换成″/payInfo/creditCard/name″Λ″/payInfo/creditCard/dueDate″。
在经过上述三步之后,原始的XPath表达式被变换成一组简单的XPath表达式,其中每个XPath表达式在每两个连续的节点之间都不包含祖先-后裔关系,在节点上不包含数值约束条件,并且不包含逻辑运算符(″|″)和(″and″)。
示例7从像″/payInfo[amount>100]/(creditCard|cash)/name″这类包含断言约束条件以及运算符(″|″)的原始XPath表达式,能够导出以下三个简单的XPath表达式″/payInfo/amount″Λ(″/payInfo/creditCard/name″V″/payInfo/Gash/name″)。
根据从XPath查询表达式产生的简单XPath表达式,能够定义候选DTD的概念以及给定查询的文档。对于从查询导出的每个简单Xpath表达式而言,如果在DTD中可能存在匹配这个简单的XPath表达式的路径p,则就把该XML DTD称作为查询的候选DTD。按照类似的方式,能够将XML文档定义成查询的候选文档,当且仅当1)其DTD是候选DTD;并且2)它可能满足在XPath查询表达式中的节点上强制的所有断言约束条件。
在文档集合中搜索的方法可以进一步包括步骤9-尝试解密文档子集中的每个加密的文档。候选DTD可以利用例如基于密码或公用密钥基础结构的解密技术来解密。
步骤3-确定文档结构定义集合的子集可以包括步骤11-通过将另一散列函数应用于至少部分的特定分支来为至少部分的特定分支计算另一编号,以及步骤13-在从编号到文档结构定义的映射中查找将哪个文档结构定义映射到所计算编号。例如,为了过滤出查询的非候选DTD,所述查询中所有XPath的散列值都可以利用相同的散列函数加以计算,然后参见示例性图6,可以检查DTD散列表中的相应散列表元以获得可能包含所请求路径的DTD的子集。这些DTD都是对查询考虑的候选DTD。
在为指定查询预先选择候选DTD之后,现在可以为每个候选DTD过滤出候选文档。在这个阶段,路径节点上的[CnameθCval]形式的不同数值约束条件(其中Cname表示元素/属性节点的名称,θ是{=,≠,<,≤,>,≥}的其中一个运算符,而cval表示元素内容/属性值)都要考虑到。显而易见,候选文档不许违反XPath查询表达式内规定的任何数值约束条件。
例如,采用约束条件[CnameθCval],节点名Cname(即,仅仅包含一个节点的路径)首先通过散列函数HashFunc(Cname)被散列成DOCHashTabledtdi。同时,还利用保序函数MapFunc(Cval)来计算cval的范围标识符。最后,比较链接于DOCHashTabledtdi中散列表元地址HashFunc(Cname)的每个条目值 那么约束条件[CnameθCval]就可能保持。接着,返回其中存在v的关联文档以作为候选文档。
示例8假定查询嵌套一个XPath表达式″/payInfo/creditCard[@limit>2000]/name″,其对creditCard元素强制约束条件[@limit>2000]。参照图4中的索引,其中s=4并且SizeDOCHashTabledtd1=4。由于所有在DOCHashTabledtd1中的地0(=HashFunc(limit))上映射的数值要么是1要么是0,它们都不大于2(=MapFunc(2000)),因此,该示例性文档不是这个查询的候选文档,可能由此而被丢弃。
步骤3-确定文档结构定义集合的子集可以包括步骤15-尝试解密文档结构定义集合中的每个加密的文档结构定义,以及步骤17-尝试为每个文档结构定义确定该文档结构定义是否允许特定分支存在于符合该文档结构定义的文档中。
步骤5-确定文档集合的子集可以包括步骤21-通过将散列函数应用于至少部分的特定分支来为至少部分的特定分支计算编号,以及步骤23-在从编号到文档的映射中查找哪个文档将被映射到所计算的编号,所述映射与文档结构定义子集的文档结构定义相关联,并且映射中的文档符合该文档结构定义。
例如,给定一个查询,为了检查出哪个加密的DTD是候选DTD,对于从该查询导出的每个简单XPath表达式,可以将其与路径p相匹配,并且可以利用相同的散列函数HashFunc(p)为p计算散列值(算法1),同时为所述DTD创建索引。根据所返回的散列值(即,散列表元地址),参见示例性图6,将散列表DTDHashTable|p|与相应的散列表元一起考虑,所述散列表元给出了所有可能包含路径p的DTD标识符。对于这个的基本原理是很简单的如果路径p存在于DTD中,则它将被散列到DTDHashTable|p|中的散列表元,从而为散列表元条目中的这个DTD留下标记。
示例9假设查询仅仅由与路径p=(payInfo/creditCard/dueDate)相对应的一个简单XPath表达式组成。参照图6中所示的DTD索引,其中s=4并且SizeDTDHashTable2=8,其散列值计算如下步骤a
ChopName(″payInfo″,4)=″payI″,ChopName(″creditCard″,4)=″cred″,ChopName(″dueDate″,4)=″dueD″。
步骤bBase26ValueOf(″payI″)=264272,Base26ValueOf(″cred″)=46751,Base26ValueOf(″dueD″)=66355。
步骤cHashFunc(payInfo/creditCard/dueDate)=(Base26ValueOf(″PayI″)*102+Base26ValueOf(″cred″)*101+ase26ValueOf(″dueD″)*100)mod SizeDTDHashTable2=(264272*100+46751*10+66355)mod 8=1由于其散列值为1,则可以肯定示例性的dtd2不包含那条路径,这是因为在DTDHashTable2中的地址1上的条目仅仅表示dtd1。其结果是,只有dtd1将作为候选DTD被返回,由此可能会丢弃dtd2及其关联的符合文档而不作进一步考虑。
步骤5-确定文档集合的子集,可以包括步骤25-在从文档结构定义到文档的映射中查找哪个文档符合文档结构定义的任何其中一个子集。
在文档集合中搜索的方法可以进一步包括步骤27-接收与特定分支相关联的特定数值。所述映射可以进一步包括映射中的文档和数值域分区之间的关联性。步骤5-确定文档集合的子集,可以进一步包括步骤29-检查关联于映射到所计算编号的文档的数值域分区是否匹配另一数值域分区,所述另一数值域分区包括所接收的数值。
依照本发明的用于在文档集合中搜索的电子装置31,参见图10,包括电子电路33。所述电子电路33功能上包括输入接收器35、定义子集确定器37、文档子集确定器39和搜索器41。所述输入接收器35可操作用于接收一个特定的分支。所述定义子集确定器37可操作用于确定文档结构定义集合的子集,该子集中的每个文档结构定义都允许该特定分支存在于符合该文档结构定义的文档中。所述文档子集确定器39可操作用于确定文档集合的子集,所述文档的子集包括符合子集中的任何其中一个文档结构定义的文档集合的所有文档。所述搜索器41可操作用于在每个文档中搜索至少部分的特定分支。
所述电子装置31例如可以是计算机或消费电子装置(例如,移动式电话或个人录像机)。所述逻辑电路例如可以是可操作用于运行计算机程序的通用CPU(例如,AMD Athlon或Intel Pentium CPU)。有利地,所述输入接收器35、定义子集确定器37、文档子集确定器39和搜索器41都是计算机程序的功能组件。所述电子装置31可以耦合于输入装置45,例如,键盘或小键盘,用于例如键入特定分支或与特定分支相对应的表达式。所述电子装置31可以耦合于输出装置47,例如,CRT或LCD监视器,用于例如显示搜索结果。所述电子装置31可以包括存储单元43。所述存储单元43例如可以包括一个或多个硬盘和/或一个或多个光盘。所述存储单元43例如可以包括映射/索引、文档结构定义(例如,XML DTD和/或XML模式)以及文档(例如,XML文档)。所述电子装置31可以连接于包括带有存储单元的一个或多个电子装置的计算机网络,所述存储单元用于存储一个或多个映射/索引、一个或多个文档结构定义和/或一个或多个文档。
尽管已经结合优选实施例描述了本发明,但是将要理解的是,其在上面略述的原理内的修改将对于本领域的技术人员而言是显而易见的,因此本发明不局限于优选实施例,而是用来涵盖这样的修改。本发明在于每一个新颖的特征和每一个特征组合。权利要求中的参考标记不限制它们的保护范围。动词″包括″及其变形的使用不排除除那些在权利要求中陈述的元件以外的元件存在。元件前面的冠词″一″或″一个″的使用不排除多个这样的元件存在。
将要理解′计算机程序′是指任何存储在诸如软盘之类的计算机可读介质上、可经由诸如互联网之类的网络下载或者可以任何其它方式购买到的软件产品。
权利要求
1.一种在文档集合中搜索的方法,所述文档具有树状结构并且文档集合中的每个文档符合文档结构定义集合中的至少一个文档结构定义,所述方法包括下列步骤-接收(1)一个特定的分支;-确定(3)文档结构定义集合的子集,所述子集中的每个文档结构定义允许该特定分支存在于符合文档结构定义的文档中;-确定(5)文档集合的子集,所述文档的子集包括符合该子集中任何一个文档结构定义的文档集合的所有文档;以及-在每个文档中搜索(7)至少部分的特定分支。
2.根据权利要求1所述的方法,其中进一步的步骤包括尝试(9)解密文档子集中每个加密的文档。
3.根据权利要求1所述的方法,其中确定文档集合的子集的步骤包括通过将散列函数应用于至少部分的特定分支来为至少部分的特定分支计算(21)一个编号,以及在从编号到文档的映射中查找(23)哪个文档将被映射到所计算的编号,所述映射与文档结构定义的子集的文档结构定义相关联,并且映射中的文档符合该文档结构定义。
4.根据权利要求3所述的方法,其中进一步的步骤包括接收(27)与特定分支相关联的特定数值,所述映射进一步包括映射中的文档与数值域分区之间的关联性,并且确定文档集合的子集的步骤进一步包括检查(29)关联于映射到所计算编号的文档的数值域分区是否匹配另一数值域分区,所述另一数值域分区包括所接收的数值。
5.根据权利要求1所述的方法,其中确定文档集合的子集的步骤包括在从文档结构定义到文档的映射中查找(25)哪个文档符合文档结构定义的子集的任何其中一个。
6.根据权利要求1所述的方法,其中确定文档结构定义集合的子集的步骤包括通过将另一散列函数应用于至少部分的特定分支来为至少部分的特定分支计算(11)另一编号,以及在从编号到文档结构定义的映射中查找(13)哪个文档结构定义将被映射到所计算的编号。
7.根据权利要求1所述的方法,其中确定文档结构定义集合的子集的步骤包括尝试(15)解密文档结构定义集合中的每个加密的文档结构定义,以及尝试(17)为每个文档结构定义确定该文档结构定义是否允许特定的分支存在于符合该文档结构定义的文档中。
8.一种计算机程序产品,其使可编程装置能执行如权利要求1所述的方法。
9.一种用于在文档集合中搜索的电子装置(31),包括电子电路(33),该电子电路功能上包括(33)-输入接收器(35),用于接收一个特定的分支;-定义子集确定器(37),用于确定文档结构定义集合的子集,该子集中的每个文档结构定义都允许该特定分支存在于符合该文档结构定义的文档中;-文档子集确定器(39),用于确定文档集合的子集,所述文档的子集包括符合子集中任何一个文档结构定义的文档集合的所有文档;和-搜索器(41),用于在每个文档中搜索至少部分的特定分支。
10.一种索引文档集合的方法,所述文档具有树状结构并且文档集合中的每个文档都符合文档结构定义集合中的至少一个文档结构定义,所述方法包括下列步骤-为文档结构定义集合的每个文档结构定义创建(51)一个空的索引,所述索引将来自于一个整数范围的整数映射到文档集合的文档;-通过将散列函数应用于至少部分分支来为文档集合的文档中的至少部分分支计算(53)一个编号,所述编号局限于所述整数范围并且所述计算可能会为不同的分支产生相同的编号;以及-为所述文档符合的文档结构定义在索引中创建(55)一个条目,所述条目包括从所述所计算编号到所述包括至少部分分支的文档的映射。
11.根据权利要求10所述的方法,其中在索引中创建条目包括使映射中的文档关联于数值域分区,所述数值域分区包括与该分支相关联的数值。
12.根据权利要求10所述的方法,其中-进一步的步骤包括创建(57)另一空的索引,其中来自于另一整数范围的每个整数都可被映射到文档结构定义;-进一步的步骤包括通过将另一散列函数应用于所述分支来为至少部分所述分支计算(59)另一编号,所述另一编号局限于另一整数范围并且所述计算可能会为不同的分支产生相同的另一编号;以及-进一步的步骤包括在另一索引中创建(61)一个条目,另一索引中的所述条目包括从所计算的另一编号到所述文档符合的所述文档结构定义的映射。
13.一种计算机程序产品,其使可编程装置能执行如权利要求10所述的方法。
14.一种用于索引文档集合的电子装置(71),包括电子电路(73),该电子电路(73)功能上包括-索引创建器(75),用于为文档结构定义集合的每个文档结构定义创建一个空的索引,所述索引将来自于一个整数范围的整数映射到文档集合的文档;-散列计算器(77),用于通过将散列函数应用于至少部分分支来为文档集合的文档中的至少部分分支计算编号,所述编号局限于所述整数范围并且所述计算可能会为不同的分支产生相同的编号;和-索引填充器(79),用于为所述文档符合的文档结构定义在索引中创建一个条目,所述条目包括从所述所计算编号到所述包括至少部分分支的文档的映射。
全文摘要
本发明涉及一种在具有树状结构并且符合文档结构定义集合中的至少一个文档结构定义的文档集合中搜索的方法。这个方法包括下列步骤接收(1)一个特定的分支;确定(3)文档结构定义集合的子集,其允许该特定分支存在于符合文档结构定义的文档当中;确定(5)文档集合的子集,所述文档集合包括符合子集中任何其中一个文档结构定义的文档集合的所有文档;以及在每个文档中搜索(7)至少部分的特定分支。本发明还涉及一种索引文档集合的方法,以用于简化在本发明的文档集合中搜索的方法。本发明还涉及使可编程装置能执行本发明的方法的计算机程序产品以及用于执行本发明的方法的电子装置。
文档编号G06F17/30GK1826598SQ200480021103
公开日2006年8月30日 申请日期2004年7月16日 优先权日2003年7月21日
发明者W·琼克, 冯铃 申请人:皇家飞利浦电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1