1. 介绍(Introduction)

资源描述框架(Resource Description Framework, 简称 RDF)是一个用于表达关于万维网(World Wide Web)上的资源的信息的语言. 它专门用于表达关于Web资源的元数据, 比如Web页面的标题、作者和修改时间,Web文档的版权和许可信息,某个被共享资源的可用计划表等。然而,将“Web资源(Web resource)”这一概念一般化后,RDF可被用于表达关于任何可在Web上被标识的事物的信息,即使有时它们不能被直接从Web上获取。比如关于一个在线购物机构的某项产品的信息(例如关于规格、价格和可用性信息),或者是关于一个Web用户在信息递送方面的偏好的描述。

RDF用于信息需要被应用程序处理而不是仅仅显示给人观看的场合。RDF提供了一种用于表达这一信息、并使其能在应用程序间交换而不丧失语义的通用框架。既然是通用框架,应用程序设计者可以利用现成的通用RDF解析器(RDF parser)以及通用的处理工具。能够在不同的应用程序间交换信息意味着对于那些并非信息的最初创建者的应用程序也是可利用这些信息。

RDF基于这样的思想:用Web标识符(称作统一资源标识符Uniform Resource IdentifiersURIs)来标识事物,用简单的属性(property)及属性值来描述资源。这使得RDF可以将一个或多个关于资源的简单陈述表示为一个由结点和弧组成的图(graph),其中的结点和弧代表资源、属性或属性值。为了让讨论显得尽量具体一些,下面的这组陈述“有一个人由[url]http://www.w3.org/People/EM/contact#me[/url] 标识, 他的名字是Eric Miller, 他的电子邮件地址是[email]em@w3.org[/email],他的头衔是Dr.”可以表示为图1 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1[/url])所示的图:

RDF简介_简介
图1:一个描述Eric Miller的RDF图

图1 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1[/url])展示了RDF用URIs来标识:

RDF提供了一种基于XML的语法(称为RDF/XML)用于保存和交换RDF图。图1 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#figure1[/url])所示的RDF用RDF/XML来书写的话就像下面的例1 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example1[/url])这样:

例1:一段描述Eric Miller的RDF/XML

 <?xml version="1.0"?>
<rdf:RDF xmlns:rdf="[url]http://www.w3.org/1999/02/22-rdf-syntax-ns#[/url]"
xmlns:contact="[url]http://www.w3.org/2000/10/swap/pim/contact#[/url]">
<contact:Person rdf:about="[url]http://www.w3.org/People/EM/contact#me[/url]">
<contact:fullName>Eric Miller</contact:fullName>
<contact:mailbox rdf:resource="mailto:em@w3.org"/>
<contact:personalTitle>Dr.</contact:personalTitle>
</contact:Person>
</rdf:RDF>

注意:上述RDF/XML也包含URIs,同样地还包含简略形式的属性(比如mailbox和fullName)及各个属性的值([email]em@w3.org[/email]和Eric Miller)。

和HTML一样,RDF/XML也是机器可处理的,也使用URIs,RDF也可以链接Web上任何地方的信息。然而与传统超文本不同的是,RDF URIs可以引用任何可标识的事物,包括那些不是直接可从Web上获取的事物(比如Eric Miller这个人)。结果是,RDF除了能够描述像网页这类事物以外,还可以描述汽车,商业活动,人类,新闻事件等等。此外,RDF中的属性本身有URIs,用以准确标识被链接的事物之间的关系。

