如何在RDF中为SIOC论坛分配子类?

时间:2018-11-13 08:27:37

标签: rdf turtle-rdf solid

我正在使用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}>
  ] .

1 个答案:

答案 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。而且,由于它是乌龟,所以您始终可以使用逗号在谓词之后传递对象列表。