我正在使用rdflib
将新的SIOC:Forum存储在SOLID POD上。 https://www.w3.org/Submission/sioc-spec/#sec-modules-types声明SIOC:Forum可以具有ChatChannel的子类型/子类。如何为我的乌龟(.ttl)请求建模以存储此子类?
@prefix sioc: <http://rdfs.org/sioc/ns#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix types: <http://rdfs.org/sioc/types> .
@base <${uri}> .
:forum
a sioc:Forum ;
sioc:has_host <https://banyan.msg> ;
sioc:has_owner <${owner}> ;
rdf:type types:ChatChannel ; # <- is this correct?
sioc:has_subscriber [
a sioc:User ;
sioc:account_of <${partner}>
] .
答案 0 :(得分:2)
我的第一个猜测是,您在#
前缀声明的末尾缺少了types
。应该是@prefix types: <http://rdfs.org/sioc/types#> .
另一项观察thanks to @timbl是,您可以通过仅在一条a
行上列出多种类型并完全删除rdf
前缀和用法来简化此操作:
a sioc:Forum, types:ChatChannel ;
#
在乌龟文档的其余部分中,前缀直接交换为其相应的prefix:
用法。这意味着您对types:ChatChannel
的引用将转换为http://rdfs.org/sioc/typesChatChannel
,这显然不是您想要的。
请注意,您可能总是不需要#
。它取决于名称空间。在这种情况下,您尝试引用嵌入更大文档中的特定内容,因此您可以使用url段来实现。一些名称空间(例如schema.org)为每件事分配不同的url路径。在这种情况下,前缀必须以/
结尾。
a
如果您还不知道,这一点都不明显,但是turtle中的a
关键字是同一rdf:type
谓词的别名。请参阅w3 turtle文档中的this one sentence。而且,由于它是乌龟,所以您始终可以使用逗号在谓词之后传递对象列表。