2012-10-24 47 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应该解决您的问题。