【问题标题】:How to check that two RDF graphs have the same content?如何检查两个 RDF 图是否具有相同的内容?
【发布时间】:2012-03-29 05:12:53
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: c xml-serialization xml-parsing rdf rdflib


    【解决方案1】:

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

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

    Graph isomorphism 是一个“有趣”的问题。 ;-)

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

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

    【讨论】:

    • 嗯,这看起来对于手头的问题来说太难了。 :) 但很高兴知道我没有遗漏一些明显的东西。因为我知道在我的情况下不会有空白节点,所以我会尝试比较三对三。
    • 如果您没有空白节点,您可以使用对三元组进行排序的数据结构,或者如您所说的 N-Triples,然后进行比较。在没有空白节点的情况下,按排序顺序对三元组进行哈希函数也可以。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-05
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-16
      • 2012-11-21
      相关资源
      最近更新 更多