Apache Jena 自动将对象属性合并在一起

Apache Jena automatically merge object properties together

我是 Apache Jena 的新手。我在这里遇到了问题。

我使用 Protege 设计了一个 RDF 文件。基本上,我有三个对象属性,它们是 ASSOCIATION、AGGREGATION 和 COMPOSITION。 AGGREGATION 和 COMPOSITION 都是 ASSOCIATION 的子 属性。正如您可以从 Protege 中看到的那样,这三个对象可以很好地一起生成。

然而,当我将 Jena 与 Java 一起使用时(下面是我的代码),生成的输出与预期结果不同。

Model m = ModelFactory.createDefaultModel(); String NS = "http://example.com/test/";

  OntModel ontoModel = >ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM, null);     

  ObjectProperty ASSOCIATION = ontoModel.createObjectProperty(NS + >"ASSOCIATION");
  ObjectProperty AGGREGATION = ontoModel.createObjectProperty(NS + >"AGGREGATION");
  AGGREGATION.addProperty(RDFS.subPropertyOf, ASSOCIATION);
  ObjectProperty COMPOSITION = ontoModel.createObjectProperty(NS + >"COMPOSITION");
  COMPOSITION.addProperty(RDFS.subPropertyOf, ASSOCIATION);

如您在生成的输出中所见:

1) ASSOCIATION 对象 属性 嵌套在 AGGREGATION & COMPOSITION 下面。

2) AGGREGATION & COMPOSITION的子属性生成方式不同

非常感谢任何帮助。

Expected output generated from Protege & output generated with Jena

您显示的两个 RDF 文件在语义上是等价的。您所看到的是公理排序的差异。 OWL 没有定义公理序列化的顺序,因此每个库在这方面都有自己的选择。

Protege 依靠 OWL API 写出 ontology,OWL API 首先按类型然后按内容对公理进行排序- 在这种情况下,首先是公理中子属性的 IRI。

除非您正在使用一些非 RDF 感知工具,或者您将本体存储在版本控制系统中(其中顺序差异会导致大的、不必要的差异),否则您可以忽略这些差异。您使用的代码按预期工作。