猫头鹰API:遍历进口本体论



我正在尝试将本体论导入主要本体论,并在所有类中遍历:

     manager = OWLManager.createOWLOntologyManager();
            ontology = manager.loadOntologyFromOntologyDocument(new File("data/prim.owl"));
            factory = manager.getOWLDataFactory();
            OWLImportsDeclaration im = factory.getOWLImportsDeclaration(IRI.create("https://protege.stanford.edu/ontologies/pizza/pizza.owl"));
            manager.applyChange(new AddImport(ontology,im));
            reasoner = OpenlletReasonerFactory.getInstance().createReasoner(ontology);

我正在运行此代码以获取所有类:

      //*********************
            Set<OWLClass> allCls = ontology.getClassesInSignature();
            allCls.forEach(System.out::println);

属于prim.owl的类,但未返回导入本体(pizza.owl(中的类。

问题中的代码包含一个错误:它不会将所需的导入本体(比萨饼(加载到管理员中。

OWLImportsDeclaration im = factory.getOWLImportsDeclaration(IRI.create("https://protege.stanford.edu/ontologies/pizza/pizza.owl"));
manager.applyChange(new AddImport(ontology,im));

这些行只需将owl:imports声明添加到披萨-IRI的本体学标头(_:x a owl:Ontology(中即可。

要使代码正常工作,您需要分别加载披萨 - 内存:

OWLOntology pizza = manager.loadOntology(IRI.create("https://protege.stanford.edu/ontologies/pizza/pizza.owl"));
OWLImportsDeclaration im = factory.getOWLImportsDeclaration(pizza.getOntologyID().getOntologyIRI().orElseThrow(AssertionError::new));
manager.applyChange(new AddImport(ontology, im));

现在,您可以检查所有导入和参考是否确实存在和正确,因此,您的本体论提到了披萨本体:

Assert.assertEquals(1, ontology.importsDeclarations().count());
Assert.assertEquals(1, ontology.imports().count());
Assert.assertEquals(2, manager.ontologies().count());

然后,您可以从两个本体学或Java-stream中获得所有猫头鹰类:

ontology.classesInSignature(Imports.INCLUDED).forEach(System.err::println);

另外,请注意:将方法Set<OWLClass> getClassesInSignature(boolean includeImportsClosure)弃用(在OWL-API v5 中(。

相关内容

  • 没有找到相关文章

最新更新