Jena API在类和类的实例之间进行区分

时间:2016-05-20 09:15:26

标签: class rdf jena ontology

当使用Jena API列出符合资源的所有语句时,我找不到区分主语或对象是否是类或类本身的实例的方法。

<http://jlanza.net/node1>  <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>  <http://purl.oclc.org/NET/ssnx/ssn#Device>
<http://jlanza.net/node1>  <http://purl.oclc.org/NET/ssnx/ssn#onPlatform>  <<http://jlanza.net/node2>

node1node2是我称之为实例或个人的,而http://purl.oclc.org/NET/ssnx/ssn#Device是它实例化的类。

你知道区分它的方法吗?通过使用isUriResource()isResource()等,我得到了相同的结果。我们还要说,获取rdf:type属性不仅有效,因为可能有其他属性链接到类。

任何帮助都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

一般来说,差别不大

RDF本身并没有做出这种区分。 Rdf:type 只是另一个常用作属性的IRI。当然,在实践中,我们为 rdf:type 指定了一些特殊含义,我们指出了类成员资格。也就是说,当我们有三倍的形式

x rdf:type y

我们说(个体)x是(类)y的一个实例。但在RDF(S)推理中,这也让我们推断出

y rdf:type rdfs:Class

表示(个人,但也是一个类)y是(类) rdfs:Class 的实例。因此,个人和阶级之间没有明显的区别。事实上,对于属性p,我们也有

p rdf:type rdfs:Property

所以(属性)p 也是个人!在纯RDF中,唯一的方法是确定&#34;类型&#34;个人的意思是查找其 rdf:type 值。确定某个东西是否是一个类的唯一方法是寻找:

  • 它被用作一个类,即作为 x rdf:type C 形式的三元组中的对象;或
  • 被声明为具有三元组的类,如 C rdf:type rdfs:Class (或者,如果您正在使用OWL, C rdf:type owl:Class < /强>)。

在Jena中,OntResource可以使用isClass和isIndividual

进行检查

但是,在Jena中,如果您使用 OntModel 并获取资源作为OntResouce的实例,则可以使用isClass()isIndividual()方法检查资源是否可以被视为一个类或一个人。请注意,这些方法描述包括(强调添加):

  

如果此资源可以作为班级查看,则回答“是”

  

如果此资源可以作为个人

查看,则回答“是”

可以查看该短语&#34;&#34;很重要,因为如上所述,资源可以同时是类,个体和属性。资源可能被视为不止一件事。但是这些方法可能适用于大多数用例。