Sparql Endpoint

I Linked Data sono un metodo semplice e standard per pubblicare dati strutturati sul web. I dati strutturati e collegati tra loro vanno a costituire un grafo di conoscenza interpretabile dalle macchine utilizzando la semantica sottesa alle ontologie usate per la pubblicazione. Ogni entità presente nel grafo è una classe dell'ontologia utilizzata per la rappresentazione delle informazioni. Ai dati viene assegnata una struttura attraverso il Resource Description Framework (RDF), standard del W3C, che identifica univocamente le risorse e attribuisce loro un valore attraverso la struttura a tripla

soggetto, predicato, oggetto

L'utilizzo degli standard RDF e SPARQL per l'interrogazione, l'assegnazione di URI univoche alle risorse e il collegamento tra i dati sono le sole regole che bisogna seguire per la pubblicazione di Linked Data.

Le triple RDF  una volta prodotte sono conservate nel "triple store" che espone un Endpoint SPARQL pubblico che può essere usato per l'interrogazione dei dati.

SPARQL è pronunciato come sparkle (scintilla) ed è frutto di un acronimo recursivo che significa Sparql Protocol And Rdf Query Language (protocollo sparql di interrogazione di RDF). Sebbene la sua sintassi sia relativamente semplice e ricordi il più noto SQL, non sempre risulta immediato e naturale; una query SPARQL semplicemente chiede al sistema di estrarre tutte le triple che soddisfano gli schemi di triple che sono contenuti nella clausola WHERE della query stessa.

Si propongono di seguito una serie di query di esempio basate sui dati ambientali LOD pubblicati sull'endpoint della Regione Lazio. 

Query di esempio

Tutte le Stazioni di misura presenti nella Regione, con indicazioni della località e della rete di appartenenza

Esegui Query

select  distinct ?stazione ?label ?placeLabel ?localita ?reteLabel

from <http://dati.lazio.it/lod/ambiente/> where {?stazione a <http://www.w3.org/ns/sosa/Platform>; rdfs:label ?label;

<http://www.w3.org/2006/vcard/ns#locality> ?localita;

<http://www.geonames.org/ontology#locatedIn> ?place; <http://purl.org/dc/terms/isPartOf> ?rete.

?place rdfs:label ?placeLabel.

?rete rdfs:label ?reteLabel.

  } order by ?stazione

Tutte le stazioni nel comune di Fiumicino

Esegui Query

select  distinct *

from <http://dati.lazio.it/lod/ambiente/> where {?stazione a <http://www.w3.org/ns/sosa/Platform>; rdfs:label ?label;

<http://www.w3.org/2006/vcard/ns#locality> ?localita; <http://www.geonames.org/ontology#locatedIn> ?place.

?place rdfs:label ?placeLabel.

filter (regex(str(?placeLabel), 'fiumicino','i'))

}

Tutte le stazioni con le grandezze misurate

Esegui Query

select  distinct ?stazione ?label ?placeLabel ?localita ?reteLabel ?labelGrandezza

from <http://dati.lazio.it/lod/ambiente/> where {?stazione a <http://www.w3.org/ns/sosa/Platform>; rdfs:label ?label;

<http://www.w3.org/2006/vcard/ns#locality> ?localita;

<http://www.geonames.org/ontology#locatedIn> ?place; <http://purl.org/dc/terms/isPartOf> ?rete.

?place rdfs:label ?placeLabel.

?rete rdfs:label ?reteLabel.

?grandezza <http://www.w3.org/ns/sosa/isHostedBy> ?stazione; rdfs:label ?labelGrandezza.} 

order by ?stazione

I dati di livello idrometrico a Roma nell'ultimo mese (rilevazione giornaliera)

Esegui Query

select  distinct ?stazione ?label ?localita ?labelSensor ?sensor ?labelObsProp ?observation ?value ?unitMeasure ?dataRil

from <http://dati.lazio.it/lod/ambiente/> where {?stazione a <http://www.w3.org/ns/sosa/Platform>; rdfs:label ?label;

<http://www.w3.org/2006/vcard/ns#locality> ?localita; <http://www.geonames.org/ontology#locatedIn> ?place.

?place rdfs:label ?placeLabel.

?sensor <http://www.w3.org/ns/sosa/isHostedBy> ?stazione; rdfs:label ?labelSensor.

?sensor <http://www.w3.org/ns/sosa/observes> ?obsProp.

?obsProp rdfs:label ?labelObsProp; <http://qudt.org/1.1/schema/qudt#unit> ?unitMeasure.

?observation <http://www.w3.org/ns/sosa/observedProperty> ?obsProp; <http://www.w3.org/ns/sosa/hasSimpleResult> ?value; <http://www.w3.org/ns/sosa/resultTime> ?dataRil; <http://schema.org/isRelatedTo> ?stazione

filter (?placeLabel = 'Roma')

filter (regex(str(?labelSensor),'idrometro','i'))

filter (regex(str(?labelObsProp),'Livello idrometrico giornaliero','i'))

filter ( str(?dataRil) >= '2020-05-11' AND str(?dataRil) <= '2020-05-18').

#filter (?stazione = <http://10.2.61.217/lod/station/pc_419600>)

}

order by ?dataRil