结构化文档管理设备、搜索设备、存储和搜索方法及程序的制作方法

文档序号:6630562阅读:190来源:国知局
专利名称:结构化文档管理设备、搜索设备、存储和搜索方法及程序的制作方法
技术领域
本发明涉及一种具有层级逻辑结构的结构化文档数据库。
背景技术
存在不同方案的结构化文档管理系统,用于存储并搜索由例如可扩展的标注语言(XML)写成的结构化文档数据。
(1)一种用于将结构化文档数据作为文本文件数据管理的简单方案在这种方案中,当所述数据数量或大小增加时,存储器的效率可能降低,或者其可能变得难以利用结构化文档的特性来执行搜索。
(2)用于将结构化文档数据存储在关系数据库(RDB)中的方案。
(3)用于利用为管理结构化文档数据而开发的面向对象的数据库(OODB)执行管理的方案。
RDB广泛地使用的在基本系统中。而且,作为扩展RDB的XML使能的RDB是可利用的。由于RDB以平面表格形式存储数据,它们要求能够将层级结构的XML数据对应到表格的复杂的映射。由于这种映射,所述性能可能降低,除非对于表格预先设计满意的图表。
除了上述提到的方案(1至3),近来已经建议了新的方案。
(4)用于简单地管理结构化文档数据的方案在这种方案中,不用任何特殊的映射处理来存储具有不同层级结构的XML数据。因此,在数据的存储或获取期间不存在特殊的开销。而且,这个方案不需要成本高的预设计图表,这使XML数据的结构可以根据商业环境中的变化而容易地变化。
即使结构化文档数据是有效存储的,如果没有用于获取所存储的数据的手段也是没有意义的。查询语言作为用于获取所存储数据的手段而存在。如同在RDB领域的结构化查询语言(SQL),定义了XML查询语言(XQuery)。XQuery是用于将XML数据作为数据库操作的语言。提供了用于获取、收集和/或分析符合条件的数据集。而且,由于XML数据具有层级结构,其中诸如父/子和兄弟的元素被结合,提供了用于遵循所述结构的手段。
例如,KOKAI申请的公开号为No.2002-34618与No.2000-57163的日本专利,公开了一种用于遵循所存储的结构化文档数据的层级结构的技术,以搜索包括由搜索条件指定的特定元素和结构的结构化文档数据。
通常,保存在数据库中的结构化文档数据的规模越大、结构化文档数据项的数量越大,搜索条件越复杂,跟随包括在每一个结构化文档数据项的层级结构内的元素的处理越多的时间。而且,由于所存储的结构化文档数据项的数量和每一个结构化文档数据项的尺寸的增加,变得不可能处理在存储器内的数据项,由此其中多数是保存在诸如硬盘的辅助存储器中。
在用于简单管理结构化文档数据的方案中,所述结构化文档数据的元素的层级结构是直接存储的。因此,为了检查是否具有由搜索条件指定的元素或结构,必须频繁地访问保存在辅助存储器中的结构化文档数据的元素。对于更加复杂的搜索条件来说也是相同的。
在引用的现有技术中,当具有期望元素或结构的结构化文档数据项是从存储有具有层级结构的结构化文档数据项的数据库中检索的时,在遍历数据库内的每一个结构化文档数据项的层级结构的元素时,使用搜索条件搜索。因此,高速搜索是不可能的。所要搜索的每一个结构化文档数据项的尺寸越大、结构化文档数据项的数量越大、搜索条件越复杂,提高搜索处理的速度越困难。

发明内容
按照以上描述的情况展开了本发明,目的是提供一种结构化文档管理设备以及能够以高速搜索结构化文档数据的搜索设备。
根据本发明的第一方面,提供了一种结构化文档管理设备,包括存储有多个结构化文档数据项的数据存储器,每一个数据项包括多个元素;存储包括多个结构的公共结构的公共结构存储器,所述多个结构包括在所述结构化文档数据项内;被配置来获取新的结构化文档数据项的第一获取单元;被配置来将所述公共结构更新为包括所述结构和包括在所述新结构化文档数据项内多个结构的新公共结构的更新单元;被配置为获取所述新公共结构和所述新结构化文档数据项的结构之间的差分结构的第二获取单元;存储所述差分结构的差分结构存储器;以及配置为将所述新结构化文档数据项的元素的数组存储到所述数据存储器里的存储单元,所述数组是基于所述差分结构排列的。
根据本发明的第二方面,提供了一种搜索设备,包括存储有多个结构化文档数据项的存储器,每一个数据项包括多个元素;被配置来获取用于搜索包括在所述元素内的期望的元素的搜索条件的获取单元;以及被配置来从搜索包括在所述结构化文档数据项内的特定结构化文档数据项中搜索所期望的元素的搜索单元,所述搜索单元包括被配置来基于在所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构的重构单元,所述公共结构包括在所述结构化文档数据项内的多个结构,还包括所述特定结构化文档数据项的结构;以及被配置来从所述重构的结构中检测所期望的元素的检测单元。
根据本发明的第三方面,提供了一种方法,包括将新的结构化文档数据项存储到存储有多个结构化文档数据项的存储器里,每一个数据项包括多个元素;获取包括在所述结构化文档数据项和所述新的结构化文档数据项内的多个结构的公共结构;获取所述公共结构和所述新结构化文档数据项的结构之间的差分结构;以及将所述新结构化文档数据项的元素的数组存储到所述存储器里,所述数组是基于所述新的差分结构排列的。
根据本发明的第四方面,提供了一种方法,包括从搜索包括在多个结构化文档数据项内的特定结构化文档数据项中搜索所期望的元素,每一个数据项包括多个元素;基于在所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构,所述公共结构包括在所述结构化文档数据项内的多个结构,还包括所述特定结构化文档数据项的结构;以及从所述重构的结构中检测期望的元素。
根据本发明的第五方面,提供了一种存储在由计算机读取的媒质中的程序,所述程序包括用于指示计算机存储每一个都包括多个元素的多个结构化文档数据项的装置,通过所述程序指令存储新结构化文档数据项;用于指示计算机获取包括在所述结构化文档数据项和新结构化文档数据项内的多个结构的公共结构的装置;用于指示计算机获取所述公共结构和所述新结构化文档数据项的结构之间的差分结构的装置;以及用于指示计算机将所述新结构化文档数据项的元素的数组存储到所述存储器里的装置,所述数组是基于所述新的差分结构排列的。
根据本发明的第六方面,提供了一种在由计算机读取的媒质中存储的程序,所述程序包括用于指示计算机存储每一个都包括多个元素的多个结构化文档数据项的装置,所述程序用作从包括在所述结构化文档数据项内的特定结构化文档数据项中搜索所期望的元素的搜索设备;用于基于所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构的装置,所述公共结构包括在所述结构化文档数据项内的多个结构,还包括所述特定结构化文档数据项的结构;以及用于指示计算机从所述重构的结构中检测所期望元素的装置。


