SPARQL用于获取具有适当属性的有序电影列表

SPARQL用于获取具有适当属性的有序电影列表,sparql,wikidata,Sparql,Wikidata,我试图获得一个特定年份(比如说1990年)的电影列表,列出每部电影及其属性。我尝试了不同的方法来获取SPARQL,但没有成功。如何将类型分组到单个列中 我想要的格式是这里的一些属性 前缀wd: 前缀wdt: 前缀wikibase: 前缀p: 前缀v: 前缀q: 前缀rdfs: 选择“q”电影标题(组(不同的(?genreID);分隔符=“,”)作为流派),其中{ ?q wdt:P31 wd:Q11424。 q rdfs:标签?胶片标题过滤器(lang(?胶片标题)=“en”)。 ?q wdt:

我试图获得一个特定年份(比如说1990年)的电影列表,列出每部电影及其属性。我尝试了不同的方法来获取SPARQL,但没有成功。如何将类型分组到单个列中

我想要的格式是这里的一些属性

前缀wd:
前缀wdt:
前缀wikibase:
前缀p:
前缀v:
前缀q:
前缀rdfs:
选择“q”电影标题(组(不同的(?genreID);分隔符=“,”)作为流派),其中{
?q wdt:P31 wd:Q11424。
q rdfs:标签?胶片标题过滤器(lang(?胶片标题)=“en”)。
?q wdt:P136?genreID。
?genreID rdfs:标签?类型。
?q wdt:P161?actorID。
?actorID rdfs:标签?参与者过滤器(lang(?actor)=“en”)。
}限制100

使用聚合函数通常需要构建要应用函数的对象/行组,即在不表示聚合函数结果的投影变量上创建一个
groupby

选择“q”电影标题(组(不同的(?genreID);分隔符=“,”)作为“类型”,其中{
?q wdt:P31 wd:Q11424。
?q rdfs:标签?胶片标题。
过滤器(lang(?film_title)=“en”)
?q wdt:P136?genreID。
?genreID rdfs:标签?类型。
?q wdt:P161?actorID。
?actorID rdfs:标签?参与者
过滤器(lang(?actor)=“en”)
} 
按?q?电影名称分组
限制100
一些评论:
  • 现在还不清楚您是想要获得genreID还是流派的标签,因为后者确实需要在
    GROUP_CONCAT
    函数中使用变量
    ?genre
    GROUP_CONCAT(DISTINCT(?genre);separator=“,”
  • 不允许重新分配已在查询中使用的变量名,这就是为什么我将名称更改为
    ?genres
  • 不要在过滤器后面加逗号,我不知道你为什么这样做
  • 您没有选择参与者,因此不清楚为什么在查询中使用最后一个三重模式+过滤器
  • 您的查询非常昂贵,因此其执行可能会超时
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