SPARQL查询语句入门

1. 基本语法
SELECT<variables>
WHERE {
	<graph pattern>
}

<variables>是所要提取的主语或者宾语
<graph pattern>是所要查询的三元组模式

eg:

SELECT	?ablum
WHERE{
	?ablim rdf:type :Ablum .
}

?ablum是一个变量,可以随便起,第一个字符必须是?
查询条件是 ?ablum这个变量是主语,根据 rdf:type这个谓语,可以得到:Ablum这个宾语,这个宾语也有前缀,表示这是当前数据库定义的

如果要返回所有符合要求的记录,变量可以使用*代替,并且WHERE也可以省略,最后一个三元组的结尾句号也可以省略

SELECT * {?ablum a : Ablum}
# a 相当于 rdf:type

如果要返回更多的内容

SELECT ?album ?artist
{
	?album a : Album
	?album :artist ?artist .
}
2. 使用维基数据进行示例查询

维基数据使用RDF进行存储,因此我们可以利用该资源进行简单的demo学习

山西省-wiki中,其URL为https://www.wikidata.org/wiki/Q46913,可以看到该URL结尾是Q46913,这就是山西省这个条目在维基数据中的编号,也就是主语
在这里插入图片描述
向下滑动找到contains administrative territorial entity条目,点击进入,发现该条目的URL为https://www.wikidata.org/wiki/Property:P150,其最后为P150,这便是谓语动词的编号,意为所包含的行政实体,通过主语与谓语动词,便可以找到对应的宾语,进而显示在页面中,这就是RDF的查询过程,接下来我们用SPARQL代码进行模拟

wiki数据查询页面提供了使用SPARQL语言进行查询的功能,根据上述分析,我们的主语为Q46913,谓语是P150,同时该部分由维基数据定义,因此我们要使用维基数据命名空间的前缀

wd:标识维基数据条目
wdt:标识维基数据定义的谓语关系

SELECT >area
WHERE {
	wd:Q46913 wdt:P150 ?area .
}

运行之后我们可以得到运行结果
在这里插入图片描述
可见返回的都是条目编号,这意味着查询到的也是其他的RDF资源,我们可以增加一些内容来让查询结果更清晰

SELECT 
?area
?areaLabel
WHERE
{
	wd:Q46913 wdt:P150 ?area .
	?ared rdfs:label ?areaLabel
	FILTER(LANGMATCHES(LANG(?areaLabel)), "zh-CN")
}

该查询语句表示查询areaareaLabel两个变量,根据WHERE条件,area是主语wd:Q46913在谓语wdt:P150下所对应的宾语,然后使用area作为主查询在rdfs:label谓语下所对应的宾语areaLabel,同时使用FILTER过滤,只选择中文内容

查询结果如图所示
在这里插入图片描述
在添加一个查询人口的变量,其谓语可以通过在维基进入对应页面观察URL得到,然后利用该人口数量进行排序,将排序结果只取一条,即第一条

SELECT 
?area
?areaLabel
?popTotal
WHERE
{
	wd:Q46913 wdt:P150 ?area .
	?area rdfs:label ?areaLabel
	FILTER(LANGMATCHES(LANG(?areaLabel)), "zh-CN")
	?area wdt:P1802 ?popTotal
}

ORDER BY desc(?popTotal)
limit 1

由此得到了山西省人口最多的城市

SPARQL还有更多的查询方法,更加详细的教程请参考

阮一峰的SPARQL

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值