RDF简易介绍与入门

信息互联网络的 RDF

一旦我们采用跳跃式思维考虑将可解析的标识符分配给任意信息,我们就可以开始想象互联的信息网络。我们想介绍一篇文章,该文章的主题是日本国家,作者是 Bob。我们可以想象所有资源的所有相关性,用它们来表达相关的事实和内容。人们前往学校学习,为某些企业工作,他们出生在世界的某个地方,有着家人、宠物、各种兴趣和朋友。我们希望能够 “混合(intertwingle)”(Ted Nelson 的术语)所有这些东西。我们需要的是一个灵活的数据结构,并且让所有这些事情不会发生冲突。

URI 标准已经使我们能够将任意全局标识符分配给任何东西。现在我们想对概念 而不是文档或服务应用标准。在前一段的示例中,我们要为文档、日本国家和 Bob 提供标识符;这些都是系统的实体。这里将要介绍的新的与众不同的内容是,我们还希望为主题作者关系提供标识符。文档的标识符将会是主题节点。用于 Japan 和 Bob 的标识符将会是对象节点。关系标识符将这些主题连接到某些值,作为指定的、定向的圆弧。图形具有灵活的结构,可用于此用途。在使用图形时(与数据库表或 XML 文档树不同),我们可以在任何时候添加单个关联,而不影响其他结构。

在试图将整个图形都存储在一个存储系统中时,大多数图形系统都失败了。如果数据超过了一定的规模,这样的尝试通常不起作用。但是,通过使用可解析的 Web 标识符 (URL),我们可以让 Web 成为我们的图形。现在我们可以扩大到任意大小的信息空间。我们没有考虑将 Web 让入容器中,而是将东西放入 Web 中。

任何 RDF 系统都可以使用来自其他任何 RDF 系统的 RDF,无需进行任何类型的协调。

RDF 是一个具有这些属性的 W3C 标准数据模型。这些实体使用了 URI(最好是可解析的 URL),并通过直接关系进行关联(而且也以这种方式进行标识)。实体和关系都可以通过全球标识符进行引用,可以通过解析标示符来了解它们。如果我们将图形序列化成某种标准格式,那么我们将拥有完全便携的数据。任何 RDF 系统都可以使用来自其他任何 RDF 系统的 RDF,无需进行任何类型的协调。应用程序或用户可能不知道如何处理数据,但他们至少可以使用这些数据,然后查看摄入了哪些数据。

我将使用一个看似愚蠢的示例来展示 RDF 的工作原理。如果我请求您修改您的系统来接受某项声明,比如我的生日是 5 月 26 日,您可能不愿意这样做。如果您的表格没有被设置为接受某些人的概念和他们的生日,那么您可能不愿意理会这些事情。它将花费您太多的精力来更改您的表格和类结构。采用我的生日并不是一个值得高度重视的考虑事项,但这个问题仍然存在于少数荒谬的场景中。产生这个问题的部分原因是,我们认为实体是独立的事物,我们将它们存储在单独的地方。我们并不认为概念性实体是我们所了解的来自多个数据源的实体。它们之间的区别是:一个是 封闭世界 模型,一个是 RDF 的 开放世界 模式。在开放世界模型中,我们接受任何人都可以分享任何东西的事实。我们可能永远不会知道关于实体或主题的一切。这种假设可能使得 IT 经理想要拥有和控制一切,但这种假设使得系统能够保持灵活,捕获来自所有来源的任意事实。

我们需要确定我,确定生日关系,还需要知道如何表示我的生日的日期。我选择通过 URL https://w3id.org/people/bsletten 来找到我自己。该 URL 已在一个 社区 内注册,该社区承诺帮助维持已注册标识符的稳定性,这些标示符目前在一个 GitHub 库内,您可以复制、修改和发布请求来添加自己的标识符。

我通过一个 HTTP 303 See Also 重定向,将这个标识符重定向到一个描述我的文件。该重定向是目前 W3C 技术架构组(TAG)建议用于非信息资源的重定向。我的序列化做的不是特别好,所以您无法拥有当前状态的表示(通过请求获得该状态)。对我的引用与对关于我的一个文档的引用(该引用可以解除引用并进行解析)之间的区别是:303 会警告客户端,该请求是有效的,但它不能直接实现。相反,响应中包含一个称为 Location 的标头,它指向描述我的文档。(我会在下一篇文章中再次介绍这个过程。)

所以,现在我们知道了如何引用我(语句的主题),我需要一个术语来引用生日(被定义为某人的出生日)。没有任何东西可以阻止我选择自己的术语。类似 http://bosatsu.net/ns/birthday 的 URL 也可以使用,特别是在我将术语的描述放在这个位置上的时候,这样所有人都可以解析属性标识符,弄明白它的含义。不过,幸运的是,我不需要这样做。一个称为 Friend of a Friend (FOAF) 的社区已经同意一系列有关 Web 上的分布式网络和社区的术语。该规范包括一个被广泛采用的用于生日的术语:http://xmlns.com/foaf/0.1/birthday,这个术语想表达的正是我想要表达的。如果您 通过 HTTP 请求它,那么您会被带到一个描述术语集合的文档。该文档还会通知您应该采用什么样的格式:mm-dd。我们现在还要了解一个事实,该事实涉及一个主题(我)、一个谓词(http://xmlns.com/foaf/0.1/birthday)和一个值(05-26)。当三个相结合时,我们想象了一个有向图,用该图来反映这种说法,如图 1 所示。主题是节点,谓词是圆弧,值在圆弧的另一边。

图 1. 表示为一个定向图的一个事实
表示为一个定向图的一个事实

现在,我需要做的就是将我的生日发布为一个机器可以处理的事实。我将使用一个称为 N-Triples 的简单的 RDF 序列化,将语句存储到一个文件中。采用这种格式时,每行都有一个用句点终止的事实:

<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/birthday> "05-26" .

这个文件可以存储在一个文件系统上,或者发布在网上。然后,任何 RDF 系统都应该能够使用这个事实。如果其他系统的用户不知道我是谁,他们可以解析主题标识符,了解有关我的更多信息。如果他们不知道 FOAF 生日意味着什么,他们可以做同样的事情。

或许我想发表我的全名。再次声明,我可以编造我自己的姓名来提供术语 名称,但这不是必需的,因为 FOAF 已经成为了用于此目的的广泛使用术语:

<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .

图 2 中的图形反映了有关我的新事实。

图 2. 表示为一个定向图的另一个单个事实
表示为一个定向图的另一个单个事实

事情开始变得有趣起来。不管这两个事实是存储在同一个文件中,还是存储在两个不同的文件中,如果它们被读入相同的模型中,那么属性和值将会针对主题进行累积(如图 3 所示),因为这两个语句引用了使用相同标示符的同一个主题。

图 3. 表示为一个定下图的两个事实
表示为一个定下图的两个事实

以下展示了我如何使用 N-Triples 来存储两个关于相同主题的 RDF 事实:

<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/birthday> "05-26" .
<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .

您越了解某个主题,节点外的圆弧就会越多。您能够了解的关于事物的信息是没有真正限制的,任何额外的事实并不影响图形的其余部分。事实来自哪里并不重要,但它们可以是有关联的。

后续内容

一些策略是为了在来源、信任级别、分类等基础上分离事实而存在,但目前您可以忽略这些问题。如果追踪包含来源元数据注释图的生成和修改方式很重要,那么该注释图有可能会使用 PROV 词汇。再次声明,我会将这些问题留在本系列后面的文章中进行讨论。

任何人都能够通过属性谈论关于任何主题的任何内容,这项功能非常强大,但是我们还希望能够根据资源所属的类型来组织资源。您可以从类集合成员关系方面思考这个问题。如果资源是指一个人,那么我们可以说,个人是 Person 类的一个成员(按照惯例,类名称的首字母应该使用大写形式)。相同的人,如果他或她是一位工程师,那么他或她可能是 Engineer 类的成员。在您可以是多少类集合的成员方面,并没有来自任何数量的词汇表的任何限制。

混合模式的工作非常简单,但我现在坚持使用可靠的 FOAF 词汇表。因为它的主要目标之一就是谈论人,该词汇表包含一个我可以使用的 Person 类。我需要一个特殊的谓词来表明资源是某个类的一个实例。这是一个要表达的基础性的重要谓词,所以 RDF 为这种类型的关系提供了一个术语:http://www.w3.org/1999/02/22-rdf-syntax-ns#type。这种类型的语句具有与您目前为止看到的属性关系不同的语义,但表达方式是相同的:

<https://w3id.org/people/bsletten> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
    <http://xmlns.com/foaf/0.1/Person> .

图 4 中的额外的圆弧看起来类似于我们已经看到的圆弧。

图 4. 定向图中的实例所属关系
定向图中的实例所属关系

最后,正如您可以想象到的那样,N-Triples 中表达的所有三种语句的组合在不断累积,形成了以下结果:

<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/birthday> "05-26" .
<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .
<https://w3id.org/people/bsletten> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
                 <http://xmlns.com/foaf/0.1/Person> .

图 5 显示了表示为一个图形的三个事实。

图 5. 表示为一个定向图的三个事实
表示为一个定向图的三个事实

这个故事中的关键点是:数据模型支持添加信息的观点。在任何时候,您都可以学一些新东西。通过使用标准的全球标识符、标准的数据模型和标准序列化,不兼容的数据会变得不适用,整合更多的数据应该几乎不需要花费什么力气。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值