我是使用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
谢谢。
答案 0 :(得分:1)
您显示的两个RDF文件在语义上是等效的。你所看到的是公理的排序不同。 OWL没有定义公理序列化的顺序,因此每个库在这方面都有自己的选择。
Protege依赖于OWL API来写出本体,OWL API首先按类型对内容进行排序,然后按内容排序 - 在这种情况下首先是公理中子属性的IRI。
除非您使用某些非RDF感知工具,或者您将本体存储在版本控制系统中(其中排序的差异可能会导致大量的,不必要的差异),否则您可以忽略这些差异。您正在使用的代码正在按预期工作。