2

我正在编写一个 C 库,它将特定于域的数据解析和序列化为 RDF/XML。在我解析一个文件并再次写回后,我希望能够检查内容是否没有改变。

我可以再次解析所有内容,将其写为 NTriples,并逐行比较两个 Ntriples 文件,但一定有更好的方法吧?

谢谢!

4

2 回答 2

7

您可以使用散列函数(例如 MD5 或 SHA1),但 RDF/XML 以及其他 RDF 序列化格式可以以不同方式序列化,所有这些都对应于同一个 RDF 图

此外,如果您使用 Turtle 或 N-Triples 格式,空白节点标签每次都会有所不同。由于这个原因,散列函数可能不是最佳选择。

图同构是一个“有趣”的问题。;-)

它不是用 C 编写的,但您可以尝试破译 Apache Jena 在GraphMatcher.java中所做的事情。

作为替代方案,正如您所说,如果您没有空白节点,您可以在 N-Triples 中序列化数据,对这些文件进行排序和比较,或者拥有自己的排序数据结构并使用它来代替,避免序列化步骤。

于 2012-03-12T19:49:57.650 回答
-2

您可以计算两个文件的强散列(例如,MD5 或 SHA1)。如果文件字节对字节相等,则哈希将匹配。

于 2012-03-12T19:13:53.533 回答