SPARQL教程

介绍

SPARQL 101中,我们介绍了SPARQL是什么,它如何与其他查询语言相关,并且通过了基本的SPARQL语法。

这个课程建立在这个基础上,主要是以示例为基础。我们使用许多现实世界的SPARQL查询来说明查询语言的功能,作为提高效率的最快方法。

这是一个技术性的课程。

先决条件

今天课

在本教程中,我们将使用DBpedia.orgDBpedia SPARQL终结点DBpedia.org是一个免费提供的社区支持的数据库,填充有从维基百科提取的RDF数据。

来自此较少的所有样本查询可以直接粘贴到DBpedia的SPARQL用户界面进行测试。您将非常鼓励您随时随地查询语言。它有助于在另一个浏览器选项卡中保持打开,以便您可以在课程和查询之间来回切换。

基本图形模式

我们先来查询一个三重模式(一个带有变量的RDF三元组)。变量组合在一起的几个三元组称为基本图形模式。这是最基本的查询类型。

回想一下,变量前面加上(?)一个问号。

还记得,“URI”和“资源”这个词通常是可交错使用的。

查询1:此查询返回所有标识城市类型为“德克萨斯州城市”的URI。回想一下,RDF资源由URI标识; 在讨论查询时,通常可以互换使用URI和资源。

PREFIX rdf:< http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT * WHERE { 
    ?city rdf:type < http://dbpedia.org/class/yago/WikicatCitiesInTexas >
}

将其复制并粘贴到DBpedia的SPARQL UI中。如果您运行查询,您将获得一个包含德克萨斯州相当长的城市名单的表格。

现在让我们在查询中添加另一个三元组。

查询2:此查询返回“德克萨斯州城市”以及总人口数的城市。

PREFIX rdf:< http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:< http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbp:< http://dbpedia.org/ontology/>
SELECT * WHERE { 
    ?city rdf:type < http://dbpedia.org/class/yago/WikicatCitiesInTexas>
    ?city dbp:populationTotal?popTotal。
}}

请注意,变量?city用作查询中的三元组的主题,在单个资源上匹配两个语句。

如果将其输入到DBpedia SPARQL UI中,您将看到结果页与第一个查询大致相同,但现在有一个新列需要额外的信息。

SPARQL使用Turtle语法(最初在RDF Nuts&Bolts课程中描述),因此以下查询是相同的:

PREFIX rdf:< http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:< http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbp:< http://dbpedia.org/ontology/>
SELECT * WHERE { 
    ?city rdf:type < http://dbpedia.org/class/yago/WikicatCitiesInTexas> ; 
    dbp:populationTotal?popTotal。
}}

你能说出什么不同,为什么这两个查询实际上是一样的?

我们再添加一个三重模式。这是一个具有三个三重图案的基本图形图案。

查询3:此查询返回“总部在德克萨斯城市”的城市总人口和城市人口。

PREFIX rdf:< http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs:< http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbp:< http://dbpedia.org/ontology/>
SELECT * WHERE { 
    ?city rdf:type < http://dbpedia.org/class/yago/WikicatCitiesInTexas> ; 
    dbp:populationTotal?popTotal; 
    dbp:populationMetro?popMetro。
}}

在DBpedia SPARQL UI中尝试这样做。现在,结果的大小从以前的查询中大大减少了!为什么会这样,鉴于查询本身是要求更多的信息,而不是更少

实际上,通过请求附加信息,我们对查询进行了隐含的限制。具体来说,查询将返回具有值为popTotal和PopMetro的城市的结果。只有popTotal的城市不是 popMetro不再出现了。

也就是说,我们要求城市人口地铁总人口都有价值。如果城市资源不足或查询中的其他图形模式与数据不匹配。

但是,如果我们想要所有的城市出现,不管他们有地铁人口怎么办?这是OPTIONAL条款的地方。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值