我试图检查本体的一致性。本体只包含个体的描述,类和语义规则由导入的本体描述。
我认为使用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;发布于 2015-06-18 06:36:33
这种方法是正确的,但StructuralReasonerFactory的使用是一个问题。推理者没有真正的推理,它只是使用断言的公理来回答一些基本的问题。它不能检查一致性。
你需要使用一个真正的推理者来进行一致性检查。有几个原因已经支持OWLAPI 4,请参阅https://github.com/owlcs/owlapi/wiki
发布于 2015-06-17 13:44:41
Protege也在使用某种isConsistent方法。根据您所指的版本,此方法要么由开发人员内置,要么使用OWL中开发的方法。例如,看看这。但是,当您在Protege中运行推理器时,inConsistent和isSatisfiable方法都会被触发。所以你看到的是两个行动的结果。如果需要,请阅读下面的博客帖子以了解差异。要点是:
因此,虽然我们可以在一致的本体中有不可满足的类,但不一致本体中的所有类都是不可满足的,因为不一致本体论根本没有模型,因此它不可能有任何给定类的实例。
如果要查找不可满足的类,只需调用所有类上的isSatisfiable方法:
reasoner.isSatisfiable(className);https://stackoverflow.com/questions/30890587
复制相似问题