1

考虑一个命名的个体“牛”。它的类也是“牛”,而牛又是哺乳动物的子类,哺乳动物是生物的子类,依此类推。如果我可以访问 OWLNamedIndividual 如下:-

for (OWLNamedIndividual i : localUni.getIndividualsInSignature())
    {
      Code that should give me ...
      i = Cow (NamedIndividual)
      Class = Cow
      One Level up class = Mammal
    }

我尝试了以下但无济于事

System.out.println(i.getEntityType().getName()  );  
System.out.println(i.getEntityType().toString()  );  
System.out.println(i.getTypes(myontology) ); // this would give me error   NoSuchMethodError

谢谢。

4

1 回答 1

3

getEntityType()只返回 OWLCLASS/OWLOBJECTPROPERTY/OWLNAMEDIDIVIDUAL,即关于实体是什么的 OWLAPI 特定值,而不是关于它在本体中的角色或层次结构中的位置。

此外,可以使用双关语(即 anOWLNamedIndividual和 anOWLClass可以具有相同的 IRI),但是这两个实体是不同的,因此您不能从一个实体直接转到另一个实体。

OWLNamedIndividual.getTypes(OWLOntology)已在版本 4 中删除。可以使用

EntitySearcher.getTypes(OWLIndividual, OWLOntology)

请注意,结果将仅是个人的断言类型 - 为了获得推断结果,您需要使用OWLReasoner.

推理器的构建方式仍与 OWLAPI 3 相同:https ://github.com/owlcs/owlapi/wiki/DL-Queries-with-a-real-reasoner

然而,据我所知,没有使用 OWLAPI 4 的推理器版本。有一些实验性分支: JFact 的 version4 分支处于 SNAPSHOT 状态:https ://github.com/owlcs/jfact 在这里可以找到使用 OWLAPI 4 的 HermiT 分支: https ://github.com/ignazio1977/hermit -reasoner 两者都需要使用本地构建。

于 2014-10-01T18:34:05.343 回答