当我在本体中定义属性时,如何定义此属性的范围是“空白”节点?例如,我想使用域hasPhoneNumber
定义属性Person
。我知道该人可以拥有多个电话号码,因此Person
的实例将空白节点附加到hasPhoneNumber
属性,然后附加到此空白节点的电话号码。
答案 0 :(得分:3)
简而言之,你不能这样做。空白节点只是另一种类型的资源。空白节点在RDF中充当存在变量;在图表中使用空白节点表示某些资源存在并与其他资源保持某种关系。例如,图表(没有空白节点):
:x :hasPhoneNumber :phoneNumberList .
:phoneNumbeList rdf:value "phone number 1", "phone number 2" .
需要以下图表(带有空白节点):
:x :hasPhoneNumber [ rdf:value "phone number 1", "phone number 2" ] .
有关此处理的更多信息,请参阅W3C建议1.5. Blank Nodes as Existential Variables中的RDF Semantics。
在RDF和RDFS级别(您将定义域和属性范围),以区分资源是URI资源还是空白节点。如果可以的话,它也不是很清楚意味着什么。通过说那个
:p rdfs:domain :C ;
rdfs:range :D .
您所说的是,只要您看到使用:p
,例如
:a :p :b .
您可以将以下三元组添加到图表中:
:a rdf:type :C .
:b rdf:type :D .
注意,由于rdfs:domain
和rdfs:range
是关于向图表添加更多三元组,因此使用:p
(:a
的三元组的主题和对象无关紧要在这种情况下,{和:b
是空白节点或URI节点。
如果您想为一个人提供多个电话号码,您可以使用多个三元组,并具有以下内容:
:p :hasPhoneNumber :phoneNumber1 , :phoneNumber2, :phoneNumber3 .
这是三个三元组:
:p :hasPhoneNumber :phoneNumber1 .
:p :hasPhoneNumber :phoneNumber2 .
:p :hasPhoneNumber :phoneNumber3 .
或者,如果您想模拟一个人可以拥有一些电话号码集合,您可以使用RDF容器。例如,rdf:List
:
:p :hasPhoneNumber ( :phoneNumber1 :phoneNumber2 :phoneNumber3 ) .
可以全文写成
:p :hasPhoneNumber [ rdf:first :phoneNumber1 ;
rdf:rest [ rdf:first :phoneNumber2 ;
rdf:rest [ rdf:first :phoneNumber3 ;
rdf:rest rdf:nil ] ] ] .