用来比较两个计算机文件的方法及系统技术方案

技术编号:2865903 阅读:202 留言:0更新日期:2012-04-11 18:40
一种对两个文档,例如XML(可扩展的标记性语言)文件进行比较的方法及其系统,其中每个文档都能被分析成一个DOM(文件对象模型)树。每个树结构都被转换成包括节点的叶路径数组。这些数组于是与标志的相应的匹配节点--可能是完全匹配节点或者是模式匹配节点,进行比较。在报告比较结果时,源文档中所有的不匹配的节点被报告为“删除的节点”,那就是说,其存在于源文档中而不在目标文档中。类似地,目标文档中所有的不匹配的节点被报告为“添加的节点”,那就是说,其存在于目标文档中而非源文档中。此外,在源和目标文档之间的模式匹配节点被报告为“已修改节点”。

【技术实现步骤摘要】

本专利技术一般涉及比较两个均能被分析成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详细本文档来自技高网...

【技术保护点】
一种用于对源文档和目标文档进行比较的方法,其中每个文档都能被分析成一个DOM(文件对象模型)树,所述方法包括以下步骤:将源文档分析成一个源DOM树以及将目标文档分析成一个目标DOM树;由源DOM树创建一个源叶路径表并且由目标 DOM树创建一个目标叶路径表,每个表包括包含节点的叶路径;确定与源叶路径表中的表项完全匹配的目标叶路径表中的表项,以及对于每一个发现的匹配,将相应的源和目标叶路径标记为的完全匹配的;对那些没有被标记为完全匹配的叶路径,确定在 源叶路径表中存在的那些叶路径和目标叶路径表中存在的那些叶路径之间是否存在模式匹配;以及将这些文档的比较输出给用户。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:罗福慧
申请(专利权)人:国际商业机器公司
类型:发明
国别省市:US[美国]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1