【问题标题】:How to produce triple with differentFrom vocab in OWLAPI如何在 OWLAPI 中使用不同的词汇生成三元组
【发布时间】:2021-12-22 01:21:44
【问题描述】:

我尝试在 Java 中使用 OWLAPI 5 创建不同的个人公理。我想要的是使用 vocab owl:differentFrom 的简单三元组:

test:A owl:differentFrom test:B

但我得到的是使用 owl:AllDifferent 的三倍:

_:genid234 rdf:type owl:AllDifferent
_:genid234 owl:distinctMembers _:genid236
_:genid236 rdf:rest _:genid235
_:genid236 rdf:rest rdf:nil
_:genid235 rdf:first test:A
_:genid235 rdf:type rdf:List
_:genid236 rdf:first test:B
_:genid236 rdf:type rdf:List

简单的代码是:

OWLNamedIndividual op1 = factory.getOWLNamedIndividual(baseIRI + A);
OWLNamedIndividual op2 = factory.getOWLNamedIndividual(baseIRI + B);
ont.add(factory.getOWLDifferentIndividualsAxiom(op1, op2));

我已经在 Protege 5.5.0 上尝试过,它产生的三元组与 OWLAPI 完全相同。

【问题讨论】:

标签: owl owl-api


【解决方案1】:

还有一个 OWLAPI-v5 的替代实现,它提供了一种直接处理底层 RDF 数据的方法 - ONT-API(顺便说一下,基于 RDF 的 Protege 版本也存在)。 如果通过 OWLAPI 接口处理两个操作数,它会产生一个三元组。

如果您更喜欢以 OWL 公理的形式存储数据并且只需要通过序列化解决这个特定问题,那么也可以在 ont-api 管理器和 owl-api-impl 管理器之间复制本体。

示例:

        String iri = "http://test#";
        OWLDataFactory factory = OntManagers.getDataFactory();
        Ontology ont = OntManagers.createManager().createOntology();
        ont.asGraphModel().setNsPrefix("test", iri);

        OWLNamedIndividual ia = factory.getOWLNamedIndividual(iri + "A");
        OWLNamedIndividual ib = factory.getOWLNamedIndividual(iri + "B");
        OWLNamedIndividual ic = factory.getOWLNamedIndividual(iri + "C");

        ont.add(factory.getOWLDifferentIndividualsAxiom(ia, ib, ic));

        ont.add(factory.getOWLDifferentIndividualsAxiom(ia, ic));

        OntModel g = ont.asGraphModel();

        g.createIndividual(iri + "D").addDifferentIndividual(g.createIndividual(iri + "C"));
        g.createDifferentIndividuals(g.createIndividual(iri + "e"), g.createIndividual(iri + "g"));

        g.write(System.out, "ttl");
        System.out.println("=".repeat(42));
        ont.axioms().forEach(System.out::println);

出来:

@prefix owl:  <http://www.w3.org/2002/07/owl#> .
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix test: <http://test#> .
@prefix xsd:  <http://www.w3.org/2001/XMLSchema#> .

[ rdf:type     owl:AllDifferent ;
  owl:members  ( test:e test:g )
] .

test:g  rdf:type  owl:NamedIndividual .

test:B  rdf:type  owl:NamedIndividual .

[ rdf:type  owl:Ontology ] .

test:e  rdf:type  owl:NamedIndividual .

test:C  rdf:type  owl:NamedIndividual .

test:A  rdf:type           owl:NamedIndividual ;
        owl:differentFrom  test:C .

test:D  rdf:type           owl:NamedIndividual ;
        owl:differentFrom  test:C .

[ rdf:type             owl:AllDifferent ;
  owl:distinctMembers  ( test:A test:B test:C )
] .
==========================================
Declaration(NamedIndividual(test:g))
Declaration(NamedIndividual(test:e))
Declaration(NamedIndividual(test:D))
Declaration(NamedIndividual(test:C))
Declaration(NamedIndividual(test:B))
Declaration(NamedIndividual(test:A))
DifferentIndividuals(test:C test:D)
DifferentIndividuals(test:A test:C)
DifferentIndividuals(test:e test:g)
DifferentIndividuals(test:A test:B test:C)

【讨论】:

  • 您能指出我在哪里可以获得基于 RDF 的 Protege for Desktop 吗?因为我在 Protege 网站上没有找到它。
  • github.com/sszuev/rdf-protege 我认为这应该被视为一个演示分支,而不是一个真正的完全支持的项目,即证明基于 RDF 的方法不是死胡同,正如人们可能认为的那样猫头鹰API。无论如何,有一个 RDF 编辑器和 SPARQL 选项卡,请参阅 project-wiki
猜你喜欢
  • 2017-01-07
  • 2016-03-15
  • 2014-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-14
相关资源
最近更新 更多