在OWL API 4.0中检索命名个体所属的类

时间:2014-09-30 21:16:53

标签: java eclipse owl-api

考虑一个有名的个人“牛”。它的类也是“牛”,反过来牛是哺乳动物的子类,哺乳动物是生命的子类,依此类推。如果我有权访问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

感谢。

1 个答案:

答案 0 :(得分:2)

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

此外,有可能是双关语(即OWLNamedIndividualOWLClass可以具有相同的IRI),但这两个实体是不同的,所以从一个你不能直接去另一个

版本4中已删除

OWLNamedIndividual.getTypes(OWLOntology)

可以达到相同的效果

EntitySearcher.getTypes(OWLIndividual, OWLOntology)

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

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

然而,据我所知,没有使用OWLAPI 4的reasoners版本。有几个实验分支: JFact的version4分支处于SNAPSHOT状态:https://github.com/owlcs/jfact 使用OWLAPI 4的HermiT分支可在此处获取:https://github.com/ignazio1977/hermit-reasoner 两者都需要使用本地构建。