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


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


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


我看过一个深入研究这个问题的博客页面,但可能已经过时了:
 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连接起来吗?

答案 0 :(得分:1)
Pellet推理器不使用SwrlApi。 Pellet使用/实现内置的方式与SwrlApi相差甚远。每个内置必须与推理器(ABox)的内部数据结构交互,并且必须使用ATerm的objets进行。
但是如果你需要这样做,总会有一种可能的黑客攻击。 您可以按照示例on the method testSpecialBuitIn()。
他们的关键是使用此方法添加您的自定义buildIn:BuiltInRegistry.instance.registerBuiltIn.
如果你的内置是正确的,没有什么需要。
请注意,此解决方案使用没有接口的Pellet的 .core。模块;因此,形式/行为的变化可能会在一个版本之间发生,而不会发出警告。