为啥我在结果中得到重复? (DBpedia sparql 查询)
Posted
技术标签:
【中文标题】为啥我在结果中得到重复? (DBpedia sparql 查询)【英文标题】:Why am I getting duplicates in results? (DBpedia sparql query)为什么我在结果中得到重复? (DBpedia sparql 查询) 【发布时间】:2019-03-06 12:27:57 【问题描述】:我以为我查询得很好,直到我看到结果有一些相同的事件出现了几次。谁能解释一下原因?
查询:
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?event ?eventLabel
WHERE
?event a dbo:MilitaryConflict ;
dbo:date ?date .
FILTER ( ?date >= "1918-01-01"^^xsd:date && ?date <= "2018-12-31"^^xsd:date ).
FILTER(LANG(?eventLabel) = "nl").
OPTIONAL ?event rdfs:label ?eventLabel.
结果:
http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&query=PREFIX++dbo%3A++%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0D%0A%0D%0A%23SELECT+++++%28+COUNT+%28DISTINCT+%3Fevent%29+AS+%3Fcnt+%29%0D%0ASELECT+%3Fevent+%3FeventLabel%0D%0A%0D%0AWHERE%0D%0A++%7B+%3Fevent++a+++++++++++++dbo%3AMilitaryConflict+%3B%0D%0A++++dbo%3Adate++%3Fdate+++.%0D%0A%0D%0A++++FILTER+%28+%3Fdate+%3E%3D+%221918-01-01%22%5E%5Exsd%3Adate+%26%26+%3Fdate+%3C%3D+%222018-12-31%22%5E%5Exsd%3Adate+%29.%0D%0A++++FILTER%28LANG%28%3FeventLabel%29+%3D+%22nl%22%29.%0D%0A+++OPTIONAL+%7B+%3Fevent+rdfs%3Alabel+%3FeventLabel.%7D%7D&format=text%2Fhtml&CXML_redir_for_subjs=121&CXML_redir_for_hrefs=&timeout=30000&debug=on&run=+Run+Query+
【问题讨论】:
您应该已经知道DISTINCT
运算符的用途,因为您已经在以前的查询中使用过它......如果您问为什么,这就是 SPARQL 的本质,它返回一个“行" 对于每个匹配的组合。查看一些事件,它们有多个日期,因此,有多个 RDF 三元组与查询匹配。
简短回答,SELECT DISTINCT ...
顺便说一下,您不会在此 SPARQL 端点找到 2017 年和 2018 年的任何事件。
哦,谢谢! :D 雾现在不在我的脑海里了。显然,我使用 DISTINCT 进行计数,但不适用于此查询。
好的 :) 你知道为什么events.dbpedia.org/sparql 不起作用吗?我检查了2周,它总是离线。但是我在这里查询dbpedia.org/sparql 应该没关系,对吧...?抱歉所有愚蠢的问题:D
【参考方案1】:
消除重复行 --
SELECT ?event ?eventLabel
-- 应该做--
SELECT DISTINCT ?event ?eventLabel
【讨论】:
以上是关于为啥我在结果中得到重复? (DBpedia sparql 查询)的主要内容,如果未能解决你的问题,请参考以下文章
从 dbpedia 或 LinkedGeoData 中提取城市数据