如何区分分层数据?

时间:2012-02-06 23:08:02

标签: diff hierarchical-data

是否有任何工具可以区分层次结构?

IE,请考虑以下层次结构:

A has child B.
B has child C.

与之比较:

A has child B.
A has child C.

我想要一个工具,显示C已从B的子节点移动到A的子节点。是否存在任何此类实用程序?如果没有特定的工具,我不反对编写自己的工具,那么适用于这个问题的一些优秀算法是什么?

3 个答案:

答案 0 :(得分:1)

基于Dartmouth的一些研究,Hierarchical-Diff github项目是用于区分层次结构(不是特定的XML,HTML等)的一个很好的通用资源。他们有一个非常广泛的related work列表,从XML差异到配置文件差异到HTML差异。

一般来说,实际上在树形结构上执行差异/补丁是一个相当完善的问题,但以对人类有意义的方式显示这些差异仍然是狂野的西部。当你的数据结构已经具有与HTML一样的语义含义时,这是真实的。

答案 1 :(得分:1)

您可以考虑我们的SmartDifferencer工具。

这些工具以类似diff的方式比较计算机源代码文件。与面向行的diff不同,这些工具根据代码结构(变量名,表达式,语句,块,函数,类等)看到更改为合理的编辑(“移动,插入,删除,替换,复制,重命名”) ),产生对程序员有意义的答案。

这些计算机源代码完全具有您建议的“层次结构”结构;各种构造嵌套。特别是对于您的主题,通常代码块可以嵌套在代码块中。 SmartDifferencer工具使用目标语言准确的解析器将源文本“解构”为这些分层实体。我们有一个XML智能差异器,您可以在其中显然编写嵌套标签。

答案没有被报告为“M的第N个孩子已经移动”,尽管它实际上是通过对解析器生成的解析树进行操作来计算的。相反,它被报告为“第x行的类型的代码片段到col的行已移动/...”

答案 2 :(得分:-1)

答案我的好先生是:Depth-first search,也称为深度优先遍历。您可能会发现Visitor pattern的一些用法。

在处理比较XML树时,如果没有遇到某种实现,就无法摆动死猫。以diffxml为例,以此为例。