2013-03-18 2 views
8

Я хотел бы получить дискографию Daft Punk от DBpedia, и для каждого альбома я хотел бы показать: 1) название 2) Выпуск года 3) Википедии страница, поэтому я написал этот вопрос:Выберите только первый объект из запросов 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 

, который работает, за исключением того, что есть один альбом (Живой 2007), который имеет 2 разных лет выпуска (как вы можете видеть here), за исключением, но я хотел бы показать только самое раннее из два. Как мне изменить свой запрос, чтобы этот альбом появлялся только один раз с первой датой? Спасибо за ваши ответы.

ответ

5

Вы можете использовать MINaggregate извлечь минимальное значение года выпуска, когда результат был сгруппирован с использованием GROUP BY особенности SPARQL 1.1.

Например, что-то вроде этого:

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 
Смежные вопросы