2016-12-08 201 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的結果是一個嚴重的跡象,說明您的設置有問題