Linked Data: cosa sono e come si utilizzano

Linked Data

Con Linked Data o dati collegati ci si riferisce ad una serie di pratiche e principi relativi alla pubblicazione di dati strutturati nel web, collegati fra loro e utilizzabili attraverso interrogazioni semantiche. I Linked Data permettono, ad un essere umano o ad una macchina, di trovare dati correlati provenienti da fonti diverse.

I Linked Data sono alla base del web futuro denominato Web Semantico.

Tim Berners-Lee è l’informatico inglese che ha creato il World Wide Web assieme al collega belga Robert Cailliau. Il primo sito web della storia è stato creato al CERN e messo online il 6 agosto del 1991.

Il 27 luglio del 2006 Berners-Lee, a circa 15 anni di distanza, sconvolge il mondo pubblicando un articolo in cui esprime le prime riflessioni sul web semantico:

The Semantic Web isn’t just about putting data on the web. It is about making links, so that a person or machine can explore the web of data. With linked data, when you have some of it, you can find other, related, data.

Con Web Semantico si intende la trasformazione del World Wide Web in un ambiente in cui i dati sono descritti semanticamente da metadati, rendendo quindi possibile l’interrogazione utilizzando fonti diverse. Noi siamo abituati a navigare su Internet utilizzando i link. Ma è necessario che ci sia un vero e proprio collegamento fra due siti web perché l’uno rimandi a quell’altro.

L’interrogazione semantica non ha bisogno di link diretti, perché ad essere collegati sono i metadati. Ovviamente quest’ultimi devono essere coerenti e standardizzati, c’è bisogno di un vocabolario comune.

Per la creazione dei Linked Data Tim Berners-Lee ha descritto quattro criteri necessari:

  • URI dereferenziabili per l’identificazione delle risorse
  • Utilizzare URI in conformità al protocollo HTTP in modo che possano essere consultati
  • Utilizzare standard come RDF e SPARQL per esplorare URI e reperire informazioni utili
  • Creare collegamenti tra i vari URI al fine di scoprire nuove risorse

Nel dettaglio le componenti sono:

  • URI è l’acronimo di Uniform Resource Identifier, si tratta di una sequenza di caratteri che identifica in maniera univoca una risorsa generica non necessariamente in formato digitale. Sono esempi di URI: un indirizzo web (URL), un documento cartaceo, un’immagine, un file, un indirizzo di posta elettronica.
    Con dereferenziazione si intende l’atto di trovare una rappresentazione web di una risorsa del mondo reale. La disputa su come riconoscere se un URI identifica una risorsa web (URL) o l’oggetto reale è stata fonte di un ampio dibattito e impone alcune considerazioni filosofiche.

La Trahison des images di René Magritte

 

Nel 1928-29 René Magritte dipinge: La Trahison des images. Nel dipinto compare una pipa e la scritta: Ceci n’est pas une pipe. L’affermazione sembra provocatoria ma in realtà, riflettendo, Magritte ha ragione, non è una pipa ma solo una sua rappresentazione. Partendo da questo tema, Michel Foucault ha scritto un saggio sull’arte di Magritte intitolato: Questa non è una pipa.

  • HTTP è la sigla di HyperText Transfer Protocol, un protocollo a livello applicativo usato come principale sistema per la trasmissione d’informazioni sul web.
  • RDF, Resource Description Framework è lo strumento base proposto da W3C per la codifica, lo scambio e il riutilizzo di metadati strutturati e consente l’interoperabilità semantica tra applicazioni che condividono le informazioni sul web. SPARQL (acronimo ricorsivo di SPARQL Protocol and RDF Query Language) è il linguaggio standard per l’interrogazione di dati rappresentati con RDF.

È importante differenziare i Linked Data dagli Open Data. Con questi ultimi infatti si fa riferimento solamente a dati liberamente accessibili a tutti, con la restrizione di citare la fonte o di mantenere la banca dati sempre aperta. Quando si utilizzano i Linked Data è buona norma controllare sempre le licenze e i termini di utilizzo.

Esiste una terza via, i Linked Open Data (LOD) dove trovano spazio i due concetti: in questo caso infatti i dati sono strutturati aperti, accessibili e interoperabili.

Un esempio di LOD e di uno SPARQL endpoint lo possiamo trovare nella pagina di CulturaItalia.

