[英]SHACL validate existing domain and range definitions?
我想使用 SHACL 驗證現有本體和知識庫的現有 rdfs:domain 和 rdfs:range 語句。 但是,使用 SHACL 執行此操作似乎非常冗長。
:prop1 a owl:ObjectProperty;
rdfs:domain ?A;
rdfs:range ?B.
: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.