2013-03-18 5 views
8

Je voudrais obtenir la discographie de Daft Punk de dbpedia, et pour chaque album, je voudrais montrer: 1) Le titre 2) L'année de sortie 3) La page wikipedia, donc j'écrit cette requête:Sélectionnez uniquement le premier objet de SPARQL

PREFIX d: <http://dbpedia.org/ontology/> 
PREFIX prop: <http://dbpedia.org/property/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX : <http://dbpedia.org/resource/> 

SELECT DISTINCT str(?name) YEAR(?relDate) AS ?relYear ?wiki WHERE { 
    ?album a d:Album . 
    ?album foaf:name ?name . 
    ?album d:artist :Daft_Punk . 
    ?album foaf:isPrimaryTopicOf ?wiki . 
    ?album d:releaseDate ?relDate .  
} 

ORDER BY ?relDate 

ce qui fonctionne, à l'exception du fait qu'il ya un album (Alive 2007) qui a 2 différentes années de sortie (comme vous pouvez le voir here), mais je voudrais montrer seulement le plus ancien des deux . Comment dois-je modifier ma requête pour faire apparaître cet album une seule fois avec la première date? Merci pour vos réponses.

Répondre

5

Vous pouvez utiliser le MINaggregate pour extraire la valeur minimale de l'année de sortie, lorsque le résultat a été regroupé en utilisant la fonction GROUP BY de SPARQL 1.1.

Par exemple, quelque chose comme ceci:

PREFIX d: <http://dbpedia.org/ontology/> 
PREFIX prop: <http://dbpedia.org/property/> 
PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX : <http://dbpedia.org/resource/> 

SELECT str(?name) MIN(YEAR(?relDate)) AS ?relYear ?wiki 
WHERE { 
    ?album a d:Album . 
    ?album foaf:name ?name . 
    ?album d:artist :Daft_Punk . 
    ?album foaf:isPrimaryTopicOf ?wiki . 
    ?album d:releaseDate ?relDate .  
} 
GROUP BY ?name ?wiki 
ORDER BY ?relYear 
Questions connexes