示例输出,使用http://dbpedia.org/page/Steven_Spielberg作为示例
格式:film_name,screen_player(零到多,由" |"分隔),生产者(零到多,用&#34分隔; |")
示例输出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
我的查询到目前为止,这远远不是示例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
我的问题:基本上,我需要像上面两个例子那样展示史蒂文斯皮尔伯格的所有电影。
答案 0 :(得分:6)
尝试:
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)
因此:可能有多个名称。 (事实上,由于语言不同,大多数电影都有多个名称,我们用过滤器来抑制它们)