当使用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>
node1
和node2
是我称之为实例或个人的,而http://purl.oclc.org/NET/ssnx/ssn#Device
是它实例化的类。
你知道区分它的方法吗?通过使用isUriResource()
,isResource()
等,我得到了相同的结果。我们还要说,获取rdf:type
属性不仅有效,因为可能有其他属性链接到类。
任何帮助都非常受欢迎。
答案 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 值。确定某个东西是否是一个类的唯一方法是寻找:
但是,在Jena中,如果您使用 OntModel 并获取资源作为OntResouce的实例,则可以使用isClass()和isIndividual()方法检查资源是否可以被视为一个类或一个人。请注意,这些方法描述包括(强调添加):
如果此资源可以作为班级查看,则回答“是”
如果此资源可以作为个人
查看,则回答“是”
可以查看该短语&#34;&#34;很重要,因为如上所述,资源可以同时是类,个体和属性。资源可能被视为不止一件事。但是这些方法可能适用于大多数用例。