2012-03-27 17 views
7

Dado a un artista musical, estoy tratando de encontrar otros artistas musicales que tengan los "actos asociados" más comunes con un artista en particular. Tengo la siguiente consulta para Eminem y funciona bienDBpedia SPARQL: ¿obtiene enlaces de imágenes y recursos de otros artistas?

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 

Pero me gustaría recuperar la imagen del artista, así como su enlace de recursos DBpedia (? C) añadir. Tratando este

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 

me da un error "Variable? I se usa en el conjunto de resultados fuera agregada y no se menciona en la cláusula GROUP BY". Si groupby por i funciona bien, pero no puedo recuperarlo.

Entonces, ¿cómo puedo obtener la imagen y el enlace del recurso de otros artistas que coinciden?

Respuesta

6

Use sub-consultas:

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 } 

se puede encontrar el resultado here.

1

Al igual que en SQL, puede usar GROUP BY con múltiples variables.

Esto parece funcionar:

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 

Ver los resultados here.

Cuestiones relacionadas