2017-03-14 34 views
0

我想用linkedmdb查詢2個特定的電影和它們的imdb頁面,它會引發解析錯誤。在linkedmdb中使用過濾器時解析錯誤SPARQL

當我刪除下面的行時,我得到所有電影的列表。我如何獲得特定集合的鏈接。

FILTER (str(?title) IN ("The Magician","Royal Flash")) 

這是我的代碼。

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    ?film dc:title ?title . 

    FILTER(regex(str(?imdbID), "www.imdb.com")) 
    FILTER (str(?title) IN ("The Magician","Royal Flash")) 
} 
+0

它** **不支持SPARQL 1.1,因此,SPARQL'UNION'必須被使用。查看規格:https://www.w3.org/TR/sparql11-query/#alternatives – AKSW

回答

0

你可以嘗試通過VALUES匹配,而不是讓所有的比賽和過濾所需的值了:

SELECT ?title ?imdbID 
WHERE { 
    ?film foaf:page ?imdbID . 
    VALUES ?title {"The Magician" "Royal Flash"} . 
    ?film dc:title ?title 
} 
+0

仍然是相同的錯誤。我正在使用下面的端點http://www.linkedmdb.org/snorql/ – VKB

+0

它不會**支持SPARQL 1.1,因此必須使用SPARQL'UNION'。下次可以預先向SPARQL服務顯示URL。 – AKSW

1

的SPARQL 1.1規格顯示IN

https://www.w3.org/TR/sparql11-query/#func-in

等價所以

FILTER (str(?title) IN ("The Magician","Royal Flash"))

相同

FILTER (str(?title) = "The Magician" || str(?title) = "Royal Flash")

這是SPARQL 1.0

+0

我在使用IN之前嘗試過。問題是,當我檢索所有電影或只有一個電影時,所有這些變化都起作用。當我試圖限制他們中的一些時,他們不工作。你使用的等值只會給「魔術師」。我想要「魔術師」和「皇家Flash」的細節。 – VKB

+0

這與過濾器無關。沒有什麼標題與「Royal Flash」匹配的。您只能查詢知識庫中的數據。 LinkedMDB相當陳舊,沒有與IMDB同步的實時數據集。 IBDM頁面將是http://www.imdb.com/title/tt0073639/,您可以通過SPARQL檢查是否沒有這樣的資源,URL的值爲'foaf:page' – AKSW

相關問題