当前位置: 首页 > 知识库问答 >
问题:

OWL API:遍历导入的本体

钱京
2023-03-14

我试图将一个本体导入到主本体,并遍历所有类:

     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);

共有1个答案

宿鹏程
2023-03-14

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

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

为了使代码工作,您需要单独加载pizza-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());
ontology.classesInSignature(Imports.INCLUDED).forEach(System.err::println);

还请注意:方法set getClassesInSignature(boolean includeImportsClosure) 推荐使用(在OWL-API v5中)。

 类似资料:
  • 我一直在四处寻找,但我没有真正找到任何有意义的东西。 我试图做的是,在点击一个按钮时,在分组框之间进行更改。 现在我从: 它(使用适当分配的)将值赋给不同组框中的某些标签。这可以这样做吗?已经创建了所有的GroupBox和TextBox。 我试图实现的是,接收一个数字的文本框将全部加在一起,然后该值将存储在数据库中,并添加到所有其他“总计”中,也存储在数据库中。 这非常有效,但它不能让我获得每个组

  • 我正在为一个项目使用OWLAPI,我需要比较两个本体之间的差异。这将忽略空节点,例如,我可以确定两个本体中是否存在相同的OWL限制。我不仅需要知道是否存在差异,而且需要找出那些差异是什么。OWLAPI和oz中是否存在这样的功能,有没有一个相对简单的方法来实现这一点?

  • 问题内容: 我有一个bash脚本,在其中我需要遍历find命令的输出的每一行,但是看来我正在遍历find命令中的每个Word(以空格分隔)。到目前为止,我的脚本如下所示: 我希望这会产生如下输出: 但是我很想得到这样的输出: 我在这里做错了什么? 问题答案: 由于您没有使用的任何更高级的功能,因此可以使用简单的模式来遍历子目录:

  • 主要内容:什么是遍历?,遍历 DOM什么是遍历? jQuery 遍历,意为"移动",用于根据其相对于其他元素的关系来"查找"(或选取)HTML 元素。以某项选择开始,并沿着这个选择移动,直到抵达您期望的元素为止。 下图展示了一个家族树。通过 jQuery 遍历,您能够从被选(当前的)元素开始,轻松地在家族树中向上移动(祖先),向下移动(子孙),水平移动(同胞)。这种移动被称为对 DOM 进行遍历。 图示解析: <div> 元素是 <

  • 本文向大家介绍Swift遍历,包括了Swift遍历的使用技巧和注意事项,需要的朋友参考一下 例子            

  • 我试图在Java中使用Selenium遍历一个表(目前使用的是chromedriver)。该表的内容由不同的人组成,他们的个人资料有链接,对于该表中的每个人,我将进入他们的个人资料并提取一些信息。我将为X数量的人做这件事。该表每页包含5人,我通过单击分页按钮浏览页面” 现在来看这个问题:举个例子,我现在在exampleUrl。com/page\u包含表I,然后输入用户的配置文件并提取他们的信息,他