2017-03-22 127 views
0

我正在創建一個Web應用程序,允許用戶使用SPARQL查詢搜索電影。SPARQL查詢電影

此刻我正在使用DBpedia來獲取數據。

問題是我需要3件數據(標題,流派和發佈日期)。但問題是我沒有收到電影的體裁,但我收到的音樂流派因爲某些原因:/

下面是我創建

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX db: <http://dbpedia.org/ontology/> 
PREFIX prop: <http://dbpedia.org/property/> 
SELECT ?movieLink ?title ?genreLink ?genre ?releaseDate 
WHERE { 
    ?movieLink rdf:type db:Film; 
       foaf:name ?title. 
    OPTIONAL { ?movieLink prop:genre ?genreLink. 
       ?genreLink rdfs:label ?genre. 
       FILTER(lang(?genre) = 'en') }. 
    OPTIONAL{ ?movieLink <http://dbpedia.org/ontology/releaseDate> ?releaseDate }. 

    FILTER(lang(?title) = 'en') 
    FILTER((?releaseDate >= '2010-01-01'^^xsd:date) && (?releaseDate < '2010-12-31'^^xsd:date)) 
} 
ORDER BY DESC(?releaseDate) 
LIMIT(100) 

查詢我一直停留在這個問題一段時間,所以任何幫助將不勝感激。

注意:我已經看過使用Linkedmdb但有類似的問題。

回答

1

DBpedia數據主要來自Wikipedia頁面上的Infoboxes。例如,如果你看一下the page for the film Ayyanar,你會發現它包含兩個InfoBoxes到:

  • 一個對電影本身,沒有提到流派
  • 一個爲電影的配樂,與列爲原聲流派

這就是爲什麼你的查詢返回該電影配樂類型的原因。

看起來infoboxes about films不包含任何類型的字段,所以您將無法以這種方式獲取該信息。

另一方面,該文章是在類別動作戲劇電影它是在DBpedia使用dct:subject代表。我認爲你應該能夠從使用類似取得體裁信息:

OPTIONAL { ?movieLink dct:subject ?genreLink. 
      ?genreLink skos:broader+ dbc:Films_by_genre } 

雖然它不會是非常乾淨的數據(由於維基百科的類別結構是一個爛攤子)。它實際上並不適用於我,因爲此類查詢超出了公共DBpadia SPARQL端點上的內存限制。

+0

非常感謝清理,截至由anychance你會知道如何查詢linkedmdb相同數據 –

+0

@IeuanWalker如果你給我們一個LinkedMDB鏈接和一些查詢,以便從開始,有一個更好的你的第二個問題將得到回答 –

1

@svick給出了一個很好的查詢。如果dbpedia.org不會回答它,請使用我們的包含傳遞推理的端點:http://factforge.net/sparql。比如這個作品:

SELECT * { 
    ?movieLink a dbo:Film; dct:subject ?genreLink. 
    ?genreLink skos:broaderTransitive dbc:Films_by_genre 
} 
+0

http://factforge.net/sparql甚至可以回答緩慢的版本'skos:更廣泛的+',但在180s而不是瞬間。所以請不要使用它。 –