此问题与此链接中的问题有关。假设这是一个“扩展问题”。
该链接上的本体包含以下个人:
:a rdf:type :Approve ;
:has-theme :r1,:r2 .
:r1 rdf:type :Result ;
:come-from :m1 .
:r2 rdf:type :Result ;
:come-from :m2 .
:m1 rdf:type :Man .
:m2 rdf:type :Machine .
现在我在本体中添加了以下三元组:
:a :has-agent :x .
:m1 :friend-of :x .
即:“:x 是 Approve 动作 :a 的代理”,“:m1 是 :x 的朋友”。
在上面链接的问题中,我想编写一个 SHACL 规则,说明“每个批准操作在其主题中至少有一个来自男人的结果是合法的”。
Holger 建议我使用 SHACL 规则的以下条件(先决条件)。条件有效(感谢 Holger!):
:conditionTest
rdf:type sh:NodeShape ;
sh:property [
sh:path (ontology:has-theme ontology:come-from) ;
sh:qualifiedMinCount 1 ;
sh:qualifiedValueShape [
sh:class ontology:Man ;
]
] .
现在我想扩展上述条件以获得以下扩展 SHACL 规则:“每个 Approve 动作在其主题中至少有一个来自Approve 动作代理的朋友的人的结果是合法的”。
基本上:我想从 Approve 动作“:a”开始,从一条路径获取它的代理,将产生结果的人的朋友作为另一条路径的“:a”主题......并通过以下方式比较个体对这些路径,即在它们匹配时询问它们。
我尝试以多种方式扩展上面的 :conditionTest,例如,使用 sh:equals:
:conditionTest
rdf:type sh:NodeShape ;
sh:property [
sh:path (ontology:has-theme ontology:come-from) ;
sh:qualifiedMinCount 1 ;
sh:qualifiedValueShape [
sh:class ontology:Man ;
sh:property [
sh:path ontology:friend-of;
sh:equals [sh:property [sh:path (sh:this ontology:has-agent)]]
]
]
] .
但是我尝试过的任何解决方案都不起作用。另一方面,如果我使用 sh:hasValue 并且我明确提到了个人 :x,即:
:conditionTest
rdf:type sh:NodeShape ;
sh:property [
sh:path (ontology:has-theme ontology:come-from) ;
sh:qualifiedMinCount 1 ;
sh:qualifiedValueShape [
sh:class ontology:Man ;
sh:property [
sh:path ontology:friend-of;
sh:hasValue ontology:x
]
]
] .
有用。但这实际上并不是我想要的:a 想要一个适用于任何个人的 SHACL 规则,作为 :a 的 has-agent。换句话说:我想通过路径“(sh:this has-agent)”来获取和比较这个人。
希望你们中的任何人都知道一种方法。提前致谢。利维奥