RDF入门(一)

RDF简介

资源描述框架( Resource Description Framework, RDF)是表达资源信息的框架。而资源可以是任何东西,包括文档、人员、物理对象和抽象概念等。

RDF是为应用程序处理Web上的信息而设计的,为表达信息提供了一个通用框架,因此可以在应用程序之间交换同时保持含义。由于RDF是一个通用框架,应用程序设计者可以利用RDF解析器和处理工具获取RDF中的信息。

特别是RDF可以在Web上发布和互连数据。例如,通过检索某网站可以获取Bob的信息,包括他认识Alice,再通过检索Alice的IRI即可获取到更多关于Alice的数据。人们或者自动化处理程序可以通过这些链接来收集有关的各种数据。

RDF的用途

  • 使用某些词汇表添加机器可读的信息到网页,使其能够以增强形式表示在搜索引擎上或者由第三方应用程序自动处理。
  • 通过将数据集链接到第三方数据集来丰富该数据集。
  • 互连API提要,使得客户端能够访问更多信息。
  • 使用目前以链接数据形式发布的数据集。
  • 通过互连多个网站上人们的RDF来构建分布式社交网络。
  • 为数据库之间的数据交换提供了符合标准的形式。
  • 互连组织内的各种数据集,允许使用SPARQL执行跨数据集查询。

RDF建模

三元组

RDF的数据陈述通常是三元组模式:

<subject> <predicate> <object>

该语句表述资源之间的关系。subject和object表示相关的两个资源,predicate表示他们之间的关系。关系是有向的,并且被称为property。

例如:

相同的资源通常在多个三元组中被引用。如上图,Bob是四个三元组的subject,Mona Lisa是一个三元组的subject也是两个三元组的object。这样即可把三元组连接起来,形成连通图,其中object和subject构成图中的节点,predicate构成图中的边。

有了这样的图,我们就可以使用SPARQL来进行查询。例如,谁对达芬奇的画作感兴趣。

RDF数据模型在本节以抽象语法进行了描述。不同的具体语法可能产生完全一样的图。而RDF图的语义是根据抽象语法来定义的。

IRI

国际资源标识符(International Resource Identifier, IRI)能够标识一个资源,是URI(Uniform Resource Identifier)的泛化,URL就是IRI的一种形式。同时,允许在IRI字符串中使用非ASCII字符。

IRI能够出现在RDF三元组中的任何位置。同时它是一个全局标识符,所有人都可以重用IRi来标识相同的东西。

RDF不知道IRI表示什么,但IRI可以通过特定的词汇表或约定赋予意义。例如,在DBpedia中,使用http://dbpedia.org/resource/Name 形式的IRI表示相应的维基百科文章所表述的东西。

Literals

Literals表示非IRI的基础值。例如,一个字符串、一个数字、一个日期等。同时,Literals都与数据类型相关联,使得这些值能够正确地被解析。字符串文本可以与语言标记相关联,例如, “Léonard de Vinci” 可以与"fr"关联,“李奥纳多·达·文西” 可以与"zh"相关联。

Literals只在RDF三元组中object的位置出现。

空节点

IRI和Literals提供了写RDF语句的基本材料,但有时存在没有全局标识符的资源。例如,Mona Lisa画作中背景中未被识别的柏树,我们可以使用RDF空节点来表示。空节点就像是代数中的简单变量,他们表示一些东西,却不用解释值是什么。

空节点可以在RDF三元组中subject和object的位置上出现。它们可以表示资源,无需使用IRI显式命名。

Multiple graphs

RDF提供了一种机制,可以将RDF语句分组在多个图,并将这类图与IRI关联。Multiple graphs是RDF数据模型的最新扩展。

RDF文档中的Multiple graphs构成了一个RDF数据集。一个RDF数据集中可能有多个命名图,最多有一个未命名(默认)图。

例如,例1中的语句能够被分为两个命名图。

图一由社交网站提供,并由 http://example.org/bob 标识。

与图关联的IRI称为图的名字。

图二由维基百科提供,并由 https://www.wikidata.org/wiki/Special:EntityData/Q12418 标识。

如果我们假设图的名称代表图中保存的RDF数据的来源,我们就可以通过检索 http://example.org/bob 来访问图中的三元组。

未命名图实例:

RDF词汇表

RDF数据模型提供了陈述资源的方法,但并没有对IRI代表什么作出约定。因此,在实践中,RDF通常与词汇表或提供资源语义信息的其他约定结合使用。

为了支持词汇表的定义,RDF提供了RDF模式语言。这种语言允许人们定义RDF数据的语义特征。例如,可以声明IRI http://www.example.org/friendOf 能被用作属性,并且 http://www.example.org/friendOf 三元组的subject和object必须是类 http://www.example.org/Person 的资源。

RDF架构提供class的概念来对资源进行类别指定。实例和类之间的关系通过type属性来声明。对subject和object的类型限制可以通过对domain和range的限制来定义。

在RDF模式的帮助下,我们可以构建一个RDF模型。

< is a friend of> 是被用在三元组中表示谓词的属性,像这样的属性本身就是资源,可以用三元组描述或在其他资源的表述中提供值。在此例中,它被用作分配type, domain, range值的subject,也是描述 < is a good friend of>属性的三元组的object。

生成RDF图

现在存在许多描写RDF图的序列化方法,但不同的序列化方法会得到完全相同的三元组,在逻辑上等价。

  1. Turtle family (N-Triples, Turtle, TriG and N-Quads)
  2. JSON-LD (JSON-based RDF syntax)
  3. RDFa (for HTML and XML embedding)
  4. RDF/XML (XML syntax for RDF)

Turtle family

本小节中,我们从N-Triples开始介绍,共有四种RDF语言。

N-Triples

