使用OWL-API和Hermit打印比萨本体超类

时间:2016-10-06 07:34:25

标签: java ontology protege rdfs owl-api

我尝试打印从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 。为什么程序没有打印这两个名字?

我在哪里做错了?

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

您的本体IRI是本地文件名。当您使用它来获取类IRI时,您将获得与本体中实际使用的IRI不同的IRI。检查班级实际拥有的IRI,这应该可以解决您的问题。