2015-10-15 2 views
0

У меня вопрос о проекте owlexplanation Мэтью Хорридж на GitHub.Как получить объяснение несогласованности с помощью проекта 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 - это аксиома, для которой вы пытаетесь определить, как произошло вступление.

Для объяснения несогласованности вы можете следовать предложению в README, чтобы использовать другую фабрику. Я написал пример, который использует версию 1.1.2 из OWLExplanation и версию 1.2.1 JFact (мне нужен был аргумент, чтобы проверить это, любой разумник будет делать это).

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, и все работает нормально, но я получаю сообщение об ошибке «Тип ExplanationGenerator не принимает параметры». Вы знаете, почему? –

+0

Какую версию вы используете? Убедитесь, что у вас нет нескольких версий в пути к классам. – Ignazio

+0

Не могли бы вы рассказать мне, когда вы запускаете пример выше, ваш проект имел только библиотеки 1.1.2 OWLExplanation и версию 1.2.1 JFact? –

Смежные вопросы