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 Queryselect 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 Queryselect 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 Queryselect 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 Queryselect 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