新实例上的SHACL规则执行?

问题描述 投票:1回答:2

我有一个应用程序,其中我使用SPIN构造函数作为实现事件/条件/操作(ECA)策略的手段。 ECA是一种经典的政策结构。在这种情况下,事件始终是一个类的断言,它导致该类的SPIN构造函数在该新个体上运行。 Condition是我的SPARQL WHERE子句中表示的模式,Action是由SPARQL CONSTRUCT子句中的断言提供的。我的理解是,SPIN构造函数只能在类的新个体上运行,而不是在类的所有个体上运行。

我现在正在考虑转而使用SHACL作为SPIN的继任者。我正在开发TopBraid Composer Maestro Edition,我可以使用Jena SHACL API实现。

假设我将ECA策略表示为SHACL形状,并通过sh:targetClass SHACL谓词来定位类。假设我的目标类是family:Person。每当我断言一个新的family:Person个体时,我想只对那个新个体运行我的ECA政策(表达为SHACL形状)。我知道可以使用一个监听器来感知新的类成员资格。我也知道,一旦感知到变化,就可以使用RuleUtil.executeRules()等方法来执行所有目标节点上的所有规则(在我的例子中,family:Person类的个体)。但是,有没有办法将SHACL形状仅应用于目标类的新个体?在我的申请中,个人会随着时间的推移积累并且可能会变得很多。我担心反复运行形状的计算负荷对于相同的,未经改变的老人来说会变得很重要。

jena topbraid-composer shacl
2个回答
2
投票

“新个体”的概念听起来是特定于应用程序的,并且取决于执行逻辑。没有人强迫任何人使用sh:targetClass既不需要一直运行所有规则。您可以在API级别上控制此操作。而不是sh:targetClass,您可以使用您选择的其他属性,例如ex:constructClass,并实现一个基于Java的函数,该函数将新实例作为输入,并在属性后面查找所有适用的形状。如果您认为这里有通用模式,我们可以将它们添加到事实上的扩展名称空间,例如dash:


2
投票

解决问题的一种可能方法是使用“第三方”关系来标记规则已处理的个人,并在规则引用的sh:条件中使用此类标记。

你会得到类似的东西:

:MyCondition
    a sh:NodeShape ;
    rdfs:comment "The condition preventing re-application of the rule";
    sh:targetClass :MyClass ;
    sh:sparql [
        sh:select """
        PREFIX : <http://example.com/ns#>
        PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
        SELECT $this
        WHERE {
            # Here, the $this will be the focus node of the target class
            $this :hasMarking "true"^^xsd:boolean.
        }
        """;
    ].

:MyRule
    a sh:NodeShape ;
    rdfs:comment "The rule should be applied only once";
    sh:targetClass :MyClass ;
    sh:rule [
        a sh:SPARQLRule ;
        sh:condition :MyCondition ;
        sh:construct """
            PREFIX : <http://example.com/ns#>

            CONSTRUCT {
                $this :hasMarking "true"^^xsd:boolean.
            } WHERE {
                $this :property :object.
                # Here, the body of the rule
                # ...
            }
        """;
    ].

在这种情况下,标记基于一个简单的布尔属性,但它也可能基于规则体捕获的更有用的信息,并代表规则结果,即$this :property :Object,其中property仅由您的规则推断。

© www.soinside.com 2019 - 2024. All rights reserved.