我想构建一个Java应用程序,该应用程序将使用Pellet查询来查询本体,但是我是该领域的新手,因此遇到一些兼容性问题。
本体是使用Protege 4 OWL Editor构建的。
我已经从here下载owlapi-distribution-3.4.3-bin.jar文件,并将其添加到我的netbeans项目中。此外,我还从here找到了DLExamples.java,它对您入门非常有用。
对于颗粒推理器,我从here下载了pellet-2.3.0.zip,并在我的netbeans项目中添加了pellet-2.3.0 / lib中的所有文件和文件夹(请注意,我不确定这是否是在netbeans中添加颗粒的正确方法,但我找不到更好的方法,例如仅添加一个jar文件。
我从here中发现,为了将粒状推理器嵌入DLExamples.java,我需要用“ Return new Reasoner(manager)”替换其第151行和152行,其中Reasoner位于粒状库的org.mindswap.pellet.owlapi.Reasoner
中。当我应用该更改时,netbeans抱怨说:
no suitable constructor found for Reasoner(org.semanticweb.owlapi.model.OWLOntologyManager)
constructor Reasoner.Reasoner(org.semanticweb.owl.model.OWLOntologyManager,KnowledgeBase) is not applicable
(actual and formal argument lists differ in length)
constructor Reasoner.Reasoner(org.semanticweb.owl.model.OWLOntologyManager) is not applicable
(actual argument org.semanticweb.owlapi.model.OWLOntologyManager cannot be converted to org.semanticweb.owl.model.OWLOntologyManager by method invocation conversion)
我查看了
org.mindswap.pellet.owlapi.Reasoner
并意识到它的构造函数定义确实是public Reasoner(org.semanticweb.owl.model.OWLOntologyManager manager) {
}
换句话说,不是使用
org.semanticweb.owlapi.model.OWLOntologyManager
作为参数,而是使用org.semanticweb.owl.model.OWLOntologyManager
(请注意owlapi
和owl
软件包之间的区别)。除非我没有做错什么,否则owlapi和pellet之间显然不兼容。鉴于粒料应该为owlapi提供推理机,这是不正常的吗?
关于如何解决这个问题有什么建议吗?我应该改用其他推理机吗?我也尝试过HermiT,但是当我问一个应该返回两个类及其个人的DL查询时,它只返回了这些类。所以我认为HermiT可能没有那么强大,所以我决定尝试Pellet并没有成功。
有什么建议吗?
提前致谢。
最佳答案
如here所述,答案是您不能随意混合和匹配使用的库,而必须使用Pellet随附的版本。如果这样做,将没有合适的构造函数异常。