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

SPARQL更新RDF/XML的最小差异?,sparql,rdf,owl,Sparql,Rdf,Owl,我的RDF/OWL本体在git存储库中以RDF/XML文件的形式进行版本控制,我通常在文本编辑器中编辑该存储库,但我正在计划一个重构,手动重构需要花费太长时间,仅使用正则表达式是不可能的 具体来说,我想根据对象的类将泛型属性拆分为两个更具体的属性 比如说 :Alice :responsibleFor :ACME. :Bob :responsibleFor :Cooking. 应该成为 :Alice :responsibleForCompany :ACME. :Bob :responsibleF

我的RDF/OWL本体在git存储库中以RDF/XML文件的形式进行版本控制,我通常在文本编辑器中编辑该存储库,但我正在计划一个重构,手动重构需要花费太长时间,仅使用正则表达式是不可能的

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

比如说

:Alice :responsibleFor :ACME.
:Bob :responsibleFor :Cooking.
应该成为

:Alice :responsibleForCompany :ACME.
:Bob :responsibleForTask :Cooking.
我也对一般情况的答案感兴趣,而不仅仅是对这个特定的属性重构

我的想法是将文件加载到Virtuoso三重存储中,使用SPARQL更新查询重构属性,然后将其导出回RDF/XML文件。问题是这样做不会保持顺序和格式,这会混淆git,使旧的历史无法使用,例如撤消旧的提交


有没有一种方法可以直接使用文件结构,以尽可能少地产生差异?

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


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

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


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

Michael的答案是一个很好的解决方案,但如果您确实希望坚持使用git历史记录,我建议您切换到不同的语法格式。RDF/XML是XML(即多行上的嵌套元素),对于逐行差异来说是出了名的麻烦,特别是因为编写XML的工具可以决定完全重新排列块(RDF/XML元素在语法级别上没有规定的顺序,并且很难执行类似的操作)


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

Michael的答案是一个很好的解决方案,但是如果您确实希望坚持使用git历史记录,我建议您切换到不同的语法格式。RDF/XML是XML(即多行上的嵌套元素),对于逐行差异来说是出了名的麻烦,特别是因为编写XML的工具可以决定完全重新排列块(RDF/XML元素在语法级别上没有规定的顺序,并且很难执行类似的操作)


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

这是一个好主意,但不幸的是不适用于我们的情况,因为我们有时使用外部工具来执行更改,而这些更改的查询不会被记录下来。这是一个好主意,但不幸的是不适用于我们的情况,因为我们有时使用外部工具来执行更改,而这些更改的查询不会被记录下来。