Linked Data, RDF e XML

Per creare e interrogare Linked Data occorre uno standard, quello proposto dal W3C è RDF, acronimo di Resource Description Framework. È costituito da due componenti:

  • RDF Model and Syntax: definisce il data model RDF e la sua codifica XML
  • RDF Schema permette di definire, vocabolari, caratteristiche e relazioni di un insieme di proprietà

Il data model RDF è basato su tre tipi di oggetti: Resources, Properties e Statements:

  • Resources. Si intende qualunque cosa descritta, la risorsa può essere una pagina web, un testo, un’immagine ecc… Le risorse sono sempre individuate da URI.
  • Properties. Indicano un aspetto specifico, una caratteristica, un attributo o una relazione utilizzata per descrivere una risorsa.
  • Statements. Secondo la logica dei predicati, le informazioni possono essere espresse utilizzando delle asserzioni costituite da triple formate da soggetto, predicato e oggetto.

Lo statement “Il cavaliere inesistente” – “ha un autore” – “Italo Calvino” sarà quindi:

Soggetto – Il cavaliere inesistente
Predicato/Proprietà – ha un autore
Oggetto – Italo Calvino

RDF Schema è un insieme di classi e proprietà RDF costituente un’estensione del vocabolario base di RDF. Si utilizza RDFS per strutturare nuovi vocabolari RDF, come per esempio FOAF, Dublin Core, SKOS. I vocabolari sono una raccolta di termini controllati e standardizzati, attraverso l’utilizzo di namespace XML, per esprimere le proprietà del data model.

L’asserzione precedente in RDF/XML diventa:

<?xml version="1.0"?>
<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/">

   <rdf:Description rdf:about="http://dbpedia.org/page/The_Nonexistent_Knight">
      <dc:creator>Italo Calvino</dc:creator>
   </rdf:Description>
</rdf:RDF>

 

Linked Data: esempio di tripla in RDF/XML

La prima riga identifica il documento come XML e ne specifica la versione.

Nella seconda riga è espresso un elemento radice che contiene, nelle righe seguenti, le dichiarazione dei namespace che fanno riferimento ai rispettivi vocabolari.

Nella terza riga dichiariamo il soggetto della tripla. Invece di inserire una stringa generica, per indicare il titolo del libro utilizziamo un URI, cioè il seguente link: http://dbpedia.org/page/The_Nonexistent_Knight. In questo modo cominciamo a sfruttare le caratteristiche e le proprietà dei Linked Data. Su Dbpedia esiste già una risorsa, con un buon indice di affidabilità, corrispondente al titolo del libro. In questo modo iniziamo a collegare dati provenientsi da fonti diverse.

DBpedia è un progetto aperto e collaborativo per l’estrazione e il riutilizzo di informazioni semi-strutturate da Wikipedia.

Per specificare il predicato utilizziamo: dc:creator.

L’oggetto della tripla consiste in una semplice stringa di testo: “Italo Calvino”.

RDF prevede che le parti dell’enunciato vengano identificate univocamente attraverso URI (Uniform Resource Identifier) o IRI (Internationalized Resource Identifier).

Riprendendo l’esempio già fatto possiamo utilizzare un URI anche per identificare l’autore, in questo caso il risultato diventa:

<?xml version="1.0"?>
<rdf:RDF
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:dc="http://purl.org/dc/elements/1.1/">

   <rdf:Description rdf:about="http://dbpedia.org/page/The_Nonexistent_Knight">
      <dc:creator rdf:resource="http://dbpedia.org/page/Italo_Calvino" />
   </rdf:Description>
</rdf:RDF>

Con il relativo modello a grafo:

 

Linked Data: secondo esempio di tripla in RDF/XML

In questo modo abbiamo enunciato in maniera completa la nostra prima “tripla”.

Come creare e pubblicare Linked Data

Il nostro obiettivo è creare un file RDF/XML che contenga alcuni dati storici sul pontefice Leone I: nome, biografia in latino tratta dal Liber Pontificalis, data di nascita e morte, luogo di nascita e morte, data di inizio e fine del pontificato, successore e predecessore.

Come visto in precedenza è possibile utilizzare uno o più vocabolari per descrivere le proprietà e i legami tra le risorse. Sul sito Linked Open Vocabularies (LOV) sono presenti oltre 600 vocabolari da cui attingere.

