【发布时间】:2012-03-29 05:12:53
【问题描述】:
我正在编写一个 C 库,它将特定于域的数据解析并序列化为 RDF/XML。在我解析一个文件并再次将其写回后,我希望能够检查内容是否没有更改。
我可以再次解析所有内容,将其写为 NTriples,并逐行比较两个 Ntriples 文件,但一定有更好的方法吧?
谢谢!
【问题讨论】:
标签: c xml-serialization xml-parsing rdf rdflib
我正在编写一个 C 库,它将特定于域的数据解析并序列化为 RDF/XML。在我解析一个文件并再次将其写回后,我希望能够检查内容是否没有更改。
我可以再次解析所有内容,将其写为 NTriples,并逐行比较两个 Ntriples 文件,但一定有更好的方法吧?
谢谢!
【问题讨论】:
标签: c xml-serialization xml-parsing rdf rdflib
您可以使用散列函数(例如 MD5 或 SHA1),但 RDF/XML 以及其他 RDF 序列化格式可以以不同的方式进行序列化,所有这些都对应于 同一个 RDF 图。
此外,如果您使用 Turtle 或 N-Triples 格式,空白节点标签每次都会有所不同。因此,哈希函数可能不是最佳选择。
Graph isomorphism 是一个“有趣”的问题。 ;-)
它不是用 C 编写的,但您可以尝试破译 Apache Jena 在 GraphMatcher.java 中所做的事情。
作为替代方案,正如您所说,如果您没有空白节点,您可以在 N-Triples 中序列化数据,对这些文件进行排序和比较,或者拥有自己的排序数据结构并使用它来代替,避免序列化步骤。
【讨论】:
您可以计算两个文件的强哈希值(例如 MD5 或 SHA1)。如果文件字节对字节相等,则哈希将匹配。
【讨论】: