rdf - Sparql:在 dbpedia.org 上列出史蒂文斯 PIL 伯格的电影

标签 rdf sparql jena semantic-web dbpedia

示例输出,使用 http://dbpedia.org/page/Steven_Spielberg作为例子

格式:film_name,screen_player(零到多个,以“|”分隔),制作人(零到多个,以“|”分隔)

示例输出 1:Hook_(film)、Frank Marshall|Kathleen Kennedy|Gerald R. Molen、James V. Hart|Malia Scotch Marmo

示例输出 2:Jaws_(film)、Richard D. Zanuck|David Brown、Peter Benchley|Carl Gottlieb

enter image description here

终点
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

Try the query out

大部分工作在 SELECT 中表达式,其中 CONCAT将各种元素组合在一起。

另一个变化是 GROUP BY ?film它将元素收集在一起,因此每部电影有一行。我们必须SAMPLE(?filmName)因为这个:可能有多个名字。 (事实上​​,由于语言不同,大多数电影都有多个名称,我们用过滤器将其抑制)

关于rdf - Sparql:在 dbpedia.org 上列出史蒂文斯 PIL 伯格的电影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25279320/

相关文章:

rdf - 将非常大的 RDF 文件加载到 openrdf 芝麻本体管理器中

java - 为 MESH 端点执行 SPARQL 查询时出现问题

sparql - 扩展其他本体的owl

api - 删除 Apache Jena 中所有没有属性的资源?

java - 如何使用现有本体从 XML 文件中提取 RDF 三元组?

java - 用Jade开发的Agent系统一定是分布式的吗?

sparql - 使用 Pellet 了解 SPARQL 和语义推理之间的区别

drupal - 如何将 Opencalais 的 RDF 结果添加到 apache solr 中,以便在我的 Drupal 站点中获得更好的搜索结果?

SPARQL - 启用推理时获取断言类

sparql - GraphDB 9.5 免费版的 OntoRefine 选项卡中的 “SPARQL” 按钮在哪里?