【问题标题】:OWL API changing IRIs of entities in axiomsOWL API 更改公理中实体的 IRI
【发布时间】:2017-09-05 14:41:18
【问题描述】:

我正在使用 OWL API。我的问题是如何修改从文件读取的 OWLOntology 中所有 OWLAxiom 公理中所有实体的 IRI。例如,我想将本体中所有公理中的所有“http://xxx”修改为“http://yyy”。该本体中选定的示例公理是:

SubClassOf(<http://xxx#A> <http://xxx#B>)

我需要收到例如:

SubClassOf(<http://yyy#A> <http://yyy#B>)

我的问题特别暗示要更改默认 IRI,因此,我尝试指定:

PrefixOWLOntologyFormat prefix = (PrefixOWLOntologyFormat) manager.getOntologyFormat(ontology);
prefix.setDefaultPrefix(...new...);

但它并没有改变公理中的 IRI。

【问题讨论】:

  • PrefixOWLOntologyFormat 是一个已弃用的类,您使用的是什么版本?

标签: java owl owl-api


【解决方案1】:

一种解决方案是使用 OWLEntityRenamer 类。

一种基本用法如下:

OWLEntityRenamer renamer = new OWLEntityRenamer(manager, Collections.singleton(ontology));
Map<OWLEntity, IRI> entity2IRIMap = new HashMap<>();
...
ont.applyChanges(renamer.changeIRI(entity2IRIMap));

您的地图所针对的所有个人都将被重命名。 如果您想通过模式重命名您的所有个人,您必须查询您的个人的完整列表来构建地图。

这里有一个使用 OWLEntityRenamer 的完整小例子:

    final OWLOntologyManager m = OWLManager.createOWLOntologyManager();
    final OWLOntology o = m.createOntology();

    o.add(OWL.classAssertion(OWL.Individual("xxx:1"), OWL.Class("b:y")));
    o.add(OWL.classAssertion(OWL.Individual("xxx:2"), OWL.Class("b:y")));
    o.add(OWL.classAssertion(OWL.Individual("xxx:3"), OWL.Class("b:y")));
    o.individualsInSignature().forEach(System.out::println);

    final OWLEntityRenamer renamer = new OWLEntityRenamer(m, Collections.singleton(o));
    final Map<OWLEntity, IRI> entity2IRIMap = new HashMap<>();

    o.individualsInSignature().forEach(toRename ->
    {
        final IRI iri = toRename.getIRI();
        entity2IRIMap.put(toRename, IRI.create(iri.toString().replaceFirst("xxx", "yyy")));
    });

    o.applyChanges(renamer.changeIRI(entity2IRIMap));
    o.individualsInSignature().forEach(System.out::println);

应该打印:

<xxx:3>
<xxx:2>
<xxx:1>
<yyy:3>
<yyy:2>
<yyy:1>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 2020-07-30
    相关资源
    最近更新 更多