2015-10-15 89 views
0

我有一個關於Matthew Horridge在GitHub上的owlexplanation項目的問題。如何使用owlexplanation項目獲得不一致的解釋

README文件中有如下代碼:

import org.semanticweb.owl.explanation.api.*; 
import org.semanticweb.owlapi.model.*; 
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; 

OWLReasonerFactory rf = ; // Get hold of a reasoner factory 
OWLOntology ont = ; // Reference to an OWLOntology 

// Create the explanation generator factory which uses reasoners provided by the specified 
// reasoner factory 
ExplanationGeneratorFactory<OWLAxiom> genFac = ExplanationManager.createExplanationGeneratorFactory(rf); 

// Now create the actual explanation generator for our ontology 
ExplanationGenerator<OWLAxiom> gen = genFac.createExplanationGenerator(ont); 

// Ask for explanations for some entailment 
OWLAxiom entailment ; // Get a reference to the axiom that represents the entailment that we want explanation for 

// Get our explanations. Ask for a maximum of 5. 
Set<Explanation<OWLAxiom>> expl = gen.getExplanations(entailment, 5); 

請能有人解釋究竟是什麼參數entailment的類型?我不太瞭解我們得到什麼解釋。 我正在尋找當我的本體不一致時給我解釋的代碼。

回答

1

entailment參數是您試圖確定蘊含如何發生的公理。

爲了解釋不一致性,您可以按照自述文件中的建議使用不同的工廠。我寫了一個使用版本1.1.2的示例,其中使用了OWLExplanation版本和JFact 1.2.1版(我需要一個推理器來測試這個;任何推理器都會這樣做)。

import java.io.File; 
import java.util.Set; 
import org.semanticweb.owl.explanation.api.Explanation; 
import org.semanticweb.owl.explanation.api.ExplanationGenerator; 
import org.semanticweb.owl.explanation.impl.blackbox.checker.InconsistentOntologyExplanationGeneratorFactory; 
import org.semanticweb.owlapi.apibinding.OWLManager; 
import org.semanticweb.owlapi.model.*; 
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory; 
import uk.ac.manchester.cs.jfact.JFactFactory; 
public class TestExplanation { 
    public static void main(String[] args) throws Exception { 
    OWLReasonerFactory rf = new JFactFactory(); 
    OWLOntology ont = OWLManager.createOWLOntologyManager().createOntology(); 
    OWLOntologyManager m = ont.getOWLOntologyManager(); 
    OWLDataFactory df = m.getOWLDataFactory(); 
    OWLClass class1 = df.getOWLClass(IRI.create("urn:test:class1")); 
    OWLClass class2 = df.getOWLClass(IRI.create("urn:test:class2")); 
    OWLIndividual i = df.getOWLNamedIndividual(IRI.create("urn:test:i")); 
    // create an inconsistent ontology by declaring an individual member of two disjoint classes 
    m.addAxiom(ont, df.getOWLDisjointClassesAxiom(class1, class2)); 
    m.addAxiom(ont, df.getOWLClassAssertionAxiom(class1, i)); 
    m.addAxiom(ont, df.getOWLClassAssertionAxiom(class2, i)); 
    // create the explanation generator 
    ExplanationGenerator<OWLAxiom> explainInconsistency = new InconsistentOntologyExplanationGeneratorFactory(rf, 
     1000L).createExplanationGenerator(ont); 
    // Ask for an explanation of `Thing subclass of Nothing` - this axiom is entailed in any inconsistent ontology 
    Set<Explanation<OWLAxiom>> explanations = explainInconsistency.getExplanations(df.getOWLSubClassOfAxiom(df 
     .getOWLThing(), df.getOWLNothing())); 
    System.out.println("TestExplanation.main() " + explanations); 
    } 
} 
+0

看來我究竟需要什麼。我下載了OWLExplanation和JFact,並且一切正常,但是我得到一個錯誤「type ExplanationGenerator不接受參數」。你有什麼想法,爲什麼? –

+0

你使用的是哪個版本?確保在類路徑中沒有多個版本 – Ignazio

+0

當您運行上面的示例時,您可以告訴我,您的項目只有OWLExplanation的庫1.1.2和JFact的1.2.1版? –