2 个不稳定发布
0.2.0 | 2023年1月3日 |
---|---|
0.1.0 | 2022年12月19日 |
#15 in #diffing
140KB
3K SLoC
natural-xml-diff
natural-xml-diff
包实现了一种差异算法,旨在在两个XML文档之间生成正确且可读的差异。
算法
该库实现的算法基于论文"在XML中跟踪和检测变化的桥梁"。它还由基于Java的jndiff库实现。
正在进行中
这仍然是一个正在进行中的项目!
致谢
结构化差异
让我们考虑以下XML文档,摘自“桥梁”论文
<?xml version="1.0"?>
<book>
<chapter>
<title>Text 1</title>
<para>Text 2</para>
</chapter>
<chapter>
<title>Text 4</title>
<para>Text 5</para>
</chapter>
<chapter>
<title>Text 6</title>
<para>Text 7<img/>Text 8</para>
</chapter>
<chapter>
<title>Text 9</title>
<para>Text 10</para>
</chapter>
<chapter>
<para>Text 11</para>
<para>Text 12</para>
</chapter>
</book>
我们将称之为“文档A”,差异的“之前”。以下是“之后”,“文档B”
<?xml version="1.0"?>
<book>
<chapter>
<para>Text 2</para>
</chapter>
<chapter>
<title>Text 4</title>
<para>Text 25</para>
<para>Text 11</para>
</chapter>
<chapter>
<title>Text 6</title>
<para>Text 7<img/>Text 8</para>
</chapter>
<chapter>
<title>Text 9</title>
<para>Text 10</para>
</chapter>
<chapter>
<para>Text 12</para>
</chapter>
</book>
让我们将两者都表示为带编号节点的树(根节点,0,未显示)。以下是文档A
graph TD;
1[1 book]-->2
2[2 chapter]-->3
2-->5
3[3 title]-->4
4[4 Text 1]
5[5 para]-->6
6[6 Text 2]
1-->7
7[7 chapter] --> 8
8[8 title] --> 9
9[9 Text 4]
7 --> 10
10[10 para] --> 11
11[11 Text 5]
1 --> 12
12[12 chapter] --> 13
13[13 title] --> 14
14[14 Text 6]
12-->15
15[15 para] --> 16
15 --> 17
15 --> 18
16[16 Text 7]
17[18 img]
18[19 Text 8]
1 --> 19
19[19 chapter]
19 --> 20
20[20 title] --> 21
21[21 Text 9]
19 --> 22
22[22 para] --> 23
23[23 Text 10]
1 --> 24
24[24 chapter] --> 25
25[25 para] --> 26
26[26 Text 11]
24 --> 27
27[27 para] --> 28
28[28 Text 12]
维护测试
一些测试使用test_generator
从testdata
目录生成测试。但是,该目录中的新测试不会自动获取;您必须强制重新编译运行测试的.rs
文件以实现此目的。您可以通过在包含test_generator
的每个.rs
文件中进行非显著空白编辑并保存来实现。我希望有一个更好的解决方案。
依赖关系
~4MB
~73K SLoC