[英]Count while loop, in specific loop time do something else and continue while loop
[英]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.