我从事SPARQL工作近2年,但我以前从未见过如此奇怪的情况。 (注意:我使用的是原生的Triplestore)
查询1:
prefix leaks: <http://data.ontotext.com/resource/leaks/>
prefix leak: <http://data.ontotext.com/resource/leak/>
SELECT * WHERE
{
leaks:entity-10000001 leak:jurisdiction_description ?object.
}
QUERY2:
prefix leaks: <http://data.ontotext.com/resource/leaks/>
prefix leak: <http://data.ontotext.com/resource/leak/>
SELECT * WHERE
{
leaks:entity-10000001 ?p ?object.
}
这里Query1返回一些结果,因为Query2没有返回任何结果。 如果我以其他方式放置它,在两个查询之上合并,则在查询(Query3)之下返回几条记录。
QUERY3:
prefix leaks: <http://data.ontotext.com/resource/leaks/>
prefix leak: <http://data.ontotext.com/resource/leak/>
SELECT distinct ?s WHERE
{
?s leak:jurisdiction_description ?object.
FILTER NOT EXISTS { ?s ?p ?o}.
}
理想情况下,情况并非如此。 Query3应始终没有结果,因为第二个条件?s ?p ?o
是第一个?s leak:jurisdiction_description ?object
的超集
我不知道为什么会这样。
答案 0 :(得分:2)
我猜你的三重商店有问题 在http://data.ontotext.com/sparql处尝试相同的查询,这是此数据集的“主页”,由GraphDB支持。正如预期的那样,Query2提供了23个结果。 它返回Query3的结果这一事实严重表明您的设置存在问题
答案 1 :(得分:1)
我知道为什么会这样。由于某种原因,索引文件(pos,sop等)未正确同步,已进入不一致状态。当我尝试删除MARMOTTA_HOME下的primary-triples文件夹,并且重新获取数据时,它开始为我工作,因为它被迫重新索引triplestore数据。感谢@Jeen Broekstra的领导:)