1

我正在使用 Jena java api 在本体中进行搜索,并且使用命令

Property predicate=model.getProperty("propertyURL"); NodeIterator objects = model.listObjectsOfProperty(predicate);

查找特定属性的所有实例,model加载本体文件的 OntModel 在哪里。

现在,我需要找到这些实例所属的父节点/类。由于对象是 RDFNodes,我尝试了方法RDFNode.getClass(),但它只是返回 class com.hp.hpl.jena.rdf.model.impl.ResourceImpl,这不是我需要的。

我需要类似的东西Individual.getOntClass()。我还尝试将 RDFNode 对象转换为 Individuals,然后使用此函数,但在这种情况下,似乎在此转换过程中没有保存该类,因为它返回了 #Thing 类(这是最重要的一个)。

关于如何获得对象类别的任何想法?

提前致谢!

4

1 回答 1

1

在没有看到数据的情况下很难知道这是否回答了您的问题,但可能有一个简单的解释。

在 OWL 和 RDF 中,一个类只是一组资源(例如:Cat,是所有猫:Tabby的集合,是所有具有虎斑颜色的事物的集合),一个资源可以是许多集合的成员(虎斑猫是这两个示例集的成员)。这在实践中意味着一个资源可能具有并且在实践中通常确实具有多个rdf:type. 该方法OntResource.getRDFType()仅返回一个表示类的资源,因此对于具有多种类型的资源,getRDFType只会选择它找到的第一个。作为程序员,您无法控制选择哪一个,并且无法保证每次都会得到相同的(简要技术解释:这取决于您使用的任何三重存储中的索引行为)时间)。但是,如果您想知道资源所属的所有类,而不仅仅是其中的某个类,请使用OntResource.listRDFTypes(),这将为您提供所有这些类的迭代器。

于 2013-01-11T10:01:46.303 回答