如何使用自定义 SWRL 内置扩展 Pellet 2.4.0?

How to extend Pellet 2.4.0 with custom SWRL built-ins?

我已经使用 SWRLAPI 的 SWRLBuiltInBridge 组件完成了此操作: https://github.com/protegeproject/swrlapi/wiki/SWRLBuiltInBridge

但是,在我的 Java 代码中,我还使用了带有 OWLAPI 的 Pellet Reasoner。每当我使用推理器时,它都会在发现内置未知的 SWRL 规则时生成警告。我知道我可以在推理器中禁用规则检查,并在我想 运行 规则时使用 SWRLAPI。

但这似乎不切实际...因为在使用推理器之前,我必须在每次 ontology 修改后 运行 规则。

我看过一个深入探讨这个问题的博客页面,但可能已过时: https://semwebguy.wordpress.com/2011/01/04/how-to-extend-pellet2-2-2s-swrl-built-in-support-with-your-custom-built-in/

此外,与SWRLAPI相比,创建内置的方式(根据博客)是不同的(例如Abox对象是一个参数)。

还有其他方法吗?或者是否可以将 Pellet 与 SWRLBuiltInBridge 连接?

Pellet reasoner 不使用 SwrlApi。 Pellet use/implement 内置的方式与SwrlApi 相去甚远。每个内置函数都必须与推理器 (ABox) 的内部数据结构进行交互,并且必须使用 ATErm 的对象进行交互。

但如果您需要这样做,总有一种破解方法是可行的。 您可以按照示例 on the method testSpecialBuitIn() .

他们的关键是使用此方法添加您的自定义 buildIn:BuiltInRegistry.instance.registerBuiltIn.

如果你的内置是正确的,就没有更多的要求了。

请注意,此解决方案使用没有接口的 Pellet 的 .core. 模块;因此 form/behaviour 中的更改可能会在没有警告的情况下从一个版本更改为另一个版本。