2

我正在使用 OWL API 对 Protege 中创建的本体进行推理。我正在处理 OWL API 示例 DL 查询:http: //sourceforge.net/p/owlapi/code/ci/aef6981535f07a2d0d44c394b9f4d5415f36025a/tree/contract/src/test/java/org/coode/owlapi/examples/DLQueryExample.java . 我猜这个例子提供了相当于 Protege 中的 DL Query Tab 的功能。但实际上存在一些显着差异:我需要获取匿名类的信息(子类、超类等),该匿名类由一组个体(例如 {Member1,Member2...})或另一个方法。在 Protege 中,此查询返回正确的结果,但 OWL API Dl 查询示例中的此类查询返回 [NOTHING]。有没有办法在 OWL API 中操作匿名类?提前感谢您的回答。

4

1 回答 1

4

假设您正在使用该类 DLQueryExample而不进行修改。

您需要使用与默认推理器不同的推理器。查看第 151 行,该实现使用了 OWL-API 中内置的结构推理器。这个推理器是有限的,不能像你一样处理复杂的类表达式。

如何修复它:

使用像Hermit这样更高级的推理器。下载 jar 并将其放在类路径中,然后将第 151 行的代码替换为:

OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();

您将需要导入包org.semanticweb.HermiT.Reasoner。您现在将使用 Hermit 来处理您的查询。试试Pizza and (hasTopping some CheeseTopping)吧,应该可以的!

于 2013-05-23T20:38:22.260 回答