Tra questi ho usato i seguenti:

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:dc="http://purl.org/dc/terms/"
xmlns:foaf="http://xmlns.com/foaf/0.1/"
xmlns:dbp="http://dbpedia.org/property/"
xmlns:dbo="http://dbpedia.org/ontology/">

Inizio descrivendo la risorsa Papa Leone I e le classi a cui appartiene nelle rispettive ontologie:

<rdf:Description rdf:about="http://fontistoriche.org/RDF/liber-pontificalis/papa-leone-i">
 <rdf:type rdf:resource="http://dbpedia.org/ontology/Person"/>
 <rdf:type rdf:resource="http://xmlns.com/foaf/0.1/Person"/>
 <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>

Aggiungo l’etichetta con il nome in italiano e un breve commento per aiutare a capire cosa troverà l’utente nella nostra pagina

<rdfs:label xml:lang="it">Papa Leone I</rdfs:label>
<rdfs:comment xml:lang="it">La biografia in latino di Papa Leone I tratta dal Liber Pontificalis</rdfs:comment>

In questo modo indichiamo che la nostra risorsa fa riferimento alla stessa risorsa presente su dbpedia

<owl:sameAs rdf:resource="http://dbpedia.org/page/Pope_Leo_I"/>

Utilizzando il vocabolario FOAF dichiaro che papa Leone I è una persona a cui faccio corrispondere un’immagine ben precisa in formato jpg. Proseguo dicendo che l’argomento principale del file papa-leone-i.rdf è la pagina web papa-leone-i.htm; per quanto possa sembrare ridondante è utile “spiegare” la stessa risorsa utilizzando vocabolari e ontologie molto utilizzate, questo permette infatti di comprendere più facilmente cosa stanno descrivendo i metadati che stiamo utilizzando.

<foaf:name xml:lang="it">Papa Leone I</foaf:name>
<foaf:depiction rdf:resource="http://fontistoriche.org/liber-pontificalis/images/papa-leone-i.jpg"/>
<foaf:isPrimaryTopicOf rdf:resource="http://fontistoriche.org/liber-pontificalis/papa-leone-i"/>

Aggiugiamo altri dati: inizio e fine pontificato, luogo e data di nascita, luogo e data di morte. Le proprietà sono espresse utilizzando l’ontologia di dbpedia. Da notare è il modo in cui scriviamo le date, utilizzando uno formato standard espresso in xml. La data di nascita in realtà non è certa, abbiamo solamente indicato un anno generico.

<dbp:termStart rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0440-09-29>/dbp:termStart>
<dbp:termEnd rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0461-11-10>/dbp:termEnd>

<dbp:birthDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0390-0-0>/dbp:birthDat>
<dbp:birthPlace rdf:resource="http://dbpedia.org/resource/Tuscany"/>

<dbp:deathDate rdf:datatype="http://www.w3.org/2001/XMLSchema#date">0461-11-10>/dbp:deathDate>
<dbp:deathPlace rdf:resource="http://dbpedia.org/resource/Rome"/>

Sempre usando il vocabolario dbpedia aggiungiamo i nomi di due pontefici: il predecessore ed il successore di papa Leone I

<dbp:predecessor rdf:resource="http://dbpedia.org/resource/papa-sisto-iii"/>
<dbp:successor rdf:resource="http://fontistoriche.org/liber-pontificalis/papa-ilario-i"/>

Infine utilizzando il vocabolario Dublin Core per inserire la biografia in latino:

