0

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

本体是使用 Protege 4 OWL Editor 构建的。

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

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

我从这里发现,为了将颗粒推理器嵌入到 DLExamples.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) {
}

换句话说,不是将 an 作为参数,org.semanticweb.owlapi.model.OWLOntologyManager而是采用 an (注意和包org.semanticweb.owl.model.OWLOntologyManager之间的区别)。owlapiowl

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

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

有什么建议吗?

提前致谢。

4

1 回答 1

1

正如这里提到的,答案是你不能随意混合和匹配你使用的库,你必须使用 Pellet 附带的版本。如果你这样做,你将不会有没有合适的构造函数异常。

于 2013-04-21T22:19:57.880 回答