我的问题很简单但可能没有意义。 (在这种情况下,对于那些花时间向我解释原因的人表示遗憾) 我想创建一个像(我不在这里显示所有资源声明)的资源:
<owl:DatatypeProperty rdf:about="relation:isPartOf">
<rdfs:domain rdf:resource="http://www.w3.org/2004/02/skos/core#note"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#anyURI"/>
</owl:DatatypeProperty>
<rdf:Description rdf:about="resource:context:sc#c1">
<skos:note rdf:datatype="relation:isPartOf" rdf:resource="resource:context:sc#c2">
</skos:note>
</rdf:Description>
重要的是看到关于skos的三重奏:注意关系
主题:c1 a uri。谓词:skos:注意,对象:类型的URI
我的URI不是直接URI,而是“关系; isPartOf”uri。
我创建了一个自定义typedUri类来做/我使用自制的三重商店,所以我可以使用自己的类。
我改变了一点RDFXMWritter来输出这些例子。所以“它有效”。
我的问题更多:可以像这样输入URI吗?为什么芝麻openrdf不提供TypedURI类?我确定有充分的理由吗?任何帮助,想法或答案都会很好。
我很确定,我在某处创建TypedURi类的想法是错误的。但是哪里 ? :-) 谢谢
编辑:TypedURI并不是一种新的资源。我上下文中的URI仍然是URI。我只是在我的skos:note语句中声明,对于c1,语句的对象是“relation:isPartOf”类型的数据,数据的范围是anyURI。 ... typedURI有助于实现具有此范围的数据类型。答案 0 :(得分:5)
首先:不,在RDF中不能像这样输入URI。这也回答了您的第二个问题:OpenRDF Sesame不提供此功能,因为它不是RDF模型的一部分。
通过使用rdf:type
关系,将资源URI链接到类URI,可以键入URI(或更准确地说,使用URI标识的资源)。例如,要创建类型为ex:p1
的资源foaf:Person
,我们会说(使用Turtle语法进行RDF):
ex:p1 rdf:type foaf:Person .
还有另一种RDF类型,即数据类型。这仅适用于文字值,因此不能在URI上使用。它用于将文字值设为字符串,整数,日期等。
更新可能会出现混淆,因为xsd:anyURI
是RDF中的有效数据类型,并且(在XML Schema中)被定义为URI的类型。但是,在RDF中使用数据类型时,其词法空间始终是文字(因为规范只允许文字实际上具有数据类型)。所以你确实可以这样做(使用Turtle语法作为文字表示法):
"http://www.example.org/some/uri"^^xsd:anyURI
但是从RDF模型的角度来看,这不是URI,而是文字字符串(数据类型为xsd:anyURI
)。所以从某种意义上说,是的,你可以在RDF中为URI添加类型,但是你只能通过&#34;转换&#34;来实现这一点。他们首先是文字。