Punt SPARQL
La interfície SPARQL és un servei que permet fer consultes sobre dades emmagatzemades en RDF mitjançant el llenguatge SPARQL. Ofereix als desenvolupadors/professionals una gran potència i flexibilitat a l'hora de fer consultes i construir aplicacions.
Informació emmagatzemada
Tota la informació que es pot consultar està carrega en una base de dades semàntica. En aquest tipus de bases de dades la informació s'emmagatzema en grafs.
La base de dades semàntica de datos.gob.es té dos grafs:
- http://datos.gob.es/catalogo: aquest graf conté tot el catàleg de dades de datos.gob.es
- http://datos.gob.es/nti: conté els URI corresponents a la taxonomia de sectors primaris i a la identificació de cobertura geogràfica definits als annexos IV i V de la Norma tècnica d'interoperabilitat de reutilització de recursos de la informació (NTI)
Com s'utilitza
Les consultes es fan a través de peticions GET que tornen les dades segons els paràmetres que s'especifiquen en la crida.
L'adreça base del nostre punt de SPARQL és la següent:
http://datos.gob.es/virtuoso/sparql
S'ha d'afegir el paràmetre “query” a aquesta adreça i, a continuació, la consulta que volem fer.
Per exemple, si volem executar la consulta següent: select distinct ?type where {?x a ?type} LIMIT 100
, s'obtenen els diferents tipus que hi ha carregats al nostre punt de SPARQL:
- L'hem de codificar substituint els espais per “+” de la manera següent:
select+distinct+?type+where+{?x+a+?type}+LIMIT+100
- Una vegada codificada i coneixent l'adreça del nostre punt de SPARQL, s'executa d'aquesta manera:
http://datos.gob.es/virtuoso/sparql?query=select+distinct+?type+where+{?x+a+?type}+LIMIT+100
Si no afegim a l'adreça base del punt SPARQL el paràmetre query amb la consulta que volem fer, ens tornarà un error de pàgina no trobada.
El format per defecte de les respostes és HTML, però se'n pot especificar un altre a través del paràmetre “format”. Aquest paràmetre pot prendre els valors següents:
Valor | Format |
---|---|
text/html | HTML |
application/vnd.ms-excel | Spreadsheet |
text/tab-separated-values | TSV |
application/sparql-results+xml | XML |
application/sparql-results+json | JSON |
application/javascript | Javascript |
text/turtle | Turtle |
application/rdf+xml | RDF/XML |
text/plain | N-Triples |
text/csv | CSV |
Si en fer la consulta no s'especifica cap graf, es tornarà la informació de tots els grafs que estiguin disponibles.
Es poden consultar tots els grafs disponibles amb aquesta consulta:
select distinct ?uri where { graph ?uri { ?s a ?t } }
Si volem saber a quin graf pertany la informació, es pot especificar de la manera següent, ja que a la variable ?g veurem a quin graf es troba cada ?x.
select distinct ?g ?type where { graph ?g { ?x a ?type. } } limit 100
Podem obtenir els resultats d'un sol graf de la manera següent:
select distinct ?type where { graph <http://datos.gob.es/catalogo> { ?x a ?type. } } limit 100
Ara només veurem les ?x que es trobin al graf especificat.
Per fer les peticions també es pot utilitzar un formulari. Aquest tipus de formularis ofereixen ajuda al desenvolupador proporcionant una àrea de text que utilitza colors per destacar la sintaxi, identifica errors de sintaxi, té funció d'autoemplenament i permet l'opció d'executar les consultes, entre d'altres.
Exemples
Obtenir totes les classes del nostre punt de SPARQL
Aquesta consulta és molt útil perquè veurem tots els tipus d'informació que hi ha emmagatzemats.
A més, per evitar obtenir informació que no ens ajudi, especificarem els nostres grafs.
Primer especificarem el graf del catàleg:
select distinct ?tipo where
{
graph <http://datos.gob.es/catalogo> {
?x a ?tipo.
}
}
Ara utilitzarem els dos grafs alhora gràcies a VALUES
select distinct ?tipo where
{
graph ?grafo {
?x a ?tipo.
}
values ?grafo { <http://datos.gob.es/catalogo> <http://datos.gob.es/nti> }
}
El resultat final és aquest:
tipus |
---|
http://www.w3.org/ns/dcat#Dataset |
http://www.w3.org/2004/02/skos/core#Concept |
http://www.w3.org/ns/dcat#Catalog |
http://www.w3.org/2006/time#DurationDescription |
http://purl.org/dc/terms/Frequency |
http://purl.org/dc/terms/IMT |
http://purl.org/dc/terms/PeriodOfTime |
http://www.w3.org/ns/dcat#Distribution |
http://vocab.linkeddata.es/datosabiertos/def/sector-publico/territorio#ComunidadAutonoma |
http://vocab.linkeddata.es/datosabiertos/def/sector-publico/territorio#CiudadAutonoma |
http://vocab.linkeddata.es/datosabiertos/def/sector-publico/territorio#Pais |
http://vocab.linkeddata.es/datosabiertos/def/sector-publico/territorio#Provincia |
Obtenir tots els conjunts de dades del catàleg
Ara que ja coneixem els tipus, demanarem tots els conjunts de dades que es corresponen amb aquest URI: http://www.w3.org/ns/dcat#Dataset
select distinct ?dataset where
{
?dataset a <http://www.w3.org/ns/dcat#Dataset>
}
El resultat és una llista d'URL de tots els conjunts de dades.
Obtenir totes les propietats que tenen els conjunts de dades
Volem obtenir més informació dels conjunts de dades, però només sabem els URI; per això, hem de demanar per totes les seves propietats:
select distinct ?propiedad where
{
?dataset a <http://www.w3.org/ns/dcat#Dataset> . ?dataset ?propiedad ?valor .
}
Aquestes són totes les propietats que tenen:
propietat |
---|
http://www.w3.org/1999/02/22-rdf-syntax-ns#type |
http://purl.org/dc/terms/modified |
http://www.w3.org/ns/dcat#distribution |
http://www.w3.org/ns/dcat#keyword |
http://www.w3.org/ns/dcat#theme |
http://purl.org/dc/terms/accrualPeriodicity |
http://purl.org/dc/terms/description |
http://purl.org/dc/terms/identifier |
http://purl.org/dc/terms/issued |
http://purl.org/dc/terms/language |
http://purl.org/dc/terms/publisher |
http://purl.org/dc/terms/spatial |
http://purl.org/dc/terms/title |
http://purl.org/dc/terms/references |
http://purl.org/dc/terms/temporal |
http://purl.org/dc/terms/conformsTo |
http://purl.org/dc/terms/valid |
Obtenir tots els organismes que publiquen dades
Utilitzarem la propietat http://purl.org/dc/terms/publisher per obtenir tots els organismes que publiquen dades.
select distinct ?publicador where
{
?x a <http://www.w3.org/ns/dcat#Dataset> .
?x <http://purl.org/dc/terms/publisher> ?publicador.
}
El resultat és el conjunt dels URI de tots els publicadors.
publicador |
---|
http://datos.gob.es/recurso/sector-publico/org/Organismo/A02002834 |
http://datos.gob.es/recurso/sector-publico/org/Organismo/A04003003 |
http://datos.gob.es/recurso/sector-publico/org/Organismo/A05003638 |
… |
Obtenir les propietats dels organismes que publiquen dades
Amb els URI no sabem el nom dels organismes i per això hem de demanar per les propietats d'aquests URI:
select distinct ?propiedad where
{
?x a <http://www.w3.org/ns/dcat#Dataset> .
?x <http://purl.org/dc/terms/publisher> ?publicador.
?publicador ?propiedad ?valor.
}
Aquestes són totes les propietats dels publicadors:
propietat |
---|
http://www.w3.org/1999/02/22-rdf-syntax-ns#type |
http://www.w3.org/2004/02/skos/core#prefLabel |
http://www.w3.org/2004/02/skos/core#notation |
Obtenir els noms dels organismes que publiquen dades
Hem de demanar l'URI i la propietat http://www.w3.org/2004/02/skos/core#prefLabel
select distinct ?publicador ?label where
{
?x a <http://www.w3.org/ns/dcat#Dataset> .
?x <http://purl.org/dc/terms/publisher>
?publicador. ?publicador <http://www.w3.org/2004/02/skos/core#prefLabel> ?label.
}
El resultat és una llista molt llarga:
publicador | label |
---|---|
http://datos.gob.es/recurso/sector-publico/org/Organismo/A02002834 | "Gobierno de Aragón" |
http://datos.gob.es/recurso/sector-publico/org/Organismo/A04003003 | "Gobierno de las Islas Baleares" |
http://datos.gob.es/recurso/sector-publico/org/Organismo/A05003638 | "Comunidad Autónoma de Canarias" |
http://datos.gob.es/recurso/sector-publico/org/Organismo/A07002862 | "Junta de Castilla y León" |
… | … |
Obtenir els noms dels deu organismes que tenen publicats més conjunts de dades i veure'n el número
Per fer aquesta consulta hem d'agrupar els resultats, ordenar-los i limitar-ne el total a 10.
select distinct ?label count(?x) as ?num {
?x a <http://www.w3.org/ns/dcat#Dataset> .
?x <http://purl.org/dc/terms/publisher> ?publicador.
?publicador <http://www.w3.org/2004/02/skos/core#prefLabel> ?label.
}
group by (?label)
order by desc(?num)
limit 10
El resultat és aquest:
label | núm. |
---|---|
"Gobierno de Aragón" | 2659 |
"Comunidad Autónoma de País Vasco" | 2208 |
"Centro de Investigaciones Sociológicas" | 2107 |
"Ayuntamiento de Málaga" | 651 |
"Ayuntamiento de Gijón" | 627 |
"Xunta de Galicia" | 315 |
"Generalitat Valenciana" | 313 |
"Ayuntamiento de Madrid" | 231 |
"Instituto Nacional de Estadística" | 205 |
"Junta de Castilla y León" | 196 |