RDF和SPARQL

一、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 URIURL

(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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值