[英]OWLApi: Failed to create a hermit reasoner instance
早上好,我正在嘗試編寫一個可以管理本體的Java類,尤其是我想查找單個OWLClass的所有屬性(名稱,子類,超類等),但是我無法做到例隱士,我不明白為什么。 我在Maven項目中使用Eclipse,從pom文件中復制了pom文件中編寫的依賴項,這與OWLapi依賴項相同。
Java控制台中的錯誤是:
Exception in thread "main" java.lang.NullPointerException
at org.semanticweb.HermiT.Reasoner.<init>(Reasoner.java:210)
at org.semanticweb.HermiT.Reasoner.<init>(Reasoner.java:187)
at OntologyManager.retrieve_property_class(OntologyManager.java:105)
特別是,執行失敗的行是:
Reasoner hermit = new Reasoner(null, ontologia);
這是無法使用的方法中的代碼,我已經檢查了隱士文檔和各種示例,但沒有幫助。
public void retrieve_property_class(OWLOntology ontology) {
//creo il reasoner per svolgere recupero informazioni
Reasoner hermit = new Reasoner(null, ontologia);
//richiesta del nome della classe di cui si vogliono le proprietà
String classe;
System.out.print("Inserire il nome della classe di cui si vogliono le proprietà: ");
classe = scannerNome.nextLine();
//check per vedere se la classe esiste
Set<OWLClass> classi = ontology.getClassesInSignature();
for (OWLClass e : classi) { //scorro le classe OWL del set comparandone l'IRI con il nome della classe desiderata
if(e.getIRI().getFragment().equals(classe)) { //se una classe soddisfa l'uguaglianza ne vengono stampate le proprietà
System.out.println("Le informazioni della classe sono le seguenti: ");
//nome classe
System.out.println("Nome classe: \n"
+ "\t"+ classe);
//display superclassi
System.out.println("Superclassi:");
for(Node<OWLClass> superclasse: hermit.getSuperClasses(e)) {
System.out.println("\t"+ superclasse.getRepresentativeElement().getIRI().getFragment());
}
//display sottoclassi
System.out.println("Sottoclassi:");
for(Node<OWLClass> sottoclasse : hermit.getSubClasses(e)) {
System.out.println("\t"+ sottoclasse.getRepresentativeElement().getIRI().getFragment());
}
//display classi disgiunte
System.out.println("Classi disgiunte:");
for(Node<OWLClass> disgiunta : hermit.getDisjointClasses(e)) {
System.out.println("\t"+ disgiunta.getRepresentativeElement().getIRI().getFragment());
}
//display istanze della classe
System.out.println("Istanze:");
for(Node<OWLNamedIndividual> individuo : hermit.getInstances(e)) {
System.out.println("\t"+ individuo);
}
}
}
hermit.dispose();
}
您必須使用ReasonerFactory
,即對於HermiT,您必須導入以下內容:
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.HermiT.ReasonerFactory;
以下代碼將創建一個HermiT推理程序。
OWLReasonerFactory reasonerFactory = new ReasonerFactory();
OWLReasoner reasoner = reasonerFactory.createReasoner(ontology);
您的pom.xml需要包括:
<dependency>
<groupId>net.sourceforge.owlapi</groupId>
<artifactId>owlapi-distribution</artifactId>
<version>5.1.8</version>
</dependency>
<dependency>
<groupId>net.sourceforge.owlapi</groupId>
<artifactId>org.semanticweb.hermit</artifactId>
<version>1.4.3.517</version>
</dependency>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.