首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SHACL规则在新实例上的执行?

SHACL规则在新实例上的执行?
EN

Stack Overflow用户
提问于 2018-08-14 02:58:48
回答 2查看 271关注 0票数 1

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

我现在正在寻找SHACL作为SPIN的接班人。我正在开发TopBraid作曲家大师版,我可以使用Jena实现。

假设我将ECA策略表示为SHACL形状,并通过sh:targetClass SHACL谓词以类为目标。假设我的目标类是family:Person。每次我断言一个新的family:Person个人时,我都希望只在这个新个体上运行自己的ECA策略(表示为SHACL形状)。我知道侦听器可以用来感知新的类成员。我还知道,一旦检测到更改,就可以使用诸如RuleUtil.executeRules()这样的方法在所有目标节点上执行所有规则(在我的示例中,family:Person类的个体)。但是,是否有一种方法可以将SHACL形状应用于 only --目标类的新个体?--在我的应用程序中,个人将随着时间的推移而累积,并且可能会变得相当多。我担心的是,重复运行形状对相同的、老的、未改变的个体的计算负荷将变得非常重要。

EN

回答 2

Stack Overflow用户

发布于 2019-03-01 14:35:39

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

你会得到这样的东西:

代码语言:javascript
复制
: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仅由规则推断。

票数 3
EN

Stack Overflow用户

发布于 2018-08-14 23:18:10

“新个体”的概念听起来是特定于应用程序的,取决于执行逻辑。没有人强迫任何人使用sh: the类,也不需要一直运行所有规则。您可以在API级别上控制这一点。您可以使用其他属性(如ex:constructedClass )代替sh: takes类,并实现一个基于Java的函数,该函数将新实例作为输入,并遵循该属性查找所有适用的形状。如果您认为这里有一个通用模式,我们可以将它们添加到一个事实上的扩展命名空间中,如dash:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51833104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档