SlideShare une entreprise Scribd logo
1  sur  35
Télécharger pour lire hors ligne
LOD, SPARQL e
dintorni:
Un piccolo how-to
Nicola Vitucci
Intro
● LOD, ovvero Linked Open Data
– Linked Data + Open Data = Dati “a
5 stelle”
● Il WWW è un immenso database
(Web of Data)
● Cosa vuol dire? A che serve? A chi
serve?
Dati a 5 stelle
da http://5stardata.info
Dati a 5 stelle: come
★ Disponibili sul Web in qualsiasi formato purché con licenza
aperta (per diventare Open Data)
★★ Disponibili come dati strutturati “machine readable” (per esempio
in formato Excel invece della scansione di una tabella)
★★★ Come (2) più formato non proprietario (per esempio CSV
invece di Excel)
★★★★ Tutti i precedenti più uso di standard aperti sviluppati dal W3C
(RDF e SPARQL) per identificare le risorse, così è possibile
trovare il proprio materiale in rete
★★★★★ Tutti i precedenti più collegamento dei propri dati a dati altrui per
dare contesto
Dati a 5 stelle: per chi
★ Chiunque può leggere, stampare, condividere i dati
★★ (1) + chiunque può processare automaticamente i dati usando
software proprietario
★★★ (2) + chiunque più processare automaticamente i dati senza il
vincolo di possedere alcun tipo di software proprietario
★★★★ (3) + chiunque può creare link e bookmark verso i dati e
aggiungervi altri dati
★★★★★ (4) + chiunque può scoprire altre informazioni rilevanti e capire lo
schema dei dati
Principi
● Usare URI come ID unico per una
risorsa; diverso da URL
● Usare HTTP (invece di altri schemi
come URN, ISBN ecc.)
● Fornire informazioni utili quando si
dereferenzia un ID
● Fornire link ad altre risorse
LOD cloud
da http://lod-cloud.net/versions/2014-08-30/lod-cloud_colored.png
LOD cloud
da http://lod-cloud.net/versions/2014-08-30/lod-cloud_colored.png
RDF: principi
● RDF (Resource Description
Framework) è uno dei mattoncini per
costruire i LOD
● È un modello, non un formato
– RDF non vuol dire necessariamente
XML!
– Diverse serializzazioni
RDF: serializzazioni
● Diversi formati:
– XML
– Turtle
– RDFa
● Scarichiamo un file RDF da Internet
– http://www.ivan-herman.net/foaf.rdf
– http://www.ivan-herman.net/foaf.ttl
RDF: serializzazioni
Formato XML:
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:ns11="http://www.w3.org/2003/01/geo/wgs84_pos#"
...
>
<ns1:Person rdf:about="http://www.ivan-herman.net/foaf#me">
<ns1:worksFor>
<rdf:Description rdf:about="http://www.cwi.nl">
<ns7:title>Centre Mathematics and Computer Sciences (CWI)</ns7:title>
</rdf:Description>
...
RDF: serializzazioni
Formato Turtle:
@prefix ns1: <http://xmlns.com/foaf/0.1/> .
@prefix ns10: <http://www.w3.org/ns/auth/cert#> .
@prefix ns2: <http://xmlns.com/wot/0.1/> .
...
<http://www.ivan-herman.net/foaf> a ns1:PersonalProfileDocument ;
ns5:creator "Ivan Herman" ;
ns5:date "2015-03-02"^^xsd:date ;
ns5:title "Ivan Herman’s homepage" ;
rdfs:seeAlso <http://www.ivan-herman.net/foafExtras.rdf> ;
ns1:primaryTopic <http://www.ivan-herman.net/foaf#me> ;
...
RDF: serializzazioni
Formato RDFa: visualizzare il codice sorgente di http://www.ivan-herman.net/
<body id="me" prefix=" air: http://www.daml.org/2001/10/html/airport-ont#
...
>
<div id="container" about="http://www.ivan-herman.net/foaf#me" typeof="schema:Person
foaf:Person dc:Agent">
<div id="linkList" >
<img property="foaf:img schema:image" class="flr" src="http://www.ivan-
herman.net/Images/me2014-small.jpg" alt="Photo of Ivan Herman"/>
<div id="linkList2">
<ul>
<li><a property="foaf:homepage schema:url" href="http://www.ivan-herman.net">personal
homepage</a></li>
...
RDF: serializzazioni
● Si può usare la content negotiation per ottenere
serializzazioni diverse per lo stesso file
– Da Linux si può usare curl
– In alternativa, ci sono client REST per Firefox
e Chrome
● $ curl ­H "Accept: application/rdf+xml" 
http://www.ivan­herman.net/foaf
● $ curl ­H "Accept: text/turtle” 
http://www.ivan­herman.net/foaf
RDF: principi
● RDF si basa sul concetto di tripla, cioè:
– di soggetto legato a un oggetto tramite un
predicato
– di attributo che lega un'entità identificata da un
URI a un valore (o a un'altra entità)
● Diversamente dai database tradizionali, è la
relazione tra due elementi che conta
RDF: principi
Database relazionale:
RDF:
Qual è l'unità di misura del peso? Cosa vuol dire “prodotto”?
Peso Prodotto
Ingrediente 1 10 Prodotto 1
Ingrediente 2 20 Prodotto 1
Ingrediente 1
Ingrediente 2
Prodotto 1
prodotto
prodotto
10
20
peso
peso
RDF: schema dati
● In un database relazionale dobbiamo
cercare altrove la definizione precisa dello
schema dei dati
● Usando RDF possiamo descrivere nel
dettaglio sia i dati che lo schema!
● Per farlo ci serviremo di vocabolari
– I termini di un vocabolario hanno un URI
di base comune chiamato namespace
Vocabolari comuni
● rdf, rdfs, owl – il “core” di RDF
● dcterms – proprietà generiche delle risorse
● FOAF – Friend of a Friend (ci torniamo più tardi)
● geo – geolocalizzazione
● skos – descrizione di schemi e tassonomie
● void, dcat – descrizione di dataset
● doap – descrizione di progetti
Vocabolari comuni
● rdf e rdfs sono particolarmente utili
perché servono a definire lo schema dei
dati
● Usando rdf si può descrivere
l'appartenenza di un'entità a una classe
● Usando rdfs si possono definire
relazioni di super- e sottoclasse
Esempi
● “Il gatto è un animale”
– ns1:gatto rdf:type 
ns2:Mammifero
– ns1:gatto a ns2:Mammifero
● “I mammiferi sono animali”
– ns2:Mammifero 
rdfs:subClassOf ns2:Animale
Ontologie
● Un'ontologia è un modello usato per
descrivere un certo dominio
● Si possono esprimere concetti
articolati ed interessanti
● È più difficile da sviluppare perché
bisogna fare diverse considerazioni
logiche e di modellazione
Trovare i LOD
● Dobbiamo conoscere i dettagli di RDF per
usare i LOD?
● Approccio “follow your nose” grazie ai link
– http://dati.isprambiente.it/id/website/html
– https://www.wikidata.org
– http://sameas.org
– https://datahub.io
Usare LOD
● Noi vogliamo “sporcarci le mani”
● SPARQL!
SPARQL
● SPARQL è per RDF ciò che SQL è
per i database: un linguaggio di
interrogazione
● Essendo RDF un formato “a grafo”,
anche le query RDF sono
essenzialmente “a grafo”
SPARQL
● Oltre che un linguaggio di
interrogazione, SPARQL è anche un
protocollo di comunicazione
● Un endpoint SPARQL è una risorsa
alla quale possiamo mandare delle
query SPARQL e che ci darà dei dati
come risultato (se ce ne sono di
corrispondenti alla nostra query)
SPARQL
● Esempi di endpoint SPARQL:
– http://it.dbpedia.org/sparql
– https://query.wikidata.org/
– http://dati.isprambiente.it/sparql
– http://dati.camera.it/sparql
Query SPARQL
Esempio di query SPARQL su dbpedia: “Compositori delle colonne sonore di tutti i film di produzione
italiana in bianco/nero”
PREFIX dbpedia­owl: <http://dbpedia.org/ontology/>
SELECT * 
WHERE {
 ?film a dbpedia­owl:Film .
 ?film dbpedia­owl:country <http://it.dbpedia.org/resource/Italia> .
 ?film dbpedia­owl:filmColourType ?colore .
 ?film dbpedia­owl:musicComposer ?compositore .
 FILTER ( ?colore in ("B/N"@it, "bianco/nero"@it ) )
}
Query SPARQL
Pagina dei risultati:
film colore compositore
http://it.dbpedia.org/resource/
Roma_città_aperta
"B/N"^^<http://www.w3.org/
2001/XMLSchema#string>
http://it.dbpedia.org/resource/
Renzo_Rossellini
http://it.dbpedia.org/resource/
Roma_città_aperta
"B/N"^^<http://www.w3.org/
2001/XMLSchema#string>
http://it.dbpedia.org/resource/
Felice_Lattuada
http://it.dbpedia.org/resource/
Roma_città_aperta
"B/N"^^<http://www.w3.org/
2001/XMLSchema#string>
http://it.dbpedia.org/resource/
Nino_Rota
http://it.dbpedia.org/resource/
La_dolce_vita
"B/N"^^<http://www.w3.org/
2001/XMLSchema#string>
http://it.dbpedia.org/resource/
Nino_Rota
Query SPARQL
Risultati in XML:
<sparql xmlns="http://www.w3.org/2005/sparql-results#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3.org/2001/sw/DataAccess/rf1/result2.xsd">
<head>
<variable name="film"/>
<variable name="colore"/>
<variable name="compositore"/>
</head>
<results distinct="false" ordered="true">
<result>
<binding name="film"><uri>http://it.dbpedia.org/resource/Roma_città_aperta</uri></binding>
<binding name="colore"><literal datatype="http://www.w3.org/2001/XMLSchema#string">B/N</literal></binding>
<binding name="compositore"><uri>http://it.dbpedia.org/resource/Renzo_Rossellini</uri></binding>
</result>
...
Query SPARQL
Risultati in JSON:
{ "head": { "link": [], "vars": ["film", "colore", "compositore"] },
"results": { "distinct": false, "ordered": true, "bindings": [
{ "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/Roma_cittu00E0_aperta" } ,
"colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } ,
"compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Renzo_Rossellini" }},
{ "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/Luci_del_varietu00E0" } ,
"colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } ,
"compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Felice_Lattuada" }},
{ "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/La_strada" },
"colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } ,
"compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Nino_Rota" }},
...
Query SPARQL
● Come faccio a sapere quali classi
utilizzare nella query?
● Due modi:
– Cerco l'ontologia di dbpedia:
http://dbpedia.org/ontology/
– Trovo tutte le classi direttamente
sull'endpoint SPARQL
Query SPARQL
Per trovare le classi usate nell'endpoint:
●
Cerco prima i grafi (~ dataset) disponibili e trovo <http://it.dbpedia.org>
SELECT DISTINCT ?g 
WHERE {
  GRAPH ?g {?s a ?cl}
}
●
Cerco tutte le classi definite nel grafo più “interessante”
SELECT DISTINCT ?cl 
WHERE {
  GRAPH <http://it.dbpedia.org> {?s a ?cl}
}
Query SPARQL
● Supponiamo di aver trovato http://dbpedia.org/ontology/Person
● Vogliamo sapere se esistono classi più specializzate:
PREFIX dbpedia: <http://dbpedia.org/ontology/>
SELECT DISTINCT ?cl
WHERE {
  ?cl rdfs:subClassOf dbpedia:Person
}
● Troviamo per esempio dbpedia:Artist, dbpedia:Athlete, ...
Considerazioni
● Facciamo il punto
Grazie!

