0

此问题与此链接中的问题有关。假设这是一个“扩展问题”。

该链接上的本体包含以下个人:

: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)”来获取和比较这个人。

希望你们中的任何人都知道一种方法。提前致谢。利维奥

4

0 回答 0