【问题标题】:Is there a syntax to define cyclic reference between anonymous nodes in Turtle RDF?Turtle RDF 中是否有定义匿名节点之间循环引用的语法?
【发布时间】:2015-02-23 14:58:53
【问题描述】:

我正在寻找一种用于调用匿名节点的海龟语法,该匿名节点调用另一个匿名节点。

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

: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
            ];
        ];
    ].

有没有为此目的的海龟语法?

【问题讨论】:

  • 这是一个好问题。这是一个简单的答案(“否”),但这是我听到很多人要求的东西。在 Common Lisp 中有一个循环对象表示法。例如,一个循环列表可以写成'#1=(a b c . #1#),并且该符号适用于任何重复的东西,例如,一个长度为2且元素重复的列表可以是'(#1=(a b c) #1#)。我真的希望 Turtle 有这样的东西。

标签: syntax rdf turtle-rdf blank-nodes


【解决方案1】:

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

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

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

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

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

那么,您的文档将如下所示:

:Instance0 a Class0;
    :property0 _:instance1.

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

请参阅RDF 1.1 Turtle、简洁 RDF 三重语言中的2.6 RDF Blank Nodes 了解更多详情。

【讨论】:

  • 但最后我不得不手动定义一个空白节点名称_:instance1 来引用它,即使它是“父”实例。好的。
  • 是的 - instance1 标签在 Turtle 文档本身之外没有意义,但文档的作者负责分配空白节点标签并跟踪它们的使用情况。 RDF 不是分层数据模型,因此没有“父”资源的概念。
  • 这是有问题的概念。谢谢。
猜你喜欢
  • 2017-05-12
  • 2012-01-31
  • 2013-08-05
  • 2019-02-23
  • 1970-01-01
  • 2018-02-12
  • 2012-05-11
  • 2010-09-22
  • 1970-01-01
相关资源
最近更新 更多