2017-10-08 70 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感知工具,或者你將本體存儲在版本控制系統中(在排序的不同可能導致大的不必要的差異),你可以忽略這些差異。您使用的代碼按預期工作。