维基数据查询重复 [英] Wikidata query duplicates

查看:12
本文介绍了维基数据查询重复的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我的英语不好,很抱歉,但是我真的没有地方可以用我的母语问这个问题。 我一直在尝试为Wikidata创建SPARQL查询,该查询应该创建一个列表,列出1925-1950年间创作的所有恐怖小说、作者姓名以及图片(如果有):

SELECT DISTINCT ?item ?itemLabel ?author ?name ?creation ?picture
WHERE
{
    ?item wdt:P136 wd:Q193606 . # book
    ?item wdt:P50 ?author .   # author
    ?item wdt:P577 ?creation .
    ?item wdt:P577 ?end .
  ?author rdfs:label ?name .    
  OPTIONAL{ ?item wdt:P18 ?picture }
  FILTER (?creation >= "1925-01-01T00:00:00Z"^^xsd:dateTime) .
  FILTER (?end <= "1950-12-31T23:59:59Z"^^xsd:dateTime) .

SERVICE wikibase:label
{ 
bd:serviceParam wikibase:language "en" .
} 
}
但是,由于某些原因,此查询在列表中放置了重复项。DISTINCT不会做太多事情。过了一段时间,我发现原因是"?item rdfs:label?name."。如果删除此行,则不会列出重复项。但是我需要这行来在列表中显示作者的名字! 您对如何解决此问题有什么建议吗?

推荐答案

查询实际上为您提供了不同的项目。问题是有些项目有多个rdfs:标签。例如,您可以看到以下项目:

SELECT *
WHERE
{
   wd:Q2882840 rdfs:label ?label

SERVICE wikibase:label
{ 
bd:serviceParam wikibase:language "en" .
} 
}

由于某些项目有多个rdfs:label谓词,因此它们显示在单独的行中。

这篇关于维基数据查询重复的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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