【问题标题】:Check ontology consistency & satisifiability with OWL API 4使用 OWL API 4 检查本体一致性和可满足性
【发布时间】:2015-09-02 15:06:42
【问题描述】:

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

我认为使用 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;

【问题讨论】:

  • 到底是什么问题?您可以使用此方法计算不一致。如果您想获得无法满足的类,则需要使用另一种方法。

标签: java owl ontology consistency owl-api


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我尝试使用 Pellet 作为推理器。现在检测到不一致的本体,但我不确定是否需要检查每个类的可满足性以确保本体的健全性。
  • 有些类在设计上可能无法满足,尽管这种情况并不常见。它们的存在不会使本体不健全,尽管它可能会提出问题。是否可以,取决于具体的本体。
  • 使用“reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom()”方法是否调用了正确的方法来检查是否有任何不满足?
  • 是的,没错。 getEntitiesMinusBottom 很方便,因此您可以检查它是否为空,以查看是否存在任何无法满足的类。
【解决方案2】:

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

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

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

reasoner.isSatisfiable(className);

【讨论】:

  • 如果推理器没有检测到不一致,是否需要调用isSatisfiable方法?
  • 是的,有需要。如上所述,本体可以是一致的,但具有不可满足的类。通常在使用 A-Box 时,更容易出现不一致,而在使用 T-Box 时,会出现不满意。
  • 感谢您的回答。要检查的本体只有 A-Box 类型。只是个人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多