首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPARQL查询不产生预期结果。

SPARQL查询不产生预期结果。
EN

Stack Overflow用户
提问于 2019-05-04 20:41:14
回答 1查看 94关注 0票数 2

我使用这个SPARQL查询来获取欧洲国家的列表:

代码语言:javascript
复制
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行是一个OR-子句,它结合了第4行和第5行.

我使用4-6活动行之一运行查询,另外两行注释掉了。

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

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

我做错了什么?

这是相关查询

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-04 21:11:09

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

要解决这个问题,我们可以查询国家或其子类的实例:

代码语言:javascript
复制
?item wdt:P31/wdt:P279* wd:Q6256.

不幸的是,这也吸引了历史国家,所以查询需要一些额外的工作来过滤掉(例如,使用FILTER NOT EXISTS { ... })。它还需要SELECT DISTINCT

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55986633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档