在OWL-API中没有推断DL查询

时间:2013-01-16 07:30:17

标签: semantic-web ontology owl protege dlquery

我正在尝试撰写查询

  

Hospitals和hasNameWithWords值“center”^^ string

此查询返回具有医院的名称在Protege 4.2中使用FACT ++推理器以及Hermit推理器

的实例

但是当我在网站上提供的OWL-API的DL查询示例中输入相同的查询时 http://sourceforge.net/p/owlapi/code/ci/aef6981535f07a2d0d44c394b9f4d5415f36025a/tree/contract/src/test/java/org/coode/owlapi/examples/DLQueryExample.java

我没有得到任何结果。

但是当我编写简单的查询(例如

)时,它会给我结果
  

医院

是因为代码中的推理器无法进行推理吗?

还有什么其他推理会更好?

1 个答案:

答案 0 :(得分:3)

您用作示例的类(DLQueryExample.java)依赖于内置结构推理器的OWL-API OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();)。

这种推理器非常简单,不适合您的复杂查询。但是,它可以在类层次结构上提供答案:这就是您使用简单的查询Hospitals获得一些结果的原因。

您需要做的是将代码设置为使用Hermit或FACT ++。我用Hermit

给出了示例
  • Download HermiT jar文件并将其添加到项目的类路径中。
  • 在您的班级中,将行OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();替换为:OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();。您必须导入org.semanticweb.HermiT.Reasoner才能使其正常工作。
  • 我们刚刚用HermiT取代了默认推理器。其余代码应保持不变,您的查询现在应该可以正常工作。
  • 您可以尝试FaCT++Pellet并比较速度等......