gpt4 book ai didi

sparql - SPARQL 查询中的 UNION 和 EXISTS 过滤器有什么区别

转载 作者:行者123 更新时间:2023-12-05 03:11:16 25 4
gpt4 key购买 nike

我正在试验 DBpedia SPARQL endpoint我注意到使用 UNION 或 EXISTS 过滤器的类似查询之间存在差异。

SELECT (COUNT(?w1) as ?nbWriter) WHERE {
?w1 a dbo:Writer;
dbo:spouse ?w2 .
FILTER ( EXISTS {?w2 a dbo:Writer} || EXISTS {?w2 a yago:AmericanNovelists.} )
}

产生结果 nbWriters=371

查询时

SELECT (COUNT(?w1) as ?nbWriter) WHERE {
?w1 a dbo:Writer;
dbo:spouse ?w2 .
{?w2 a dbo:Writer.}
UNION
{?w2 a yago:AmericanNovelists.}
}

产生结果 nbWriters=414

为什么这两个查询之间存在差异?它们不等价吗(参见前面的问题和答案 Proper way to add OR clause to SPARQL query)?

最佳答案

第二个查询不计算不同的 作者。例如,它计数 Robert Lowell四次是因为:

  1. 他的配偶 Lady Caroline Blackwood是个作家
  2. 他的配偶 Jean Stafford是个作家
  3. 他的配偶 Jean Stafford是一位美国小说家
  4. 他的配偶 Elizabeth Hardwick是一位美国小说家

但是第一个查询也是不正确的,它算了3次Robert Lowell,因为:

  1. 他的配偶卡罗琳·布莱克伍德夫人是一位作家
  2. 他的配偶让·斯塔福德是一位作家和美国小说家
  3. 他的配偶伊丽莎白·哈德威克是一位美国小说家

在任一查询上使用 DISTINCT 都会得到正确的答案 (364):

SELECT (COUNT(DISTINCT ?w1) as ?nbWriter)

一般来说,要找出此类查询中错误的原因,请列出所有结果,而不是仅仅计算它们。

关于sparql - SPARQL 查询中的 UNION 和 EXISTS 过滤器有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com