2017-10-08 92 views
0

我在使用Apache Jena时很新颖。我在这里面临一个问题。Apache Jena自动将对象属性合并在一起

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

然而,当我使用耶拿与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)的关联对象属性嵌套下面聚集&组成。

2)产生聚集&组合物的方法的子属性是不同的。

这里的任何帮助非常感谢。

Expected output generated from Protege & output generated with Jena

谢谢。

回答

1

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

Protege依靠OWL API编写本体,而OWL API首先按类型排序公理,然后按其内容排序 - 在这种情况下,首先在公理中的子属性的IRI。除非你使用了一些非RDF感知工具,或者你将本体存储在版本控制系统中(在排序的不同可能导致大的不必要的差异),你可以忽略这些差异。您使用的代码按预期工作。