介绍
在SPARQL 101中,我们介绍了SPARQL是什么,它如何与其他查询语言相关,并且通过了基本的SPARQL语法。
这个课程建立在这个基础上,主要是以示例为基础。我们使用许多现实世界的SPARQL查询来说明查询语言的功能,作为提高效率的最快方法。
这是一个技术性的课程。
先决条件
今天课
在本教程中,我们将使用DBpedia.org的DBpedia 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条款的地方。

最低0.47元/天 解锁文章
358

被折叠的 条评论
为什么被折叠?



