我正在尝试使用DBpedia SPARQL端点进行实验,并注意到在使用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
为什么这两个查询之间会有差异?它们不是等价的吗(请参见以前的问题和答案在SPARQL查询中添加OR子句的正确方法)?