【发布时间】:2018-08-14 02:58:48
【问题描述】:
我有一个应用程序,其中我使用 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 形状)。我知道可以使用侦听器来感知新的班级成员资格。我还知道,一旦感应到更改以在所有目标节点上执行所有规则(在我的示例中为 family:Person 类的个人),就可以使用诸如 RuleUtil.executeRules() 之类的方法。但是,有没有办法将 SHACL 形状应用到目标类的新个体?在我的应用程序中,个体会随着时间的推移而积累,并且可能会变得相当多。我担心重复运行形状对相同的、旧的、未改变的个体的计算负载会变得很重要。
【问题讨论】:
标签: jena topbraid-composer shacl