2012-10-24 95 views
1

我試圖鏈接兩個人A和使用setSameAs()關聯數據---耶拿

 B.setSameAs(A) OR A.setSameAs(B) 

A具有性質hasOne,hasTwo乙

B有一個屬性hasThree

和我希望B的屬性可以推斷爲屬性A.不幸的是,當我列出A的屬性時,hasThree不會出現

這是我的設置:

 OntModel onto = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF, null); 

     String NAMESPACE1 = "http://mynamespace.one#"; 
     String NAMESPACE2 = "http://mynamespace.two#"; 

     OntClass myClass = onto.createClass(NAMESPACE1 + "MyClass"); 

     Individual a = onto.createIndividual(NAMESPACE1 + "A", myClass); 
     Individual b = onto.createIndividual(NAMESPACE2 + "B", myClass); 

注:我用於乙不同的命名空間來模擬不同的地址,但是在此設置中它正在使用的同一類型

 OntProperty one = onto.createOntProperty(NAMESPACE1 + "hasOne"); 
     OntProperty two = onto.createOntProperty(NAMESPACE1 + "hasTwo"); 
     OntProperty three = onto.createOntProperty(NAMESPACE2 + "hasThree"); 

注:hasThree屬性位於同一B的地址

 a.setLiteral(one, true); 
     a.setLiteral(two, true); 
     b.setLiteral(three, true); 

     a.setSameAs(b);   //THIS results in the RDF entry for A to have a line <owl:sameAs rdf:resource:"http://mynamespace.two#B" /> 
     //b.setSameAs(a);   //I TRIED using this too, but it didn't work either 

     // IN HERE I JUST SET AN ITERATOR TO SHOW ALL OF THE PROPERTIES OF A 
     // UNFORTUNATELY, hasThree DOESN'T SHOW UP UNDER THE PROPERTIES OF A 

我已經列舉了困擾我的事情。

  1. 當我嘗試列出A的所有屬性時,hasThree不顯示出來。
  2. 當我列出MyClass的所有個人時,A和B都出現 - 我想這不是A = B和B = A以來的正確結果,所以只應顯示1個人。

回答

3

您沒有使用支持owl:sameAs

Jena documentationOWL Reasoning推理輪廓有,列出了不同的推理型材OWL覆蓋的表。

行爲owl:sameAs狀態如下:

owl:sameAs, owl:differentFrom, owl:distinctMembers | full, mini | owl:distinctMembers is currently translated into a quadratic set of owl:differentFrom assertions. 

所以爲了得到你的願望,你必須使用一個完整的/迷你OWL推理的行爲,你的代碼顯示您正在使用的微推理。

更改您的代碼使用OntModelSpec.OWL_MEM_MINI_RULE_INF應該解決您的問題。