图1是说明按照本发明实施例的结构化文档管理系统的功能配置例子的视图;图2是说明服务器的硬件配置例子的视图;图3是说明结构化文档数据的例子(文档A)的视图;图4是说明结构化文档数据的另一个例子(文档B)的视图;图5是说明结构化文档数据库的数据结构的视图;图6是说明所述文档A的文档树的视图;图7是说明所述文档A的结构化数据的视图;图8是说明公共结构化数据例子的视图;图9是说明指示在图8的公共结构化数据和文档A之间差异的第一差分结构的视图;图10是说明指示在图8的公共结构化数据和文档A之间差异的第二差分结构的视图;图11是说明所述文档B的文档树的视图;图12是说明所述文档B的结构化数据的视图;图13是说明另一个公共结构化数据例子的视图;图14是说明指示在图13的公共结构化数据和文档B之间差异的第一差分结构的视图;图15是说明指示在图13的公共结构化数据和文档B之间差异的第二差分结构的视图;图16是说明差分结构化数据的存储装置例子的视图;图17是说明文档对象记录(数组)的存储装置例子的视图;图18是有利于解释结构化数据提取处理的流程图;图19是有利于解释公共结构注册处理的流程图;图20是有利于解释差分结构注册处理的流程图;图21是有利于解释差分结构注册处理的另一个流程图;图22是说明结构化文档数据的另一个例子(文档C)的视图;图23是说明所述文档C的文档树的视图;
图24是说明所述文档C的数据结构的视图;图25是说明指示在图13的公共结构化数据和文档C之间差异的第一差分结构的视图;图26是说明指示在图13的公共结构化数据和文档C之间差异的第二差分结构的视图;图27是说明差分结构化数据的存储装置例子的视图;图28是有利于解释文档对象存储处理的流程图;图29是说明保存在索引数据存储装置中的索引数据的数据结构的示意图;图30是说明文档对象记录(数组)的存储装置例子的视图;图31是说明查询数据例子的视图;图32是有利于解释搜索处理单元的操作的概要的流程图;图33是有利于解释结构化扫描单元的操作的流程图;图34是说明从图31的查询数据获取的查询图表的视图;图35是有利于解释基于图34的查询图表的搜索处理的视图;图36是说明结果数据例子的视图;图37是说明另一个查询数据例子的视图;图38是说明从图37的查询数据获取的查询图表的视图;图39是有利于解释基于图38的查询图表的搜索处理的视图;以及图40是说明另一个结果数据例子的视图。
具体实施例方式
本发明的实施例将参照附图来描述。
图1是说明按照本发明实施例的结构化文档管理系统的功能结构例子的视图。如所示,所述结构化文档管理系统基本上包括客户机201和服务器101。当从所述客户机201接收储存数据或搜索数据的请求时,所述服务器101执行相对应的处理。
所述客户机201主要包括结构化文档注册单元202、搜索单元203、输入单元204和输出单元205。由诸如键盘和鼠标的输入装置形成的输入单元204用来输入结构化文档和多种指令。所述结构化文档注册单元202用来将例如预先存储在与客户机201结合的存储器内的结构化文档存储到结构化文档数据库(结构化文档DB)111中。所述结构化文档注册单元202将存储请求连同所要存储的结构化文档发送以所述服务器101。
根据由用户通过所述输入单元204输入的指令,所述搜索单元203产生查询数据并且将包括所述查询数据的搜索请求发送到所述服务器101,所述查询数据例如包括为了所期望的数据而搜索所述结构化文档数据库111的搜索条件。而且,所述搜索单元203接收从所述服务器101返回的对应于所述搜索请求的结果数据,并且将其显示在所述输出单元205上。
所述服务器101包括请求处理单元102、存储处理单元103和搜索处理单元104。而且,所述服务器101连接到所述结构化文档数据库111。所述结构化文档数据库111包括公共结构化数据存储装置112、差分结构化数据存储装置113、索引数据存储装置114、文档对象数据存储装置115。
所述请求处理单元102判断从所述客户机201发送的请求是否是存储请求或搜索请求,将所判断的请求分配到所述存储处理单元103或搜索处理单元104,以及将所述存储处理单元103或搜索处理单元104的处理结果返回到所述客户机201。
所述存储处理单元103从所述客户机201接收存储请求,以及将从所述客户机201来的结构化文档存储到所述结构化文档数据库111中。所述存储处理单元103包括文档数据分析单元31、结构化数据提取单元32、公共结构注册单元33、差分结构注册单元34和文档对象存储单元35。
所述文档数据分析单元31分析从所述请求处理单元102发送的每一个结构化文档的结构。基于所述分析结果,所述结构化数据提取单元32提取所述结构化文档的(文档)结构化数据。所述差分结构注册单元34将保存在所述公共结构化数据存储装置112中的所述结构化数据和所述公共结构化数据之间的差异存储到所述差分结构化数据存储装置113中。所述公共结构注册单元33更新保存在所述公共结构化数据存储装置112中的公共结构化数据。
所述文件对象存储单元35将结构化文档数据存储到所述文件对象数据存储装置115中、还将用于检测包括在所述结构化文档数据中项的位置的索引数据存储到所述文档对象数据存储装置115中。由所述文档数据分析单元31分析的对应于结构化文档数据项的每一个元素(节点)的对象数据,是基于从所述结构化文档数据项提取的差分结构化数据的次序来存储到所述文档对象数据存储装置115里的。
所述搜索处理单元104从所述客户机201接收搜索请求,在所述结构化文档数据库111中检测相应于在所述请求中指定的条件(查询数据)的数据,以及返回作为检测结果数据的所检测的数据到所述客户机201。所述搜索处理单元104基本上包括查询数据分析单元41、查询执行单元42和结果产生单元46。所述查询执行单元42包括结构扫描单元43、索引扫描单元44和数据联接单元45。
所述查询数据分析单元41分析从所述请求处理单元102发送的查询数据的结构。基于所述分析结果,所述查询执行单元42利用所述结构扫描单元43和索引扫描单元44,查阅存储在所述公共结构化数据存储装置112中的公共结构化数据、存储在所述差分结构化数据存储装置113中的差分结构化数据和存储在所述索引数据存储装置114中的索引数据。所述查询执行单元42然后利用所述数据联接单元45联接所述参照结果。
基于从所述数据联接单元45获取的数据,所述结果产生单元46从所述文档对象数据存储装置115读取对象数据,以及产生与包含于所述查询数据中的条件相同的数据。
图2示出了所述服务器101的硬件配置例子。如所示,总线1连接到通信I/F(接口)单元2、便携式记录媒质驱动单元3、显示单元4、输入单元5、输出单元6、运算单元(CPU)7、外部存储单元8以及存储器9。在图2的配置中,所述总线1还连接到在图1中出现的所述结构化文档数据库111。
用于实现所述请求处理单元102、存储处理单元103和搜索处理单元104的功能的程序,预先存储在图2中示出的外部存储单元8中,以及从那里读取到所述存储器9以被运行。
图3示出了结构化文档数据的例子。可扩展标注语言(XML)是作为用以表示结构化文档的典型语言来示范。在图3中示出的文档(文档A)是由XML写成的。在XML中,结构化文档的每一个组成部分称作“元素”,每一个元素使用标记来编写。特别地,每一个元素是通过在两个标记之间插入文本数据来表示,也就是一个标记(开始标记)指示每一个元素的开始,一个标记(结束标记)指示每一个元素的结束。保持在所述开始和结束标记之间的文本数据是包括在由所述开始和结束标记表示的一个元素中的文本元素(文本节点)。
在图3的例子中,保持在标记<书>和</书>之间的元素包括根元素以及保持在<标题>和</标题>之间、在<作者>和</作者>之间、和在<摘要>和</摘要>之间的三个子元素。保持在<标题>和</标题>之间的子元素包括文本元素“数据库”。而且,保持在<作者>和</作者>之间的子元素包括两个子元素,每一个子元素保持在<作者>和</作者>之间。
图4示出了所述结构化文档数据的另一个例子,其类似于图3的例子。在图3和4中示出的结构化文档数据项的不同在于,在后者中,所述结构化文档数据(文档B)包括三个<作者>元素、以及代替<摘要>元素的<关键词>元素。
例如在XML中表示的结构化文档具有以下特点它们是层级数据模型;它们可以包含相同的元素;它们包含按次序排列的元素;以及它们可以或可以不具有图表。
图5逻辑上示出了结构化文档数据库的数据结构,其具有形式为节点和弧线(arc)的树状结构。多个结构化文档是使用作为根的节点“根”而存储为一个结构化文档的一部分。
节点“书夹”作为所述根节点“根”的子节点而存在。在节点“书夹”下面,存在有在图3和4中示出的文档A和B的各自的子树。
在图5的情况下,使用“文件夹”和“文档”的概念。特别地,所述节点“根”和“书夹”被认为是文件夹,多个文档(在这种情况下,两个文档A和B)存在于所述文件夹下面。
实际上,每一个节点(包括每个文本节点)是作为用于在所述文档对象数据存储装置115中的对象数据的文件而保持的。称作对象ID(OID)的标识符分配给每个节点(包括每个文本节点)。在图5中,为了简化说明,OID由数字表示。任何期望的对象数据可以通过指定其OID来获取。实际上,每个OID包含有作为分配给包括每个节点(包括每个文本节点)的结构化文档的标识符的文档ID、以及指示在所述结构化文档的存储区中的存储槽位置的存储槽ID,所述结构化文档是相应于每个节点的对象数据的结构化文档。
对应于各自节点的对象的属性包括诸如子节点OID和父节点OID、相关弧线的信息,还包括标记名称。
(存储)现在参照图6至10,将简短地描述当在图3中示出的文档A存储到所述结构化文档DB 111里时执行的所述存储处理单元103的操作。这里假定所述文档A是存储在所述结构化文档DB 111中的第一个结构化文档数据。在这种情况下,还不存在公共的结构化数据。
为接收从所述客户机201发出的存储所述文档A的请求时,首先,所述文档数据分析单元31分析所述文档A的结构,由此输出文档树,其位于作为根节点的节点“书”下面,如图6所示。这种处理可以使用由公众已知的编译程序和编译程序工具代表的结构分析技术来实现,诸如Yacc和Lex。
所述结构化数据提取单元32从如图6中示出的这种文档树中获取如图7中示出的这种结构化数据。所述公共结构注册单元33从图7中示出的公共结构获取如图8中示出的这种公共结构,以及将其存储到所述公共结构化数据存储装置112里。所述公共结构表示在所存储的结构化文档中通常采用的结构。如图8所示,在所述公共结构中,具有相同标记名称的多个兄弟节点由一个节点代表。注意到在所述公共结构化数据存储装置112中,用于公共结构化数据的节点“根”是作为根节点而最初产生的,其统率表示所述公共结构化数据的树。
所述差分结构注册单元34获取与所述结构有关的信息,也就是获取如图10所示的这种差分结构化数据(第二差分结构化数据),所述结构包括在图7所示文档A的结构化数据中、而不是包括在图8所示的公共结构化数据中。在这种实施例中,为了获取所述第二差分结构化数据,将获取如图9所示的这种第一差分结构化数据。在以下说明中,如果仅仅指示包括在所述第一和第二差分结构化数据中的第二差分结构化数据,其可以简单地称为“差分结构化数据”。
所述文档A的结构化数据的节点“作者们”包括两个节点“作者”。也就是,存在相同的子结构(子树)。然而,由于这种重复结构是从所述公共结构排除的,其可以写成如图10所示的第二差分结构化数据。
在所述第二差分结构化数据中,如果在结构化数据的某个节点下面重复地检测到相同子树(部分或全部的相同子树),则将指示所述子树检测的数量的信息将作为属性信息增加到所述特定节点,并且仅使用一个子树来表示相同的子树,如图10所示。在这种情况下,如果存在不一定包括在相同子树中的节点(不定节点),则将指示所述节点是不定节点的标志“?”将作为属性信息附加到所述节点。
所述公共结构化数据覆盖至此存储的多个结构化文档数据项,而对于所存储的每个结构化文档数据项存在一个差分结构化数据项。而且,当存储结构化文档数据项时,如果此数据项包含有不包括在当前公共结构化数据内的节点,所述节点将增加到所述公共结构化数据。因此,简单地增加了所述公共结构化数据大小。
用于识别的节点ID分配给存储在所述公共结构化数据存储装置112中公共结构化数据的各个节点。在图8所示的公共结构情况下,节点ID“T0”指示根节点,节点ID“T1”到“T7”分配给另一个节点。也就是,当存储所述文档A时,用于去获取差分结构化数据的公共结构化数据包含具有节点ID“T0”至“T7”的节点。当增加了其它结构化文档数据项时,新的节点将增加到所述公共结构化数据。指示所述增加次序的新的节点ID将附加到所述新的节点。在所述实施例中,为了区分作为时标的公共结构化数据,所述公共结构化数据的最后节点ID将与所述差分结构化数据一起存储在所述差分结构化数据存储装置113中。
所述文档A的差分结构化数据与用来获取所述差分结构化数据的公共结构化数据的最后节点ID“T7”一起存储在所述差分结构化数据存储装置113中,该存储是例如图16所示的“ManagementT7[1][1][2*][1][1][1]”的数据组的形式。
基于在图10中所示的差分结构化数据,所述文档对象存储单元35将排列的对象数据项存储到所述文档对象数据存储装置115里,所述对象数据项对应于所述文档树的各个节点(包括文本节点)。所述文档对象数据存储装置115具有用于存储各个结构化文档数据项的多个存储区,每个存储区分成多个存储槽。每个存储槽具有指示其位置的存储槽ID,以及用来存储对应于每个存储区的结构化文档数据的每个对象数据项。存储在一个存储区中的结构化文档数据项被称作文档对象记录。所述文档对象记录是形成所述结构化文档数据的多个元素的数组。所述数组元素的位置信息项对应于各自的存储槽ID。
如图17所示,在存储文档(也就是文档A)的存储区中,首先存储对应于所述公共结构化数据的各个节点的对象数据项,然后顺序存储在所述文档树中的不定节点或文本节点。所述对象数据项是以从所述差分结构化数据的左边节点开始的次序、以及以从所述差分结构化数据的最高级节点开始的次序存储的。
将给出当将图4的文档B存储到所述结构化文档DB 111中时、执行的所述存储处理单元103的操作的简短说明。更具体地说,将给出其中在图8中所示的公共结构化数据存储到所述公共结构化数据存储装置112里的情况的说明。
当接收从所述客户机201发出的存储所述文档B的请求时,所述文档数据分析单元31分析所述文档B的结构,由此输出文档树,其位于作为根节点的节点“书”下面,如图11所示。
所述结构化数据提取单元32从如图11中所示的这种文档树中获取如图12中所示的这种结构化数据。
所述公共结构注册单元33将存储在所述公共结构化数据存储装置112和在图8中所示的公共结构化数据与图12中所示的结构化数据相比较,由此更新图8的公共结构化数据。也就是,在这种情况下,将增加作为如图13所示的节点“书”的子节点的所述节点“关键词”,所述节点“关键词”不是包括在图8的公共结构化数据中、而是包括在图12的结构化数据中。注意所述节点“关键词”的节点ID是“T8”。如图8所示的这种公共结构是从在图12中所示的结构化数据获取的,并且存储在所述公共结构化数据存储装置112中。
所述差分结构注册单元34获取差分结构化数据(见图15),其指示在图12的结构化数据和图13的公共结构化数据之间的差分结构。特别地,所述单元34获取如图14所示的这种第一差分结构化数据。如可以从图14所理解,所述第一差分结构化数据另外包括不是包括在图12的结构化数据中、而是包括在图13的公共结构化数据中的节点,也就是节点“摘要”。将指示检测数量是零的属性信息“0”附加到这个节点。这意味着由所述节点“摘要”表示的元素不存在于所述文档B中,而是存在于所述公共结构化数据中。
包括在文档B的结构化数据中的节点“作者们”具有三个节点“作者”,其意味着存在相同的子结构(子树)。为表示这些,在图15的第二差分结构化数据中,使用代表所述重复结构的一个子结构,其具有附加在该处的指示检测数量是3的属性信息“3*”。
所述文档B的差分结构化数据与用来获取所述差分结构化数据的公共结构化数据的最后节点ID“T8”一起存储在所述差分结构化数据存储装置113中,所述存储是以例如图16所示的“ManagementT8[1][1][3*][1][1]
[1]”的数据组的形式。
如图17所示,在存储文档B的存储区中,首先存储对应于所述公共结构化数据的各自节点的对象数据项,然后顺序存储在所述文档树中的不定节点或文本节点。所述对象数据项是以从在所述根节点下的结构的第一子节点开始的次序存储的,使用所述差分结构化数据的根节点作为起始点。对于在每个子节点下的结构,所述对象数据项是以从所述差分结构化数据的最高级节点开始、并且以最低级节点结束的次序存储的。
图18是有利于解释所述结构化数据提取单元32的结构化数据提取处理的流程图。将给出从图6的文档树中提取图7的结构化数据的情况的说明。所述结构化数据是通过向下跟随从所述根节点开始的文档树的节点,以及增加作为用于所述结构化数据的节点的所检测的节点而提取的。
特别地,首先,从所述文档数据分析单元31输出的图6中所示文档A的文档树的根节点被设置为所述结构化数据的根节点(步骤S1)。为了将所述文档树的节点增加到在所述根节点下的结构化数据,所述文档树的根节点被设置为“d”节点,以及所述结构化数据的根节点被设置为“f”节点(步骤S2)。如果所述“d”节点包括子节点(在步骤S3为是),所述“d”节点的第一子节点被设置为“d”节点′(步骤S4)。所述“d”节点′将作为所述“f”节点的子节点被增加,指示检测数量是1的属性信息“1”附加到所述子节点“d”节点′(步骤S5)。在属于所述“d”节点的所有子节点上执行步骤S4和S5之后,将更新所述“d”节点和“f”节点,直到在所述文档树的所有节点上执行了步骤S4和S5(步骤S6和S7)。也就是在步骤S7,所述文档树的下一个节点(也就是跟随被设置作为当前“d”节点的节点)将被设置为新的“d”节点,以及对应于所述新的“d”节点的结构化数据的节点被设置为新的“f”节点。随后,所述程序回到步骤S3,以及重复步骤S3至35。
在图18所示的处理中,将以在所述结构化数据的根节点下依次增加节点“书”、“标题”和“作者”。然后,在所述节点“作者”下增加所述节点“作者们”的第一子节点,也就是节点“作者”,以及在所述节点“作者”下增加所述节点“作者”的子节点,也就是节点“名”和“姓”。类似地,在所述节点“作者们”下增加所述节点“作者们”的第二子节点,也就是另一个节点“作者”,以及在其下面增加这个节点的“作者”的子节点,也就是节点“名”和“姓”。最后,增加作为所述结构化数据的节点“书”的子节点的节点“摘要”。指示检测数量是1的属性信息将附加到每个节点。
图19是有利于解释所述公共结构注册单元33的公共结构注册处理的流程图。将给出当存储包括在图7的结构化数据中的第一文档A时、产生新的公共结构化数据的情况的说明。在这种情况下,所述公共结构化数据是通过在向下跟随图7的结构化数据时、将所述结构化数据的节点与所述公共结构化数据的节点相比较而更新的,由此将不包括在所述公共结构化数据内的节点(“g”节点)增加到所述公共结构化数据。如上所述,当在所述结构化数据中检测到相同节点(相同元素名称的节点)时,仅将其中一个节点增加到所述公共结构化数据。
特别地,从所述结构化数据提取单元32输出的图7中所示文档A的结构化数据的根节点“书”被设置为“f”节点(步骤S11),。如果所述公共结构化数据在所述根节点“根”下面包含对应于“f”节点的节点,则程序进行到步骤S15,反之如果其不包含这种节点,则程序进行到步骤S13(步骤S12)。由于这种情况是指向新的公共结构化数据的产生的,在所述节点“根”下面不存在公共结构化数据,因此程序进行到步骤S13,其中增加作为所述节点“根”的子节点的“f”节点。也就是,增加所述节点“书”,以及将所述结构化数据的节点“书”设置为“g”节点(步骤S14)。
其后,重复步骤S16到S21,由此在所述“g”节点下构造公共结构化数据。特别地如果所述“f”节点具有子节点(在步骤S16为是),则所述“f”节点的第一子节点设置为“f”节点′(步骤S17)。而且,如果所述公共结构化数据的“g”节点不包含与所述“f”节点′相同的节点(在步骤S18为否),所述“f”节点′将作为所述“g”节点的子节点而增加,并且将节点ID附加到所述子节点(步骤S19)。相反,如果所述公共结构化数据的“g”节点包含与所述“f”节点′相同的子节点(在步骤S18为是),程序回到步骤S16,由此将所述“f”节点的第二子节点设置为新的“f”节点′。对属于所述“f”节点的所有子节点执行步骤S18和S19之后,更新所述“f”节点和“g”节点,直到对所述结构化数据的所有节点执行了步骤S18和S19(步骤S20和S21)。也就是在步骤S21,所述结构化数据的下一个节点(也就是跟随被设置为当前“f”节点的节点)被设置为新的“f”节点而设置,并且对应于所述新的“f”节点的公共结构化数据的节点被设置为新的“g”节点。随后,所述程序回到步骤S16,并且重复步骤S16至S19。
通过上述的处理,获取如图8所示的这种公共结构化数据,其中在所述结构化数据中检测到的相同的多个子树中的一个代表所述多个子树。最后,如图8所示的这种公共结构化数据存储在所述公共结构化数据存储装置112中(步骤S22)。
现在将给出在将具有图12所示结构化数据的文档B存储在其中已经存储了图8所示这种公共结构化数据的状态中时、执行所述公共结构注册处理的说明。在这种情况下,将仅描述与存储所述文档A的情况有关的不同点。在步骤S15,所述公共结构化数据的节点“书”被设置为“g”节点。在步骤S16到S21,更新存储在所述公共结构化数据存储装置112中的公共结构化数据。包括在图12的结构化数据中、而不包括在图8的公共结构化数据中的节点是节点“关键词”。因此,当在步骤S17将作为所述节点“书”的第三子节点的节点“关键词”设置为“f”节点′时,在步骤S18对所述询问的应答为否(由于图8的公共结构化数据的节点“书”的子节点不包括所述节点“关键词”)。这时,程序进行到步骤S19,其中所述节点“关键词”作为所述节点“书”的另一个子节点而增加,节点ID“T8”附加到所增加的节点。
从上述处理,获取了如图13所示的这种公共结构化数据。最后,更新存储在所述公共结构化数据存储装置112中的公共结构化数据(步骤S22),其类似于在图13中所示的公共结构化数据。
图20和21是有利于解释由所述差分结构注册单元34执行的差分结构注册处理的流程图。将例如使用其中存储有具有图12所示结构化数据的文档B的情况,给出所述差分结构注册处理的说明。
首先,将图12的结构化数据和图13的公共结构化数据相比,由此检测不是包括在图的结构化数据中、而是包括在图13的公共结构化数据中的节点,也就是节点“摘要”。随后,将具有附加其上的属性信息“0”的所述节点“摘要”增加到所述结构化数据,所述属性信息指示检测的数量是零。因此,产生如图14所示的这种第一差分结构化数据。
特别地,图12中所示结构化数据的根节点“书”将设置为“f”节点(步骤S31)。然后,对应于所述“f”节点的所述公共结构化数据中的节点被设置为“g”节点(步骤S32)。
如果所述“g”节点具有子节点(在步骤S33为是),所述“g”节点的第一子节点被设置为“g”节点′(步骤S44)。而且,如果所述结构化数据的“f”节点不包含与所述“g”节点′相同的节点(在步骤S35为否),所述“g”节点′作为所述“f”节点的子节点而添加,以及将指示检测数量是零的属性信息“0”附加到这个子节点(步骤S36)。相反,如果所述结构化数据的“f”节点包含与所述“g”节点′相同的节点(在步骤S35为是),程序回到步骤S33,由此将所述“g”节点的第二子节点设置为新的“g”节点′(步骤S34)。
例如,如果在步骤S34将作为所述节点“书”的第三子节点的节点“摘要”设置为新的“g”节点′,在步骤S35对所述询问的应答为否(由于图12的结构化数据的节点“书”的子节点不包括节点“摘要”)。这时,程序进行到步骤S36,其中增加作为所述节点“书”的另一个子节点的节点“摘要”,以及将指示检测数量是零的属性信息“0”附加到所增加的节点。
在属于所述“g”节点的所有子节点上执行步骤S35和S36之后,更新所述“f”节点和“g”节点,直到在所述公共结构化数据的所有节点上执行了步骤S35和S36(步骤S37和S38)。也就是在步骤S38,所述结构化数据的下一个节点(也就是跟随被设置为当前“g”节点的节点)被设置为新的“g”节点,以及对应于所述新的“g”节点的结构化数据的节点被设置为新的“f”节点。随后,所述程序回到步骤S33,以及重复步骤S33至S36。
从上述描述的处理中,获取如图14所示的这种第一差分结构化数据。
随后,产生如图15所示的这种第二差分结构化数据,其中包括在所述第一差分结构化数据中的相同子结构中的一个代表它们。如果在所述第一差分结构化数据的特定节点下多次检测到相同的子树(在图21中的步骤S41为是),就以完全重复形式重写这个重复结构(步骤S42)。也就是,相同的子树由包括在它们中的一个子树代表,并且指示所述子树的检测数量的属性信息将附加到所述子树的根节点。
图14的第一差分结构化数据包含在所述节点“作者们”下的三个相同的子树,其使用节点“作者”作为根。因此,如图15所示,所述三个子树中的一个代表它们,并且将指示所述子树的检测数量是3的属性信息“3”附加到所述子树的根节点“作者”。
如果在所述第一差分结构化数据的特定节点下检测到相同的子树,并且如果至少其中一个子树仅仅具有任何其它子树的部分结构(在步骤S43为是),就以部分重复形式重写所述重复结构(步骤S44)。
现在将描述部分重复形式,使用在图24中所示的结构化数据作为例子。图24的结构化数据包含在节点“作者们”下的、使用有节点“作者”作为根的的两个子树。其中一个子树不包括节点“姓”,而另一个子树具有如所述文档B的结构化数据的相同结构(见图12)。
图25示出了指示在图24的结构化数据和图13的公共结构化数据之间差异的第一差分结构化数据。而且,图26示出了第二差分结构化数据,其中在图25中的其中一个相同子结构代表它们。
图25的第一差分结构化数据包含在所述节点“作者”下的两个相同的子树,其使用节点“作者”作为根。其中一个子树不包括所述节点“姓”。因此,在图21所示的步骤S44,如图26所示,所述两个子树中的一个被用作代表,并且指示所述子树的检测数量的属性信息“2”附加到所述子树的根节点“作者”。而且,指示不定节点的属性信息“?”附加到包括在所述子树中的节点“名”。
参照前面的图21,除在所述第一差分结构化数据中的重复结构的部分(也就是,不包括重复结构并且可以由不多于预定门限值的信息数量表示的部分,其展开的形式未改变)是以展开的形式表示的(步骤S45)。也就是,由图14的第一差分结构化数据中的节点“书”、“标题”、“作者”、“摘要”和“关键词”形成的子树在图15的第二差分结构化数据中保持不变。
由上述处理获取的所述第二差分结构化数据以数据数组形式重写(步骤S46)。特别地,附加到图15中第二差分结构化数据的节点的各自检测的数量是以从在所述根节点下的结构的第一子节点开始的次序排列的,其中使用所述根节点作为起始点。涉及在每个子节点下的结构,所述检测的数量是以从所述结构化数据的最高级节点开始、并且以最低级节点结束的次序而排列的。换句话说,当按所述节点“书”、“标题”“作者们”、“作者”、“名”、“姓”、“摘要”和“关键词”的次序排列节点的各自检测的数量时,获取数据[1][1][3*][1][1]
[1]。
如图16所示,所述差分结构注册单元34在所述差分结构化数据存储装置113中存储所获取的差分结构化数据,其具有附加的节点ID“T8”(称作管理信息),节点ID“8”被分配给所述公共结构化数据的最后节点来获取所述差分结构化数据。
图16示出了差分结构化数据的存储器的例子。如所示,所述差分结构化数据存储装置113存储文档A和文档B的差分结构化数据。
所述文档A的差分结构化数据是以数据数组形式排列,实际上以[1][1][2*][1][1][1]的数字序列形式排列。每个数据项具有以下意义[1]检测到所述节点“标题”一次;[1]检测到所述节点“作者”一次;[2*]检测到使用所述节点“作者”作为根的结构两次;[1]检测到所述节点“作者/名”一次;[1]检测到所述节点“作者/姓”一次;和 检测到所述节点“摘要”一次。
所述文档A的差分结构化数据是以数据数组形式排列,实际上以[1][1][3*][1][1]
[1]的数字序列形式排列。每个数据项具有以下意义[1]检测到所述节点“标题”一次;[1]检测到所述节点“作者”一次;[3*]检测到使用所述节点“作者”作为根的结构三次;[1]检测到所述节点“作者/名”一次;[1]检测到所述节点“作者/姓”一次;和检测到所述节点“摘要”零次,也就是没有检测到;和[1]检测到所述节点“关键词”一次。
附加到每个差分结构化数据项的管理信息指示最大节点数量,从其中可以确定用于每个差分结构化数据项的公共结构化数据的范围。每次存储具有不包括在所述公共结构化数据中的新的结构化文档数据时,就将这个节点增加到所述公共结构化数据。由于因此简单地增加所述节点的数量,所述管理信息指示用于产生每个差分结构化数据项的公共结构化数据的范围。
图22示出了所述结构化文档数据的另一个例子,其具有类似于图3的结构化文档数据(文档A)、或者图4的结构化文档数据(文档B)的结构。也就是,在图22的结构化文档数据(文档C)中,所述节点“作者”具有两个节点“作者”,所述第二个节点“作者”不具有节点“姓”。而且,不存在节点“摘要”,而存在节点“关键词”。
图23示出了在图22中所示的文档C的文档树。
图24示出了通过基于在图23中所示的文档C的文档树、而执行在图18中所示的结构化数据提取处理所获取的结构化数据。
当存储图22的文档C时,将由图19的公共结构注册处理来存储到所述公共结构数据存储装置112里的公共结构化数据和图13中所示的相同。因此,如果图13中所示的公共结构化数据已经存储在所述公共结构数据存储装置112中,就不对其进行更新。图25示出了通过使用图24的结构化数据和图13的公共结构化数据来执行图24的差分结构注册处理所获取的第一差分结构化数据。
在图25的第一差分结构化数据中,在所述节点“作者们”下面存在有使用节点“作者”作为根的两个子树,其中一个子树不具有所述节点“姓”。而且,将具有指示所述检测数量是零的属性信息的节点“摘要”增加到所述节点“书”。类似地,将具有指示所述检测数量是零的属性信息的节点“姓”增加到所述第二节点“作者”。在图26中所示的第二差分结构化数据包括具有指示所述检测数量是零的属性信息“0”的节点“摘要”。
在图26中所示的第二差分结构化数据可以[1][1][2*][1][?]
[1]的数字序列来表示。如图27所示,所述差分结构注册单元34在所述差分结构化数据存储装置113中存储具有附加的节点ID“T8”的差分结构化数据,节点ID“8”被分配给所述公共结构化数据的最后节点来获取所述差分结构化数据。
参照图28的流程图,将使用所述文档B的文档树(见图11)的情况作为例子给出所述文档对象存储单元35的操作的说明。当以从所述根节点开始的次序向下跟随图15的第二差分结构时,首先,对应于所述公共结构化数据的节点的所述文档树的对象数据项将顺序存储到所述文档对象数据存储装置115里,然后将所述文档的不定节点和文本节点顺序存储到其中。
特别地,在图15中所示的由所述差分结构注册单元34获取的第二差分结构化数据的根节点(节点“书”)被设置为“S”节点。而且,图11的所述文档树的根节点(节点“书”)设置为“d”节点(步骤S51)。
如果以展开的形式表示所述“S”节点(在步骤S52为是),则对应于所述文档树的“d”节点的对象数据将存储到所述文档对象数据存储装置115里(步骤S53)。目前,由于所述“s”节点处于展开的形式设置到了的所述节点“书”,所述对象数据、也就是对应于所述“d”节点的“书”,被存储到所述文档对象数据存储装置115的文档B存储区的第一存储槽(存储槽ID=0)里,如图17所示。
然后,在步骤S59,更新所述“s”节点和“d”节点,随后程序回到步骤S52。在步骤S59,所述第二差分结构化数据的下一个节点、也就是节点“标题”,将设置为“s”节点,并且对应于此“s”节点的文档树的节点、也就是节点“标题”,将设置为“d”节点。
并且在这种情况下,所述“s”节点是以展开形式表示(在步骤S52为是),因此对应于所述“d”节点的对象数据、也就是“标题”,被存储到所述文档对象数据存储装置115的文档B存储区的第二存储槽(存储槽ID=1)里,如图17所示(步骤S53)。
其后,在步骤S59,所述第二差分结构化数据的下一个节点、也就是节点“作者们”,被设置为“s”节点,并且对应于此“s”节点的文档树的节点、也就是节点“作者们”,被设置为“d”节点,随后程序回到步骤S52。
另外在这种情况下,所述“s”节点是以展开形式表示(在步骤S52为是),因此对应于所述“d”节点的对象数据、也就是“作者们”,被存储到所述文档对象数据存储装置115的文档B存储区的第三存储槽(存储槽ID=2)里,如图17所示(步骤S53)。
其后在步骤S59,所述第二差分结构化数据的下一个节点、也就是节点“作者”,被设置为“s”节点,并且对应于此“s”节点的文档树的节点、也就是节点“作者”,被设置为“d”节点,随后程序回到步骤S52。
在这种情况下,由于附加到所述“s”节点的属性信息“3”指示检测数量是3(在步骤S52为否),在“s”节点下的子树以完全重复形式表示(在步骤S54为是),在所述文档树的“d”节点下的子树中的对象数据项将以完全重复形式存储到所述文档对象数据存储装置115里(步骤S55)。更具体地说,在图11所示的文档树中,由于检测到使用“d”节点(也就是,节点“作者”)作为根的三个子树,将包括在每个子树中的对象数据项“作者”、“名”和“姓”顺序存储到三个连续的存储槽的操作重复三次。结果,如图17所示,包括在所述第一子树中的对象数据项被存储到所述文档对象数据存储装置115的文档B存储区的第四存储槽(存储槽ID=3)至第六存储槽(存储槽ID=5)中。类似地,包括在所述第二子树中的对象数据项被存储到第七存储槽(存储槽ID=6)至第九存储槽(存储槽ID=8)里,以及包括在所述第三子树中的对象数据项被存储到第十存储槽(存储槽ID=9)至第十二存储槽(存储槽ID=11)里。
由于包括在所述第二差分结构化数据中的节点“摘要”的检测数量是“0”,所以在步骤S59忽略此节点并将所述节点“关键词”设置为“s”节点,并且将包括在所述文档树中的对应于所述“s”节点的节点、也就是所述节点“关键词”设置为“d”节点。然后,程序回到步骤S52。
另外在这种情况下,所述“s”节点是以展开形式表示(在步骤S52为是),因此对应于所述当前“d”节点的对象数据、也就是“关键词”,被存储到所述文档对象数据存储装置115的文档B存储区的第十三存储槽(存储槽ID=12)里,如图17所示(步骤S53)。
因此,完成了所述第二差分结构化数据的所有节点的检测(在步骤S58为是),随后程序进行到步骤S60,其中还没有存储的所述文档树的对象数据项被存储到所述文档对象数据存储装置115里。更具体地说,对应于文本数据项的对象数据项被顺序存储到例如所述具有存储槽ID=21的存储槽里,并且以和对应于所述公共结构化数据的各个节点的对象数据项相同的存储次序,如图17所示。
将作为例子使用存储所述文档C的文档树的情况给出所述文档对象存储单元35的操作的说明(见图23)。所述文档对象存储单元35使用在图26中所示的第二差分结构化数据来存储所述文档树的每个对象数据项。存储对应于从所述根节点到节点“作者”范围的节点的对象数据项的操作和在所述文档B中所执行的相同。仅描述与所述文档B的不同点。
在步骤S59,所述第二差分结构化数据的下一个节点、也就是节点“作者”,被设置为“s”节点,并且对应于此“s”节点的文档树C的节点、也就是节点“作者”,被设置为“d”节点,随后程序回到步骤S52。
在这种情况下,由于附加到所述“s”节点的属性信息“2”指示检测数量是2(在步骤S52为否),并且在所述“s”节点下的子树以部分重复形式表示(在步骤S54为否,在步骤S56为是),在所述文档树“d”节点下的子树中的对象数据项将以部分重复形式存储到所述文档对象数据存储装置115里(步骤S57)。
更具体地,在图23所示的文档树中,尽管检测到使用“d”节点(也就是,节点“作者”)作为根的两个子树,所述第二子树不具有节点“姓”。因此,在所述第二差分结构化数据中,所述节点“LAST NAME”当作为不定节点。在步骤S57不存储对应于所述不定节点的对象数据,而是在步骤S60存储。
在步骤S57,首先,将包括在每个子树中的对象数据项“作者”和“名”顺序存储到两个连续存储槽里的操作重复两次。结果,如图30所示,包括在所述第一子树中的对象数据项被存储到所述文档对象数据存储装置115的文档C存储区的第四存储槽(存储槽ID=3)和第五存储槽(存储槽ID=4)中。类似地,包括在所述第二子树中的对象数据项被存储到第六存储槽(存储槽ID=5)和第七存储槽(存储槽ID=6)里。
此后,以和在存储所述文档B的情况相同的方式,所述对象数据“关键词”被存储到具有存储槽ID=7的存储槽里。
因此,完成了所述第二差分结构化数据的所有节点的检测(在步骤S58为是),随后程序进行到步骤S60,其中在步骤S57还没有存储的所述文档树的对象数据项被存储到所述文档对象数据存储装置115里。更具体地说,所述第一子树的对象数据“姓”被存储到例如如图30所示具有存储槽ID=30的存储槽里。然后,对应于文本数据项的对象数据项顺序存储到例如所述具有存储槽ID=31的存储槽里,并且以和对应于所述公共结构化数据的各个节点的对象数据项相同的存储次序,如图30所示。
图30示出了文档对象记录,也就是所述文档A、B和C的文档对象记录的例子。所述文档对象记录与对应其的文档ID相关地存储。在每个文档中的每个对象数据项是由所述文档ID和存储槽ID中唯一指定的。换句话说,如果给定了包括文档ID和存储槽ID的对象ID,可以访问任何对象数据项。
所述文档对象存储单元35将每个文档树的每个对象数据项存储到所述文档对象数据存储装置115里,并且基于在每个文档树中的每个对象数据项更新所述索引数据存储装置114。索引数据指示在所存储结构化文档数据中的文本元素的文本数据、和分配给在包括所述文本数据的所述结构化文档数据内的元素的对象ID(OID)之间的关系。
如图29所示,所述索引数据存储装置114存储有术语表格,以及多个存储分配给文本元素的OID的表格,所述文本元素链接到包含于所述术语表格中的术语并且包括所述术语本身。通过跟随包含于所述术语表格中的术语的链接,获取了包括有所述术语的文本元素的检测位置,也就是OID。
每个对象数据项的对象ID以<文档ID,存储槽ID>来表示。所述文档A、B和C的文档ID分别是“文档A”、“文档B”和“文档C”。
(搜索)将描述图1的搜索处理单元104的操作。
图31示出了输入到所述搜索处理单元104的查询数据的例子。在XML中,使用由W3C开发的XQuery(XML查询语言),并且使用了基于这种语言的查询描述方法。
在图31中所示的查询数据描述了以下情况的AND(与)条件,这些情况是元素“书”存在于结构化文档DB“DB”的层次树中、元素“作者”存在于所述元素“书”中,以及所述元素“作者”包括具有包含字符串“Taro”的文本元素的元素“名”以及具有包含字符串“Tanaka”的文本元素的元素“姓”。
如图31所示的这种查询数据将从所述客户机201的搜索单元203发送到所述服务器101的请求处理单元102。
然后参照图32和33的流程图,将给出当接收如图31所示这种查询数据时所执行的所述搜索处理单元104的操作的简短说明。
由所述请求处理单元102接收的查询数据传送到所述搜索处理单元104的查询数据分析单元41。所述查询数据分析单元41分析所接收的查询数据的结构,并且基于所述分析结果提取称作查询图表的图形结构(步骤S101和S102)。例如,如图34所示的这种查询图表是从图31所示的查询数据获取的。可以由所述查询图表表示的在查询数据内的这种结构以下将称为“Sc”。
如图34所示,所述查询图表是将与包含在查询数据内的元素(比如db“DB”、“书”、“作者”、“名”和“姓”)相对应的变量以及根据在所述元素之间的层次关系和在所述字符串之间的包含关系的变量连接而形成的。
在图34所示的查询图表内,变量是由圆形节点代表,变量名称写入所述圆周中。这些节点是所谓的变量节点。而且,在所述查询数据内指定的元素由在其中写有“TAG(标记)”的六边形节点代表。这些节点是所谓的标记节点。此外,在所述查询数据内指定的字符串是由其中写有“CMP”的六边形节点代表。这些节点是所谓的值比较标记。
然后,为了将所述查询图表内的全部变量实例化,所述查询执行单元42顺序地产生称为表格的代表所述变量组可以采用的值的全部可能组合的数据。
特别地,其首先判断包含在所述查询图表内的全部变量是否由一个表格实例化(步骤S103)。如果对在步骤S103的询问的应答为是,也就是,如果实例化了全部变量,所实例化的变量是作为在步骤S111搜索结果的输出。所述变量可以采用的值指示OID。
如果包含在所述查询图表内的全部变量没有被实例化的值(在步骤S104为是),则从步骤S104到步骤S110范围的处理将重复,直到它们被实例化。
在步骤S104,判断使用保存在所述索引数据存储装置114中的索引的搜索是否可能。如果具有术语索引功能,比如存在“contains(包含)”,可以实现使用在所述结构化文档DB 111内的索引数据的高速搜索。在这种情况下,所述索引扫描单元44执行索引扫描(步骤S105)。
如果在所述查询图表上的特定变量被实例化,如果属于比所述特定变量低等级的变量被实例化,并且如果属于比所述特定变量高等级的变量没有被示例(在步骤S106为否),则所述结构扫描单元43执行结构扫描(步骤S107)。
在步骤S108,判断多个表格是否包含相同的变量。如果对在步骤S108的询问的应答为是,所述数据联接单元45执行联接处理以联接所述多个列表(步骤S109)。
如果对在步骤S108的询问的应答为否,在步骤S110运行不同于上述的处理。
如上述的,在步骤S111,执行结果输出处理。这时,获取所述变量可以采用的值的可能组合(即可能的OID的组合)作为表格。每个组合是由具有相同文档ID的多个OID所形成的。因此,每个组合对应于一个结构化数据项。可以通过从所述文档对象数据存储装置115中取得与每个文档ID相对应的结构化数据、来获取与所述查询数据相对应的结构化文档数据项的组,所述每个ID文档是从作为表格的组合获取的。
图35是有利于解释基于图34的查询图表的搜索处理的视图。
(1)由于所述查询图表包含值比较标记节点、以及所述项索引功能“contains”,使用如图29所示的这种索引数据对所述字符串“Taro”执行索引扫描。结果,实例化了变量节点34(见图35中的表格1)。也就是,获取作为与变量节点$4相对应的OID的<文档A,4>、<文档B,4>和<文档B,7>。
(2)类似地,使用如图29所示的这种索引数据对所述字符串“Tanaka”执行索引扫描。结果,实例化了变量节点$5(见图35的表格2)。也就是,获取作为与变量节点$5相对应的OID的<文档A,5>和<文档B,8>。
(3)由于实例化了所述变量节点$4和$5,执行结构扫描以实例化属于比这些变量节点更高等级的变量节点。
参考图33的流程图描述结构扫描。
首先,从图35中的表格1和2,读取包含在所述对象ID内的与变量节点$4和$5相对应的文档ID(步骤S121)。
从所述公共结构化数据存储装置112和差分结构化数据存储装置113分别读取与每个文档ID相对应的差分结构化数据和公共结构化数据(与附加到所述差分结构化数据的管理信息相应)(步骤S122)。
从与每个文档ID相对应的所述差分结构化数据和公共结构化数据,重构与每个文档ID相对应的结构化数据(步骤S123)。
例如,为了重构所述文档A的结构化数据,以图10所示的完全重复形式表示的差分结构化数据的子树被以原始展开的形式表示,从而重构如图7所示的这种结构化数据。
而且,为了重构所述文档B的结构化数据,以图15中所示的完全重复形式表示的差分结构化数据的子树被以原始展开的形式表示,并且消除了具有指示检测数量是零的属性信息“0”的节点“摘要”。结果,重构了如图12所示的这种结构化数据。
随后,从在表格1中的每个对象数据项开始,向上遍历每个重构文档的结构化数据,从而检测和在所述查询图表上的高等级变量节点相同的节点(步骤S124)。
如果和在所述查询图表上的高等级变量节点相同的节点是不定节点,由于不能确定所述不定节点的存储槽ID(在步骤S125为否),程序进行到步骤S127。相反,如果和在所述查询图表上的高等级变量节点相同的节点是固定节点,由于可以从所述结构化数据确定所述固定节点的存储槽ID(在步骤S125为是),程序进行到步骤S126。
现在将给出用于判断是否可以在步骤S125确定所述存储槽ID的方法的说明。如先前描述的,所述文档对象存储单元35以对象数据数组形式存储每个文档。分配给数组中各个元素的位置信息项是存储槽ID。如图30所示,与所述公共结构化数据的各个节点相对应的对象数据项是以从所述数组的最先的数据项开始的次序保存的(从所述差分结构化数据的最左边节点开始,以及从所述差分结构化数据的最高等级节点开始)。然后,存储在所述文档树内的不定节点或正文节点。
通过遍历从所述根节点开始的重构的结构化数据,获取除不定节点“?”之外的节点的检测数量的总和。如果检测到若干次高等级的节点(例如,2*),则执行考虑到所述高等级节点的检测数量的总和计算。如果存储槽ID大于所述总和,则不能确定所述存储槽ID。
例如在图23的文档C情况下,除所述不定节点“姓”外,检测到所述元素“标题”一次,也检测到所述元素“作者们”一次,检测到所述元素“作者”两次,检测到属于每个元素“作者”的元素“名”一次,并且检测到所述元素“关键词”一次。因此,所述文档C的全部节点的检测总数由以下给出1+1+2×(1+1)+1=7因此,不能确定高于“7”的存储槽ID。
在步骤S126,计算当向下跟随每个结构数据项时所获取的存储槽ID。例如,可以通过计算存在于从每个结构数据项的根节点到所述的范围中的所述对象数据项的数量来检测特定节点的存储槽ID。
在步骤S127,为了检测每个所获取节点的存储槽ID,搜索与每个文档ID相对应并且保存在所述文档对象数据存储装置115中的对象记录。
因此,扫描重构的每个结构化数据项。结果,从在图35内所示与变量节点$4相对应的表格1中获取在图35内所示的与变量节点$3相对应的表格3,以及从在图35内所示并且与变量节点$5相对应的表格2中获取在图35内所示并且与变量节点$3相对应的表格4。
将给出如何从表格1获取在图35内所示的与变量节点$3相对应的表格3的说明。在图34内的变量节点$3与所述节点“作者”有关。参照图7文档A所重构的结构化数据,通过从具有存储槽ID=4的节点“名”向上地跟随所述结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第四存储槽中,所述节点“作者”的存储槽ID是“3”。
类似地,参照图12文档B的重构的结构化数据,通过从具有存储槽ID=4的节点“名”向上地跟随所述结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第四存储槽中,所述节点“作者”的存储槽ID是“3”。
类似地,参照图12文档B的重构的结构化数据,通过从具有存储槽ID=7的节点“名”向上地跟随所述结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第七存储槽中,所述节点“作者”的存储槽ID是“6”。
因此,所述变量节点$3是从表格1来实例化的,如图35的表格3中所示。也就是,获取作为与变量节点$3相对应的OID的<文档A,3>、<文档B,3>和<文档B,6>。
将给出如何从表格2获取在图35内所示的与变量节点$3相对应的表格4的说明。在图34内的变量节点$3与所述节点“作者”有关。参照图7文档A的重构的结构化数据,通过从具有存储槽ID=5的节点“姓”向上地跟随所述结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第四存储槽中,所述节点“作者”的存储槽ID是“3”。
类似地,参照图12文档B所重构的结构化数据,通过从具有存储槽ID=8的节点“姓”向上地跟随所述结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第七存储槽中,所述节点“作者”的存储槽ID是“6”。
因此,所述变量节点$3是从表格2来实例化的,如图35的表格4中所示。也就是,获取作为与变量节点$3相对应的OID的数据项<文档A,3>和<文档B,6>。
(4)如上述项(2)和(3)所描述的,所述变量节点$3是以不同方式实例化的,如表格3和4所示。随后联接表格3和4。特别地,由于表格3和4包含公共OID<文档A,3>和<文档B,6>。因此,获取了如图35所示的包含这些OID的表格5。
(5)由于实例化了所述变量节点$4、$5和$3,执行结构扫描以实例化与比这些变量节点更高等级的变量节点$2(“书”)相对应的元素。
首先,在OID<文档A,3>上执行如图33所示的结构扫描。特别地,参照图7文档A所重构的结构化数据,规定了作为具有存储槽ID=3的节点“作者”的更高级节点的节点“书”。所述节点“书”的存储槽ID是“0”,也就是,所述节点“书”是所述结构化数据的根节点。
随后,在OID<文档B,6>上执行如图33所示的结构扫描。特别地,参照图12文档B的重构的结构化数据,规定了作为具有存储槽ID=6的节点“作者”的更高级节点的节点“书”。所述节点“书”的存储槽ID是“0”,也就是,所述节点“书”是所述结构化数据的根节点。
因此,实例化了所述变量节点$2,如图35的表格6中所示。也就是,获取了作为与变量节点$2相对应的OID的<文档A,0>和<文档B,0>。
OID<文档A,0>和<文档B,0>是作为搜索结果从所述查询执行单元42输出的。所述结果产生单元46基于作为所述搜索结果获取的OID产生结果数据(见图36)。
图36示出了满足图31中所示的查询数据的结果数据例子。所述结果数据是通过从所述文档对象数据存储装置115读取不低于包含在图36表格6内的OID的OID的节点结构化文档数据的部分或全部来产生的。在图36内所示的结果数据包含所述文档A和B。
如图36所示的这种搜索数据是从所述请求处理单元102发送到作为所述请求者所述客户机201的。所述客户机201在与所述输出单元205结合的显示器上显示所接收的结构化数据。
图37示出了所述查询数据的另一个例子。此查询数据请求搜索包括在元素“书”中的元素“作者”的列表,所述元素“作者”包括各自的元素“姓”,每个元素“姓”包括字符串“Tanaka”。图31的查询数据请求搜索元素“书”的列表,而图37的查询数据请求搜索元素“作者”的列表。
在图37所示查询数据的情况下,获取如图38所示的这种查询图表。
图39是有利于基于图38的查询图表解释搜索处理的视图。
(1)由于所述查询图表包含值比较标记节点、以及所述术语索引功能“contains”,使用如图29所示的这种索引数据对所述字符串“Tanaka”执行索引扫描。结果,实例化了所述变量节点$3(见图39的表格7)。也就是,获取作为与变量节点$3相对应的OID的<文档A,5>和<文档B,8>。
(2)由于实例化了所述变量节点$3,执行结构扫描以实例化属于比这些变量节点更高等级的变量节点$2。
首先,所述文档A和B的结构数据项是从在所述文档A和B之间的差分结构化数据、以及从与附加到所述差分结构化数据的管理信息相对应的公共结构化数据中重构的。
通过从具有存储槽ID=5的节点“姓”向上地跟随图7文档A的结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第四存储槽中,所述节点“作者”的存储槽ID是“3”。
类似地,通过从具有存储槽ID=8的节点“姓”向上地跟随图12文档B的结构化数据、来获取所述节点“作者”。由于这些节点保存在从具有存储槽ID=0的根节点开始数起的第七存储槽中,所述节点“作者”的存储槽ID是“6”。
因此,实例化了所述变量节点$2,如图39的表格3中所示。也就是,获取作为与变量节点$2相对应的OID的数据项<文档A,3>和<文档B,6>。
这两个OID是满足图37所示的查询数据的搜索结果。
所述结果产生单元46通过从所述文档对象数据存储装置115读取不低于包含在图39表格8内的OID的OID的节点的结构化文档数据的部分或全部来产生结果数据。图40所示的所述结果数据包含有属于具有不低于3的存储槽ID的节点(具有存储槽ID=3的节点是第一节点“作者”)的所述文档A的子文档,以及属于具有不低于6的存储槽ID的节点(具有存储槽ID=6的节点是第二节点“作者”)的所述文档B的子文档。
如上所述,在所述实施例中,为了将新的结构化文档数据存储到所述结构化文档DB 111里,获取在公共结构和所述新结构化文档数据的结构之间的差分结构。所述公共结构是指包括在已经保存在所述结构化文档DB 111内的每个结构化文档数据项中、以及包括在所述新结构化文档数据中的公共结构。可以通过使用所述新结构化文档数据的结构、更新已经保存在所述结构化文档DB 111中的每个结构化文档数据项的公共结构,来获取此差分结构。根据所述差分结构排列的所述新结构化文档数据的元素的数组,存储在所述文档对象数据存储装置115中。
在上述实施例中,当存储新的结构化文档数据时,使用所述新结构化文档数据的结构更新所述公共结构。而且,存储所更新的公共结构和所述新结构化文档数据的结构之间的差分结构以及所述新结构化文档数据的元素的数组。因此,可以显著地减少存储有关新结构化文档数据所必须的数据数量。而且,由于所述数组的每个元素的位置与所述差分结构中每个元素的位置对应,可以从所述新结构化文档数据的结构容易地确定任何元素的存储区。
另外,当为了检测所期望的元素(由搜索条件指定)而搜索保存在所述结构化文档DB 111中的结构化文档数据项时,所述结构化文档数据项的结构是从在所述结构化文档数据项的结构和覆盖所述结构化文档数据项的结构以及存储在所述DB 111中的其它结构化文档数据项的结构的公共结构之间的差分结构重构的。从所重构的结构,确定所期望的元素。所述文档对象数据存储装置115存储根据所述差分结构排列的所述结构化文档数据项的元素的数组。在所述数组内的所期望元素的位置信息(存储槽ID)是基于在所重构的结构内的所期望元素的位置来检测的。
如上所述,在所述实施例中,保存在所述结构文档DB 111中的每个结构化文档数据项的结构被重构和遍历、以判断其是否包含期望的元素。而且,可以用少数次数对数据的参考来检测所期望元素的存储区(存储槽ID)。结果,对于结构化文档数据的搜索可以以高速执行。
所述实施例的流程图说明了按照本发明实施例的方法和系统。应当理解所述流程图例图的每个框图、以及所述流程图例图中框图的组合,可以由计算机程序指令来实现。这些计算机程序指令可以加载在计算机或其它可编程设备上、以产生机器,使得运行在计算机或其它可编程设备上的所述指令创建用于实现在所述流程图框图或多个框图内指定的功能的装置。这些计算机程序指令也可能保存在计算机可读的存储器上,其可以直接由计算机或其它可编程设备以特定方式运行,使得保存在所述计算机可读的存储器中的指令产生制品,包括实现在所述流程图框图或多个框图内规定的功能的指令装置。这些计算机程序指令也可以加载在计算机或其它可编程设备上,以引起在计算机或其它可编程设备上执行的一系列操作步骤,以使计算机可编程设备提供产生对于实现在所述流程图框图或多个框图内指定的功能的步骤。
所属领域技术人员将容易想到附加的优点和修改。因此,本发明广义上不局限于在这里所示和描述的细节和典型的实施例。因此,可以在不脱离由所附权利要求及其等同物限定的总的发明构思的精神或范围下,可以进行多种修改。
权利要求
1.一种结构化文档管理设备,包括数据存储装置,其存储多个分别包括多个元素的结构化文档数据项;公共结构存储装置,其存储包括多个包括在所述结构化文档数据项中的结构的公共结构;第一获取单元,其被配置来获取新的结构化文档数据项;更新单元,其被配置来将所述公共结构更新为新的公共结构,该新的公共结构包括所述结构和包括在所述新的结构化文档数据项中的多个结构;第二获取单元,其被配置来获取所述新的公共结构和所述新的结构化文档数据项的结构之间的差分结构;差分结构存储装置,其存储所述差分结构;以及存储单元,其被配置来将所述新的结构化文档数据项的元素的数组存储到所述数据存储装置里,所述数组是基于所述差分结构排列的。
2.根据权利要求1的设备,其中所述第二获取单元被配置来获取所述差分结构,所述差分结构包括指示所述新的公共结构的每个元素是否存在的信息和指示检测到多少次所述新的结构化文档数据项的子结构的信息。
3.根据权利要求1的设备,其中所述存储单元被配置来存储所述数组,指示所述新的结构化文档数据项的每个元素在所述数组中的位置的位置信息是指示所述每个元素的标识符。
4.一种搜索设备,包括存储装置,其存储多个分别包括多个元素的结构化文档数据项;获取单元,其被配置来获取用于搜索包括在所述元素中的期望的元素的搜索条件;以及搜索单元,其被配置来从包括在所述结构化文档数据项中的特定结构化文档数据项中搜索所述期望的元素,所述搜索单元包括重构单元,其被配置来基于所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构,所述公共结构包括在所述结构化文档数据项中的多个结构、还包括所述特定结构化文档数据项的结构;和检测单元,其被配置来从所述重构的结构检测所述期望的元素。
5.根据权利要求4的设备,其中所述存储装置被配置来存储所述特定结构化文档数据项的元素数组,所述数组是基于所述差分结构排列的;并且所述搜索单元被配置来基于所述期望元素在所述重构的结构中的位置,获取指示所述期望元素在所述数组中的位置的位置信息。
6.一种方法,包括将新的结构化文档数据项存储到存储装置里,该存储装置存储有多个分别包括多个元素的结构化文档数据项;获取包括多个结构的公共结构,所述多个结构包括在所述结构化文档数据项和所述新的结构化文档数据项中;获取所述公共结构和所述新的结构化文档数据项的结构之间的差分结构;以及将所述新的结构化文档数据项的元素的数组存储到所述存储装置里,所述数组是基于所述新的差分结构排列的。
7.一种方法,包括从包括在多个分别包括多个元素的结构化文档数据项中的特定结构化文档数据项中搜索期望的元素;基于所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构,所述公共结构包括在所述结构化文档数据项中的多个结构,还包括所述特定结构化文档数据项的结构;以及从所述重构的结构检测所述期望的元素。
8.根据权利要求7的方法,还包括基于所述期望元素在所述重构结构中的位置,来获取指示所述期望元素在数组中的位置的位置信息,所述数组是由基于所述差分结构排列的所述特定结构化文档数据项的元素形成的。
9.一种存储在由计算机读取的媒质上的程序,所述程序包括用于指示所述计算机存储多个分别包括多个元素的结构化文档数据项的装置,新的结构化文档数据项通过所述程序的指令被存储;用于指示所述计算机获取包括多个结构的公共结构的装置,所述多个结构包括在所述结构化文档数据项和所述新的结构化文档数据项中;用于指示所述计算机获取所述公共结构和所述新的结构化文档数据项的结构之间的差分结构的装置;以及用于指示所述计算机将所述新的结构化文档数据项的元素的数组存储到所述存储装置里的装置,所述数组是基于所述新的差分结构排列的。
10.一种存储在由计算机读取的媒质上的程序,所述程序包括用于指示所述计算机存储多个分别包括多个元素的结构化文档数据项的装置,所述程序用作从包括在所述结构化文档数据项中的特定结构化文档数据项中搜索期望的元素的搜索设备;用于指示所述计算机基于在所述特定结构化文档数据项的结构和公共结构之间的差分结构,来重构所述特定结构化文档数据项的结构的装置,所述公共结构包括在所述结构化文档数据项中的多个结构,还包括所述特定结构化文档数据项的结构;以及用于指示所述计算机从所述重构的结构检测所述期望元素的装置。
全文摘要
本发明涉及结构化文档管理设备、搜索设备、存储和搜索方法及程序。一种结构化文档管理设备,包括存储有多个分别包括多个元素的结构化文档数据项的数据存储器;存储包括在所述结构化文档数据项内的多个结构的公共结构的公共结构存储器;被配置来获取新的结构化文档数据项的第一获取单元;被配置来将公共结构更新为包括所述结构和包括在所述新结构化文档数据项内的多个结构的新公共结构的更新单元;被配置来获取所述新公共结构和所述新结构化文档数据项的结构之间的差分结构的第二获取单元;存储差分结构的差分结构存储器;以及被配置来将新的结构化文档数据项的元素的数组存储到数据存储器里的存储单元,所述数组是基于差分结构排列的。
文档编号G06F17/30GK1722138SQ200510084628
公开日2006年1月18日 申请日期2005年7月15日 优先权日2004年7月15日
发明者服部雅一 申请人:株式会社东芝
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1