Consulta SPARQL para obter apenas resultados com a data mais recente
Estou aprendendo os conceitos básicos do SPARQL com o recente banco de dados RDF lançado pelo Ministério da Justiça finlandês. Ele contém dados da lei finlandesa.
Existem estatutos, que têm versões, que têm data e tópicos. Quero obter as versões mais recentes que têm um tópico "arma". Então, eu escrevi isso:
PREFIX sfl: <http://data.finlex.fi/schema/sfl/>
PREFIX eli: <http://data.europa.eu/eli/ontology#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?stat ?vers ?dv
WHERE {
?stat rdf:type sfl:Statute .
?stat sfl:hasVersion ?vers .
?vers eli:version_date ?dv .
?vers eli:is_about ?top .
?top skos:prefLabel "Ase"@fi .
} ORDER BY DESC(?dv)
Isso retorna quatro linhas, com três estatutos, um estatuto duas vezes. Isso ocorre porque esse estatuto possui duas versões, mais antiga e atual. Os outros dois estatutos têm apenas uma versão.
Como me livrar da versão mais antiga para obter apenas estatutos com a versão mais recente? Eu tentei usar algo como(MAX(?dv) AS ?ndv)
e agrupando por? stat e? vers, mas isso não funciona, pois existem quatro versões distintas.
EDIT: Deixe-me adicionar um exemplo simulado do que acontece.
O resultado da consulta original é assim:
stat | vers | dv
a | abc | x
a | cde | y(<x)
b | foo | z
c | fot | u
Vemos que o estatuto "a" tem duas versões, "abc" e "cde" e o dv da versão "abc" é mais tarde que o dv da versão "cde". Os outros dois estatutos "b" e "c" têm apenas uma versão cada, com os dvs de "z" e "u".
A propriedade de ter o tópico "arma" é uma propriedade de vers. Todas as versões retornadas possuem esse tópico.
O que eu quero é o seguinte:
stat | vers | dv
a | abc | x
b | foo | z
c | fot | u
Em outras palavras, desejo obter, para cada estatuto, apenas a versão com o valor dv mais alto ou mais recente.
PS. Você pode testar isso emhttp://yasgui.org/ Basta digitar a consulta e você obterá o resultado.