Contenu connexe

Similaire à LOD, SPARQL e dintorni

M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...
M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...
M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...Istituto nazionale di statistica
 
IC2008 Emanuele Della Valle Semantic Web
IC2008 Emanuele Della Valle Semantic WebIC2008 Emanuele Della Valle Semantic Web
IC2008 Emanuele Della Valle Semantic WebEmanuele Della Valle
 
ODDI 2013 DCAT per descrivere gli Open Data della PA
ODDI 2013 DCAT per descrivere gli Open Data della PAODDI 2013 DCAT per descrivere gli Open Data della PA
ODDI 2013 DCAT per descrivere gli Open Data della PAMatteo Busanelli
 
RDFa 1.1 - Seminario Web Semantico 2015
 RDFa 1.1 - Seminario Web Semantico 2015 RDFa 1.1 - Seminario Web Semantico 2015
RDFa 1.1 - Seminario Web Semantico 2015Giuseppe Luciano
 
Linked Open Data - una panoramica per i beni culturali
Linked Open Data - una panoramica per i beni culturaliLinked Open Data - una panoramica per i beni culturali
Linked Open Data - una panoramica per i beni culturalisilviamazzini
 
Cloud Cult Platform - Roma non è mai stata così ''esposta''!
Cloud Cult Platform - Roma non è mai stata così ''esposta''!Cloud Cult Platform - Roma non è mai stata così ''esposta''!
Cloud Cult Platform - Roma non è mai stata così ''esposta''!CAMELIA BOBAN
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataSynapta
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked DataDavide Allavena
 
Introduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. IIIntroduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. IIlostrettodigitale
 
Introduzione al Semantic Web
Introduzione al Semantic WebIntroduzione al Semantic Web
Introduzione al Semantic WebGiacomo Fiumara
 
Il "Knowledge Graph" della Pubblica Amministrazione Italiana
Il "Knowledge Graph" della Pubblica Amministrazione ItalianaIl "Knowledge Graph" della Pubblica Amministrazione Italiana
Il "Knowledge Graph" della Pubblica Amministrazione ItalianaGraphRM
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009Massimiliano Dessì
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meetingguest67beeb9
 
Progetto ASSETTO Presentazione politecnico bari 27-06-2014
Progetto ASSETTO Presentazione politecnico bari   27-06-2014Progetto ASSETTO Presentazione politecnico bari   27-06-2014
Progetto ASSETTO Presentazione politecnico bari 27-06-2014Apulian ICT Living Labs
 
C'è semantica in questo web
C'è semantica in questo webC'è semantica in questo web
C'è semantica in questo webNet7
 

Similaire à LOD, SPARQL e dintorni (20)

Odatv alessandra donnini
Odatv alessandra donniniOdatv alessandra donnini
Odatv alessandra donnini
 
M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...
M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...
M. Scannapieco - Da SDMX a RDF Data Cube Vocabulary: Integrare i Dati Statist...
 
