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 文档时,必须跳过命名空间。
外部链接
[]<rdf> <http://rdfweb.org/topic/TurtleFoafTutorial>
a cc:Work ; cc:derivativeWork <> ; dc:creator "Evan Prodromou" ; dcterms:datePublished "2005-03-12"^^dc:W3GDTF .
</rdf>
