2015-06-17 63 views
0

我試圖檢查本體的一致性。本體只包含個體的描述,類和語義規則由導入的本體描述。使用OWL API檢查本體一致性和可接受性4

我想使用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適用於啓動推理器?使用顆粒

 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; 
+0

究竟是什麼問題?您可以使用此方法計算不一致性。如果你想獲得不滿意的課程,你需要使用另一種方法。 – Artemis

回答

2

的方法是正確的,但使用StructuralReasonerFactory的是一個問題。這個推理者沒有真正的推理,它僅僅使用斷言的公理來回答一些基本的疑問。它無法檢查一致性。

您需要使用一個真正的推理者來執行一致性檢查。有幾個reasoners已經支持OWLAPI 4,請參閱https://github.com/owlcs/owlapi/wiki

+0

謝謝,我嘗試使用Pellet作爲推理器。現在檢測到不一致的本體,但我不確定是否需要檢查每個類的可滿足性,以便確保本體的健全性。 – Corpswalker

+0

有些類可能會因設計而不能令人滿意,但這不是一種常見現象。他們的存在並不會使本體論不健全,儘管它可能引發問題。這是否確定取決於具體的本體論。 – Ignazio

+0

是否使用「reasoner.getUnsatisfiableClasses()。getEntitiesMinusBottom()」方法調用正確的方法來檢查是否存在不可滿足性? – Corpswalker

0

門生


代碼更新也使用某種isConsistent方法。根據您所指的是哪個版本,此方法由開發人員構建或使用在OWL API中開發的方法。例如,看看this。但是,當您在Protege中運行推理器時,將激發inConsistentisSatisfiable方法。所以你看到的是兩個行動的結果。如果您需要了解差異,請閱讀以下blog post。要點是:

所以,雖然我們可以有不可滿足的類以一致的本體,在不一致的本體所有的類都是不可滿足的,因爲不一致的本體根本沒有模型,因此不能有一個與實例任何給定的類。

如果你想找到不可滿足的類,你只需要調用isSatisfiable方法上的所有類:

reasoner.isSatisfiable(className); 
+0

如果推理器未檢測到不一致性,是否需要調用isSatisfiable方法? – Corpswalker

+0

是的,有需要。如上所述,本體可以是一致的,但是具有不可滿足的類。通常,當您使用A-Box時,不一致性更可能出現,並且當您使用T-Box時,將會發生不可滿足性。 – Artemis

+0

感謝您的回答。要檢查的本體只有A-Box類型。只是個人。 – Corpswalker