0

rdflib用来在 SOLID POD 上存储一个新的 SIOC:Forum。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}>
  ] .
4

1 回答 1

2

概括

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

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

a sioc:Forum, types:ChatChannel ;

细节

使用#

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

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

使用a

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

于 2018-11-13T08:58:16.663 回答