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

 快乐的芙蓉HAPPY 发布于 2022-12-28 15:09

示例输出,以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: 
PREFIX dbpedia-owl: 
PREFIX dbpprop: 
PREFIX dbres: 
PREFIX foaf: 
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

我的问题:基本上,我需要像上面两个例子那样展示史蒂文斯皮尔伯格的所有电影.

1 个回答
  • 尝试:

    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)因此:可能有不止一个名字.(实际上大多数电影由于语言不同而有多个名称,我们用过滤器来抑制)

    2022-12-28 15:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有