簡體   English   中英

Sparql:列出史蒂文斯皮爾伯格在dbpedia.org上的電影

[英]Sparql: list Steven Spielberg's films on dbpedia.org

示例輸出,以http://dbpedia.org/page/Steven_Spielberg為例

格式:film_name,screen_player(零到多,用“|”分隔),生成器(零到多,用“|”分隔)

示例輸出1:Hook_(電影),Frank Marshall | Kathleen Kennedy | Gerald R. Molen,James V. Hart | Malia Scotch Marmo

輸出示例2:Jaws_(電影),Richard D. Zanuck | David Brown,Peter Benchley | Carl Gottlieb

在此輸入圖像描述

終點http://dbpedia.org/sparql

我的查詢到目前為止,這遠遠不是示例1和示例2。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbres: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
select
?filmName,
(GROUP_CONCAT(?producerName ; SEPARATOR = "|") AS ?producerNames),
(GROUP_CONCAT(?screenPlayerName ; SEPARATOR = "|") AS ?screenPlayerNames)
where {
?film dbpedia-owl:director dbres:Steven_Spielberg .
?film rdfs:label ?filmName .

optional {        
?film dbpprop:screenplay ?screenPlayer .
?screenPlayer foaf:name ?screenPlayerName .         
}

optional {
?film dbpedia-owl:producer ?producer .
?producer foaf:name ?producerName .
}
}
order by
?filmName

我的問題 :基本上,我需要像上面兩個例子那樣展示史蒂文斯皮爾伯格的所有電影。

嘗試:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX dbres: <http://dbpedia.org/resource/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>

SELECT
( CONCAT ( SAMPLE(?filmName) , " , ", 
           GROUP_CONCAT(DISTINCT ?producerName ; SEPARATOR = "|"), " , ",
           GROUP_CONCAT(DISTINCT ?screenPlayerName ; SEPARATOR = "|")
         ) AS ?formatted )
WHERE
{
    ?film dbpedia-owl:director dbres:Steven_Spielberg .
    ?film rdfs:label ?filmName .

    optional {        
        ?film dbpprop:screenplay ?screenPlayer .
        ?screenPlayer foaf:name ?screenPlayerName .         
    }

    optional {
        ?film dbpedia-owl:producer ?producer .
        ?producer foaf:name ?producerName .
    }

    FILTER (lang(?filmName) = 'en')
}
GROUP BY ?film

嘗試查詢

大部分工作都在SELECT表達式中, CONCAT將各種元素組合在一起。

另一個變化是GROUP BY ?film ,它收集元素,因此每部電影有一行。 因此,我們必須使用SAMPLE(?filmName) :可能有多個名稱。 (實際上大多數電影由於語言不同而有多個名稱,我們用過濾器來抑制)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM