跳转至内容

Wikivoyage:Turtle RDF

来自维客旅行

Turtle 是一种纯文本 RDF 表达方式,基于 NotationThree,只保留了 RDF 相关的部分。因为它省略了 RDF/XML 需要的大量标记,所以它是一个学习 RDF 和制作简单 RDF 文档的良好格式。Turtle 得到了像 Raptor 和 RAP (PHP 的 RDF API) 等工具的良好支持。

本文档提供了使用 Turtle 创建 FOAF 文档的初步说明。

Lightning 快速了解 Turtle

[]

一个 Turtle 文档是 RDF 三元组的集合。每个三元组的格式是

<subject> <relationship> <object> .

每个语句以句点结尾,三元组中的每个元素都是一个 URI (除了 <object>,它可以是一段文本,比如 "string",或是一个数字,比如 134)。例如,要表示一个人对 FOAF 感兴趣,我们可以使用三元组

<mailto:person@example.net> <http://xmlns.com/foaf/0.1/interest> <http://www.foaf-project.org/> .

这里,FOAF 主页的 URL 代表 "FOAF" 的概念,而这个人的电子邮件地址代表这个人。我们经常使用 RDF -- 让 URL 代表 "离线" 或抽象的概念。我们使用 FOAF 词汇来描述对某人感兴趣。RDF 的大部分工作是创建具有约定好的含义的 URL,比如 "这个 URI 意味着 '对...感兴趣'"。如果这个人也对 Turtle 感兴趣,我们可以这样说

<mailto:person@example.net> <http://xmlns.com/foaf/0.1/interest> <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

这几乎是你编写 Turtle 所需要知道的一切,但是有很多“快捷方式”可以使你的文档更短、更易读。

使用前缀

[]

使用完整的 URI 是一种难以阅读的混乱。使用 Turtle,我们可以定义一个 命名空间前缀,这样我们就不必总是编写相同的长 URI 前缀了。一个前缀定义看起来像这样

@prefix pref: <uri prefix> .

例如,对于 FOAF 元素,我们可以使用这样的前缀定义

@prefix foaf: <http://xmlns.com/foaf/0.1/> .

然后我们可以像这样使用上面描述的主题

@prefix foaf: <http://xmlns.com/foaf/0.1/> .
<mailto:person@example.net> foaf:interest <http://www.foaf-project.org/> .
<mailto:person@example.net> foaf:interest <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

我们还可以定义一个 默认命名空间前缀,以防我们反复使用相同的命名空间前缀。为此,我们使用相同的格式,但不带替换字符串

@prefix : <uri prefix> .

通常,Turtle 文档的“主”命名空间被赋予一个默认命名空间。例如,如果我们正在处理一个 FOAF 文档,我们可能希望将 FOAF 命名空间设为默认命名空间

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net> :interest <http://www.foaf-project.org/> .
<mailto:person@example.net> :interest <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

逗号

[]

当我们使用相同的主语和关系做出两个或更多个陈述时,我们可以通过组合这些陈述并将宾语用一个或多个逗号分隔开,使文档更短、更易读。我们上面的主题示例可以写成

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net> :interest <http://www.foaf-project.org/> , <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

请注意,含义完全相同;只是键入的字符数不同。

分号

[]

如果你在多个语句中使用相同的主语,但关系不同,你可以将它们组合起来,并用分号分隔关系 + 宾语部分。例如,如果我们想说我们人的名字是 "Anne Example-Person",我们会写

@prefix : <http://xmlns.com/foaf/0.1/> .
<mailto:person@example.net> :name "Anne Example-Person" .

我们可以将其与我们关于 Anne 兴趣的文档结合起来,写成

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net>
  :name "Anne Example-Person" ;
  :interest <http://www.foaf-project.org/> , <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

请注意,最终仍然有一个句点。换行符不是特别必要,但它使文档更具可读性。

类型

[]

事物和事物类别之间存在一种特殊的关系,称为 类型 (http://www.w3.org/1999/02/22-rdf-syntax-ns#type)。如果我们想说 Anne 是一个人,我们可以这样写

@prefix : <http://xmlns.com/foaf/0.1/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.

<mailto:person@example.net> rdf:type :Person .

因为这是一种基本的关系,所以 Turtle 有一个特殊的关键字 a,用于替换类型关系

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net> a :Person .

我们为 Anne 编写的完整的 FOAF 文档变成

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net>
  a :Person ;
  :name "Anne Example-Person" ;
  :interest <http://www.foaf-project.org/> , <http://www.ilrt.bris.ac.uk/discovery/2004/01/turtle/> .

这里的优势是,你可以自己大声朗读这个,它会产生一些意义 (至少用英语)。

这个 URI 代表一个人;她的名字是 Anne Example-Person,她的兴趣是 FOAF 和 Turtle。

匿名事物

[]

FOAF 的一个优点是你可以描述人与人之间的关系。例如,Anne 可能认识一个名叫 Uther Example 的人,他有一个电子邮件地址 <uther@example.org>。我们可以这样写

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net> :knows <mailto:uther@example.org> .

<mailto:uther@example.org> a :Person; :name "Uther Example" .

但是,当你不想为某人定义 URL 时,你可以在宾语区域使用 匿名对象。匿名对象是用方括号“[]”定义的,方括号中包含一个或多个关系-宾语对,定义宾语,用分号分隔。你可以定义该对象是主语的各种关系。如果我们不想理会 Uther 的电子邮件地址 (或者我们不知道),我们可以这样写

@prefix : <http://xmlns.com/foaf/0.1/> .

<mailto:person@example.net> :knows [ a :Person ; :name "Uther Example" ] .

这用英语读起来也很好:Anne 认识一个名叫 "Uther Example" 的人。

使用其他模式

[]

FOAF 的很大一部分是创建和使用其他扩展模式。使用 Turtle,我们只需为其他模式定义一个前缀,并使用带有给定前缀的元素。例如,如果我们想使用“关系”模式来显示 Anne 不仅 认识 Uther,而且她嫁给了他,我们可以这样写

@prefix : <http://xmlns.com/foaf/0.1/> .
@prefix rel: <http://www.perceive.net/schemas/relationship/> .

<mailto:person@example.net> rel:spouseOf [ a :Person ; :name "Uther Example" ] .

只要你对它们进行命名空间,就可以混合来自不同模式的元素。不幸的是,你在大声朗读 Turtle FOAF 文档时,必须跳过命名空间。

[]
  • Turtle -- 格式的定义
  • Notation3 -- Turtle 的一个前身
  • N3 Primer -- 一本可读的教程,概述了 Notation3 (以及 Turtle) 背后的思想

<rdf> <http://rdfweb.org/topic/TurtleFoafTutorial>

 a cc:Work ;
 cc:derivativeWork <> ;
 dc:creator "Evan Prodromou" ;
 dcterms:datePublished "2005-03-12"^^dc:W3GDTF .

</rdf>

© 2026 wikivoyage.cn. Text is available under the CC BY-SA 4.0 License.