Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

LOD, SPARQL e dintorni

313 views

Published on

Un piccolo how-to su Linked Open Data, RDF e SPARQL.

Published in: Data & Analytics
  • Be the first to comment

  • Be the first to like this

LOD, SPARQL e dintorni

  1. 1. LOD, SPARQL e dintorni: Un piccolo how-to Nicola Vitucci
  2. 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. 3. Dati a 5 stelle da http://5stardata.info
  4. 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. 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. 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
  7. 7. LOD cloud da http://lod-cloud.net/versions/2014-08-30/lod-cloud_colored.png
  8. 8. LOD cloud da http://lod-cloud.net/versions/2014-08-30/lod-cloud_colored.png
  9. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 23. Usare LOD ● Noi vogliamo “sporcarci le mani” ● SPARQL!
  24. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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, ...
  34. 34. Considerazioni ● Facciamo il punto
  35. 35. Grazie!

×