从sparql查询中仅选择第一个对象

时间:2013-03-18 13:38:32

标签: rdf sparql

我想从dbpedia获取Daft Punk的唱片,我想展示的每张专辑: 1)标题 2)发行年份 3)维基百科页面, 所以我写了这个查询:

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

哪个有效,除了有一个专辑(Alive 2007)有两个不同的发行年份(你可以看到here),但我想只显示最早的 二。如何编辑我的查询以使此相册仅在第一个日期出现一次?谢谢你的回答。

1 个答案:

答案 0 :(得分:5)

使用aggregateGROUP BY功能对结果进行分组后,您可以使用MIN 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