下列文档都属于RDF规范的一部分:

  • RDF概念和抽象语法 ([url]http://www.w3.org/TR/rdf-concepts/[/url]) [RDF-CONCEPTS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts[/url])]
  • RDF/XML语法规范 ([url]http://www.w3.org/TR/rdf-syntax-grammar/[/url]) [RDF-SYNTAX ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax[/url])]
  • RDF词汇描述语言1.0: RDF Schema ([url]http://www.w3.org/TR/rdf-schema/[/url]) [RDF-VOCABULARY ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-vocabulary[/url])]
  • RDF语义 ([url]http://www.w3.org/TR/rdf-mt/[/url]) [RDF-SEMANTICS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-semantics[/url])]
  • RDF测试用例 ([url]http://www.w3.org/TR/rdf-testcases/[/url]) [RDF-TESTS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-tests[/url])]
  • RDF入门 ([url]http://www.w3.org/TR/rdf-primer/[/url])(本文档)
本文档旨在提供一个关于RDF的介绍,并描述一些已有的RDF应用,以帮助信息系统设计者及应用程序开发者理解RDF的特性和如何使用这些特性。特别地,本文档旨对下列这类问题做出回答:

  • RDF看起来是怎样的?
  • RDF可以表达什么信息?
  • RDF信息是如何被创建、访问和处理的?
  • 现有信息如何能够与RDF结合?

本文档是一个非规范性(non-normative)文档,也就是说它并不是关于RDF的权威性的规范。本文档中的例子和其他解释性的资料用于帮助读者理解RDF,但是它们有可能并不是权威性的和充分完善的。在这些情况下,请参考RDF规范中相关的规范性文档。为此,本文档描述了RDF规范中的其他文档所担任的角色,并在适当的地方提供了指向规范性文档中相关部分的链接。

需要注意的是,上述RDF文档更新并更清晰地解释了先前发布的一些RDF规范,资源描述框架(RDF)的模型和语法规范 ([url]http://www.w3.org/TR/1999/REC-rdf-syntax-19990222/[/url]) [RDF-MS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdfms[/url])]和资源描述框架模式(RDF Schema)规范1.0 ([url]http://www.w3.org/TR/2000/CR-rdf-schema-20000327/[/url])[RDF-S ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-s[/url])]。所以,一些术语、语法和概念已经稍有变化。本文档反映的是在上面的列表中给出的新版本RDF规范。因此,对于熟悉旧规范或基于旧规范的教程、入门读物的读者,应留意当前版本的规范与先前版本的一些差异。关于先前版本的RDF中出现的一些问题以及它们在当前版本中的解决方案的列表,请参见[[url]http://www.w3.org/2000/03/rdf-tracking/[/url] RDF问题跟踪(Issue Tracking)。

2. 关于资源的陈述

RDF是用以提供一种发表关于Web资源(如网页)的陈述的简单方法的。这部分描述了RDF提供这些能力(描述这些概念的规范标准就是RDF概念和抽象语法 ([url]http://www.w3.org/TR/rdf-concepts/[/url])[RDF-CONCEPTS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts[/url])])背后的基本思想。


2.1 基本概念

试想一下这样的情形:有一个叫John Smith的人创建了某个网页。如果用自然语言(比如英语)来陈述该事实,一种简洁明了的方式是采用下面这种简单陈述的形式:

 [url]http://www.example.org/index.html[/url] has a creator whose value is John Smith

强调该陈述的各个部分是为了强调:为了描述某事物的特性,需要某些方法来命名或标识多种事物:

  • 陈述所描述的事物(譬如此例中John Smith所创建的网页)
  • 陈述所描述事物的具体属性(property)(譬如本例中的creator)
  • 陈述所描述的作为该属性(陈述所描述事物对应的)的值的事物(如这个网页的creator是谁)。
在上面的陈述中,网页用它的URL(Uniform Resource Locator,统一资源定位符)来标识。另外,单词“creator”被用来标识事物的属性(property),短语“John Smith”被用来标识作为属性(property)的值的事物(一个人)。

该网页的其他属性(property)可以通过书写其他具有相同形式的英文陈述来描述:用URL标识该网页,用单词(或其他表达式)来标识网页的属性(properties)及其值。例如:这个网页的创建日期和所用的语种可以由下列陈述来描述:
 [url]http://www.example.org/index.html[/url] has a creation-date whose value is August 16, 1999
[url]http://www.example.org/index.html[/url] has a language whose value is English
RDF是基于这一思想的:被描述的事物具有一些属性 ([url]http://www.w3.org/TR/rdf-concepts/#dfn-property[/url]) (properties),而这些属性各有其值(values);对资源的描述可以通过对它作出指定了上述属性及值的陈述(statement)来进行(就像上面例子中的那样)。RDF用一套特定的术语来表达陈述中的各个部分。确切地说,关于事物(譬如上例中的网页)的陈述中用于识别事物的那部分就叫做主体 ([url]http://www.w3.org/TR/rdf-concepts/#dfn-subject[/url]),而用于区分陈述对象主语的各个不同属性(譬如:作者,创建日期,语种等等)的那部分就叫做谓词 ([url]http://www.w3.org/TR/rdf-concepts/#dfn-predicate[/url]),陈述中用于区分各个属性的值的那部分叫做客体 ([url]http://www.w3.org/TR/rdf-concepts/#dfn-object[/url])。因此,考虑英文陈述:

 [url]http://www.example.org/index.html[/url] has a creator whose value is John Smith

这个陈述里的不同部分用RDF术语来说就是:

正如英语是作为(用英语沟通的)人们之间很好沟通工具一样,RDF是用来做出机器可处理的声明的工具。那么,如果想做出这种适合机器处理的声明,还需要两件事:

  • 一个可用来区分标识一个陈述中的主体,谓词,客体的机器可处理的标识符系统,同时这个标识符系统不会和其他人可能在Web上使用的相似的标识符系统混淆;
  • 一种用以表示这些陈述并让这些陈述可在机器间交流的机器可处理的语言;
幸运地是,现有的Web体系结构提供了这两个必需的工具。

正如前面所描述的,Web已经提供了一种形式的标识符-URL(Uniform Resource Locator,同一资源定位符)。在第一个例子中,就采用了一个URL来标识John Smith所创建的网页。URL是标识(identify)Web资源(Web resource)的字符串,这是通过标识资源的首选访问机制来实现的(本质上,即资源的网络“位置”)。然而,对于许多不具有网络地址或URL的资源(这一点与网页是不同的),能够记录关于它们的信息也是同等重要。

Web提供了一套更通用的标识符形式,称为统一资源标识符 ([url]http://www.isi.edu/in-notes/rfc2396.txt[/url])(Uniform Resource Identifier,URI)。URL是URI的一种具体形式。所有URI都具有共同的特征:即不同的人或组织可以彼此独立地创建并使用URI来标识事物。但是,URI并不局限于标识具有网络地址或其他计算机访问机制的资源。实际上,我们可以创建URI来引用陈述中需要被标识的任何资源,包括:

  • 网络可访问资源,譬如,一份电子文档、一个图片、一个服务(例如,“洛山矶的今日天气预报”)或是一组其他的资源;
  • 非网络可访问资源,譬如,人、公司、在图书馆装订成册的书籍;
  • 不物理存在的抽象概念,如“作者(creator)”这个概念;
由于上述通用性,RDF用URIs作为其标识机制(用于标识陈述中的主体、谓词和客体)的基础。更准确地说,RDF使用的是URI引用(URI references) ([url]http://www.w3.org/TR/rdf-concepts/#dfn-URI-reference[/url]) [URIS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-uri[/url])]。一个URI引用(或“URIref”)是一个在尾部附加了可选的“片段识别符(fragment identifier)”的URI。比如,URI引用(URIref) [url]http://www.example.org/index.html#[/url] 由URI [url]http://www.example.org/index.html[/url] 和(由符号#分隔的)的section2 (片段标识符)组成。RDF URIrefs可以包含Unicode[UNICODE ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode[/url])]字符(参见[RDF-CONCEPTS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts[/url])]),这就允许在URIrefs中使用多种语言。RDF将“资源(resource)”定义任何可被为URI引用(URIref)标识的事物。因此,使用URIrefs,RDF实际上可以描述任何事物,并陈述这些事物之间的关系。URIrefs和片段标识符将在Appendix A ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#identifiers[/url])[RDF-CONCEPTS ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-concepts[/url])]中作进一步的阐述。

为了用一种机器可处理的(machine-processable)方式来表示RDF陈述(RDF statements),RDF采用了可扩展标记语言(Extensible Markup Language) ([url]http://www.w3.org/TR/2000/REC-xml-20001006[/url])[XML ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-xml[/url])]。XML被设计成允许任何人来设计他们自己的文档格式,并可用这种格式书写文档。RDF定义了一个特殊的XML标记语言(称为RDF/XML)来表示RDF信息和在机器间交换这些信息。在第一节 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#intro[/url])中有一个关于RDF/XML的例子。这个例子(例 1 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#example1[/url]) )使用了一些诸如<contact:fullName>和<contact:personalTitle>这样的标签来相应地区分Eric Miller和Dr这些文本内容。这些标签能让那些理解这些标签含义的程序正确地解释文本内容。XML的内容和标签(除了一些特例)能够包含统一字符编码[UNICODE ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-unicode[/url])] 的字符,这就允许了来自各种语言的信息可以被直接显示出来。附录 B ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#documents[/url])大体上给出了关于XML进一步的背景知识。关于RDF的RDF/XML专用语法在第三节 ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfxml[/url])中有更详细的描述,且定义在规范[RDF-SYNTAX ([url]http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#ref-rdf-syntax[/url])]中。