Pellet 2.3.0与OWL API 3.4.3不兼容



我想构建一个Java应用程序,它将使用Pellet查询查询本体,但我是这个领域的新手,我遇到了一些兼容性问题。

本体已使用Protege 4 OWL Editor构建完成。

我已经从这里下载了owlapi-distribution-3.4.3-bin.jar文件,并将其添加到我的netbeans项目中。此外,我从这里找到了lexample .java,这对你开始非常有用。

对于小球的原因,我从这里下载了小球-2.3.0.zip,并在我的netbeans项目中添加了小球-2.3.0/lib中的所有文件和文件夹(请注意,我不确定这是否是在netbeans中添加小球的正确方法,但我找不到更好的方法,例如只添加一个jar文件)。

我从这里发现,为了将颗粒推理器嵌入到lexample .java,我需要将其第151行和152行替换为"返回新的推理器(管理器)",其中推理器位于颗粒库的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和小球之间显然是不兼容的。这是不正常的,因为颗粒应该为猫头鹰提供一个理由,对吧?

对于如何解决这个问题有什么建议吗?我应该换一个不同的推理器吗?我也试过隐士,但是当我问一个应该返回类和它们的个体的DL查询时,它只返回了类。所以我认为隐士可能没有那么强大,我决定尝试Pellet没有成功。 有什么建议吗?

正如这里提到的,答案是您不能随意混合和匹配您使用的库,您必须使用Pellet附带的版本。如果这样做,就不会出现no suitable constructor异常。

相关内容

  • 没有找到相关文章

最新更新