是否有语法来定义 Turtle RDF 中匿名节点之间的循环引用?

Is there a syntax to define cyclic reference between anonymous nodes in Turtle RDF?

我正在寻找一个 turtle 语法来调用调用另一个匿名节点的匿名节点。

例如,我想重现这段代码:

:Instance0 a Class0;
    :property0 :Instance1.

:Instance1 a Class1;
    :property1 :Instance2.

:Instance2 a Class2;
    :property2 :Instance1.

像这样的东西:

:Instance0 a Class0;
    :property0 [
        a Class1;
        :property1 [
            a Class2;
            :property2 [
                ## The syntax to call the parent, the instance of :Class1
            ];
        ];
    ].

是否有用于此目的的 turtle 语法?

RDF 的数据模型是基于图形的,而不是分层的,因此没有资源之间 parent/child 关系的概念,因此在嵌套匿名时没有内置语法来引用 'parent' 节点使用 [] 构造的资源描述(这实际上只是语法糖,用于将一组共享相同匿名主题的三元组组合在一起)。

也就是说,Turtle 的语法能够序列化每个符合要求的 RDF 图。要实现您描述的图形结构,您必须使用 _: 语法而不是更紧凑的 [] 语法来定义匿名节点。

必须使用 _: 语法而不是使用 [] 便捷语法手动分配空白节点标签的情况包括:

  • 图中的循环涉及多个匿名节点。
  • 与对象具有相同匿名节点的多个三元组。

_: 语法允许您手动分配节点标识符,这将允许您从任意三元组的主语或宾语位置引用空白节点。您分配的节点标识符在它出现的 Turtle 文档的上下文 之外 没有任何意义,因此不需要是全局唯一的。以这种方式标识的节点仍然是匿名的,因为它们不能被全局引用。但是,同一文档中内部中出现的相同空白节点标签的每次出现都指代相同的资源,因此文档的作者负责分配空白节点标签并跟踪它们在同一文档中的使用情况文件.

那么您的文档将类似于:

:Instance0 a Class0;
    :property0 _:instance1.

_:instance1 a Class1;
    :property1 [
        a Class2;
        :property2 _:instance1;
    ].

有关详细信息,请参阅 RDF 1.1 Turtle,Terse RDF 三重语言 中的 2.6 RDF Blank Nodes