SPARQL用于获取具有正确属性的电影列表

时间:2017-05-03 00:09:34

标签: sparql wikidata

我试图获取每部电影及其属性的特定年份(仅限1990年)的电影列表。我尝试了不同的方法来获得SPARQL,但却没有。如何将流派分组为单列?

我想要的格式是这里的一些属性 http://schema.org/Movie

PREFIX wd: <http://www.wikidata.org/entity/>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX p: <http://www.wikidata.org/prop/>
PREFIX v: <http://www.wikidata.org/prop/statement/>
PREFIX q: <http://www.wikidata.org/prop/qualifier/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?q ?film_title (GROUP_CONCAT(DISTINCT(?genreID); separator=", ") as ?genre) WHERE {
  ?q wdt:P31 wd:Q11424.
  ?q rdfs:label ?film_title filter (lang(?film_title) = "en").
  ?q wdt:P136 ?genreID.
  ?genreID rdfs:label ?genre.
  ?q wdt:P161 ?actorID.
  ?actorID rdfs:label ?actor filter (lang(?actor) = "en").
} LIMIT 100

1 个答案:

答案 0 :(得分:0)

聚合函数的使用通常需要构建要应用函数的事物/行组,即投影变量上的GROUP_BY不表示聚合函数的结果:

SELECT ?q ?film_title (GROUP_CONCAT(DISTINCT(?genreID); separator=", ") as ?genres) WHERE {
  ?q wdt:P31 wd:Q11424 .
  ?q rdfs:label ?film_title . 
  FILTER (lang(?film_title) = "en")
  ?q wdt:P136 ?genreID .
  ?genreID rdfs:label ?genre .
  ?q wdt:P161 ?actorID .
  ?actorID rdfs:label ?actor 
  FILTER (lang(?actor) = "en")
} 
GROUP BY ?q ?film_title
LIMIT 100

一些评论:

  • 目前尚不清楚是否要获取genreID或类型标签,后者确实必须使用?genre函数中的变量GROUP_CONCATGROUP_CONCAT(DISTINCT(?genre); separator=", ") < / LI>
  • 不允许重新分配已在查询中使用的变量名称,这就是我将名称更改为?genres
  • 的原因
  • 不要在过滤器后放一个逗号,我不知道你为什么这样做
  • 你没有选择演员,因此,你仍然不清楚为什么你在查询中使用最后的三重模式+ FILTER
  • 您的查询非常昂贵,因此,执行可能会超时