RDF 数据库
RDF
是 图数据库;用的查询语言是 SPARQL
维基数据用的就是RDF
三元组 triple
以"三元组"( triple)的方式,描述事物与事物之间的直接关系。
在语法上呈现为主语 + 谓语 + 宾语
,指的是两个事物和它们之间的关系。
每个 RDF 三元组的结尾是一个英文的句号
谓语
RDF 要求,谓语(即事物之间的关系)必须有明确定义。
谓语是给定的,就可以用主语去查询宾语,或者用宾语去查询主语
任何组织和个人,都可以定义自己的谓语
RDF 官方定义了一套常用的谓语,URL https://www.w3.org/1999/02/22-rdf-syntax-ns
小明是学生。
写成 RDF 三元组就是
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
小明 rdf:type 学生 .
<!-- rdf:type是一个常用谓语,RDF 允许把它简写成a -->
小明 a 学生 .
案例
甲壳虫是一个乐队,成员有 John Lennon、Paul McCartney、Ringo Starr 和George Harrison。他们都是艺术家,1963年出版过一张专辑《Please Please Me》,里面包含《Love Me Do》这首单曲,长度125秒。
<!-- 谓语的 URL,及其对应的前缀。 -->
PREFIX : <http://foo.com/tutorial/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns>
<!-- 甲壳虫是一个乐队,成员有 John Lennon、Paul McCartney、Ringo Starr 和George Harrison。 -->
甲壳虫 rdf:type Band .
甲壳虫 :name "甲壳虫" .
甲壳虫 :member John_Lennon .
甲壳虫 :member Paul_McCartney .
甲壳虫 :member Ringo_Starr .
甲壳虫 :member George_Harrison .
<!-- 他们都是艺术家 -->
John_Lennon a 艺术家 .
Paul_McCartney a 艺术家 .
Ringo_Starr a 艺术家 .
George_Harrison a 艺术家 .
<!-- 谓语相同可以合并 -->
甲壳虫 a 乐队 ;
:name "甲壳虫" ;
:member John_Lennon, Paul_McCartney, George_Harrison, Ringo_Starr .
<!-- 1963年出版过一张专辑《Please Please Me》里面包含《Love Me Do》 -->
Please_Please_Me a 专辑 ;
:name "Please Please Me" ;
:date "1963" ;
:artist "甲壳虫" ;
:track Love_Me_Do .
<!-- 《Love Me Do》这首单曲,长度125秒。 -->
Love_Me_Do a Song ;
:name "Love Me Do" ;
:length 125 .
SPARQL 查询语言
SPARQL 查询的语法
SELECT <variables>
WHERE {
<graph pattern>
}
- <variables>是所要提取主语或宾语,
- <graph pattern>是所要查询的三元组模式
例:
-- 查询专辑
SELECT ?album
WHERE {
?album rdf:type :Album .
}
?album
是一个变量,名字随意,第一个字符必须是问号?
?album
这个变量是主语,根据rdf:type
这个谓语,可以得到:Album
- 返回结果变量可以用星号*代替
- WHERE这个关键词在SELECT查询里面可以省略
- 最后一个三元组的结尾句号也可以省略
简写为
SELECT * { ?album a :Album }
多条件查询
SELECT ?album ?artist
{
?album a :Album .
?album :artist ?artist .
}