2016-09-28 72 views
1

我的RDF/OWL本體被版本化爲一個git倉庫中的RDF/XML文件,我通常在文本編輯器中進行編輯,但是我正在計劃一個手動時間過長的重構,而這對於正則表達式來說是不可能的。SPARQL爲RDF/XML更新最小差異?

具體而言,我想根據對象的類,在兩個更具體的屬性中拆分通用屬性。

例如

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

應該成爲

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

我很感興趣,對於一般情況下的答案,而不僅僅是這個特定的屬性重構。

我的想法是將文件加載到Virtuoso Triple Store中,使用SPARQL Update查詢重構該屬性,然後將其導出爲RDF/XML文件。問題是這不會保持順序和格式,這會混淆git和使舊的歷史,如撤銷舊的提交,是不可能的。

有沒有辦法直接使用文件結構來產生儘可能小的差異?

回答

1

邁克爾的答案是一個很好的解決方案,但如果你確實想堅持使用git歷史,我建議你切換到不同的語法格式。作爲XML(即多行嵌套元素)的RDF/XML,對於逐行比較而言非常麻煩,尤其是因爲編寫XML的工具可以決定完全重新排列塊(有關RDF/XML元素沒有規定的順序語法級別,並且很難執行像這樣的任何操作)。

切換到基於行的語法格式,如N-Triples或N-Quads,並在從Virtuoso導出時執行規範排序(應該可以通過使用帶有ORDER BY子句的SPARQL查詢作爲導出機制) 。

3

如果您打算使用SPARQL更新進行更改,那麼我不會擔心撤銷提交的git歷史記錄;這些更新查詢成爲您的差異。有些查詢很容易反轉以撤銷更改,但是,如果您有本體的基本版本,則應用除N個最近更新以外的所有更新都將有效地撤銷N個提交。

這是我們多年來一直使用的策略,它很好地工作。