SPARQL查询未产生预期结果 [英] SPARQL query does not yield expected results

查看:18
本文介绍了SPARQL查询未产生预期结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用此SPARQL查询来获取欧洲国家/地区的列表:

SELECT ?item $itemLabel
    WHERE {
        ?item wdt:P31 wd:Q6256.
        #?item wdt:P30 wd:Q46
        #?item wdt:P361* wd:Q46.
        ?item wdt:P30|wdt:P361* wd:Q46.
        SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
    }
    ORDER BY ASC($itemLabel)
  • 第3行将结果限制为Q6256的实例,即国家/地区。
  • 第4行(当前已注释)将结果限制为大陆Q46(欧洲)上的项目。
  • 第5行(当前已注释掉)将结果限制为属于欧洲的项目,或属于属于欧洲的项目等。
  • 第6行是合并第4行和第5行的OR子句。

我运行查询时,第4-6行中的一行处于活动状态,另外两行已被注释掉。

无论哪个谓词是活动的,奥地利都不是结果的一部分(其他国家也没有)。然而,查看https://www.wikidata.org/wiki/Q40,我们可以看到

  • 奥地利是Q6256的一个实例。
  • 奥地利的大陆(P30)是欧洲。
  • 奥地利是中欧(Q27509)的一部分,中欧是欧洲的一部分。

我做错了什么?

这是relevant query

推荐答案

奥地利实际上没有声明为Country的实例(Q6256)。它被声明为主权国家(Q3624078)的实例,主权国家是Country(P279)的子类。奥地利页面上可以看到的实例与国家的关系是推断的,查询时不可用。

要解决此问题,我们可以查询作为Country或其子类的实例的项目:

?item wdt:P31/wdt:P279* wd:Q6256.
不幸的是,这也拉入了历史国家/地区,因此查询需要一些额外的工作来过滤掉这些国家/地区(例如,使用FILTER NOT EXISTS { ... })。还需要SELECT DISTINCT

这篇关于SPARQL查询未产生预期结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