我尝试打印从here下载的标准比萨本体的超类。我使用的是OWL API 3.4.3和Hermit 1.3.8.1(推理者)。
以下代码段用于打印所需的超类班级"食物" 。
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 World\n"+superClasses.iterator().toString());
for (OWLClassExpression g : superClasses) {
System.out.println("The superclasses are:"+g);
}
}
catch (Exception e) {
e.printStackTrace();
}
我没有收到任何编译错误。结果是在TRY 1 。 for循环 中的内容尚未打印。
在5.0版本中,我看到了两个超级食品类;即 DomainConcept 和 owl:Thing 。为什么程序没有打印这两个名字?
我在哪里做错了?
感谢您提供任何帮助。
答案 0 :(得分:1)
您的本体IRI是本地文件名。当您使用它来获取类IRI时,您将获得与本体中实际使用的IRI不同的IRI。检查班级实际拥有的IRI,这应该可以解决您的问题。