2013-05-06 102 views
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查询标签相同的功能。但实际上存在一些显着的差异:我需要获取匿名类的信息(子类,超类等),它由一组个体(ex {Member1,Member2 ...})定义或在另一个办法。在Protege中,此查询返回正确的结果,但OWL API Dl查询示例中的此类查询返回[NOTHING]。有没有办法在OWL API中操作匿名类?预先感谢您的回答。使用曼彻斯特语法查询OWL API中的匿名类

+0

'DLQueryExample'应该处理匿名类表达式作为输入(就像在Protege中一样)。你能否准确地表达你使用的确切表达式,并且包括一个片段或指向你使用的本体的链接? – loopasam 2013-05-06 23:07:03

+0

@loopasam,谢谢你的回答。我尝试了比萨样本:http://www.co-ode.org/ontologies/pizza/pizza.owl。查询很简单:比萨和(hasTopping一些CheeseTopping),结果是:Loaded ontology:OntologyID(OntologyIRI()) 请在曼彻斯特语法类型一类表达,并按下回车键(或按x 退出): 披萨和(hasTopping一些CheeseTopping) QUERY:披萨和(hasTopping一些CheeseTopping) 超类 [NONE] EquivalentClasses [NONE] 子类 [NONE] 实例 [NONE] – user1823541 2013-05-23 18:51:10

+0

有问题的DL查询示例的链接现在是:https://github.com/owlcs/owlapi/blob/version3/contract/src/te st/java/org/coode/owlapi/examples/DLQueryExample.java – FBB 2016-02-04 16:11:17

回答

3

假设您正在使用the classDLQueryExample而没有修改。

您需要使用与默认值不同的推理器。看151行,实现使用OWL-API中构建的结构推理器。这个推理者是有限的,并且不能像你的那样处理复杂的类表达式。

如何解决此问题:

使用更高级的推理像Hermit。下载并把罐子放在类路径中,然后通过替换在管线151代码:

OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();

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

+0

非常感谢!!!!!!现在它工作了!你救了我! – user1823541 2013-05-23 22:00:16

+0

OWL API现在提供了有关此问题的文档:https://github.com/owlcs/owlapi/wiki/DL-Queries-with-a-real-reasoner – FBB 2016-02-04 16:10:13