簡體   English   中英

SPARQL用於獲取具有正確屬性的電影列表

[英]SPARQL for getting movies list with proper attributes ordered

我正在嘗試獲取特定電影(如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

聚合函數的用法通常需要構建要在其上應用該函數的一組事物/行,即投影變量上的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還是要獲取類型標簽,因為后者確實必須在GROUP_CONCAT函數中使用變量?genreGROUP_CONCAT(DISTINCT(?genre); separator=", ")
  • 不允許重新分配查詢中已經使用的變量名稱,這就是為什么我將名稱更改為?genres
  • 不要在過濾器后面加逗號,我不知道你為什么這樣做
  • 您沒有選擇參與者,因此,仍然不清楚為什么在查詢中使用最后一個三重模式+ FILTER
  • 您的查詢非常昂貴,因此其執行可能會超時

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM