RDF与SPARQL的一些知识整理
近期整理了一些关于RDF和SPARQL的基础知识
写在博客里以便温习
一、RDF相关知识
1、数据库格式:RDF图
RDF:资源描述框架(Resource Description Framework)
RDF是语义Web的核心数据模型,也是所有其他语义Web技术的基础。
RDF图是一个带有标签的有向图,图是指“点和线”,而不是“图表”
可将RDF视为通过节点和边都有标签的边(线)相互连接的一组节点(点)
图形的节点是椭圆形和矩形,边缘被标记为箭头,将节点彼此连接起来。
标签是URI(统一资源标识符)
2、RDF图的三种节点
资源节点:资源是任何可以说明事情的东西。在视图表示中资源由椭圆表示。
文字节点:详细说明。在视图表示中文字节点用矩形表示。
空白节点:一个空白节点是一个没有URI的资源。
3、三元组形式
一个语句或三元组指的是形式(主语,谓语,宾语)的三元组
主题是URI,谓词是URI,对象是URI或文字值
RDF图只是三元组的集合
4、RDF具体表示形式
RDF是一个抽象的数据模型,下面有几个有效的RDF数据序列化格式:
(1)RDF / XML
这仅仅是RDF表示为有效的XML。由于可以解析和存储XML的现有工具过多,因此最初提出并使用它。虽然RDF / XML可以通过任何RDF工具读取和写入,但RDF / XML冗长且难以读写。通常不是最好的序列化格式。
(2)N-Triples
N-Triples是一个非常基本的RDF序列化。它的主要特点是每行只存在一个三元组,因此分析速度非常快,因此Unix命令行工具可以轻松地对其进行操作。它也是高度可压缩的,因此DBpedia等大型公共RDF资源通常以N-Triples形式发布数据。
< http://www.cambridgesemantics.com/people/about/rob >
< http://xmlns.com/foaf/0.1/name>
“Rob Gonzalez”。
< http://www.cambridgesemantics.com/people/about/rob >
< http://xmlns.com/foaf/0.1/member >
< http://www.cambridgesemantics.com/ >
(3)Turtle
现在写RDF,可能使用的是Turtle格式。Turtle比RDF / XML更紧凑,比N-Triples更可读,并且缺少Notation3的一阶逻辑扩展。此外,SPARQL查询语言以几乎完全相同的方式表达RDF查询。
文件结尾 .ttl
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix csi: <http://www.cambridgesemantics.com/> .
@prefix csipeople: <http://www.cambridgesemantics.com/people/about/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
csipeople:rob foaf:name “Rob Gonzalez”^^xsd:string .
csipeople:rob foaf:member csi:
(4)TRIG
TriG也是一种Turtle格式,但支持命名图。这是使用命名图序列化RDF的事实标准,文件结尾.trig
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix csi: <http://www.cambridgesemantics.com/> .
@prefix csipeople: <http://www.cambridgesemantics.com/people/about/>
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix : <http://www.cambridgesemantics.com/semantic-university> .
:RobGraph {
csipeople:rob foaf:name “Rob Gonzalez”^^xsd:string .
csipeople:rob foaf:member csi: .
(5)RDFa(嵌入在HTML中的RDF)
可以使用RDFa在正常网页中嵌入RDF数据。这是一个非常强大的技术,已被一些大公司使用。
(6)Notation3(简称N3)
最初由Tim Berners-Lee在1998年提出。它用一种从未流行的一阶逻辑扩展了RDF。但是现在几乎不用。
5、创建RDF图
创建RDF有各种方法,在性能,可扩展性,平台支持,API和功能方面有所不同,有几个可以使用的创建RDF文件的软件或程序包:Apache Jena、Sesame、Virtuoso、AllegroGraph、BigData、OWLIM、Stardog,python中的 RDFlib,sparqlwrapper包
二、SPARQL相关知识
1、SPARQL概念
SPARQL:SPARQL协议和RDF查询语言(SPARQL Protocol and RDF Query Language)
是为RDF开发的一种查询语言和数据获取协议,它是为W3C所开发的RDF数据模型所定义,但是可以用于任何可以用RDF来表示的信息资源。SPARQL协议和RDF查询语言(SPARQL)于2008年1月15日正式成为一项W3C推荐标准。SPARQL构建在以前的RDF查询语言(例如 rdfDB、RDQL 和 SeRQL)之上,拥有一些有价值的新特性。
现在的规范版本是SPARQL1.1,它提供语言和协议来查询和操作Web上或RDF存储中的RDF图形内容。复杂的查询可能包括联合,可选查询部分和过滤器。
由两部分组成:查询语言和协议
查询语言:SQL用于查询关系数据、XQuery用于查询XML数据、SPARQL用于查询RDF数据
除了本地数据库之外,它还设计为通过网络在断开连接的源上运行
SPARQL协议允许通过HTTP在客户端和SPARQL引擎之间传输SPARQL查询和结果。
可以实时查询公共的SPARQL端点。SPARQL端点只是一个通过SPARQL协议公开其数据的服务器,SPARQL协议允许通过http在客户端和SPARQL引擎之间传输SPARQL查询和结果
wikidata和DBpedia都有公共的SPARQL端点可以进行查询
2、SPARQL查询的结构
(1)查询的方法
RDF图:
ex:juan foaf:name “Juan Sequeda”
ex:juan foaf:based_near ex:Austin
将上面的具体值变成变量:
?x foaf:name ?y
?x foaf:based_near ?z
SPARQL查询中的变量以?开头。
符合上面的“要求”的x就是要查询的数据
(2)简单的查询例子
PREFIX foaf:< http://xmlns.com/foaf/0.1/>
SELECT?name
FROM < http://example.com/dataset.rdf>
WHERE {
?x foaf:name?name。
}
ORDER BY?name
3、具体的含义
PREFIX关键字描述了缩写的URI前缀声明。如果没有前缀,则必须使用查询中的整个URI(< http://xmlns.com/foaf/0.1/name>)。通过使用字符串(foaf)来引用URI的一部分(< http://xmlns.com/foaf/0.1/>)来创建前缀。当您使用缩写(foaf:name)时,它会将冒号(:)后面的字符串附加到由前缀字符串引用的URI。
SELECT关键字是常用的4种关键字之一。和SQL中的SELECT提供的功能非常相似,只是返回符合某些条件的数据。SELECT查询返回在简单表中表示的数据,其中每个匹配结果是一行,每列是特定变量的值。使用SELECT?name中的上面的SPARQL查询,结果将是一个包含一列和多行匹配查询的表。
除了SELECT外,还有三个常用的返回子句:ASK,DESCRIBE和CONSTRUCT。
ASK 查询检查给定查询模式是否至少有一个结果,返回TRUE或FALSE。
DESCRIBE 查询返回描述资源的RDF图。返回表单的实现取决于查询引擎
CONSTRUCT 查询返回一个RDF图,它是从作为查询本身的一部分指定的模板创建的。也就是说,通过获取查询模式的结果并填充构造模板中出现的变量的值来创建新的RDF图。用于转换RDF数据。
FROM关键字定义正在被查询的RDF数据集。有一个可选的子句FROM NAMED,用于查询指定图形时使用。
WHERE子句指定要匹配的查询图。这是查询的核心。如上所述,图形模式本质上是具有变量的RDF。
ORDER BY是修饰符,用于重新排列查询结果(升序或降序)。
LIMIT子句对结果的数量设置了一个上限。
OFFSET子句使结果在指定的数字之后开始。
FILTER:过滤掉符合模式但是不想要的结果,选择符合特定标准的数据,运算符如下:
逻辑:&&,||,!
数学:+, - ,*,/
比较:=,!=,<,>,<=,> =
SPARQL测试:isURI,isBlank,isLiteral,isNumeric,bound
SPARQL访问器:str,lang,datatype
其他:sameTerm,langMatches,regex,REPLACE
4、SPARQL查询返回的数据格式
(1)XML
SPARQL指定用于返回结果表的XML词汇表
(2)JSON
XML词汇表的JSON“端口”,对Web应用程序尤其有用
(3)CSV、TSV
简单的文本表示方式,适合导入电子表格
CSV:
name,count
Alice,3
Bob,1
Charlie,1
TSV:
?name<TAB>?count
"Alice"<TAB>3
"Bob"<TAB>1
"Charlie"<TAB>1
(4)RDF
某些SPARQL结果子句触发RDF响应,这些响应可以通过多种方式进行序列化(RDF / XML,N-Triples,Turtle等)
(5)HTML
使用交互式表单处理SPARQL查询时。通常通过将XSL转换应用于XML结果来实现。
参考网站:http://www.cambridgesemantics.com/blog/semantic-university/