java - 如何使用 owlexplanation 项目获得不一致的解释

标签 java owl consistency reasoning

我对 GitHub 上 Matthew Horridge 的 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 的类型到底是什么?我不太明白我们得到解释的东西。 当我的本体论不一致时,我正在寻找能给我解释的代码。

最佳答案

entailment 参数是您试图确定蕴涵如何发生的公理。

为了解释不一致,您可以按照 README 中的建议使用不同的工厂。我已经编写了一个示例,该示例使用了 OWLEexplanation 的 1.1.2 版和 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);
  }
}

关于java - 如何使用 owlexplanation 项目获得不一致的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33150182/

相关文章:

java - YAGO 本体无法被 OWL API 解析

replication - 具有顺序和因果一致性的复制

java - app:dexDebug ExecException完成,退出值非零2

java - NodeManager 和 ResourceManager 进程未启动

java - GAE,JDO : working with entities loaded from cache

java - 安卓工作室 : cannot resolve symbol

java - Java 中的 BufferedReader 和枚举多行

rdf - 如何推断两个人之间的 isBrotherOf 属性

java - 伪 "lock"对象可以在 Amazon S3 API 中使用吗?

android - 如何检查 SQLite 文件一致性(健康检查)