SPARQL更新RDF / XML的最小差异?

时间:2016-09-28 09:47:48

标签: sparql rdf owl

我的RDF / OWL本体被版本化为git存储库中的RDF / XML文件,我通常在文本编辑器中进行编辑,但我计划进行一次手动操作时间过长的重构,而单独使用正则表达式是不可能的

具体来说,我想根据对象的类将一个泛型属性拆分为两个更具体的属性。

例如

:Alice :responsibleFor :ACME.
:Bob :responsibleFor :Cooking.

应该成为

:Alice :responsibleForCompany :ACME.
:Bob :responsibleForTask :Cooking.

我对一般情况的答案感兴趣,不仅仅是针对这个特定的属性重构。

我的想法是将文件加载到Virtuoso Triple Store中,使用SPARQL Update查询重构属性,然后将其导出为RDF / XML文件。问题是这不会保留顺序和格式,这会混淆git并使用旧历史记录,例如撤消旧提交,这是不可能的。

有没有办法直接使用文件结构以尽可能少地生成差异?

2 个答案:

答案 0 :(得分:3)

如果您要使用SPARQL更新进行更改,我不会担心撤消提交的git历史记录;那些更新查询成为你的差异。某些查询很容易被反转以撤消更改,但是,如果您有本体的基本版本,则应用除N个最新更新之外的所有更新将有效地撤消N个提交。

这是我们多年来一直使用的策略,效果很好。

答案 1 :(得分:1)

迈克尔的答案是一个很好的解决方案,但如果您确实希望坚持使用git历史记录,我建议您切换到不同的语法格式。 RDF / XML,即XML(即多行上的嵌套元素),对于逐行差异而言是众所周知的麻烦,特别是因为编写XML的工具可以决定完全重新排列块(RDF / XML元素没有规定的顺序)语法级别,并且很难执行这样的任何事情)。

切换到基于行的语法格式,如N-Triples或N-Quads,并在从Virtuoso导出时强制执行规范排序(应该可以使用带有ORDER BY子句的SPARQL查询作为出口机制)。