2012-03-27 44 views
7

鑑於一位音樂藝術家,我正試圖找到其他音樂藝術家,他們與某位藝術家有着最常見的「相關行爲」。我對阿姆以下查詢,它工作正常DBpedia SPARQL - 獲取其他藝術家的圖像和資源鏈接?

SELECT ?c (COUNT(*) AS ?count) WHERE { 
{ 
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>. 
?b <http://dbpedia.org/property/associatedActs> ? 
} 
}group by ?c order by desc(?count) LIMIT 10 

但我想找回藝術家的照片以及他們的DBpedia中的資源鏈接(?c)加入。試一試

SELECT ?c (COUNT(*) AS ?count) WHERE { 
{ 
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>. 
?b <http://dbpedia.org/property/associatedActs> ?c. 
?c <http://dbpedia.org/ontology/thumbnail> ?i 
} 
}group by ?c order by desc(?count) LIMIT 10 

給了我一個錯誤「變量?我用在聚合結果集合之外,沒有在GROUP BY子句中提及」。如果我通過我groupby它工作正常,但我不能得到?C回。

那麼我怎樣才能得到圖片和資源鏈接其他匹配的藝術家?

回答

6

使用子查詢:

SELECT ?c ?i ?count WHERE { {SELECT ?c (COUNT(*) AS ?count) WHERE { 
{ 
?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>. 
?b <http://dbpedia.org/property/associatedActs> ?c . 

} 
} group by ?c order by desc(?count) LIMIT 10} . ?c <http://dbpedia.org/ontology/thumbnail> ?i } 

你可以找到結果here

1

就像在SQL中一樣,您可以對多個變量使用GROUP BY。

這似乎工作:

SELECT ?c (COUNT(*) AS ?count) ?i WHERE { 

?b <http://dbpedia.org/property/associatedActs> <http://dbpedia.org/resource/Eminem>. 
?b <http://dbpedia.org/property/associatedActs> ?c. 
?c <http://dbpedia.org/ontology/thumbnail> ?i 

} GROUP BY ?c ?i ORDER BY desc(?count) LIMIT 10 

查看結果here