IC2008 Emanuele Della Valle Semantic Web
IC2008 Emanuele Della Valle Semantic WebIC2008 Emanuele Della Valle Semantic Web
IC2008 Emanuele Della Valle Semantic Web
 
ODDI 2013 DCAT per descrivere gli Open Data della PA
ODDI 2013 DCAT per descrivere gli Open Data della PAODDI 2013 DCAT per descrivere gli Open Data della PA
ODDI 2013 DCAT per descrivere gli Open Data della PA
 
RDFa 1.1 - Seminario Web Semantico 2015
 RDFa 1.1 - Seminario Web Semantico 2015 RDFa 1.1 - Seminario Web Semantico 2015
RDFa 1.1 - Seminario Web Semantico 2015
 
Linked Open Data - una panoramica per i beni culturali
Linked Open Data - una panoramica per i beni culturaliLinked Open Data - una panoramica per i beni culturali
Linked Open Data - una panoramica per i beni culturali
 
Cloud Cult Platform - Roma non è mai stata così ''esposta''!
Cloud Cult Platform - Roma non è mai stata così ''esposta''!Cloud Cult Platform - Roma non è mai stata così ''esposta''!
Cloud Cult Platform - Roma non è mai stata così ''esposta''!
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Stack tecnologico Per Linked Data
Stack tecnologico Per Linked DataStack tecnologico Per Linked Data
Stack tecnologico Per Linked Data
 
Strategie Per Un Lor Federato
Strategie Per Un Lor FederatoStrategie Per Un Lor Federato
Strategie Per Un Lor Federato
 
Drupal + Apache SOLR
Drupal + Apache SOLRDrupal + Apache SOLR
Drupal + Apache SOLR
 
ALIADA
ALIADAALIADA
ALIADA
 
Introduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. IIIntroduzione al Semantic Web pt. II
Introduzione al Semantic Web pt. II
 
Introduzione al Semantic Web
Introduzione al Semantic WebIntroduzione al Semantic Web
Introduzione al Semantic Web
 
G. Barcaroli - Introduzione a R
G. Barcaroli - Introduzione a RG. Barcaroli - Introduzione a R
G. Barcaroli - Introduzione a R
 
