【问题标题】:Sparql: list Steven Spielberg's films on dbpedia.orgSparql:在 dbpedia.org 上列出史蒂文·斯皮尔伯格的电影
【发布时间】:2014-08-13 06:21:54
【问题描述】:

示例输出,以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_(电影),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

我的问题:基本上,我需要像上面两个示例一样显示史蒂文·斯皮尔伯格的所有电影。

【问题讨论】:

  • 这不是很清楚。 “作为样本输出”是什么意思?在 SPARQL 中,您可以使用“order by rand() limit 10”之类的方式进行采样。但是,当我将它与 Fuseki 一起使用时,它不适用于 dbpedia 端点:我总是得到相同的 10 个结果 :(
  • 你试过'sample'吗?像 enridaga 我不明白你的问题。
  • @enridaga,我需要以与示例 1 和示例 2 相同的格式显示史蒂文·斯皮尔伯格的所有电影。
  • @user205512,我已经更新了我的问题。
  • 啊,明白了。已回答。

标签: rdf sparql jena semantic-web dbpedia


【解决方案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

Try the query out

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

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

【讨论】:

  • 我怀疑在这种情况下会出现问题,但由于分隔符是 |,因此将字符串中的 | 替换为其他内容可能是个好主意(例如,@987654329 @)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 2017-02-16
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 1970-01-01
相关资源
最近更新 更多