一、RDF(资源描述框架,Resource Description Framework)
资源描述框架(RDF)是万维网联盟规格(World Wide Web Consortium)家族的一员,一开始它是一种描述元数据(metadata,描述数据的数据)的一种数据模型。但如今,已经成为了一种用于对web资源中实现的信息进行概念描述或建模的通用方法。它只规定了一些大致的规格,可以允许使用各种语法符号和数据序列化格式。
所以RDF作为一种资源描述框架(规格说明),具体有哪些限制或者内容?
https://en.wikipedia.org/wiki/Resource_Description_Framework
1. RDF使用一种三元组来描述资源
三元组:(主语-谓语-宾语)
主语:就是我们所要描述的资源
谓语:搭配宾语来描述资源的特征
宾语:通过谓语建立与主语的关系,是资源特征的一部分
比如,如果我们想要描述一个事实(资源)“天空的颜色是蓝的”,那么我们可以用(天空,颜色,蓝)来描述这个资源。当然这不是实际的RDF语法格式(这个后面会给出),但RDF规定的大致框架是这样的三元组。
2.RDF的序列化格式
那这个RDF具体的语法格式是什么呢?实际上RDF只规定了三元组这样的概念化的数据模型,并没有对序列化格式(存储格式)做出硬性的规定,因此我们可以使用以下格式进行序列化:
(1)RDF/XML:一种基于XML的语法格式(最早的RDF序列化语法格式)
(2)RDF/JSON: 一种基于JSON的语法格式
(3)Turtle:一种压缩的,适合人阅读的,与RDF/XML较相似的语法格式
(4)N-Triples:直接用堆叠的N个三元组标识
下面我们给出一些例子以更好地说明以上格式。
3. RDF的资源定位——URI
在给出例子之前,我们首先对构成例子要素的基本要素格式进行说明。
资源定位用来标识RDF三元组中主语-谓语-宾语这些要素的具体位置,三者均使用URI( Uniform Resource Idenrifier)来指示位置。此外除了URI之外,主语可以为空结点,宾语也可以为空结点或者字符串常量,谓语一般只能用URI(因为谓语关系一般由人定义好)。
(1)URI定义
统一资源标识符 (URI) 是唯一的字符序列,用于标识 Web 技术使用的逻辑或物理资源。 URI 可用于标识任何事物,包括现实世界的对象,例如人和地点、概念或信息资源(例如网页和书籍)。 某些 URI 提供了一种在网络上(在 Internet 上或在另一个专用网络上,例如计算机文件系统或 Intranet)上定位和检索信息资源的方法; 这些是统一资源定位器 (URL)。 URL 提供资源的位置。 URI 按名称在指定位置或 URL 标识资源。 其他 URI 仅提供唯一名称,无法定位或检索资源或其相关信息,这些是统一资源名称 (URN)。 使用 URI 的 Web 技术不仅限于 Web 浏览器。 URI 用于标识使用资源描述框架 (RDF) 描述的任何内容,例如,作为使用 Web 本体语言 (OWL) 定义的本体的一部分的概念,以及使用朋友的朋友词汇表描述的人 有一个单独的URI。
也就是说URI是URL的超集: U R I ⊃ U R L URI \supset URL URI⊃URL
(2)URI的文法:
URI通用语法由五个组件的层次序列组成:
URI = scheme:[//authority]path[?query][#fragment]
#其中
authority = [userinfo@]host[:port]
这个文法可以使用一个语法图进行说明:
scheme:模式名,不同的模式名后面所跟的URI具体部件会有不同的约束。例子: http, https, ftp, mailto, file, data, and irc
authority组件:举例://john.doe@www.example.com
path: 由斜杠/分割的一系列路径片段组成
query:由?标识开始,举例:key1=value1&key2=value2或者key1=value1;key2=value2
fragment:有#标识开始,片段包含一个片段标识符,该标识符提供指向次要资源的方向,例如由URI的其余部分标识的文章中的节标题。当主要资源是HTML文档时,片段通常是特定元素的id属性,web浏览器将滚动该元素到视图中。
整体举例:
userinfo host port
┌──┴───┐ ┌──────┴──────┐ ┌┴┐
https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top
└─┬─┘ └───────────┬──────────────┘└───────┬───────┘ └───────────┬─────────────┘ └┬┘
scheme authority path query fragment
ldap://[2001:db8::7]/c=GB?objectClass?one
└┬─┘ └─────┬─────┘└─┬─┘ └──────┬──────┘
scheme authority path query
mailto:John.Doe@example.com
└─┬──┘ └────┬─────────────┘
scheme path
news:comp.infosystems.www.servers.unix
└┬─┘ └─────────────┬─────────────────┘
scheme path
tel:+1-816-555-1212
└┬┘ └──────┬──────┘
scheme path
telnet://192.0.2.16:80/
└─┬──┘ └─────┬─────┘│
scheme authority path
urn:oasis:names:specification:docbook:dtd:xml:4.1.2
└┬┘ └──────────────────────┬──────────────────────┘
scheme path
4.RDF例子
这是一个来自W3C网站的例子,它用一下语句描述一个资源,“there is a Person identified by http://www.w3.org/People/EM/contact#me, whose name is Eric Miller, whose email address is e.miller123(at)example (changed for security purposes), and whose title is Dr.”
资源“http://www.w3.org/People/EM/contact#me”是一个主语
宾语是:
“Eric Miller” (对应谓语是 “whose name is”)
“mailto:e.miller123(at)example” (对应谓语是 “whose email address is”)
“Dr.” (对应谓语是 “whose title is”)
谓语是:(用URI表示)
“whose name is” is http://www.w3.org/2000/10/swap/pim/contact#fullName,
“whose email address is” is http://www.w3.org/2000/10/swap/pim/contact#mailbox,
“whose title is” is http://www.w3.org/2000/10/swap/pim/contact#personalTitle.
因此,用三元组描述这个资源,其具体例子如下:
(1)标准的N-Triples格式
<http://www.w3.org/People/EM/contact#me> <http://www.w3.org/2000/10/swap/pim/contact#fullName> "Eric Miller" .
<http://www.w3.org/People/EM/contact#me> <http://www.w3.org/2000/10/swap/pim/contact#mailbox> <mailto:e.miller123(at)example> .
<http://www.w3.org/People/EM/contact#me> <http://www.w3.org/2000/10/swap/pim/contact#personalTitle> "Dr." .
<http://www.w3.org/People/EM/contact#me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2000/10/swap/pim/contact#Person> .
(2)Turtle格式
@prefix eric: <http://www.w3.org/People/EM/contact#> .
@prefix contact: <http://www.w3.org/2000/10/swap/pim/contact#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
eric:me contact:fullName "Eric Miller" .
eric:me contact:mailbox <mailto:e.miller123(at)example> .
eric:me contact:personalTitle "Dr." .
eric:me rdf:type contact:Person .
(3)RDF/XML 格式
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:contact="http://www.w3.org/2000/10/swap/pim/contact#" xmlns:eric="http://www.w3.org/People/EM/contact#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about="http://www.w3.org/People/EM/contact#me">
<contact:fullName>Eric Miller</contact:fullName>
</rdf:Description>
<rdf:Description rdf:about="http://www.w3.org/People/EM/contact#me">
<contact:mailbox rdf:resource="mailto:e.miller123(at)example"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.w3.org/People/EM/contact#me">
<contact:personalTitle>Dr.</contact:personalTitle>
</rdf:Description>
<rdf:Description rdf:about="http://www.w3.org/People/EM/contact#me">
<rdf:type rdf:resource="http://www.w3.org/2000/10/swap/pim/contact#Person"/>
</rdf:Description>
</rdf:RDF>
二、SPARQL
SPARQL(发音为“sparkle”/ˈspɑːkəl/,是SPARQL Protocol and RDF Query Language的递归首字母缩写词)是一种 RDF 查询语言。这是一种用于数据库的语义查询语言,能够检索和操作以资源描述框架(Resource Description Framework, RDF)格式存储的数据。
1. SPARQL的优点
SPARQL允许用户针对松散地称为“键值”的数据编写查询。因此,整个数据库就是一组“主语-谓语-对象”三元组。这类似于一些NoSQL数据库对术语“文档-键-值”的使用,比如MongoDB。
在 SQL 关系数据库术语中,RDF 数据也可以被视为具有三列的表——主语列、谓词列和宾语列。 RDF 中的主语类似于 SQL 数据库中的实体,这些给定业务主语的数据元素(或字段,可视为用于描述主语)放置在多个列中,有时分布在多个表中,并由唯一键标识。 在 RDF 中,这些字段被表示为单独的谓词/宾语行,共享相同主语,通常是相同的唯一键。与SQL相比,SPARQL中的谓词类似于列名,宾语类似于实际数据。 与关系数据库不同,SPARQL的宾语列是异构的:每个单元的数据类型通常由谓词值隐含(或在本体中指定)。同样与 SQL 不同的是,RDF 的每个谓词可以有多个条目; 例如,一个“人”可以有多个“子”条目,并且可以返回此类对象的集合。
因此,SPARQL提供了一套完整的分析查询操作,如JOIN、SORT、AGGREGATE,这些操作对应的数据的模式(schema)本质上是数据的一部分,而不需要单独的模式定义。然而,模式信息(本体)通常是在外部提供的,以允许明确地连接不同的数据集。此外,SPARQL为可视为图的数据提供了特定的图遍历语法。
2. SPARQL举例
下面的查询会返回每一个人的名字和邮箱地址
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
?email
WHERE
{
?person a foaf:Person .
?person foaf:name ?name .
?person foaf:mbox ?email .
}
下面的查询返回非洲所有国家的名字和首都名字
PREFIX ex: <http://example.com/exampleOntology#>
SELECT ?capital
?country
WHERE
{
?x ex:cityname ?capital ;
ex:isCapitalOf ?y .
?y ex:countryname ?country ;
ex:isInContinent ex:Africa .
}
变量一般使用?或者$符合进行标识。如果一个三元组以;号结束,那么这个三元组的主语将会作为下一个非完整三元组的主语(如上图所示)
参考资料
【1】https://en.wikipedia.org/wiki/Uniform_Resource_Identifier
【2】https://en.wikipedia.org/wiki/Resource_Description_Framework
【3】https://en.wikipedia.org/wiki/SPARQL