簡體   English   中英

將 SHACL class 限制為特定類型之一,僅此而已

[英]limit SHACL class to one of the specific types and nothing else

假設我有這樣的數據:

<http://domain/mySubj> abc:someProperty <http://domain/myObj>.
<http://domain/myObj> a <http://domain/Type1>.
<http://domain/myObj> a <http://domain/Type2>.
<http://domain/myObj> a <http://domain/WrongType>.

我想編寫一個 SHACL 規則,如果 myObj 具有 Type1 和 Type2 以外的任何類型,則會引發違規。

我試着把它寫成

sh:property [
      a sh:PropertyShape ;
      sh:path abc:someProperty ;
      sh:or   (
                   [ sh:class <http://domain/Type1> ; ]
                   [ sh:class <http://domain/Type2> ; ]
               ) ;
     ...
     

但這不會引發違規,因為只要其中一項測試正確, sh:or就會通過。 我也不能使用sh:xone ,因為這只需要 Type1 和 Type2 之一,而不是兩者都存在。 即使我嘗試說sh:or ([ sh:xone (type1 type2)] [ sh:and (type1 type2)]) 我的測試也不會產生正確的結果,因為and測試將通過,因為我們有 type1 和 type2並且不關心錯誤類型。

有沒有一種方法可以說 class 應該是一組特定事物中的一個或多個事物,而不是其他任何事物。

如果這只是關於直接 rdf:types,我相信你可以在 rdf:type 的值上使用 sh:in 來解決這個問題:

sh:property [
    a sh:PropertyShape ;
    sh:path abc:someProperty ;
    sh:property [
        sh:path rdf:type ;
        sh:in ( abc:Type1 abc:Type2 ) ;
    ] ;
]

暫無
暫無

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

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