Il "Knowledge Graph" della Pubblica Amministrazione Italiana
Il "Knowledge Graph" della Pubblica Amministrazione ItalianaIl "Knowledge Graph" della Pubblica Amministrazione Italiana
Il "Knowledge Graph" della Pubblica Amministrazione Italiana
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
MongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework MeetingMongoDb and Scala SpringFramework Meeting
MongoDb and Scala SpringFramework Meeting
 
Progetto ASSETTO Presentazione politecnico bari 27-06-2014
Progetto ASSETTO Presentazione politecnico bari   27-06-2014Progetto ASSETTO Presentazione politecnico bari   27-06-2014
Progetto ASSETTO Presentazione politecnico bari 27-06-2014
 
C'è semantica in questo web
C'è semantica in questo webC'è semantica in questo web
C'è semantica in questo web
 

LOD, SPARQL e dintorni

  • 1. LOD, SPARQL e dintorni: Un piccolo how-to Nicola Vitucci
  • 2. Intro ● LOD, ovvero Linked Open Data – Linked Data + Open Data = Dati “a 5 stelle” ● Il WWW è un immenso database (Web of Data) ● Cosa vuol dire? A che serve? A chi serve?
  • 3. Dati a 5 stelle da http://5stardata.info
  • 4. Dati a 5 stelle: come ★ Disponibili sul Web in qualsiasi formato purché con licenza aperta (per diventare Open Data) ★★ Disponibili come dati strutturati “machine readable” (per esempio in formato Excel invece della scansione di una tabella) ★★★ Come (2) più formato non proprietario (per esempio CSV invece di Excel) ★★★★ Tutti i precedenti più uso di standard aperti sviluppati dal W3C (RDF e SPARQL) per identificare le risorse, così è possibile trovare il proprio materiale in rete ★★★★★ Tutti i precedenti più collegamento dei propri dati a dati altrui per dare contesto
  • 5. Dati a 5 stelle: per chi ★ Chiunque può leggere, stampare, condividere i dati ★★ (1) + chiunque può processare automaticamente i dati usando software proprietario ★★★ (2) + chiunque più processare automaticamente i dati senza il vincolo di possedere alcun tipo di software proprietario ★★★★ (3) + chiunque può creare link e bookmark verso i dati e aggiungervi altri dati ★★★★★ (4) + chiunque può scoprire altre informazioni rilevanti e capire lo schema dei dati
  • 6. Principi ● Usare URI come ID unico per una risorsa; diverso da URL ● Usare HTTP (invece di altri schemi come URN, ISBN ecc.) ● Fornire informazioni utili quando si dereferenzia un ID ● Fornire link ad altre risorse
  • 9. RDF: principi ● RDF (Resource Description Framework) è uno dei mattoncini per costruire i LOD ● È un modello, non un formato – RDF non vuol dire necessariamente XML! – Diverse serializzazioni
  • 10. RDF: serializzazioni ● Diversi formati: – XML – Turtle – RDFa ● Scarichiamo un file RDF da Internet – http://www.ivan-herman.net/foaf.rdf – http://www.ivan-herman.net/foaf.ttl
  • 11. RDF: serializzazioni Formato XML: <?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns:ns11="http://www.w3.org/2003/01/geo/wgs84_pos#" ... > <ns1:Person rdf:about="http://www.ivan-herman.net/foaf#me"> <ns1:worksFor> <rdf:Description rdf:about="http://www.cwi.nl"> <ns7:title>Centre Mathematics and Computer Sciences (CWI)</ns7:title> </rdf:Description> ...
  • 12. RDF: serializzazioni Formato Turtle: @prefix ns1: <http://xmlns.com/foaf/0.1/> . @prefix ns10: <http://www.w3.org/ns/auth/cert#> . @prefix ns2: <http://xmlns.com/wot/0.1/> . ... <http://www.ivan-herman.net/foaf> a ns1:PersonalProfileDocument ; ns5:creator "Ivan Herman" ; ns5:date "2015-03-02"^^xsd:date ; ns5:title "Ivan Herman’s homepage" ; rdfs:seeAlso <http://www.ivan-herman.net/foafExtras.rdf> ; ns1:primaryTopic <http://www.ivan-herman.net/foaf#me> ; ...
  • 13. RDF: serializzazioni Formato RDFa: visualizzare il codice sorgente di http://www.ivan-herman.net/ <body id="me" prefix=" air: http://www.daml.org/2001/10/html/airport-ont# ... > <div id="container" about="http://www.ivan-herman.net/foaf#me" typeof="schema:Person foaf:Person dc:Agent"> <div id="linkList" > <img property="foaf:img schema:image" class="flr" src="http://www.ivan- herman.net/Images/me2014-small.jpg" alt="Photo of Ivan Herman"/> <div id="linkList2"> <ul> <li><a property="foaf:homepage schema:url" href="http://www.ivan-herman.net">personal homepage</a></li> ...
  • 14. RDF: serializzazioni ● Si può usare la content negotiation per ottenere serializzazioni diverse per lo stesso file – Da Linux si può usare curl – In alternativa, ci sono client REST per Firefox e Chrome ● $ curl ­H "Accept: application/rdf+xml"  http://www.ivan­herman.net/foaf ● $ curl ­H "Accept: text/turtle”  http://www.ivan­herman.net/foaf
  • 15. RDF: principi ● RDF si basa sul concetto di tripla, cioè: – di soggetto legato a un oggetto tramite un predicato – di attributo che lega un'entità identificata da un URI a un valore (o a un'altra entità) ● Diversamente dai database tradizionali, è la relazione tra due elementi che conta
  • 16. RDF: principi Database relazionale: RDF: Qual è l'unità di misura del peso? Cosa vuol dire “prodotto”? Peso Prodotto Ingrediente 1 10 Prodotto 1 Ingrediente 2 20 Prodotto 1 Ingrediente 1 Ingrediente 2 Prodotto 1 prodotto prodotto 10 20 peso peso
  • 17. RDF: schema dati ● In un database relazionale dobbiamo cercare altrove la definizione precisa dello schema dei dati ● Usando RDF possiamo descrivere nel dettaglio sia i dati che lo schema! ● Per farlo ci serviremo di vocabolari – I termini di un vocabolario hanno un URI di base comune chiamato namespace
  • 18. Vocabolari comuni ● rdf, rdfs, owl – il “core” di RDF ● dcterms – proprietà generiche delle risorse ● FOAF – Friend of a Friend (ci torniamo più tardi) ● geo – geolocalizzazione ● skos – descrizione di schemi e tassonomie ● void, dcat – descrizione di dataset ● doap – descrizione di progetti
  • 19. Vocabolari comuni ● rdf e rdfs sono particolarmente utili perché servono a definire lo schema dei dati ● Usando rdf si può descrivere l'appartenenza di un'entità a una classe ● Usando rdfs si possono definire relazioni di super- e sottoclasse
  • 20. Esempi ● “Il gatto è un animale” – ns1:gatto rdf:type  ns2:Mammifero – ns1:gatto a ns2:Mammifero ● “I mammiferi sono animali” – ns2:Mammifero  rdfs:subClassOf ns2:Animale
  • 21. Ontologie ● Un'ontologia è un modello usato per descrivere un certo dominio ● Si possono esprimere concetti articolati ed interessanti ● È più difficile da sviluppare perché bisogna fare diverse considerazioni logiche e di modellazione
  • 22. Trovare i LOD ● Dobbiamo conoscere i dettagli di RDF per usare i LOD? ● Approccio “follow your nose” grazie ai link – http://dati.isprambiente.it/id/website/html – https://www.wikidata.org – http://sameas.org – https://datahub.io
  • 23. Usare LOD ● Noi vogliamo “sporcarci le mani” ● SPARQL!
  • 24. SPARQL ● SPARQL è per RDF ciò che SQL è per i database: un linguaggio di interrogazione ● Essendo RDF un formato “a grafo”, anche le query RDF sono essenzialmente “a grafo”
  • 25. SPARQL ● Oltre che un linguaggio di interrogazione, SPARQL è anche un protocollo di comunicazione ● Un endpoint SPARQL è una risorsa alla quale possiamo mandare delle query SPARQL e che ci darà dei dati come risultato (se ce ne sono di corrispondenti alla nostra query)
  • 26. SPARQL ● Esempi di endpoint SPARQL: – http://it.dbpedia.org/sparql – https://query.wikidata.org/ – http://dati.isprambiente.it/sparql – http://dati.camera.it/sparql
  • 27. Query SPARQL Esempio di query SPARQL su dbpedia: “Compositori delle colonne sonore di tutti i film di produzione italiana in bianco/nero” PREFIX dbpedia­owl: <http://dbpedia.org/ontology/> SELECT *  WHERE {  ?film a dbpedia­owl:Film .  ?film dbpedia­owl:country <http://it.dbpedia.org/resource/Italia> .  ?film dbpedia­owl:filmColourType ?colore .  ?film dbpedia­owl:musicComposer ?compositore .  FILTER ( ?colore in ("B/N"@it, "bianco/nero"@it ) ) }
  • 28. Query SPARQL Pagina dei risultati: film colore compositore http://it.dbpedia.org/resource/ Roma_città_aperta "B/N"^^<http://www.w3.org/ 2001/XMLSchema#string> http://it.dbpedia.org/resource/ Renzo_Rossellini http://it.dbpedia.org/resource/ Roma_città_aperta "B/N"^^<http://www.w3.org/ 2001/XMLSchema#string> http://it.dbpedia.org/resource/ Felice_Lattuada http://it.dbpedia.org/resource/ Roma_città_aperta "B/N"^^<http://www.w3.org/ 2001/XMLSchema#string> http://it.dbpedia.org/resource/ Nino_Rota http://it.dbpedia.org/resource/ La_dolce_vita "B/N"^^<http://www.w3.org/ 2001/XMLSchema#string> http://it.dbpedia.org/resource/ Nino_Rota
  • 29. Query SPARQL Risultati in XML: <sparql xmlns="http://www.w3.org/2005/sparql-results#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/sw/DataAccess/rf1/result2.xsd"> <head> <variable name="film"/> <variable name="colore"/> <variable name="compositore"/> </head> <results distinct="false" ordered="true"> <result> <binding name="film"><uri>http://it.dbpedia.org/resource/Roma_città_aperta</uri></binding> <binding name="colore"><literal datatype="http://www.w3.org/2001/XMLSchema#string">B/N</literal></binding> <binding name="compositore"><uri>http://it.dbpedia.org/resource/Renzo_Rossellini</uri></binding> </result> ...
  • 30. Query SPARQL Risultati in JSON: { "head": { "link": [], "vars": ["film", "colore", "compositore"] }, "results": { "distinct": false, "ordered": true, "bindings": [ { "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/Roma_cittu00E0_aperta" } , "colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } , "compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Renzo_Rossellini" }}, { "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/Luci_del_varietu00E0" } , "colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } , "compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Felice_Lattuada" }}, { "film": { "type": "uri", "value": "http://it.dbpedia.org/resource/La_strada" }, "colore": { "type": "typed-literal", "datatype": "http://www.w3.org/2001/XMLSchema#string", "value": "B/N" } , "compositore": { "type": "uri", "value": "http://it.dbpedia.org/resource/Nino_Rota" }}, ...
  • 31. Query SPARQL ● Come faccio a sapere quali classi utilizzare nella query? ● Due modi: – Cerco l'ontologia di dbpedia: http://dbpedia.org/ontology/ – Trovo tutte le classi direttamente sull'endpoint SPARQL
  • 32. Query SPARQL Per trovare le classi usate nell'endpoint: ● Cerco prima i grafi (~ dataset) disponibili e trovo <http://it.dbpedia.org> SELECT DISTINCT ?g  WHERE {   GRAPH ?g {?s a ?cl} } ● Cerco tutte le classi definite nel grafo più “interessante” SELECT DISTINCT ?cl  WHERE {   GRAPH <http://it.dbpedia.org> {?s a ?cl} }
  • 33. Query SPARQL ● Supponiamo di aver trovato http://dbpedia.org/ontology/Person ● Vogliamo sapere se esistono classi più specializzate: PREFIX dbpedia: <http://dbpedia.org/ontology/> SELECT DISTINCT ?cl WHERE {   ?cl rdfs:subClassOf dbpedia:Person } ● Troviamo per esempio dbpedia:Artist, dbpedia:Athlete, ...