<dc:Description xml:lang="la">
Leo, natione Tuscus, ex patre Quintiano, sedit ann. XXI m. I d. XIII. Huius temporibus fecit Demetria, ancilla Dei basilicam sancto Stephano via Latina, miliario III, in praedio suo. Hic invenit duas hereses, Eutychiana et Nestoriana. Hic ordinavit praecepta sua auctoritate et misit ad Marcianum Augustum, orthodoxum Principem, catholicum, et facta conlatione cum eodem principem collecti sunt episcopi et factum est concilium sanctum episcoporum in Calcedona, in martyrio sanctae Eufemiae. Et congregati sunt CCLVI sacerdotes et aliorurn quorum cyrographus cucurrit, CCCCVI episcoporum, qui congregati una cum tomum, hoc est fidem apostolicae ecclesiae Romanae cum cyrographo sancti episcopi Leonis, sed et catholici principis Marciani praesentia Augusti congregatum concilium numero I CC episcoporum una cum Augusto Marciano, qui exposuerunt fidem catholicam, duas naturas in uno Christo, Deum et hominem. In quo loco piissimus Augustus Marcianus una cum uxore sua Augusta Pulcheria, deposita regia maiestate, fidem suam exposuerunt ante conspectum sanctorum episcoporum, ubi et damnaverunt Euticium et Nestorium. Et iterum fidem suam imperator Marcianus Augustus cum coniugem suam Pulcheriam Augustam, cyrographo proprio fidem suam exponentes, postulaverunt sanctum concilium ut dirigeret ad beatissimum papam Leonem, damnantes onmnes hereses. Iterum multa epistulas fidei misit beatissimus Leo archiepiscopus quae hodie reconditae archivo tenentur. Hic firmavit frequenter suis epistolis synodum CaIcedonensem: ad Marcianum epistulas XII, ad Leonem Augustum epistulas XIII, ad Flavianum episcopum epistulas VIIII, episcopis per Orientem epistulas XVIII, quas fidei confirmavit synodi.
Hic renovavit post cladem Wandalicam omnia ministeria sacrata argentea per omnes titulos, conflatas hydrias VI basilicae Constantinianae, duas basilicae beati Petri apostoli, duas beati Pauli apostoli, quas Constantinus Augustus obtulit, qui pens. sing. lib. centenas; de quas omnia vasa renovavit sacrata. Hic renovavit basilicam beati Petri apostoli [et cameram] et beati Pauli post ignem divinum renovavit. Fecit vero cameram in basilica Constantiniana. Fecit autem basilicam beato Cornelio episcopo et martyri, iuxta cymiterium Calisti, via Appia. Hic propter nomen Romanum suscipiens legationem ambulavit ad regem Unnorum, nomine Atthela, et liberavit totam Italiam a periculo hostium. Hic constituit monasterium apud beatum Petrum apostolum. Hic constituit ut intra actionem sacrificii diceretur sanctum sacrificium et cetera. Hic constituit ut monacha non acciperit velaminis capitis benedictionem, nisi probata fuerit in virginitate LX annorum. Hic constituit 14 super sepulchra apostolorum custodes qui dicuntur cubicularii, ex clero Romano. Hic fecit ordinationes IIII in urbe Roma per mens. decemb., presbiteros LXXXI, diaconos XXXI; episcopos per diversa loca CLXXXV. Qui etiam sepultus est aput beatum Petrum apostolum, III id. april. Et cessavit episcopatus dies VII. 
</dc:Description>

Per validare quanto fatto andiamo sul sito del W3C https://www.w3.org/RDF/Validator/ e controlliamo che non ci siano errori. Complessivamente ci sono 18 triple, nella schermata seguente è possibile vedere le prime otto.

Linked Data: validazione delle triple RDF/XML

 

A questo punto vediamo quali sono le operazioni da compiere per pubblicare il file rdf che abbiamo creato.
Modifichiamo il file .htaccess presente nella directory principale del nostro spazio web, aggiungendo:

AddType application/rdf+xml .rdf

In questo modo diciamo al server web Apache di servire i file con un’estensione .rdf utilizzando il tipo MIME corretto per RDF/XML. Ciò implica che i file devono essere denominati con l’estensione .rdf.

L’ultima cosa da fare è inserire un link al nostro file RDF in una pagina html del nostro sito. Questo permette di rendere più “visibile” il nostro file ai crawlers:

<link rel="alternate" type="application/rdf+xml" href="http://fontistoriche.org/liber-pontificalis/RDF/papa-leone-i.rdf">

Il file completo lo potete trovare qui: https://github.com/fontistoriche/LinkedData.

Conclusioni

Abbiamo visto cosa sono i Linked Data,  realizzato un file di esempio e visto come si pubblicano. Per poter essere interrogati i Linked Data però devono essere ospitati in web server come OpenLink Virtuoso. Purtroppo non sempre è possibile avere a disposizione questo tipo di architetture e questo rende più difficile l’utilizzo dei Linked Data nell’uso quotidiano.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *