为啥我在结果中得到重复? (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 中提取城市数据

查询 DBpedia 的多个关键字

为啥我在解析 XML 时会从此方法中得到重复记录?

无法弄清楚为啥我在我的 jsonp 序列化中得到重复数据

为啥我在 node.js 中使用 parseInt 会得到奇怪的结果? (与 chrome js 控制台的结果不同)

我在 php 和 mysql 中使用 LAST_INSERT_ID() 但我无法得到结果。为啥?