簡體   English   中英

SHACL 驗證現有的域和范圍定義?

[英]SHACL validate existing domain and range definitions?

我想使用 SHACL 驗證現有本體和知識庫的現有 rdfs:domain 和 rdfs:range 語句。 但是,使用 SHACL 執行此操作似乎非常冗長。

現有定義

:prop1 a owl:ObjectProperty;
       rdfs:domain ?A;
       rdfs:range ?B.

在 SHACL

:AShape a sh:NodeShape;
 sh:targetClass :A;
 sh:property [sh:path :prop1];
 sh:closed true.

:ADomainShape a sh:NodeShape;
 sh:targetSubjectsOf :prop1;
 sh:class :A.

:prop1RangeShape a sh:NodeShape;
 sh:targetObjectsOf :prop1;
 sh:ClassB.

當您有幾十個屬性時,這會在原始域和范圍語句中已經聲明的內容上增加大量儀式。 雖然可以使用腳本或多行編輯器加速該過程,但對我來說似乎仍然沒有必要。 有沒有辦法告訴像 PySHACL 這樣的 SHACL 驗證器只驗證現有的域和范圍語句而不需要所有這些額外的三元組?

首先讓我說 rdfs:domain 和 rdfs:range 不是約束,也不是你所暗示的。 他們只是在產生推論。 話雖如此,許多人過去只是因為沒有其他建模語言而使用它們來“表示”約束。 背景見

https://www.topquadrant.com/owl-blog/

如果您不想將 RDFS 三元組復制為單獨的 SHACL 約束,則可以編寫一個具有 sh:targetSubjectsOf rdfs:domain (和范圍)的通用 SHACL 形狀,然后使用 SPARQL 約束來檢查是否沒有一個 class 域 class 以外的具有給定屬性值的域。 最終結果將是一次檢查所有 rdfs:domain 語句。

但可以說 RDFS 應該不理會。 如果您想使用封閉世界語義,您應該使用為此目的而設計的語言,即 SHACL。

(順便說一句,有一個 Discord 小組,以防您想要更高的帶寬來討論此類事情https://twitter.com/HolgerKnublauch/status/1461590465304662019

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM