我想构建一个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(请注意owlapiowl软件包之间的区别)。

除非我没有做错什么,否则owlapi和pellet之间显然不兼容。鉴于粒料应该为owlapi提供推理机,这是不正常的吗?

关于如何解决这个问题有什么建议吗?我应该改用其他推理机吗?我也尝试过HermiT,但是当我问一个应该返回两个类及其个人的DL查询时,它只返回了这些类。所以我认为HermiT可能没有那么强大,所以我决定尝试Pellet并没有成功。

有什么建议吗?

提前致谢。

最佳答案

here所述,答案是您不能随意混合和匹配使用的库,而必须使用Pellet随附的版本。如果这样做,将没有合适的构造函数异常。

10-02 04:33