Jena API 区分 class 和 class 的实例

Jena API differenciate between class and instance of a class

当使用 Jena API 列出符合资源的所有语句时,我找不到区分主体或客体是 class 还是 [=29 的实例的方法=]本身。

<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是它实例化的class。

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

非常欢迎任何帮助。

总的来说,差别不大

RDF 本身并没有做出这种区分。 Rdf:type 只是另一个 IRI,通常用作 属性。当然,在实践中,我们给 rdf:type 赋予了一些特殊的含义,从而表示 class 成员资格。也就是说,当我们有一个形式为

的三元组时
x rdf:type y

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

y rdf:type rdfs:Class

表示(个体,也是class)y是(class)的实例rdfs:Class。所以个人和 classes 之间没有真正明确的区别。事实上,对于一个属性 p,我们也有那个

p rdf:type rdfs:Property

所以(属性)p 也是个人!在纯 RDF 中,确定个体“类型”的唯一方法是查找其 rdf:type 值。确定某物是否为 class 的唯一方法是寻找:

  • 它被用作 class,即作为 x rdf:type C 形式的三元组中的对象;或
  • 被声明为 class 和像 C rdf:type rdfs:Class 这样的三元组(或者,如果你使用 OWL, C rdf:type owl:Class).

在耶拿,OntResource 可以检查 isClass 和 isIndividual

但是,在耶拿,如果您使用 OntModel 并将资源作为 OntResouce, you can use the methods isClass() and isIndividual() 的实例来检查资源是否可以被视为 class 或个人。请注意,这些方法描述包括(强调):

Answer true if this resource can be viewed as a class

Answer true if this resource can be viewed as an individual

“可以查看”这句话很重要,因为正如我上面所描述的,资源可以同时是 classes、个人和属性。资源可能被视为不止一件事。但这些方法可能适用于大多数用例。