0

我正在尝试编写查询

Hospitals 和 hasNameWithWords 值“中心”^^string

此查询返回我在 Protege 4.2 中使用 FACT++ 推理器和 Hermit 推理器的医院名称中包含“中心”的实例

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

我没有得到任何结果。

但是当我编写简单的查询时,它给了我结果,例如

医院

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

还有什么推理机更好?

4

1 回答 1

3

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

这种类型的推理器相当简单,不适合像您这样的复杂查询。但是,它可以提供有关类层次结构的答案:这就是为什么您可以通过简单的查询获得一些结果的原因Hospitals

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

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