用来比较两个计算机文件的方法及系统的制作方法

文档序号:6412844阅读:113来源:国知局
专利名称:用来比较两个计算机文件的方法及系统的制作方法
技术领域
本发明一般涉及比较两个均能被分析成DOM(文件对象模型)树的文件。
背景技术
传统的文件比较程序在比较两个文件时不考虑这两个文件的内容的含义。也就是说,这些比较程序将这两个文件看作原始数据,对它们一个字节一个字节地比较,报告它们的差异。当这些文件与例如XML(可扩展标记性语言)这样的面向对象的计算机程序有关时,这种传统方式文件比较的输出将是庞大的。而且这些输出实质上是不可阅读的,并且因此实质上是没用的。
XML是一种相对较新的文档格式,设计来为万维网提供结构信息。XML文档格式在表示文档结构的标签中嵌入内容。XML提供给用户表达文档结构的规则的能力,这种规则统称为XML模式(schema)。XML文件主要包括用于描述数据的元素和属性。因为XML被设计来描述数据、格式项(例如空格、制表符、换行字符,甚至是用户不太关注的元素和属性在XML文件中出现的实际顺序。在比较XML文件时,传统的文件比较应用不考虑这些文件的语法和语义。因此,格式差异和元素以及属性出现顺序的差异都将被报告。这类″差异″报告通常数量很大,但是对于值得做的文件比较来说没有价值。而且它们使得用户难以在庞大的数据中识别出有意义的差别报告,也就是说,有意义的差异被″埋在″不相关的差异之中。
因此,需要有一种方法,用于从句法上和语义上比较两个文档,以报告它们之间的有意义差异,即使当不相关的差异,例如包括于其中的元素的顺序,也存在于这两个文档之间。

发明内容
本发明涉及比较两个均能被分析成DOM(文件对象模型)树的文件。虽然下述论述使用XML文件作为例子,但本发明并不因此受限制,其它计算机文档,例如C++以及Java程序,也应当能够通过本发明进行比较。
在下文的论述中,其中一个被比较的文档被指定为″源文档″,另一个文档则被指定为″目标文档″。分别为这些文档创建一个DOM树结构。然后每个树结构被转换成包括节点的叶路径数组,分别是源数组以及目标数组。然后源数组中的每一个叶路径与目标数组中的叶路径进行比较,识别出完全匹配的叶路径。以这种方式进行的叶路径的创建和匹配致使元素和属性在文档中的出现顺序变得不相关,因此克服了现有技术中显著的问题。
比较叶路径时,如果路径中的全部节点都具有一样的模式和值(value),那么就认为叶路径是完全匹配的。如果没有为源叶路径找到一个完全匹配,则尝试去识别出其对应节点可能具有相同模式但不同值的松散匹配的叶路径。在这种松散匹配的叶路径中,可能既有完全匹配节点也有松散匹配节点。
一旦所有的源和目标叶路径都被比较,并且本发明已经识别并标志出所有在这两个文档中的完全匹配和松散匹配的叶路径,系统就输出比较结果。在本发明的各种实施方案中,源文档中所有的未标记的节点被报告为″已删除节点″—其存在于源文档中但是不在目标文档中。类似地,目标文档中所有的未标记的节点被报告为″已添加节点″--其存在于目标文档中但是不在源文档中。在源文档和目标文档之间松散匹配的叶路径被报告为″已修改节点″。


附图1A是一个XML文件的实例;附图1B是与附图1A中XML文件相对应的文件目标模型(DOM);附图2是与附图1B中DOM模型相对应的叶路径表;附图3通过流程图举例描述了导出目标比较候选列表的步骤;
附图4通过流程图举例描述了识别完全匹配的目标叶路径的步骤;附图5通过流程图举例描述了对实现完全匹配的源树节点和目标树节点进行标记的步骤;附图6和7通过流程图举例描述了对″模式匹配的″以及″完全匹配的″源树节点的识别及报告的步骤;附图8A和8B是使用本发明的一个实施方案的示例性XML文件;附图9A和9B是分别与附图8A和8B相对应的DOM模型;附图10A和10B是分别与附图9A和9B的DOM模型相对应的叶路径表;附图11A和11B举例说明在每一个源和目标DOM模型中如何识别完全匹配的叶路径;附图12A和12B举例说明如何在每一个适当的叶路径表中识别出相应叶路径中相匹配的节点;附图13A,13B,14A,14B,15A,15B,16A,16B,17A,17B,18A和18B更进一步地举例说明如何循环地应用本发明的步骤,产生额外的叶路径″完全匹配″,它们在DOM模型和叶路径表中被识别;附图19A和19B举例说明没有实现完全匹配的源和目标叶路径,以及将要对其应用一种″模式匹配″算法;附图20A,20B,21A和21B举例说明了″模式匹配″算法中的一个中间步骤,在其中DOM模型和叶路径表中的完全匹配的节点已经被识别出来;附图22A和22B举例说明了在DOM模型中″模式匹配″的识别;以及附图23举例说明本发明的一个实施方案,其中文件比较的结果是通过对原始的XML文件的注解显示的。
具体实施例方式
本发明描述了一种用于对两个均能被分析成DOM(文件对象模型)树的文档进行比较的系统及方法。这种文档中除数据内容之外还包括本来已定义的结构。XML文件,C++程序,以及Java程序都是这类文档的实例。以下论述将依据本发明在XML文档方面的应用来描述本发明,但本发明并不受限于此。任何一个能够被分析成DOM树的文档都能够通过这里所述的发明与一个类似的文档进行比较。
附图1A是一个XML文档的实例。附图1B是能通过现有技术中众所周知的分析器容易地得到的一个对应的DOM树。这种分析器的实例可在http//xml.apache.org中找到。在树结构里各种格式项,例如空格,制表符以及换行符均被移除。
对于每一个要对比的文档,它的DOM树都被转换成包括节点的叶路径。附图2举例说明了当附图1B中的DOM树被这样转换后所得到的结果。特别是,6条叶路径通过2到4个节点的路径深度列出。在比较源文档和目标文档时,为每一个文档创建相应的叶路径表。也就是说,创建源表,其表项对应于源文档的叶路径(在这里这些表项指的是″源叶路径″)。类似地,创建目标表,其表项是对应于目标文档的叶路径(在这里这些表项指的是″目标叶路径″)。
在附图3到5所描述的本发明的实施方案中,逐一地和顺序地考察存在于源表中的源叶路径以确定在目标叶路径中是否存在相应的完全匹配。如附图3中所例举的流程图一样,在匹配过程中第一步是创建一个″目标候选列表″,每一个目标候选列表项包括与当前所考察的源叶路径具有相同深度的目标叶路径(目标候选列表中的表项在这里被称为″候选叶路径″)。然后如附图4所述比较目标候选列表中的表项,其中将源叶路径的每一个节点与候选叶路径的每一个节点进行比较。当XML标签,所有的属性名称,以及所有属性值都是一样时,在这些节点之间发生了完全匹配。对于每一个候选叶路径,如果在其节点与源叶路径的相应节点之间没有产生完全匹配,该叶路径则被从候选列表中移除。
对于每一个源叶路径来说,发现完全匹配的尝试会产生两个结果找到完全匹配(如附图4中的圆圈3所示)或者设置一个″需要模式匹配″标志。在前一种情况下,源路径和匹配的目标叶路径中的每个节点被标记为已匹配,如附图5中所示。
如附图3到5中描述的本发明的实施方案所示,对源表中的源叶路径进行递归搜索,以得到与目标叶路径的完全匹配。一旦对源表中所有源叶路径表项完成了这个查找过程,则任何存在的″模式匹配″即能被确定。仅考察源表和目标表之间的未匹配叶路径以确定这些表的项之间的任何″模式匹配″。附图6和7详细地举例说明了这个过程是如何进行的。通常,松散匹配的叶路径被识别,其中来自源叶路径表中一个表项的至少一个节点与一个目标叶路径表项中的相应节点具有相同的模式和不同的值。在这些松散匹配的叶路径中,可能既有完全匹配的节点也有松散匹配的节点。如果被发现,则叶路径中所有完全匹配的节点都被标记为完全匹配节点,并且所有模式匹配的节点都被标记为松散匹配节点。
一旦模式匹配过程完成,文件比较结果就被输出给用户。特别地,所有与目标文档比较后没有被标记为″已匹配″或″已模式匹配″的源树节点被报告为已删除。类似地,所有与源文档比较后没有被标记为″已匹配″或″已模式匹配″的目标树节点被报告为″添加的″节点。此外,所有已经被标记为已模式匹配的节点被报告为已修改。
发明的示例性应用以上论述及附图3-7已经讨论了本发明在对比两个文档时的操作。为了更进一步地举例说明本发明,对两个文档进行对比,即附图8A中描述的源XML文档和附图8B中描述的目标XML文档。
各个XML文件被分析以创建附图9A和9B中所描述的树形结构,即DOM模型。遍历这些树型结构以得到所有可能的叶路径,就如附图10A和10B中分别所示的那样。特别地,得到了六个源叶路径和七个目标叶路径。
第一源叶路径与七个目标叶路径相对比。所有与第一个源叶路径具有相同节点数目的目标叶路径被放置在一个目标比较列表中第一源叶路径项
#1

叶路径深度=2目标比较候选列表(仅包括一个表项)#1

叶路径深度=2于是系统·将源叶路径中的第一节点(#document)和目标比较候选列表中的节点进行比较。
·如果存在完全匹配,则将它们保留在目标比较候选列表中。否则,将它们删除。
作为第一节点成功匹配的结果,目标比较候选列表保留了#1

叶路径深度=2于是系统·将源叶路径中的第二节点(#comment)和目标比较候选列表中的节点进行比较。
·如果存在完全匹配,将它们保留在目标比较候选列表中。否则,将它们删除。
作为成功匹配第二节点的结果,目标比较候选列表中再一次保留了
#1

叶路径深度=2于是系统·将源叶路径标记为″已匹配″。
·将比较候选列表中的第一目标叶路径标记为″已匹配″。
·检查是否所有适合的源节点和目标节点被标记为″已匹配″--具有相同深度的所有已匹配的节点。
这个过程的结果在关于DOM模型的附图11A和11B以及关于叶路径表的附图12A和12B中被举例说明。特别的,用交叉排线画出阴影的节点表示它们已经匹配。
以类似方式,第二源叶路径与所有目标叶路径进行比较以求发现完全匹配的目标叶路径。显然通过附图10A和10B的叶路径表可直观地发现存在这样的完全匹配--两个表中的第2行出现的叶路径是完全相同的。这个匹配被识别并且相应的节点被象附图13A,13B 14A和14B中表示的那样被标记。也就是说,这些附图现在表明所发现的全部累积的完全节点匹配(也就是,它们包括附图11A,11B,12A,和12B中已经获得和记录的结果)。
类似地,第三源叶路径与所有目标叶路径进行比较并发现完全匹配。匹配叶节点的累积结果通过附图15A,15B,16A,和16B描述。
在比较第四源叶路径时,没有发现完全匹配。系统会将这个叶路径标记为需要“模式匹配”检索,这种检索将在所有完全匹配的确定完成后进行。
第五源叶路径与所有目标叶路径进行的比较产生完全匹配的目标叶路径。完全匹配的节点的累积结果在附图17A 17B,18A,和18B中示出。
第六源叶路径的比较没有发现完全匹配的目标叶路径,并因此设置“需要模式匹配”标志。因为全部的源叶路径都被处理过,如附图6和7中所例举的实际模式匹配程序被应用于这个实例。特别地,为每一个未匹配的源叶路径和未匹配的目标叶路径创建一个新表。这些分别在附图19A和19B中说明。
如同在完全匹配算法中一样,用于在目标叶路径表中进行模式匹配的表中的每一个源叶路径均被顺序处理。只有有关的源叶路径需要与具有相同深度和相同数量在先匹配节点的目标叶路径进行比较。也就是说,对于出现在表中的第一源叶路径,只有深度为5和匹配计数为2的目标叶路径需要被考察。相应地,创建具有那些属性的目标叶路径的目标比较候选列表。在这个实例中,只有目标叶路径表的第二和第三表项能成为这种候选。
如同在附图7里举例说明的,实际的比较首先从确定那些被标识为在先匹配的节点实际上与所考虑的源叶路径和候选目标叶路径的相应节点完全匹配开始。如果它们不匹配,候选者被从候选列表中移除。因此,在这个实例中,在比较第一个源叶路径和每一个候选目标叶路径(也就是,附图19B的第二和第三叶路径)时,比较失败并且所有的候选者被从列表中移除。因此,对于包括在附图19A中的第一源叶路径,没有找到模式匹配。
通过对第二源叶路径应用相同的过程,最初确定只有第一目标叶路径需要成为候选者(因为只有它具有深度5和匹配计数3)。下一步,如前所述,是对第二源叶路径的前三个节点和第一目标叶路径的前三个节点进行比较。这确定每个这样的节点都有一个完全匹配的对应节点。然后进行检查以确定是否候选目标叶路径的其余节点(也就是,深度为4和5的节点)与所评估的第二源叶路径中的节点模式匹配。在本实例中它们就是这样匹配的。如前所述,如果对于一个具体候选没有发现这样的匹配,它被从候选列表中被移除。
如果表项存在于候选列表中,将对每个候选的深度为4和5的节点进行检查,以确定他们是完全匹配的还是模式匹配的,并相应地对这些节点进行标记。在本实例中,确定源叶路径中的第四节点完全匹配于每个候选目标叶路径的第四节点(这里,仅仅出现了一个候选)。附图20A,20B,21A和21B举例说明了这种确定做完后这两个文件比较的累积结果。相应第五节点的类似比较表明不存在完全匹配。因此,这个第五节点被标记为″已模式匹配″,来表示存在一个修改的节点项(在本实例中,″#test(6.0)″与″#text(6.0)″相对比)。附图F22A和22B举例说明了源DOM模型和目标DOM模型的最终比较结果,其中垂直阴影表示发生了一个模式匹配。
本发明的可选实施方案考虑到两个文档的比较结果的各种输出格式。由于本发明是作为软件开发工具来应用的,所以所注释的DOM模型形式的输出(例如附图22A和22B)对于用户来说可能是特别有用的。类似地,包括所注释的源叶路径表的输出(例如附图18A和18B)可能具有价值。附图23举例说明了另一种输出格式,其中比较结果表现为对这两个原始文档的注释(annotation)。在这个实施方案中,源文档中所有未被标记的节点是黑体的,从而表示相对于目标文档,它们已经被删除。类似地,目标文档中所有未被标记的节点是黑体的,从而表示相对于源文档,它们已经被添加。通过在每个文件的节点下加下划线,松散匹配的叶路径被报告为在源和目标之间的″已修改节点″。
上述简单的实例利用短的、不复杂的文档的比较来举例说明本发明的各个方面。在比较更加真实的文件时,输出结果将产生更多的报告差异。本发明其它的实施方案允许使用一个过滤装置,用于报告那些差异以允许用户将输出限于特定目的,例如,为了发现想要的结果但没有被包括这些文档之间的全部差异的报告所淹没。因此例如,可设置过滤器输出以将报告限于文档间仅与编址为″class name″的节点有关的差异。
以上所述步骤能够通过标准的众所周知的编程技术来实施。以上所述实施方案的新颖性不在于具体编程技术,而在于使用所描述的步骤得到所描述的结果。体现本发明的软件编程代码一般保存在一些类型的永久存储器中,例如其中存储要比较的文档的工作站的永久存储器。在客户机/服务器环境下,这种软件编程代码可存储在与服务器相连的存储器中。软件编程代码可在任何种类的已知介质上体现,以用于例如磁盘,或硬盘驱动器,或CD-ROM的数据处理系统。这些代码可被分布在这些介质上,或为了使其它计算机系统的用户能够使用,可从一个计算机系统的内存或存储器经过一些类型的网络到所述其它计算机系统地,被分配给用户。用于在物理媒介上体现软件程序代码和/或通过网络分配软件代码的技术和方法是为大家所熟知的,在这里将不再作进一步的讨论。
可以理解,说明的每个要素以及这些要素的组合都能通过基于通用和/或专用硬件、执行指定功能或者步骤的系统,或者通过通用和/或专用硬件和计算机指令的组合来实施。
这些程序指令可被提供给处理器用来制造一个机器,因此这些在处理器上运行的指令建立了用于实现说明中所描述功能的方法。计算机程序指令可能被处理器运行来产生一系列通过处理器执行的操作步骤,用来产生一个计算机可实施的处理,因此在处理器上运行的指令为实施例证中所描述的功能提供步骤。相应地,附图1-23支持实现所述功能的方法的组合,实现所述功能的步骤的组合,以及实现所述功能的程序指令工具。
尽管已经用各种实施方案对本发明进行了描述,但是更多的变化和修改可建议给本领域技术人员,并且本发明旨在包括这些变化和修改,其落入后附的权利要求所保护的范围。
权利要求
1.一种用于对源文档和目标文档进行比较的方法,其中每个文档都能被分析成一个DOM(文件对象模型)树,所述方法包括以下步骤将源文档分析成一个源DOM树以及将目标文档分析成一个目标DOM树;由源DOM树创建一个源叶路径表并且由目标DOM树创建一个目标叶路径表,每个表包括包含节点的叶路径;确定与源叶路径表中的表项完全匹配的目标叶路径表中的表项,以及对于每一个发现的匹配,将相应的源和目标叶路径标记为的完全匹配的;对那些没有被标记为完全匹配的叶路径,确定在源叶路径表中存在的那些叶路径和目标叶路径表中存在的那些叶路径之间是否存在模式匹配;以及将这些文档的比较输出给用户。
2.如权利要求1所述的方法,其中所述确定步骤还包括以下步骤为源叶路径表中的每个表项创建一个候选目标叶路径列表,该候选目标叶路径列表具有目标叶路径表中与被选择来匹配的源叶路径表项具有相同的深度的所有表项;搜索候选目标叶路径列表以得到与选定的源叶路径表项完全匹配的叶路径。
3.如权利要求2所述的方法,其中所述搜索步骤还包括步骤一旦在一个表项的相应节点和源叶路径节点之间没有发生匹配,则立即将该表项从候选目标叶路径列表中移除。
4.如权利要求2所述的方法,还包括步骤在包括在被标记为完全匹配的源及目标叶路径中的每个节点的所有相应节点上设置已匹配节点指示。
5.如权利要求4所述的方法,其中所述确定步骤仅考虑使每个源叶路径表项与那些具有相同深度和匹配计数的目标叶路径进行模式匹配。
6.如权利要求1所述的方法,其中所述输出步骤包括在源文档和目标文档上提供注释来表示这两个文档的比较结果。
7.如权利要求1所述的方法,其中所述输出步骤包括在源DOM树和目标DOM树上提供注释来表示这两个文档的比较结果。
8.如权利要求1所述的方法,其中所述输出步骤包括在源叶路径表和目标叶路径表上提供注释来表示这两个文档的比较结果。
9.如权利要求1所述的方法,其中所述输出步骤还包括一个过滤步骤,用于将输出的文档比较限制为由用户选择的节点比较。
10.一种用于对源文档和目标文档进行比较的系统,其中每个文档都能被分析成一个DOM(文件对象模型)树,所述系统包括用于将源文档分析成一个源DOM树以及将目标文档分析成一个目标DOM树的装置;用于收源DOM树创建一个源叶路径表的装置,以及用于由目标DOM树创建一个目标叶路径表的装置,每个表均包括包含了节点的叶路径;用于确定与源叶路径表中的表项完全匹配的目标叶路径表中的表项,以及对于每一个发现的匹配,将相应的源和目标叶路径标记为的完全匹配的装置;用于对那些没有被标记为完全匹配的叶路径,确定在源叶路径表中存在的那些叶路径和目标叶路径表中存在的那些叶路径之间是否存在模式匹配的装置;以及用于将这些文档的比较输出给用户的装置。
11.如权利要求10所述的系统,其中所述用于确定的装置还包括用于为源叶路径表中的每个表项创建一个候选目标叶路径列表的装置,该候选目标叶路径列表具有目标叶路径表中与被选择来匹配的源叶路径表项具有相同的深度的所有表项;用于搜索候选目标叶路径列表以得到与选定的源叶路径表项完全匹配的叶路径的装置。
12.如权利要求11所述的系统,其中所述用于搜索的装置还包括用于一旦在一个表项的相应节点和源叶路径节点之间没有发生匹配,则立即将该表项从候选目标叶路径列表中移除的装置。
13.如权利要求11所述的系统,还包括用于在包括在被标记为完全匹配的源及目标叶路径中的每个节点的所有相应节点上设置已匹配节点指示。
14.如权利要求13所述的系统,其中所述用于确定的装置仅考虑使每个源叶路径表项与那些具有相同深度和匹配计数的目标叶路径进行模式匹配。
15.如权利要求10所述的系统,其中所述用于输出的装置包括用于在源文档和目标文档上提供注释来表示这两个文档的比较结果的装置。
16.如权利要求10所述的系统,其中所述用于输出的装置包括用于在源DOM树和目标DOM树上提供注释来表示这两个文档的比较结果的装置。
17.如权利要求10所述的系统,其中所述用于输出的装置包括用于在源叶路径表和目标叶路径表上提供注释来表示这两个文档的比较结果的装置。
18.如权利要求10所述的系统,其中所述用于输出的装置还包括一个用于将输出的文档比较限制为由用户选择的节点比较的过滤装置。
19.一种在其中存储了数据的机器可读介质,该数据表示用于比较源文档和目标文档的指令序列,其中每个文档都能被分析成一个DOM(文档对象模型)树,当通过处理器运行时,这些指令序列使处理器执行以下步骤将源文档分析成一个源DOM树以及将目标文档分析成一个目标DOM树;由源DOM树创建一个源叶路径表并且由目标DOM树创建一个目标叶路径表,每个表包括包含节点的叶路径;确定与源叶路径表中的表项完全匹配的目标叶路径表中的表项,以及对于每一个发现的匹配,将相应的源和目标叶路径标记为的完全匹配的;对那些没有被标记为完全匹配的叶路径,确定在源叶路径表中存在的那些叶路径和目标叶路径表中存在的那些叶路径之间是否存在模式匹配;以及将这些文档的比较输出给用户。
20.如权利要求19所述的机器可读介质,其中所述确定步骤还包括以下步骤为源叶路径表中的每个表项创建一个候选目标叶路径列表,该候选目标叶路径列表具有目标叶路径表中与被选择来匹配的源叶路径表项具有相同的深度的所有表项;搜索候选目标叶路径列表以得到与选定的源叶路径表项完全匹配的叶路径。
21.如权利要求20所述的机器可读介质,其中所述搜索步骤中还包括步骤一旦在一个表项的相应节点和源叶路径节点之间没有发生匹配,则立即将该表项从候选目标叶路径列表中移除。
22.如权利要求20所述的机器可读介质,还包括步骤在包括在被标记为完全匹配的源及目标叶路径中的每个节点的所有相应节点上设置已匹配节点指示。
23.如权利要求22所述的机器可读介质,其中所述确定步骤仅考虑使每个源叶路径表项与那些具有相同深度和匹配计数的目标叶路径进行模式匹配。
24.如权利要求19所述的机器可读介质,其中所述输出步骤包括在源文档和目标文档上提供注释来表示这两个文档的比较结果。
25.如权利要求19所述的机器可读介质,其中所述输出步骤包括在源DOM树和目标DOM树上提供注释来表示这两个文档的比较结果。
26.如权利要求19所述的机器可读介质,其中所述输出步骤包括在源叶路径表和目标叶路径表上提供注释来表示这两个文档的比较结果。
27.如权利要求19所述的机器可读介质,其中所述输出步骤还包括一个过滤步骤,用于将输出的文档比较限制为由用户选择的节点比较。
全文摘要
一种对两个文档,例如XML(可扩展的标记性语言)文件进行比较的方法及其系统,其中每个文档都能被分析成一个DOM(文件对象模型)树。每个树结构都被转换成包括节点的叶路径数组。这些数组于是与标志的相应的匹配节点——可能是完全匹配节点或者是模式匹配节点,进行比较。在报告比较结果时,源文档中所有的不匹配的节点被报告为"删除的节点",那就是说,其存在于源文档中而不在目标文档中。类似地,目标文档中所有的不匹配的节点被报告为“添加的节点”,那就是说,其存在于目标文档中而非源文档中。此外,在源和目标文档之间的模式匹配节点被报告为“已修改节点”。
文档编号G06F17/30GK1581170SQ20041005643
公开日2005年2月16日 申请日期2004年8月10日 优先权日2003年8月15日
发明者罗福慧 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1