2016-12-08 64 views
1

我工作在SPARQL近2年,但我从未见过过这种奇怪的情况。 (注:我使用本地triplestore)SPARQL查询返回奇怪的结果

查询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.  
} 

这里查询1时返回一些结果,其中如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是第一个的超集

我不知道为什么会发生这种情况。

+1

也许这是您的SPARQL端点中的错误?您是否尝试过一种替代SPARQL实现? – hendrik

+0

@hendrik我们使用相同的端点自2年以来,迄今为止我们从未发现任何此类事情。这是在MARMOTTA之上。因此值得信赖和可靠。 –

+1

当你说你正在使用“本地”三重店时,你指的是芝麻店的本地店吗?如果是这样,这可能是由索引不一致造成的。这很少见,但它发生了。它可以通过使商店离线,删除不一致的索引(通常由磁盘上的大小与其他大小不同)来确定,然后重新启动 - 它会自动重新生成缺失的索引,从而使其恢复同步。 –

回答

1

我开始知道为什么会发生这种情况。出于某种原因索引文件(pos,sop等)没有正确同步,进入不一致状态。当我尝试删除MARMOTTA_HOME下的primary-triples文件夹,并重新获取数据时,它开始为我工作,因为它强制重新编入三重数据。感谢@Jeen Broekstra的正面评价:)

2

您的三重商店存在问题,我猜 请尝试在http://data.ontotext.com/sparql处尝试相同的查询,这是此数据集的“主”,由GraphDB支持。按预期,Query2提供了23个结果。 事实上,它返回Query3的结果是一个严重的迹象,说明您的设置有问题