我使用Jena java api在本体中搜索,我使用命令
Property predicate=model.getProperty("propertyURL");
NodeIterator objects = model.listObjectsOfProperty(predicate);
查找特定属性的所有实例,
其中model
是加载本体文件的OntModel。
现在,我需要找到这些实例所属的父节点/类。
由于对象是RDFNode,我尝试了方法RDFNode.getClass()
,但它只返回class com.hp.hpl.jena.rdf.model.impl.ResourceImpl
,这不是我需要的。
我需要与Individual.getOntClass()
类似的东西。我还尝试将RDFNode对象转换为Individuals然后使用此函数,但在这种情况下,似乎该类在此转换期间未保存,因为它返回#Thing类(最重要的是)。 / p>
关于如何获得对象类的任何想法?
提前致谢!
答案 0 :(得分:1)
有点难以知道这是否在没有看到数据的情况下回答了您的问题,但可能有一个简单的解释。
在OWL和RDF中,一个类只是一组资源(例如:Cat
是所有猫的集合,:Tabby
是所有具有虎斑着色的东西的集合,并且资源可以成为许多集合的成员(虎斑猫将成为这两个示例集的成员)。这在实践中意味着资源可能,并且在实践中通常 具有多个rdf:type
。方法OntResource.getRDFType()
仅返回表示类的单个资源,因此对于具有多种类型的资源,getRDFType
将只选择它找到的第一个。作为程序员,您无法控制选择哪一个,并且无法保证您每次都会获得相同的一个(简短的技术说明:它取决于您在任何三重商店中使用的索引的行为)时间)。但是,如果您想知道资源所属的类的所有,而不仅仅是其中的任意一个,请使用OntResource.listRDFTypes()
,它将为您提供所有这些的迭代器。