【问题标题】:SPARQL for getting movies list with proper attributes orderedSPARQL 用于获取具有适当属性的电影列表排序
【发布时间】:2017-09-30 15:18:31
【问题描述】:

我正在尝试获取每部电影及其属性的特定年份(仅说 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

【问题讨论】:

    标签: sparql wikidata


    【解决方案1】:

    聚合函数的使用通常需要构建要在其上应用函数的事物/行组,即不表示聚合函数结果的投影变量上的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
    

    一些cmets:

    • 不清楚是要获取流派ID还是流派标签,因为后者确实必须在GROUP_CONCAT函数中使用变量?genreGROUP_CONCAT(DISTINCT(?genre); separator=", ")
    • 不允许重新分配已在查询中使用的变量名,这就是我将名称更改为?genres的原因
    • FILTER 后面不要加逗号,我不知道你为什么这样做
    • 您没有选择演员,因此尚不清楚为什么您在查询中使用最后一个三元组模式 + FILTER
    • 您的查询非常昂贵,因此,它的执行可能会超时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2022-11-22
      • 2012-01-09
      • 1970-01-01
      • 2011-01-17
      • 2023-03-18
      • 2021-11-19
      相关资源
      最近更新 更多