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

时间:2017-10-08 11:28:21

标签: java apache jena ontology protege

我是使用Apache Jena的新手。我在这里面临一个问题。

我使用Protege设计了一个RDF文件。基本上,我有三个对象属性,即ASSOCIATION,AGGREGATION,&组成。 AGGREGATION&组成是ASSOCIATION的子属性。正如你可以从Protege这里一样,这三个对象可以很好地一起生成。

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

  

Model m = ModelFactory.createDefaultModel();         字符串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&组成

2)AGGREGATION&的子属性的方式产生的成分是不同的。

非常感谢任何帮助。

Expected output generated from Protege & output generated with Jena

谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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