比较RDF和SQL数据

许多人问什么可以用SPARQL来完成这个不能用SQL完成的事情,实际上他们关心RDF中可以做什么,不能用关系数据库完成。这两种语言都使用户能够创建,组合和使用结构化数据。SQL通过访问关系数据库中的表来执行此操作,并且SPARQL通过访问关联数据的Web来完成此操作。(当然,SPARQL也可以用于访问关系数据,但它被设计为合并不同的数据源。)

关系数据由收集到表中的数据行(在正式关系文献中也称为“关系”)组成。表中的行符合称为模式的集合数据类型和约束。称为DDL(数据定义语言)的SQL子集声明了该模式:

CREATE TABLE Person(
     ID INT,
     fname CHAR(10),
     addr INT,
     FOREIGN KEY(addr)REFERENCES Address(ID)
);

CREATE TABLE地址(
     ID INT,
     城市CHAR(10),
     状态CHAR(2)

这限制了Person某些数据库中表中的行有三列 - “ID”,“fname”和“addr”,分别是整数,10个字符和另一个整数。它类似地定义一个Address表,并且要求表中“addr”列中的非NULL值对应于Person表中“ID”列的Address值。这允许数据库捕获在数据库中表示的现实世界实体(事物)之间的关系。例如,下面的值表明,鲍勃住在马萨诸塞州的剑桥,我们不知道苏的生活在哪里:


ID fname 地址
7 鲍勃 18
8 起诉 空值
地址
ID
18 剑桥

发明了数字7,8和18,以识别它们之间的行并捕捉它们之间的联系。关于这些关系的SQL查询通常不会提及具体的数字,但将重述关系的约束,即Person.addr=Address.ID。这种相同的表达式可以捕获不是内在关系的约束,例如,一个人的地址号与他们的鞋子大小相同。

RDF捕获实体属性和实体之间的关系,因为表单entity1propertyA语句具有关系entity2。使用一种叫做乌龟的语言,我们可以说在马萨诸塞州的剑桥有一个叫做“Bob”的地址,

<PersonA> a <Person>。
<AddressB> a <地址>。
<PersonA> <Person#fname>“Bob”。
<地址B> <地址#city>“剑桥”。
<PersonA> <Person#addr> <AddressB>。
<AddressB> <Address#state>“MA”。

还有另一个人,“苏”,但我们不会对她的地址说什么,因为我们不知道:

<PersonF> a <Person>。
<PersonF> <Person#fname>“Sue”。

我们将RDF语句中的三个术语称为主语,谓词和对象。上述声明中使用的术语是尖括号(<> s)中的相对URL,引号(“s”)中的文字和关键字“a”,只是用于标识“有类型”的URL的快捷方式关系。在RDF中没有与SQL的NULL对应的概念,因为没有与SQL的结构约束相对应的RDF要求,关系数据库中的每一行必须符合相同的模式。一个断言的对象,例如上面的<AddressB>可能是其他断言的主题或对象。以这种方式,一组RDF语句连接起来以创建“图形”(在数学意义上)。您会经常听到“RDF图”一词。

<PersonC> <Person#homeAddress> <AddressK>。
“PerconC”> <Person#fname>“Bob”。
<AddressK> <地址#所有者> <PersonC>。

上面的例子说明了RDF和关系数据之间的一些结构相似性和差异。核心的哲学差异在于RDF是一种后Web语言; 也就是说,它允许使用我们想要描述的实体的Web标识符,以及我们用于描述它们的属性和关系。如果我相信出版商不要骗我,我可以简单地合并不同方面的信息。这种信任的一个例子可以说是“我相信,只要这些方声称某人有一个< http://xmlns.com/foaf/0.1/givenName>,该值确实是该人的给定名称?”

SPARQL和SQL简介

专家们现在关于RDF和关系数据,我们现在可以检查他们的查询语言。获取MA中每个人的地址的SQL查询可能如下所示:

SELECT Person.fname,Address.city 
FROM Person,Address 
WHERE Person.addr = Address.ID 
AND Address.state =“MA”

从概念上讲,我们从一组表中选择属性列表,以满足某些约束条件。这些约束捕获方案中隐含的关系Person.addr = Addresses.ID和选择条件,例如Address.state =“MA”。

相同数据的SPARQL查询可能看起来像

SELECT?name?city 
WHERE { 
     ?who <Person#fname>?name; 
     <Person#addr>?adr 
     ?adr <地址#city>?city; 
     <地址#州>“MA” 
}

无论更好还是更糟,SPARQL重用SQL用户熟悉的关键词:SELECT,FROM,WHERE,UNION,GROUP BY,HAVING和大多数聚合函数名称。

看看上面的例子,我们看到SQL查询的一般形式:

SELECT <attribute list> 
FROM <table list> 
WHERE <test expression>

测试表达式捕获与特定查询相关的行(行为“MA”状态的行)和数据库的结构(Person.addr引用Address.ID)。文献和文献倾向于避免使用歧义词“选择”,而是restriction用于选择行和projection从这些行中选择特定的列。查询的结果是行列表,每列都有选择的属性列表。在课程顶部的示例数据库上执行示例查询会产生一个对应于“MA”中的一个人的解决方案:

fname
鲍勃 剑桥

上面的SPARQL查询具有相似的结构:

SELECT <variable list> 
WHERE {<graph pattern>}

变量列表中的变量由图形模式绑定。(记住,“图”只是意味着三个是一组潜在的互连的语句。)图形模式看起来像数据语句,但主题,谓词或对象可能被替换为变量(以“?”开头的术语) 。上面的模式找到与数据匹配的所有值,如name,?city,?who和?addr,仅显示?name和?city:

?fname ?市
“鲍勃” “剑桥”

查询曾与变量的一个解决方案fname,并city绑定到文字“鲍勃”和“剑桥”。SPARQL解决方案集中的术语与SPARQL查询或Turtle语句中的术语相同。请注意,SPARQL解决方案集中的列标题是出现在WHERE { <graph pattern> }SQL结果中的列标题是SQL模式中属性(列)的名称的变量。

NULL,OPTIONALS和LEFT OUTER JOIN

SQL使用令牌NULL来表示数据不可用或不适用。即使所选属性为NULL,SELECT也匹配表行。但是,如果没有相应值的行,则连接约束通常会消除行。LEFT OUTER JOIN操作符执行常规(“内部”)连接,但如果不满足连接约束,则不消除解决方案。以下查询将选择每个人的fname,如果可用,将选择他们的城市:

SELECT Person.fname,Address.city 
FROM Person 
LEFT OUTER JOIN地址ON Person.addr = Address.ID 
WHERE Address.state =“MA”
fname
鲍勃 剑桥
起诉 NULL

SPARQL使用关键字OPTIONAL而不是LEFT OUTER JOIN,但效果类似:

SELECT?name?city 
WHERE { 
    ?who <Person#fname>?name。
    OPTIONAL { 
         ?谁<Person#addr>?adr。
         ?adr <地址#city>?city; 
         <地址#州>“MA” 
    } 
}

虽然连接语义在两种语言之间是类似的,但在丢失数据的处理方面存在明显的区别。缺少的数据根本不在RDF中表示。另外(并因此),如果有缺少的属性,例如Sue的addr,SPARQL图形模式将不会绑定。选择每个人的姓名和地址记录的标识符的SPARQL查询必须使addr属性可选,以匹配Sue的记录:

SELECT?name?city 
WHERE { 
    ?who <Person#fname>?name。
    OPTIONAL {?who <Person#addr>?adr} 
}

一个真正类似的SQL查询必须防止绑定到NULL,即:

SELECT Person.fname,Person.addr 
FROM Person 
LEFT OUTER JOIN地址ON Person.addr = Address.ID 
WHERE Address.state =“MA”AND  Person.addr IS NOT NULL

解决方案集合中的其他运算符

SPARQL和SQL具有非常相似的UNION和MINUS运算符,它们分别从解决方案集中添加和删除解决方案。

因为SQL表的数据类型假定在所有行中都是一致的,所以必须注意对齐SELECT的数据类型。一些SQL数据库强制执行此规则,让用户有一些有用的错误消息来找到错位。其他人也可以返回异构列,例如后面的​​行的值就像2012-05-28在一列浮点数。

网上查询

SQL数据库是数据的重新分配,一组表由数据行填充。SQL查询在给定的数据库上运行。SPARQL服务是否有预定的RDF数据库是不同的。上面的示例查询假设一组三元组可用于查询,哪个可以从服务查询已填充的数据库。如果RDF数据库默认为空,或者不包含查询所需的数据,则需要指定加载该数据的位置。SPARQL重新使用SQL关键字“FROM”来标识需要加载以完成查询的Web资源:

SELECT?name?city 
FROM <  http://example.org/AddressBook>
WHERE {...}

勘探

结合导航与探索在SPARQL中非常简单。如果我想知道我的组织知道关于illudium phosdex的反应,我可以写一个查询,发现这些反应并探讨他们的属性:

SELECT?reaction?p?o 
WHERE { 
    ?compound ex:name“illudium phosdex”; 
    反应如:涉及化合物; 
    ?反应?五氧化二磷
}

在SQL中,这将像:

SELECT反应* 
FROM反应,化合物
WHERE reactions.compoundID = compounds.ID 
AND compounds.name =“illudium phosdex”

通用链接数据浏览器目前正在利用SPARQL来探索数据,并且可能导致一系列专门的界面,使知识用户能够理解和利用信息资产。

联邦

SPARQL的主要特征可能会打动SQL用户,这是能够在不同的存储库之间联合查询。RDF理论为数据集成图提供了基础,而RDF工具则将该功能放在用户手中,允许他们轻松检索多个数据文档。集成大型数据库也是微不足道的,而不是在本地检索数据并进行合并,而是写入SPARQL查询,将查询的部分委托给远程查询服务,例如本周的未发货订单:

SELECT?order?handler 
WHERE { 
     SERVICE <sales> { 
         ?order ex:soldBy?handler; 
         例如:?由于的dueDate 
         FILTER(由于>“2012-02-22”由于&& <“2012-02-29”?
     } {MINUS 
         服务<完成> {为了例如:??运运} 
     } 
}

SQL没有用于查询联合的标准系统。各种产品提供或多或少利用SQL语法管理对预先分配的数据库集的访问的工具。MySQL FROM指令可以加入运行在同一MySQL服务器上的不同虚拟数据库的数据,Oracle数据库流和SQL Server集成服务使用该语法连接到通过某些手动配置映射到本地模式名称的数据库。

模式重用

大胆的说法是,SPARQL可以用于轻松整合数据,这要求数据当然在相交域中。为了使集成真正微不足道,它有助于以类似的方式表达数据。如果我们想将一个数据库的某些化学物质的生理影响信息与另一个数据库的药物成分连接在一起,那么化学物质在两个数据库中的表现方式相同,这当然更容易。这似乎是一个很高的订单,但SPARQL和RDF在网络上的基础使得它很容易探索,拥抱和扩展现有的模式。如果合作精神可能不足以激励人们使用相同的模式,我们仍然有懒惰来帮助我们打熵。

概要

介绍了关系型和RDF数据模型,并强调了它们之间的结构差异。这些差异在他们的查询语言的能力上变得显而易见。我们讨论了遍及语义Web的重用和集成的文化,并提到SPARQL可用于访问关系数据以及RDF。关于RDF和R2RML 的关系数据的直接映射:RDB到RDF映射语言的两个最近的规范定义了这个过程。下一课将对比包含完全相同信息的两个数据库的SPARQL和SQL查询。

Sparql与sql的比较相关推荐

  1. Protege、D2RQ、JENA与SPARQL

    引言 关于的知识图谱的相关概念在从语义网络到知识图谱这篇博文中有简单的描述,下面介绍一下在知识图谱实际使用中的一些工具. 数据 来源于The Movie Database (TMDb)抓取的电影数据, ...

  2. 达摩院首席数据库科学家李飞飞:云原生新战场,我们如何把握先机?

    阿里妹导读:云计算大潮来袭,传统数据库市场正面临重新洗牌的情境,包括云数据库在内的一批新生力量崛起,动摇了传统数据库的垄断地位,而由云厂商主导的云原生数据库则将这种"改变"推向了高 ...

  3. Apache TinkerPop毕业成为顶级项目

    Apache软件基金会宣布,TinkerPop毕业成为顶级项目.TinkerPop是一个面向实时事务处理(OLAP)以及批量.分析型图分析(OLTP)的图计算框架,它是一个总称,包含若干子项目以及与核 ...

  4. 【知识图谱】知识推理

    文章目录 一.本体知识推理简介 1.OWL本体语言 2.描述逻辑 (1)描述逻辑系统 (2)描述逻辑的语义 3.知识推理任务分类 (1)可满足性(satisfiability) (2)分类(class ...

  5. 知识图谱实践篇(二):关系数据库到RDF

    上一篇文章介绍了我们所使用的数据.其实,知识图谱数据的来源主要有三个:结构化数据.半结构化数据和非结构化的数据.我们所使用的电影数据就是结构化的数据.半结构化的数据指的是数据有一定的组织形式,但较结构 ...

  6. 肖仰华 | 基于知识图谱的问答系统

    本文转载自公众号知识工场. 本文整理自复旦大学知识工场肖仰华教授在VLDB 2017 会议上的论文报告,题目为<KBQA: Learning Question Answering over QA ...

  7. 语义Web的一些概念和资源

    1.语义网是一种使用可以被计算机理解的方式描述事物的网络.语义网描述的是事物之间的关系以及事物的属性.(摘) 2.语义网的本质:以计算机应用程序可以理解的方式描述事物.(摘) 3.RDF(资源描述框架 ...

  8. 《知识图谱》赵军 学习笔记

    知识图谱读书笔记 文章目录 知识图谱读书笔记 一. 概述 1.1 什么是知识图谱 1.2 知识图谱发展历程 1.3 知识图谱类型 1.4 知识图谱生命周期 知识体系构建 知识获取 知识融合 知识存储 ...

  9. 使用D2RQ转换关系型数据库Mysql数据为RDF

    目录 背景 1.安装D2RQ 1.1 简介 1.2 下载安装 1.3 配置mysql连接 2.转换为RDF 2.1 将mysql映射到mapping上 2.2 将Mysql数据转为RDF 背景 知识图 ...

最新文章

  1. c# 小票打印机打条形码_C#打印小票自带条形码打印
  2. linux-awk的简单应用
  3. 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...
  4. Testing - 软件测试知识梳理 - 自动化测试
  5. 废粉盒在哪里_很想知道打印机废粉盒中的那些废碳粉应该怎么处理?
  6. ios 旋转屏幕试图切换_iOS增强现实应用(AR)设计指南(上)
  7. 1小时打造HaaS版小小蛮驴智能车
  8. win10支持linux内核版本是多少,win10自带linux版本是多少
  9. 【UVA10603】Fill(优先队列+状态转移)
  10. 异步两周年庆/豪送20本图书,1000种图书任你选
  11. 【微信小程序毕业设计源代码】校园考勤打卡及作业管理小程序系统丨前后分离VUE[包运行成功]
  12. 【002】龙芯CPU实时系统解决方案
  13. Git Git用户ssh公钥管理
  14. 【题解】P2916 [USACO08NOV]安慰奶牛Cheering up the Cow-C++
  15. Reversing.kr-Ransomware
  16. 【BW系列】SAP 讲讲BW/4 HANA和BW on HANA的区别
  17. zabbix自定义监控项及触发动作
  18. MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】
  19. 自勉三句话--关于职业生涯规划
  20. 时隔27年,微软IE浏览器正式退出历史舞台,一个时代的结束

热门文章

  1. 漏洞挖掘之 SQL 注入挖掘
  2. 收费企业邮箱哪个好用?怎么购买外贸邮箱?企业邮箱服务有哪些呢?
  3. 中国锂电池粘结剂行业发展现状分析,主要为PVDF「图」
  4. 漫谈WIFI破解那些事
  5. OrientDB部署
  6. windows10系统-10-VirtualBox中的四种网络连接方式
  7. 第二章____一元函数微分学
  8. 蒙特卡罗MCNP学习汇总(四)--计数基础-探测器
  9. 【C语言进阶】常见数据格式转换处理的代码实现
  10. 爬虫是什么,该如何学习爬虫呢?