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

Java 如何使用自定义SWRL内置扩展Pellet 2.4.0?,java,owl-api,pellet,swrl,Java,Owl Api,Pellet,Swrl,我已经通过SWRLAPI的SWRLBuiltInBridge组件实现了这一点: 然而,在我的Java代码中,我还将Pellet推理器与OWLAPI一起使用。每当我使用reasoner时,当它发现一个内置未知的SWRL规则时,它就会生成一个警告。我知道我可以在reasoner中禁用规则检查,并在需要运行规则时使用SWRLAPI 但这似乎不现实。。。因为在使用推理机之前,我必须在每次本体修改之后运行规则 我看到一个博客页面深入探讨了这个问题,但可能已经过时了: 此外,与SWRLAPI相比,根据b

我已经通过SWRLAPI的SWRLBuiltInBridge组件实现了这一点:

然而,在我的Java代码中,我还将Pellet推理器与OWLAPI一起使用。每当我使用reasoner时,当它发现一个内置未知的SWRL规则时,它就会生成一个警告。我知道我可以在reasoner中禁用规则检查,并在需要运行规则时使用SWRLAPI

但这似乎不现实。。。因为在使用推理机之前,我必须在每次本体修改之后运行规则

我看到一个博客页面深入探讨了这个问题,但可能已经过时了:

此外,与SWRLAPI相比,根据blog创建内置函数的方式有所不同。例如,Abox对象是一个参数


有没有其他方法可以做到这一点?或者是否可以将颗粒与SWRLBuiltInBridge连接?

颗粒推理机不使用SwrlApi。Pellet使用/实现内置的方式与SwrlApi相差甚远。每个内置程序必须与reasoner ABox的内部数据结构交互,并且必须使用ATerm的objets进行交互

但如果你需要这样做,总有一个黑客是可能的。 你可以仿效这个例子

它们的关键是使用以下方法添加自定义构建:BuiltInRegistry.instance.registerBuiltIn

如果你的内置是正确的,没有什么需要更多


请不要让此解决方案使用.core。无接口的小球模块;因此,形式/行为的变化可以在没有任何警告的情况下从一个版本发生到另一个版本。

据我所知,没有关于函数性的单元测试用例是代码。如果您成功地获得了一个工作代码,那么从中派生出一个测试可能会很好,或者功能性可能不会长期得到支持。