SPARQL 更新 RDF/XML 的最小差异?
SPARQL Update minimal diff for RDF/XML?
我的 RDF/OWL ontology 在 git 存储库中被版本化为 RDF/XML 文件,我通常在文本编辑器中编辑它,但我正在计划重构它手动会花费太长时间,而仅使用正则表达式是不可能的。
具体来说,我想根据对象的 class 将通用 属性 拆分为两个更具体的。
例如
:Alice :responsibleFor :ACME.
:Bob :responsibleFor :Cooking.
应该变成
:Alice :responsibleForCompany :ACME.
:Bob :responsibleForTask :Cooking.
我也对一般情况的答案感兴趣,而不仅仅是针对这个特定的 属性 重构。
我的想法是将文件加载到 Virtuoso 三重存储中,使用 SPARQL 更新查询重构 属性,然后将其导出回 RDF/XML 文件。问题是这不会保持顺序和格式,这会混淆 git 并使旧历史的使用成为不可能,例如撤消旧提交。
有没有办法直接使用文件结构来产生尽可能小的差异?
如果您要使用 SPARQL 更新来进行更改,我不会太担心 git 撤消提交的历史记录;这些更新查询成为您的差异。有些查询很容易反转以撤消更改,但是,如果您有 ontology 的基础版本,应用除 N 个最新更新以外的所有更新将有效地撤消 N 次提交。
这是我们多年来一直使用的策略,效果很好。
Michael 的回答是一个很好的解决方案,但如果您确实希望坚持使用 git 历史记录,我建议您切换到不同的语法格式。 RDF/XML,即 XML(即多行嵌套元素),对于逐行差异来说是出了名的麻烦,特别是因为编写 XML 的工具可以决定完全重新排列块( RDF/XML 元素在语法级别没有规定的顺序,而且很难强制执行这样的事情)。
切换到基于行的语法格式,如 N-Triples 或 N-Quads,并在从 Virtuoso 导出时强制执行规范排序(应该可以通过使用带有 ORDER BY
子句的 SPARQL 查询来实现作为导出机制)。
我的 RDF/OWL ontology 在 git 存储库中被版本化为 RDF/XML 文件,我通常在文本编辑器中编辑它,但我正在计划重构它手动会花费太长时间,而仅使用正则表达式是不可能的。
具体来说,我想根据对象的 class 将通用 属性 拆分为两个更具体的。
例如
:Alice :responsibleFor :ACME.
:Bob :responsibleFor :Cooking.
应该变成
:Alice :responsibleForCompany :ACME.
:Bob :responsibleForTask :Cooking.
我也对一般情况的答案感兴趣,而不仅仅是针对这个特定的 属性 重构。
我的想法是将文件加载到 Virtuoso 三重存储中,使用 SPARQL 更新查询重构 属性,然后将其导出回 RDF/XML 文件。问题是这不会保持顺序和格式,这会混淆 git 并使旧历史的使用成为不可能,例如撤消旧提交。
有没有办法直接使用文件结构来产生尽可能小的差异?
如果您要使用 SPARQL 更新来进行更改,我不会太担心 git 撤消提交的历史记录;这些更新查询成为您的差异。有些查询很容易反转以撤消更改,但是,如果您有 ontology 的基础版本,应用除 N 个最新更新以外的所有更新将有效地撤消 N 次提交。
这是我们多年来一直使用的策略,效果很好。
Michael 的回答是一个很好的解决方案,但如果您确实希望坚持使用 git 历史记录,我建议您切换到不同的语法格式。 RDF/XML,即 XML(即多行嵌套元素),对于逐行差异来说是出了名的麻烦,特别是因为编写 XML 的工具可以决定完全重新排列块( RDF/XML 元素在语法级别没有规定的顺序,而且很难强制执行这样的事情)。
切换到基于行的语法格式,如 N-Triples 或 N-Quads,并在从 Virtuoso 导出时强制执行规范排序(应该可以通过使用带有 ORDER BY
子句的 SPARQL 查询来实现作为导出机制)。