早上好,我正在尝试编写一个可以管理本体的 java 类,特别是我想找到单个 OWLClass 的所有属性(名称、子类、超类、ecc ..),但我没有设法例如隐士,我不明白为什么。我在 Maven 项目中使用 Eclipse,在 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();
}