1

我正在尝试使用链接两个人 A 和 B

      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);

注意:我为 B 使用了不同的命名空间来模拟不同的地址,但在此设置中它使用相同的类类型

      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 个个人。
4

1 回答 1

4

您没有使用支持的推理配置文件owl:sameAs

Jena 文档的OWL 推理中,有一个表格列出了不同推理器配置文件的 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应该可以解决你的问题。

于 2012-10-24T20:10:16.740 回答