检查本体一致性&对OWL API 4的满意度

时间:2015-06-17 11:42:27

标签: java owl ontology consistency owl-api

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

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

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进行代码更新

        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;

2 个答案:

答案 0 :(得分:2)

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

您需要使用真正的推理器来执行一致性检查。有一些已经支持OWLAPI 4的推荐者,请参阅https://github.com/owlcs/owlapi/wiki

答案 1 :(得分:0)

Protege也在使用某种isConsistent方法。根据您所引用的版本,此方法或者由开发人员构建,或者使用在OWL API中开发的方法。例如,请查看this。但是,当您在Protege中运行推理器时,inConsistentisSatisfiable方法都会被触发。所以你看到的是两个动作的结果。如果需要,请阅读以下blog post以了解差异。要点是:

  

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

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

reasoner.isSatisfiable(className);