【问题标题】:OWL API: Traverse imported ontologyOWL API:遍历导入的本体
【发布时间】:2019-05-04 05:15:30
【问题描述】:

我正在尝试将一个本体导入主本体,并遍历所有类:

     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)中的类。

【问题讨论】:

  • 像往常一样,Javadoc 是您的朋友……正如您所见,如果您单击链接,则可以选择提供参数:Set&lt;OWLClass&gt; getClassesInSignature(boolean includeImportsClosure) 和描述 " includeImportsClosure - 如果为 true,则包含导入关闭。"
  • 顺便说一句,要遍历所有类,您不需要推理器。

标签: owl ontology owl-api pellet


【解决方案1】:

问题中的代码包含一个错误:它没有将所需的导入本体(披萨)加载到管理器中。

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

这些行只是将owl:imports 声明添加到pizza-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());

然后您可以从两个本体中获取所有 OWL 类作为单个集合或 java-Stream:

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

另外请注意:Set&lt;OWLClass&gt; getClassesInSignature(boolean includeImportsClosure) 方法已被弃用(在 OWL-API v5 中)。

【讨论】:

  • 谢谢,我试试看。有没有 OWL-API v5 库的教程?
猜你喜欢
  • 2013-05-12
  • 2014-05-03
  • 2018-03-18
  • 1970-01-01
  • 2017-11-14
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
相关资源
最近更新 更多