我尝试打印从这里下载的标准Pizza本体的超类。我使用OWL API 3.4.3和Hermit 1.3.8.1(推理器)。
下面的代码片段用于打印类"Food"所需的超类。OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
IRI ontologyIRI =IRI.create("file:/D:/pizza.owl.xml");
//IRI ontologyIRI =IRI.create("http://www.co-ode.org/ontologies/pizza/pizza.owl");
OWLOntology ontology = manager.loadOntology(ontologyIRI);
OWLReasoner reasoner = new Reasoner.ReasonerFactory().createReasoner(ontology);
OWLDataFactory df = manager.getOWLDataFactory();
try{
reasoner.precomputeInferences(InferenceType.CLASS_ASSERTIONS);
//following Lines are to see super classes of Container
OWLClass clsA = df.getOWLClass(IRI.create(ontologyIRI + "#Food"));
Set<OWLClassExpression> superClasses = clsA.getSuperClasses(ontology);
System.out.println("in TRY 1");
//System.out.println("Hello Worldn"+superClasses.iterator().toString());
for (OWLClassExpression g : superClasses) {
System.out.println("The superclasses are:"+g);
}
}
catch (Exception e) {
e.printStackTrace();
}
没有得到任何编译错误。在TRY 1中,结果是。for循环中的内容没有被打印。
在protege 5.0中,我看到了Food类的两个超类;即DomainConcept和owl:Thing。为什么这两个名字没有被程序打印出来?
我哪里做错了?
谢谢你的帮助
您的本体IRI是一个本地文件名。当您使用它来获取类IRI时,您将获得与本体中实际使用的IRI不同的IRI。检查类实际具有的IRI,这应该可以解决您的问题。