2、SPARQL 查询语言

一、语法结构及关键字

1、SELECT 查询

语法:
SELECT [DISTINCT] <VAR> [<VAR> ...]
[FROM ...]
WHERE
{
triple pattern 1.
[triple pattern 2.]
...
[附加条件...]
}
[OFFSET 数字]
[LIMIT 数字]
[ORDER BY | GROUP BY <VAR>]
说明:
triple pattern 是一个三元组,它的结构跟 RDF 三元组要求基本相同,唯一不同的就是他的主谓宾可以是变量。比如 ?s ?p ?o 这个会匹配 RDF 图数据中所有的三元组。
DISTINCT 的使用跟它在 SQL 中一样,用于去掉重复数据值。
FROM 用于指定在哪个数据图中检索。因为一个数据终端可以检索多个 RDF 数据图的内容,比如 FROM <http://dbpedia.org> 就是从这个 URI <http://dbpedia.org> 指定的数据图中检索。
OFFSET n 用于指定跳过前 n 个检索结果。
LIMIT m 用于指定返回结果的数量 m。
ORDER BY VAR 根据变量VAR的值对返回的结果排序。对比 SQL。
GROUP BY VAR 根据变量VAR的值对返回结果进行分组。对比 SQL。

2、CONSTRUCT 查询

语法:
CONSTRUCT
{
triple pattern .
...
}
WHERE
{
triple pattern .
...
[附加条件...]
}
说明:
跟 SELECT 查询同样用于查询数据,但是前者返回的是列表,这个返回的是 RDF 图数据。CONSTRUCT 中的

3、ASK 查询

语法:
ASK
{
triple pattern .
...
[附加条件...]
}
说明:
用于验证结果真假,判断 RDF 数据中是否包含指定的结果。

4、DESCRIBE 查询

语法:
DESCRIBE <VAR>|<URI> [<VAR>|<URI> ...]
WHERE
{
triple pattern .
...
[附加条件...]
}
说明:
用于返回关于某个 URI 或者 变量 的 RDF 数据。

5、关键字:

select:用于确定查询中返回哪些变量
where:定义匹配的RDF库中的图模型,每一行都是一个完整的三元组,除了最后一行其他都需要句号结尾
distinct:消除重复的记录项
*  返回所有已知变量的绑定
optional:即允许向结果集中增加额外的绑定,有不会在没有可选绑定时删除查询结果
FILTER:对布尔表达式进行计算,从结果集中去除结果为假的查询结果,查询中国的大学数大于30000的

二、基于DBpedia知识库的SparQL查询练习

查询操作在线平台地址:https://dbpedia.org/sparql

案例1:查询所有以 foaf:name 为谓词(属性)的三元组的宾语(属性值)。

代码:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
    ?person foaf:name ?name
}

查询结果:

 

案例2:查询拥有 foaf:homepage 属性的所有主语。

代码:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?s ?homepage 
where {
    ?s foaf:homepage ?homepage .
}

查询结果:

 

案例3:列出所有的大学即对应的国家

代码:

select distinct ?name ?country
where
{
   ?name a <http://dbpedia.org/ontology/University>.
   optional
   {
      ?name <http://dbpedia.org/ontology/country> ?country.
   }
}

查询效果:

 

案例4:查询中国大学列表

代码:

select distinct ?name 
where
{
   ?name a <http://dbpedia.org/ontology/University>.
   ?name <http://dbpedia.org/ontology/country><http://dbpedia.org/resource/China>.
}

查询效果:

 

案例5:查询中国大学人数>30000的大学列表

代码:

select distinct ?name ?number
where
{
   ?name a <http://dbpedia.org/ontology/University>.
   ?name <http://dbpedia.org/ontology/country><http://dbpedia.org/resource/China>.
   ?name <http://dbpedia.org/ontology/numberOfStudents>?number.
   FILTER(?number>30000)
}

查询效果:

 

posted @ 2025-06-20 17:51  红酒人生  阅读(61)  评论(0)    收藏  举报