2015-10-23 66 views
0

我有一個簡單的問題。當我運行DBpedia的SPARQL端點此查詢,我得到的5項電影的URI的列表:For SPARQL中的循環

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

select ?film { 
?film rdf:type <http://schema.org/Movie>. 

} 
limit 5 

我試圖訪問的每一部電影列表中的所有謂語和賓語。我試過這個,但沒有奏效。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 

select ?film ?p ?o { 
?film rdf:type <http://schema.org/Movie>; 
     ?p ?o. 
} 
group by ?film 
limit 5 

有什麼建議嗎?

回答

4

SPARQL本質上是遞歸的,所以不需要for循環。這意味着,就您的第二個示例而言,它將匹配所有謂詞和對象,其中film是一種電影類型。我相信你可能會認爲你的查詢在實際情況下不起作用,但返回的答案數量的限制掩蓋了這一點。

我建議檢索單個薄膜 -

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
select ?s ?o ?o where { 
?s ?p ?o . 
FILTER (?s = ?film) 
{ 
    select ?film { 
    ?film rdf:type <http://schema.org/Movie> . 
    } 
    group by ?film 
    limit 1 
} 
} 
+1

的幾個注意事項:(一)我敢肯定,你想要的 「選擇性s P 2 O 2的」,而不是「選擇S 0??? ○」。 (ii)通過使用相同的變量,可以消除過濾器(如果查詢引擎太天真,可能效率低下)。即,使子查詢爲「{select?s {?s rdf:type ...」。 (iii)子查詢中不需要「group by」。 (iv)限制應該是5,而不是1(但是OP需要將其設置爲任何OP需求,所以這不是那麼重要)。 –