如何将子类分配给 RDF 中的 SIOC 论坛?

How to assign a subclass to a SIOC Forum in RDF?

我正在使用 rdflib 在 SOLID POD 上存储新的 SIOC:Forum。 https://www.w3.org/Submission/sioc-spec/#sec-modules-types 表示 SIOC:Forum 可以拥有 ChatChannel 的 subtype/subclass。如何为我的 turtle (.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}>
  ] .

总结

我的第一个猜测是您缺少 types 前缀声明末尾的 #。应该是 @prefix types: <http://rdfs.org/sioc/types#> .

另一个观察结果 thanks to @timbl 是,您可以通过在 a 行中列出多种类型并完全删除 rdf 前缀和用法来简化此操作:

a sioc:Forum, types:ChatChannel ;

详情

使用 #

前缀直接换入它们在 turtle 文档的其余部分中相应的 prefix: 用法。这意味着您对 types:ChatChannel 的引用将被翻译为 http://rdfs.org/sioc/typesChatChannel,这显然不是您想要的。

请注意,您可能不会总是需要#。这取决于命名空间。在这种情况下,您试图引用嵌入在较大文档中的特定内容,因此您使用 url 段来实现这一点。一些名称空间,如 schema.org,为每个事物分配不同的 url 路径。在那种情况下,前缀必须以 /.

结尾

使用 a

如果您还不知道的话一点也不明显,但是 turtle 中的 a 关键字是同一个 rdf:type 谓词的别名。请参阅 w3 乌龟文档中的 this one sentence。而且,鉴于它是乌龟,您始终可以使用逗号在谓词之后传递对象列表。