Java中OWL2本体不一致性的解释

Java中OWL2本体不一致性的解释,java,ontology,reasoning,Java,Ontology,Reasoning,我试图找出本体是否不一致,如果不一致,那么打印哪些类/公理导致不一致。 我得到了关于不一致性检查的正确结果,但是在打印不一致性背后的公理列表时,我被卡住了。我尝试了stackoverflow问题中提到的一种方法,但它不起作用 我检查了,问题是解释变量中没有存储解释列表。你能指出我错在哪里吗 package com.tcs.HermiT; import java.io.File; import java.util.Set; import org.semanticweb.Herm

我试图找出本体是否不一致,如果不一致,那么打印哪些类/公理导致不一致。 我得到了关于不一致性检查的正确结果,但是在打印不一致性背后的公理列表时,我被卡住了。我尝试了stackoverflow问题中提到的一种方法,但它不起作用

我检查了,问题是解释变量中没有存储解释列表。你能指出我错在哪里吗

    package com.tcs.HermiT;

import java.io.File;
import java.util.Set;





import org.semanticweb.HermiT.Configuration;
import org.semanticweb.HermiT.Reasoner;
import org.semanticweb.HermiT.Reasoner.ReasonerFactory;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.IRI;
import org.semanticweb.owlapi.model.OWLAxiom;
import org.semanticweb.owlapi.model.OWLDataFactory;
import org.semanticweb.owlapi.model.OWLNamedIndividual;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.semanticweb.owlapi.reasoner.InconsistentOntologyException;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;

import com.clarkparsia.owlapi.explanation.BlackBoxExplanation;
import com.clarkparsia.owlapi.explanation.ExplanationGenerator;
import com.clarkparsia.owlapi.explanation.HSTExplanationGenerator;

public class Demo {

    public void reason() throws OWLOntologyCreationException {
        // First, we create an OWLOntologyManager object. The manager will load and save ontologies.
        OWLOntologyManager m = OWLManager.createOWLOntologyManager();
        OWLDataFactory dataFactory=m.getOWLDataFactory();

        File inputOntologyFile = new File("C:\\Users\\1047785\\Desktop\\HermiT\\Input10.owl");
        OWLOntology o=m.loadOntologyFromOntologyDocument(inputOntologyFile);// Now, we instantiate HermiT by creating an instance of the Reasoner class in the package org.semanticweb.HermiT.



        ReasonerFactory factory = new ReasonerFactory();
        Configuration configuration=new Configuration();
        configuration.throwInconsistentOntologyException = false;
        OWLReasoner reasoner=factory.createReasoner(o, configuration);

        System.out.println("Consistency : "+reasoner.isConsistent());
        System.out.println("Computing explanations for the inconsistency...");
        factory=new Reasoner.ReasonerFactory() {
            protected OWLReasoner createHermiTOWLReasoner(org.semanticweb.HermiT.Configuration configuration,OWLOntology o) {
                // don't throw an exception since otherwise we cannot compte explanations 
                configuration.throwInconsistentOntologyException=false;
                return new Reasoner(configuration,o);
            }  
        };


        BlackBoxExplanation exp=new BlackBoxExplanation(o, factory, reasoner);
        HSTExplanationGenerator multExplanator=new HSTExplanationGenerator(exp);
        // Now we can get explanations for the inconsistency 
        Set<Set<OWLAxiom>> explanations=multExplanator.getExplanations(dataFactory.getOWLThing());

        // Let us print them. Each explanation is one possible set of axioms that cause the 
        // unsatisfiability. 
        for (Set<OWLAxiom> explanation : explanations) {
            System.out.println("------------------");
            System.out.println("Axioms causing the inconsistency: ");
            for (OWLAxiom causingAxiom : explanation) {
                System.out.println(causingAxiom);
            }
            System.out.println("------------------");
        }


    }
}
package com.tcs.HermiT;
导入java.io.File;
导入java.util.Set;
导入org.semanticweb.HermiT.Configuration;
导入org.semanticweb.HermiT.Reasoner;
导入org.semanticweb.HermiT.Reasoner.ReasonerFactory;
导入org.semanticweb.owlapi.apibinding.OWLManager;
导入org.semanticweb.owlapi.model.IRI;
导入org.semanticweb.owlapi.model.OWLAxiom;
导入org.semanticweb.owlapi.model.OWLDataFactory;
导入org.semanticweb.owlapi.model.OWLNamedIndividual;
导入org.semanticweb.owlapi.model.OWLOntology;
导入org.semanticweb.owlapi.model.owletologyCreationException;
导入org.semanticweb.owlapi.model.owletologyManager;
导入org.semanticweb.owlapi.reasoner.inconsistentologyException;
导入org.semanticweb.owlapi.reasoner.OWLReasoner;
导入org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
导入com.clarkparsia.owlapi.explation.blackbox解释;
导入com.clarkparsia.owlapi.explationGenerator;
导入com.clarkparsia.owlapi.explaution.HSTExplanationGenerator;
公开课演示{
public void reason()抛出OWLOntologyCreationException{
//首先,我们创建一个OWLOntologyManager对象。管理器将加载和保存本体。
OWLOntologyManager m=OWLManager.createOWLOntologyManager();
OWLDataFactory dataFactory=m.getOWLDataFactory();
File inputonologyfile=新文件(“C:\\Users\\1047785\\Desktop\\HermiT\\Input10.owl”);
owlOntologo=m.loadOntologyFromOntologyDocument(inputOntologyFile);//现在,我们通过在包org.semanticweb.HermiT中创建推理器类的实例来实例化HermiT。
ReasonerFactory工厂=新ReasonerFactory();
配置=新配置();
configuration.throwinconsistentologyException=false;
OWLReasoner=factory.createReasoner(o,配置);
System.out.println(“一致性:“+reasoner.isConsistent());
System.out.println(“不一致性的计算解释…”);
工厂=新的推理机。推理机工厂(){
受保护的OWLReasoner createHermiTOWLReasoner(org.semanticweb.HermiT.Configuration配置,OWLO){
//不要抛出异常,否则我们无法完成解释
configuration.throwinconsistentonologyexception=false;
返回新的推理器(配置,o);
}  
};
Blackbox解释exp=新的Blackbox解释(o、工厂、推理机);
hstexplanizationgenerator multexplaniator=新的hstexplanizationgenerator(exp);
//现在我们可以对不一致性进行解释
Set explainsations=multexplantator.getexplainsations(dataFactory.getOWLThing());
//让我们把它们打印出来。每一种解释都是一套可能导致错误的公理
//不可满足性。
用于(设置说明:说明){
System.out.println(“------------------------”;
System.out.println(“导致不一致的公理:”);
原因(公理因果关系:解释){
系统输出打印LN(导致异常);
}
System.out.println(“------------------------”;
}
}
}
产出如下所示

一致性:真/假(正确结果)


计算不一致性的解释

owl api中的解释类很古老,效率不高。在GitHub上由Matthew HorrEdge维护的OwlExplaution项目中有替换项。您可以尝试调整代码以使用它们。不幸的是,我手边没有一个例子