N-Triples为序列化RDF图提供了一种简单的基于行的纯文本方法。例一中的图可以用该方法序列化为以下形式:

每行表示一个三元组,整个IRI都被括号所包裹。第三行中有一个日期形式的Literal,数据类型通过^^分隔符添加,该日期表示遵循XML模式日期。

N-Triples允许用户在编写string类型的Literal时省略数据类型,因此,Mona Lisa相当于 Mona Lisa^^xsd:string。 如果有语言标记的字符串,则标签直接加在字符串后,以@分割,如"La Joconde"@fr

例一使用N-Triples方法生成的图如下:

Turtle

Turtle是N-Triples的扩展。除了支持基本的N-Triples语法外,还引入了许多语法快捷方式。Turtle提供了一种在易编写性、易解析性和可读性之间的权衡。

上图使用Turtle表示为以下形式:

Turtle的例子在逻辑上与N-Triples一致。1-6行包含了许多IRI的简写,相对IRI根据第一行中指定的base IRI进行解析。2-6定义了IRI前缀,可用于前缀名称。

8-12行显示了Turtle怎样为一组具有相同subject的三元组提供简写。9-12行则是以第8行为subject的predicate和object部分。

第9行是一个特殊句法,正确形式应该为“Bob (is) a Person”。a是rdf:type的简写形式。

空白节点的表示

我们来看前面提到的空白节点“柏树”的例子。

术语 _:x 是一个空白节点。它代表Mona Lisa画中描绘的一个未命名资源,是 Cypress 类的一个实例。

Turtle还有一个空白节点的替代符号,不需要使用语法。

方括号代表空节点。而后方括号内的内容为以该空节点为subject的predicate和object部分。

TriG

TriG是Turtle的扩展,允许以RDF数据集的格式规范多个图。

前文实例的多图版本可以由以下形式表示:

该数据集包含两个已命名的图。第8和第17行列出了图的名称。三元组被放在花括号中。并且我们可以在图名前添加关键词图。

27-29行指定的两个三元组形成了该RDF数据集的未命名(默认)图。

下面的图展示了该样例的建模结果。

N-Quads

N-Quads是N-Triples的简单扩展,实现RDF数据集的交换。

如下图所示:

该示例中的九行对应图中的九个弧。1-7行的第一个元素代表IRI,后面的元素分别代表subject, predicate和object(注意顺序可能有改变)。8-9行表示未命名图中的语句,只有三个元素。

JSON-LD

JSON-LD为RDF图和数据集提供了一种JSON语法,它可以将JSON文档转换成RDF。JSON-LD为JSON对象提供通用标识符,这种机制使JSON文档能够引用Web其他地方的另一个JSON文档描述的对象,以及数据类型和语言处理等。JSON-LD还提供了一种通过@graph关键字来序列化RDF数据集的方法。

JSON-LD将上图的例子编码如下:

第2行的@content键指向一个JSON文档,该文档描述如何将该对象映射到RDF图中。每个JSON对象对应于一个RDF资源。通过@id键描述主要资源。

图中第7行创建了一个新的JSON对象,并与Mona Lisa的IRI联系起来。

本例的JSON-LD上下文如图所示。

该图描述了如何将JSON-LD文档映射到RDF图。第4-9行描述了如何将对应信息映射到第3行定义的命名空间中。14-23行描述了怎样将title, creator和subject_of 映射到Dublin 核心属性的IRI。@reverse 键表示当我们在JSON-LD文档中遇到"subject_of": "x"时,我们应该将其映射到以x的IRI为subject, “dcterms:subject” 为property的三元组中。

RDFa

RDFa是一种RDF语法,用于在HTML和XML文档中嵌入RDF数据。使得搜索引擎在爬行Web时聚合这些数据并用它来丰富搜索结果。

下图的HTML代码对前面的RDF图进行了编码。

上图包含四个特殊的RDFa属性以在HTML中标识RDF三元组:resource, property, typeof和prefix。

prefix表示IRI缩写。resource属性指定该HTML元素执行哪个RDF语句的IRI。typeof属性则类似于Turtle中的a。property属性的值被解释为RDF property的IRI,href属性的值被解释为三元组的object。

RDF/XML

RDF/XML为RDF图提供了一个XML语法。

下图采用RDF/XML对前面的RDF图进行了编码。

RDF/XML中以rdf:RDF元素指定。起始标签中指定XML元素和属性名的简写。rdf:Description元素用于定义about属性指定的IRI为subject的三元组集。子元素的名称表示RDF property的IRI。如果三元组object也是IRI,则property没有内容且使用rdf:resource指定object。

当object为Literal时,Literal的值将作为property元素的内容输入。

RDF图的语义

RDF的首要目标是自动合并多个来源的有用信息形成更大的集合,并且所有信息都以三元组的形式传递。

RDF语义如下:

  1. IRI是全局的,每次使用它们时都命名相同的东西。
  2. 当subject和object之间实际存在predicate时,每个三元组都是真实的。
  3. 当每个三元组都是真实的时,RDF图也是真实的。

RDF具有这些声明性语义时,系统就可以作出逻辑推断。即,当输入的三元组被认为是正确的,即可推断出其他三元组的正确性。这样的系统被称为推理器。

当人们想要使用新的概念时,就可以创建新的词汇表。因此,人们可能需要进行不同类型的推理。

RDF数据

RDF允许来组任何源的三元组数据组合到图形中,并将其作为合法的RDF数据进行处理。数据集正在以RDF格式进行发布和互连,并且许多都可以通过SPARQL进行查询。

总结

RDF提供了一个通用的资源框架,以供应用程序在Web上搜索、查询、发布一系列资源和数据。这样通用的资源框架为资源的管理提供了极大的方便和通用的方式,支持在不同应用之间进行传递而不失去信息。