首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OWL 4检查本体一致性和可移植性

使用OWL 4检查本体一致性和可移植性
EN

Stack Overflow用户
提问于 2015-06-17 11:42:26
回答 2查看 1.5K关注 0票数 0

我试图检查本体的一致性。本体只包含个体的描述,类和语义规则由导入的本体描述。

我认为使用isConsistenct方法是正确的选择。

代码语言:javascript
复制
OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
OWLReasoner reasoner =     reasonerFactory.createNonBufferingReasoner(mergedOntology);
    if(reasoner.isConsistent()){
        return "Merged ontology PASSED the consistency test";
    }else{
        return "Ontology FAILED the consistency test";
    } 

什么是正确的方法来检查本体的一致性,就像在启动推理器时应用Protege 5一样?

使用Pellet更新代码

代码语言:javascript
复制
        OWLReasonerFactory reasonerFactory = new PelletReasonerFactory();
        OWLReasoner reasoner = reasonerFactory.createNonBufferingReasoner(mergedOntology);
        String answer = "";
        if(reasoner.isConsistent()){
            if(reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size()>0){
                answer = "Merged ontology FAILED satisfiability test. Unsatisfiable classes detected: " + reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size();
            }
            answer = "Merged ontology PASSED the consistency test";
        }else{
            answer = "Merged ontology FAILED the consistency test, please review the Axioms or debug using Protege";
            //FYI an example how to implement a working debugger can be found on sourceforge's OWL API page under Debugger 
        }
        reasoner.dispose();
        return answer;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 06:36:33

这种方法是正确的,但StructuralReasonerFactory的使用是一个问题。推理者没有真正的推理,它只是使用断言的公理来回答一些基本的问题。它不能检查一致性。

你需要使用一个真正的推理者来进行一致性检查。有几个原因已经支持OWLAPI 4,请参阅https://github.com/owlcs/owlapi/wiki

票数 2
EN

Stack Overflow用户

发布于 2015-06-17 13:44:41

Protege也在使用某种isConsistent方法。根据您所指的版本,此方法要么由开发人员内置,要么使用OWL中开发的方法。例如,看看。但是,当您在Protege中运行推理器时,inConsistentisSatisfiable方法都会被触发。所以你看到的是两个行动的结果。如果需要,请阅读下面的博客帖子以了解差异。要点是:

因此,虽然我们可以在一致的本体中有不可满足的类,但不一致本体中的所有类都是不可满足的,因为不一致本体论根本没有模型,因此它不可能有任何给定类的实例。

如果要查找不可满足的类,只需调用所有类上的isSatisfiable方法:

代码语言:javascript
复制
reasoner.isSatisfiable(className);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30890587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档