Semantic Web e Linked Semantic Web e Linked (Open) Data(Open) Data
22
La piramide del SWLa piramide del SW
Protocolli: HTTP Identificatori: URI/IRI
Sintassi: XML + XMLNS
Testo: UNICODE
Interoperabilità: RDF
Tassonomie: RDFS
• Interrogazioni: SPARQL
Ontologie: OWL Regole: SWRL/RIF
Logica unificante
Dimostrazione (Proof)
Credibilità (Trust)
Interfaccia utente/applicazioni
Crittografia/firm
a digitale
Web semantico come web Web semantico come web dei datidei dati
• Una rappresentazione minimale del Semantic Web: il Web dei dati, ma dati collegati tra di loro
• Linked (Open) Data: l’insieme delle buone prassi per annotare i propri dati in modo che essi possano essere più facilmente ricercati, esposti ed utilizzati, sia da utenti umani sia da agenti software
33
I principi del Linked DataI principi del Linked Data
1. usare URI per dare un nome alle “cose” (una “cosa” può identificare qualsiasi oggetto o concetto nel mondo, fisico o astratto che sia).
• In questo modo in un qualche futuro diverrà possibile l’identificazione univoca e globale delle cose del mondo.
2. è opportuno che queste URI utilizzino il protocollo HTTP, così che le persone possano ricercarle facilmente deferenziandole.
• In questo modo si evita di creare nuovi schemi identificativi, tenendo presente che sempre di più le URI HTTP sono nomi e non esclusivamente indirizzi. L’obiettivo cui si punta è pertanto un mondo in cui ciascuno, ed ogni cosa, corrisponde ad una univoca URI HTTP che lo identifica nel Web
44
I principi del Linked DataI principi del Linked Data
3. quando viene cercato un URI, restituire informazioni utili ricorrendo a tecnologie standard (come RDF e SPARQL).
• In questo modo, progressivamente, i dati e non solo la struttura degli stessi saranno sempre più disponibili ed utilizzabili. L’obiettivo è portare alla luce il Deep Web.
4. includere nelle descrizioni link ad altre URI, in modo che possano essere scoperte e descritte nuove risorse.
• Si punta cioè a creare una “ragnatela” (web) di collegamenti e relazioni tra dati e concetti appartenenti a vocabolari e ontologie, non semplicemente tra documenti.
55
La nuvola del Linked Data La nuvola del Linked Data
66
Trasmettere le persone?Trasmettere le persone?
• L’obiettivo di usare URI dereferenziabili per individuare le cose del mondo, collide con il fatto che una persona o un oggetto non possono essere “trasmessi” via Web quando li si richieda. Le strategie individuate per gestire questa situazione sono due
• HTTP code 303 See Other: se viene effettuata una richiesta HTTP per una URI che individua una entità del mondo reale, il server risponderà con il codice 303 e reindirizzerà la richiesta verso una risorsa contenente “una descrizione” della entità fisica.
• hash tag #: prevede che per l’individuazione della risorsa fisica venga utilizzata la notazione della URI che utilizza il frammento della risorsa mediante hash (#). In questo modo, in accordo col protocollo HTTP, la richiesta al server verrà effettuata eliminando preliminarmente la parte a valle del #, reperendo quindi solo la risorsa “descrittiva”.
77
Il 5 star rating del LODIl 5 star rating del LOD
• Dati resi disponibili sul Web in formato aperto
• + Dati in formato strutturato, machine readable
• + formato dati non proprietario
• + utilizzo di standard W3C quali RDF e SPARQL per identificare le cose
• + utilizzare RDF per linkare altri dati fornendo informazione contestuale
88
Pubblicare LDPubblicare LD
99
Mappare database Mappare database relazionalirelazionali
• I wrapper RDF: applicazioni che convertono il database nella relativa rappresentazione RDF. Questi strumenti permettono di definire dei mapping da dati relazionali a grafi RDF
• D2R Server http://d2rq.org/d2r-server
1010
I 6 passiI 6 passi
• Scaricare dal sito http://d2rq.org/ e installare il D2R server;
• far generare automaticamente al D2R server il file di mapping utilizzando il linguaggio dichiarativo D2RQ Mapping, parte della suite D2R;
• modificare il mapping auto-generato, personalizzandolo in base alle proprie esigenze (ad esempio modificando i nomi utilizzati, oppure decidendo di non mappare, e quindi non esporre, particolari porzioni del database);
• aggiungere link RDF a sorgenti di dati esterni, in modo che i dati generati siano effettivamente collegati con il resto del mondo. Queste connessioni possono essere aggiunte a mano, se le risorse sono in numero limitato, oppure con procedure automatiche o semi-automatiche. A tale scopo esistono dei tool, come ad esempio Silk o LIMES, che generalmente utilizzano delle euristiche e mirano a trovare similarità basate su stringhe, valori numerici o valori geografici tra risorse appartenenti a dataset diversi;
1111
• aggiungere link RDF da sorgenti di Linked Data esterne già esistenti, verso il dataset appena generato. Ciò al fine di assicurare che i nuovi dati possano effettivamente essere scoperti. In particolare, se la sorgente pre-esistente è sotto il proprio controllo, l’operazione è semplice. In caso contrario, bisogna chiedere al proprietario/gestore della sorgente esistente (ad esempio DBpedia) di aggiungere gentilmente tra le triple RDF del propri dataset dei collegamenti al nuovo dataset;
• aggiungere la sorgente di dati generata al registro CKAN nel gruppo LOD Cloud su http://thedatahub.org/group/lodcloud.
1212
Un semplice DB di Un semplice DB di esempioesempio
Movies
1313
Actors
MoviesActors
Il file di mapping in D2RQ mapping
1414
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> . @prefix dbpedia-owl: <http://dbpedia.org/ontology/> .@prefix map: <file:///d2r/example.ttl#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix foaf: <http://xmlns.com/foaf/0.1/> .
map:Database1 a d2rq:Database;d2rq:jdbcDSN "jdbc:mysql://localhost/imdb"; d2rq:jdbcDriver "com.mysql.jdbc.Driver"; d2rq:username "user”; d2rq:password "password”; .
# CREATE TABLE Movies(MovieID int, Title text, Year int);
map:Movie a d2rq:ClassMap; d2rq:dataStorage map:Database1. d2rq:class dbpedia-owl:Film;d2rq:uriPattern "http://mymoviedomain/movie/@@Movies.MovieID@@"; .
map:movieTitle a d2rq:PropertyBridge; d2rq:belongsToClassMap map:Movie; d2rq:property dbpedia-owl:title; d2rq:column "Movies.Title"; d2rq:lang "en"; d2rq:datatype xsd:string;.map:movieCreationYear a d2rq:PropertyBridge;
d2rq:belongsToClassMap map:Movie; d2rq:property dbpedia-owl:creationYear; d2rq:column "Movies.Year"; d2rq:datatype xsd:gYear;
# CREATE TABLE Actors(ActorID int, FullName text);
map:Actor a d2rq:ClassMap; d2rq:dataStorage map:Database1. d2rq:class dbpedia-owl:Person;d2rq:uriPattern "http://mymoviedomain/actor/@@Actors.ActorID@@"; .
map:actorName a d2rq:PropertyBridge; d2rq:belongsToClassMap map:Actor; d2rq:property foaf:name; d2rq:column "Actor.FullName"; d2rq:datatype xsd:string;
# CREATE TABLE MoviesActors(MovieID int, ActorID);
map:movieActor a d2rq:PropertyBridge; d2rq:belongsToClassMap map:Movie;d2rq:property dbpedia-owl:starring;
d2rq:refersToClassMap map:Actor;d2rq:join "Movies.MovieID = MoviesActors.MovieID"; d2rq:join "MoviesActors.ActorID = Actors.ActorID";
Il file RDF GeneratoIl file RDF Generato
http://dbpedia.org/ontology/Film http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#Class . http://dbpedia.org/ontology/title http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#DatatypeProperty . http://dbpedia.org/ontology/title http://www.w3.org/2000/01/rdf-schema#range http://www.w3.org/2001/XMLSchema#string . http://dbpedia.org/ontology/creationYear http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#ObjectProperty . http://dbpedia.org/ontology/creationYear http://www.w3.org/2000/01/rdf-schema#range http://www.w3.org/2001/XMLSchema#gYear . http://mymoviedomain/movie/15 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://dbpedia.org/ontology/Film . http://mymoviedomain/movie/15 http://dbpedia.org/ontology/title "The Hurt Locker"@enˆˆxsd:string . http://mymoviedomain/movie/15 http://dbpedia.org/ontology/creationYear "2008"ˆˆxsd:gYear . http://dbpedia.org/ontology/Person http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#Class . http://xmlns.com/foaf/0.1/name http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#DatatypeProperty . http://xmlns.com/foaf/0.1/name http://www.w3.org/2000/01/rdf-schema#range http://www.w3.org/2001/XMLSchema#string . http://mymoviedomain/actor/3 http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://dbpedia.org/ontology/Person . http://mymoviedomain/actor/3 http://xmlns.com/foaf/0.1/name "Jeremy Renner"ˆˆxsd:string . http://dbpedia.org/ontology/starring http://www.w3.org/1999/02/22-rdf-syntax-ns#type http://www.w3.org/2002/07/owl#ObjectProperty . http://mymoviedomain/movie/15 http://dbpedia.org/ontology/starring http://mymoviedomain/actor/3 .
1515
LOD su dati non LOD su dati non strutturatistrutturati
• Se la sorgente iniziale di dati è non strutturata, come ad esempio nel caso di documenti puramente testuali, si può ricorrere a strumenti che si occupano di eseguire estrazione di entità da questi documenti.
• I documenti di testo vengono cioè annotati (semi)automaticamente con URI provenienti da vocabolari e sorgenti di Linked Data già disponibili, in perfetto accordo con i principi discussi precedentemente.
• Esempi diffusi di questi strumenti sono Open Calais
(http://www.opencalais.com/ cui ci riferiamo) , Ontos e DBpedia Spotlight
1616
Un semplice esempio…in Un semplice esempio…in tematema
• Da imdb, descrizione di The Hurt Locker: “Forced to play a dangerous game of cat-and-mouse in the chaos of war, an elite Army bomb squad unit must come together in a city where everyone is a potential enemy and every object could be a deadly bomb.”
1717
Il risultato di OpenCalaisIl risultato di OpenCalais
1818
LOD in ItaliaLOD in Italia
• Open Government Directive del 2009 http://www.data.gov/
riconoscimento de facto di canale preferenziale di divulgazione dei dati in ambito e-government.
• D.Lgs. n.82 del 2005 (il Codice dell’ Amministrazione Digitale) ha introdotto il principio della “disponibilita` dei dati pubblici”, cioe` la possibilita` di “accedere ai dati senza restrizioni non riconducibili a esplicite norme di legge” (D.Lgs. n.235 del 2010 project finacing)
• Riferimento principale italiano dati open http://dati.gov.it
• dati.camera.it e spcdata.digitpa.gov.it solo dataset 5 star
1919
IODLIODL
• Italian Open Data License, denominate IODL 1.0 e 2.0. Entrambe consentono di “consultare, estrarre, scaricare, copiare, pubblicare, distribuire e trasmettere” i dati e creare anche un prodotto derivato, ad esempio attraverso la combinazione con altre informazioni, o sviluppare una applicazione informatica che utilizzi come base dati i dati pubblici.
• La differenza –non banale– tra IODL 1.0 e IODL 2.0 è che per IODL 1.0 eventuali applicazioni e utilizzi derivati devono, a cascata, mantenere la stessa licenza mentre in IODL 2.0 viene richiesto al licenziatario solo di citare la fonte delle informazioni.
2020
SPARQLSPARQL
• SPARQL -- SPARQL Protocol and RDF Query Language
• Specifiche su:http://www.w3.org/TR/rdf-sparql-query/
http://www.w3.org/TR/rdf-sparql-protocol/
http://www.w3.org/TR/rdf-sparql-XMLres/
• Sia protocollo per connettersi a origini dati RDF (attraverso una specifica WSDL)
• Sia potente linguaggio di interrogazione
2121
La struttura della query La struttura della query elementareelementare
• Una query SPARQL è composta, nell’ordine, da:
• Dichiarazioni di prefissi –per abbreviare le URI
PREFIX foo: <http://example.com/resources/> ...
• Una result clause – ovvero una target list, per identificare cosa deve essere restituito
SELECT ...
• Definizione dei dataset – per individuare i dataset che verranno interrogati
FROM ...
• Il query pattern – per specificare come effettuare la richiesta, usando una path expression
WHERE { ... }
• Modificatori di query –per restringere, riordinare i risultati della query
ORDER BY ...
Ricorda qualcosa?
2222
Query patternQuery pattern
Si tratta di una path expression: una query corrisponde ad un processo di “graph matching”
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
SELECT ?attore
FROM <http://dbpedia.org/sparql>
WHERE{
dbpedia:The_Matrix dbpedia-owl:starring ?attore .
}
2323
attore
http://dbpedia.org/resource/Joe_Pantoliano
http://dbpedia.org/resource/Laurence_Fishburne
http://dbpedia.org/resource/Hugo_Weaving
http://dbpedia.org/resource/Carrie-Anne_Moss
http://dbpedia.org/resource/Keanu_Reeves
l’insieme di tutte le risorse
per le quali e` possibile fare
un binding sulla variabile ?
attore rispetto al pattern
rappresentato nella clausola
WHERE
Graph patternGraph pattern
2424
PREFIX dbpedia: <http://dbpedia.org/resource/> PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?etichetta WHERE{ dbpedia:The_Matrix dbpedia-owl:starring ?attore . ?attore rdfs:label ?etichetta . }
Effettuare una query: Effettuare una query: endpointendpoint
• Espongono una interfaccia WSDL, ma sono accessibili anche via browser
• Generic endpoint: http://www.openlinksw.com/sparql (si faccia attenzione a selezionare l’opzione Retrieve remote RDF data for all missing source graphs).
• Specific endpoint: e.g. http://dbpedia. org/sparql
• Una lista quasi completa:
http://labs.mondeca.com/sparqlEndpointsStatus/
2525
Esempi di patternEsempi di pattern
dbpedia:The_Matrix dbpedia-owl:starring ?attore
?film dbpedia-owl:starring dbpedia:Carrie-Anne_Moss
?film dbpedia-owl:starring ?attore
dbpedia:The_Matrix ?predicato dbpedia:Andy_Wachowski
?soggetto ?predicato dbpedia:Andy_Wachowski
dbpedia:The_Matrix ?predicato ?oggetto
?soggetto ?predicato ?oggetto
Come possiamo esprimere il significato di ciascuna richiesta associata al pattern?
2626
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?attore ?film
WHERE{
dbpedia:The_Matrix dbpedia-owl:starring ?attore .
?film dbpedia-owl:starring ?attore .
}
Che stiamo chiedendo?
2727
ConstructConstruct
• Con construct possiamo “creare” nuovi grafi RDF. Costruisce il grafo che istanzia il graph pattern presente nel where
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0/>
CONSTRUCT{
?attore1 vcard:birthday ?nato .
?attore1 foaf:knows ?attore2 .
}
WHERE{
dbpedia:The_Matrix dbpedia-owl:starring ?attore1 .
?attore1 dbpprop:birthDate ?nato .
dbpedia:The_Matrix dbpedia-owl:starring ?attore2 .
} tutte le persone che hanno recitato nel film The Matrix si conoscono e per ognuna di loro indichiamo anche la data di nascita secondo il vocabolario VCARD
2828
AskAsk
• Il risultato di una query di tipo ASK è un valore booleano—true/fals indica se l’informazione richiesta e` presente o meno nella base di conoscenza interrogata.
PREFIX dbpedia: <http://dbpedia.org/resource/> PREFIX dbpedia-owl: <http://dbpedia.org/ontology/> ASK{ dbpedia:The_Matrix dbpedia-owl:starring
dbpedia:Carrie-Anne_Moss .
}
• True o false?
2929
DescribeDescribe
• restituiscimi tutto quello che sai in relazione alle risorse indicate
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
DESCRIBE ?attore{
dbpedia:The_Matrix dbpedia-owl:starring ?attore .
<http://dbpedia.org/resource/Memento_%28film%29>
dbpedia-owl:starring ?attore .
}
Il risultato dipende (e quindi può essere diverso) dall’endpoint
3030
• SELECT DISTINCT ?concept WHERE { ?s a ?concept . } LIMIT 50
• a abbr. di rdf:type
3131
FilterFilter
• Esprime condizioni PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX type: <http://dbpedia.org/class/yago/> PREFIX prop: <http://dbpedia.org/property/>
SELECT ?country_name ?population
WHERE { ?country a type:LandlockedCountries ; rdfs:label ?country_name ; prop:populationEstimate ?population .
FILTER (?population > 15000000) .
FILTER (langMatches(lang(?country_name), "IT")) .
}
3232