Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Basi di Dati RDF Triple Store: Sesame Anno Accademico 2014/2015 Candidato: Ciro Guida matr. N46/000744 Ai miei genitori per avermi costantemente sostenuto Indice Introduzione 1 Capitolo 1: Il Web Semantico 1.1 Introduzione 3 1.2 Architettura del Web Semantico 4 1.3 XML 9 1.4 RDF 11 1.4.1 RDF Data Model 12 1.4.2 RDF Schema 14 1.5 OWL 14 Capitolo 2: Panoramica sui database Triple Store 2.1 Introduzione 16 2.2 Database Triple Store 16 2.3 SPARQL 18 Capitolo 3: Sesame 3.1 Introduzione 21 3.2 Architettura 21 3.3 Il Repository Abstraction Layer 23 3.3.1 Stacking RAL 23 3.4 Il Repository 25 3.5 RQL Query Module 26 3.6 RDF Administration Module 27 3.7 RDF Export Module 27 3.8 On-To-Knowledge 28 Conclusioni 29 Bibliografia 31 Introduzione Al giorno d'oggi Internet è uno strumento di cui le persone non possono farne più a meno (o quasi), basti pensare alle ore trascorse davanti ad un pc o con uno smartphone tra le mani ad eseguire ricerche, scambiare messaggi, usufruire di servizi in streaming, ecc. Eppure Internet, così come lo conosciamo, è nato “quasi” per puro caso: nel 1964 un progetto militare ad opera di ricercatori della N.A.S.A dà vita ad una primordiale forma di Internet, che in origine venne chiamata ARPANET. L'obiettivo era quello che in caso di un conflitto mondiale (si era in piena guerra fredda tra Unione Sovietica e Stati Uniti), di salvaguardare la comunicazione tra varie postazioni dislocate sul pianeta anche in mancanza di una parte della rete telefonica internazionale. Il criterio fondamentale era quindi quello di "bypassare" un tratto della rete telefonica anche circumnavigando l’intero pianeta per connettere tra loro due punti di comunicazione. Successivamente il progetto militare fu abbandonato dal Pentagono a causa dell'intrusione di un tecnico molto esperto che si impossessò di documenti “top secret” che inconsapevolmente lì divulgò. Nel 1985 il progetto militare fu privato del segreto di Stato e lasciato a libero utilizzo. Attualmente Internet è un mondo sconfinato e basti pensare che solo una piccolissima parte è raggiungibile mediante un ipertesto. E' utilizzato specialmente come strumento di ricerca e condivisione di informazioni. Dato il numero elevato (quasi incommensurabile) di informazioni reperibili in Rete, è importante sapere dell'esistenza di strumenti, quali browser e motori di ricerca, capaci di effettuare ricerche attraverso semplici parole chiavi. E' interessante notare come, data la mole straordinaria di dati che circolano sul Web, una buona percentuale di utenti durante le proprie ricerche, non superi le primissime pagine suggerite. Questo perché i motori di ricerca (come Google o Yahoo!), non sono in grado di poter percepire il significato di una parola chiave all'interno del contesto in cui si trovano, visto che gli algoritmi di ricerca utilizzati sono basati, ad esempio, sulla popolarità della pagina e non sull'aspetto sintattico delle informazioni. 1 A tutto ciò si è voluto porre rimedio, cercando di riorganizzare la Rete in chiave semantica. Negli ultimi anni molte aziende proprietarie di motori di ricerca stanno investendo i loro sforzi cercando di creare sistemi in grado di poter effettuare ricerche sempre più raffinate e precise. Tutto ciò è alla base del cosiddetto Web Semantico. In questo elaborato tratteremo i principali concetti alla base del Web Semantico, dandone una visione sintetica(data la vastità dell'argomento) ma allo stesso esauriente. Successivamente vedremo quali tecnologie possono essere utilizzate affinché la Rete diventi un “mondo semantico”. 2 Capitolo 1: Il Web Semantico 1.1 Introduzione Il World Wide Web, o semplicemente Web, fu progettato come una enorme libreria costituita da elementi che in qualche modo possono essere collegati tra loro attraverso link ipertestuali, senza i quali gran parte delle funzionalità e della praticità offerta da Internet verrebbero a mancare allontanando l'utente meno esperto. Poiché la maggior parte delle informazioni contenute in Rete è adatta alla semplice consultazione, l'ostacolo più grande all'espansione del Web è dato dalla difficoltà di agenti software come browser e motori di ricerca, di poter interpretare i dati nella maniera più corretta possibile. Ad esempio quando un motore di ricerca salva una pagina, non distingue se la parola mobile si riferisce ad un oggetto di arredamento o ad un'apparecchiatura tecnologica come un telefono cellulare, oppure se con programma ci si riferisce ad una trasmissione televisiva o ad un certo software (a maggior ragione se il contenuto della pagina Web è rappresentato da un documento multimediale contenete ad esempio audio e video), quindi non sarebbe in grado di accettare domande complesse e fornire risposte esaustive all'utente finale. A tale scopo è nata la necessità di introdurre una struttura semantica nei contenuti del Web che espliciti il significato dei dati, in modo tale che le macchine siano in grado di elaborare i dati e non solo di visualizzarli. Il Web Semantico non è una sostituzione del Web così come concepito negli Anni '80, ma un' evoluzione della sua prima forma, di cui T. Berners-Lee afferma [3] sostanzialmente che: “le macchine diventano capaci di analizzare tutti i dati sul Web, il contenuto, i link e le transazioni tra persone e computer. [...] I meccanismi quotidiani di commercio, burocrazia e vita saranno gestiti da macchine che parleranno a macchine, lasciando che gli uomini pensino soltanto a fornire l'ispirazione e l'intuito[...]. Il Web sarà un luogo in cui l'improvvisazione dell'essere umano e il ragionamento della macchina coesisteranno in una miscela ideale e potente” 3 Nei prima anni dalla sua invenzione il Web (chiamato anche Web 1.0) è stato un medium di sola lettura dove gli utenti erano semplicemente spettatori in grado di accedere ad una grande libreria di informazioni. Tra la fine del vecchio e l'inizio del nuovo secolo, con la nascita di Blog e Social Network i navigatori hanno acquisito la possibilità di divenire parte attiva di questo mondo con la possibilità di pubblicare informazioni ed opinioni: il cosiddetto Web 2.0. Infine negli ultimi anni, le informazioni presenti sul Web stanno diventando comprensibili ai calcolatori in modo tale da poter essere collegate tra loro e riutilizzate sotto altre forme (dando vita a nuove informazioni) tramite strumenti automatici [9]. Dunque un Web così come concepito, e come chiarito in precedenza, è ad uso e consumo dei soli agenti umani che tramite la loro esperienza e alla capacità di evocazione delle parole chiavi si orientano su di esso. La capacità di avere a disposizione macchine (dicasi agenti intelligenti) in grado di comprendere il significato delle informazioni presenti in Rete e dunque di guidare l'utente verso l'informazione ricercata oppure di sostituirsi a lui in alcune operazioni (create senza ricorrere all'intelligenza artificiale ad alti livelli) è alla base del concetto di Web Semantico. Un agente intelligente [21], per definirsi tale, dovrebbe avere le seguenti caratteristiche: • comprendere i testi presenti in Rete; • creare dei percorsi in base alle informazioni fornite dall'utente; • spostarsi di sito in sito collegando logicamente elementi diversi dell'informazione richiesta; • verificare l'attendibilità delle informazioni attraverso ricerche incrociate o in dipendenza del contesto. Le possibilità offerte dal Web Semantico sono tante e tali che al giorno d'oggi sono ancora in fase di approfondimento, per questo motivo più che di tecnologia si parla di visione del Web Semantico. 1.2 Architettura del Web Semantico Berners-Lee ipotizza, in un esempio divenuto un classico della letteratura sul Web 4 Semantico, un possibile scenario di collaborazione uomo-macchina sul Web [3]: Lucy ha la necessità di prenotare una visita specialistica per sua madre. Dopo aver istruito il suo agente (che possiamo definire in modo semplicistico un programma capace di eseguire compiti definiti da un utente in modo autonomo, ovvero senza il controllo dell'utente stesso ) circa le proprie esigenze (tipo di visita specialistica, massima tariffa consentita, distanza dalla casa della madre, date disponibili, etc...) delega ad esso il compito di ricercare sul Web in modo del tutto autonomo quali soluzioni sono disponibili. Una volta che l'agente avrà individuato le possibili alternative, Lucy avrà l'unico compito di scegliere la più adatta e darà il comando al suo agente di prenotare in sua vece. La possibilità di avere computer in grado di accedere a collezioni strutturate di informazioni e di portare a termine operazioni di ragionamento e “comprensione” automatici attraverso l'utilizzo di regole di inferenza logica (si trae una conclusione da un insieme di fatti) e semantica è alla base della sfida lanciata dal Web Semantico. Affinché le macchine possano avere un approccio semantico è necessario che le informazioni presenti sul Web siano corredate di una struttura dati composta da: • metadati (HTML) o annotazioni (XML, RDF) per indicare i collegamenti semantici; • schema (o ontologia) del dominio per ragionare su tali collegamenti, estraendo le informazioni di interesse e/o trovando nuovi collegamenti . Lo scenario futuro previsto dal Web Semantico vuole riprendere in parte quello già previsto per le basi di dati: quando si interroga una base dati è possibile effettuare delle ricerche molto raffinate, come ad esempio “quali autori hanno pubblicato almeno due studi sul Web Semantico”. Questo perché esiste uno schema della base dati in grado di consentire all'utente di imporre precise relazioni (almeno due studi sul Web Semantico) e tali relazioni sono stabilite fra concetti (autore e studio) e non tra le parole chiavi (la stringa autore e la stringa studio), cioè esiste un modello ed un insieme di regole che stabiliscono come debbano essere organizzati i dati. Il Web Semantico è un ambiente dichiarativo, e in particolare la semantica dei dati consiste nel fornire alla macchina informazioni in modo tale che i dati possano essere 5 interpretati correttamente, eventualmente convertiti.[1] Vista la necessità di garantire una visione sintetica ma allo stesso tempo “modulare” del problema, la struttura del Web Semantico può essere vista come un diagramma piramidale, dove ciascun livello racchiude in sé le metodologie e i linguaggi che caratterizzano quel particolare standard. Tale schema può essere suddiviso in 3 livelli: • dati gestiti tramite XML; • metadati che rappresentano le “informazioni sui dati” tramite RDF; • ontologie per la semantica di dati e metadati tramite specifici linguaggi. Fig. 1: Architettura Web Semantico Analizziamo ora il diagramma più nel dettaglio, con una visione su di esso dal basso verso l'alto: • Unicode [14], come sistema di codifica delle informazioni che assegna un numero univoco sotto forma di stringa binaria ad ogni carattere, indipendentemente dalla piattaforma informatica, dal programma e dalla lingua utilizzata nonché simboli (matematici, chimici, ideogrammi, alfabeto Braille, etc...), ed URI [10](Uniform 6 Resource Identifier) che garantisce l'identificazione univoca della risorsa, tramite una stringa, di una risorsa ad esempio Web; • XML [12], (eXtensible Markup Language) meta-linguaggio di markup che fornisce un insieme di regole sintattiche per modellare la struttura di documenti e dati quindi la possibilità di crearsi un proprio linguaggio di markup (ampia interoperabilità dei dati), XML Schema, che fornisce la possibilità di creare vocabolari XML ovvero definire la grammatica e la struttura soggiacenti ad un documento XML, e Namespace, insieme di attributi e/o nomi identificati da un codice univoco in modo tale da poter essere distinti da altri attributi e/o nomi di altri namespaces [20]; • poiché XML non fornisce una corretta interpretazione dell'informazione semantica, occorre risalire al livello RDF [1] (Resource Description Framework) che fornisce un insieme di regole per la codifica, lo scambio e il riutilizzo di metadati strutturati e consente l'interoperabilità tra applicazioni attraverso lo scambio di informazioni “machine-understadble”. Tramite il linguaggio RDF è possibile definire qualsiasi oggetto, identificato univocamente mediante un URI, come risorsa RDF. L'unità base per la rappresentazione della informazione è lo statement, una tripla costituita da Soggetto – Predicato – Oggetto, dove il soggetto è una risorsa, il predicato è una proprietà e l'oggetto è un valore. Tali descrizioni vengono combinate in un vocabolario definito dal RDF Schema; • per la mancanza di una semantica formale da parte di RDF, ragion per cui non è possibile descrivere le risorse in maniera dettagliata, bisogna salire ulteriormente per arrivare al livello delle ontologie (denominazione [22] formale di tipi , proprietà e di interrelazioni tra le varie entità di un particolare dominio del discorso), che si occupa di conciliare le “infinite visioni del mondo” cioè della condivisione e della conciliazione dei diversi punti di vista. Poiché un' ontologia formale è utopistica, nell'ambito del Web Semantico, si stanno sviluppando ontologie provenienti dal basso ovvero emergenti dal senso comune e dalla negoziazione dei significati. Poiché ciascuna ontologia si riferisce ad un certo dominio di interesse, è necessario 7 una certa interoperabilità dei vari sistemi ontologici generati, garantita solo mediante una standardizzazione dei linguaggi descrittivi che governano tali processi . Per quanto riguarda il Web Semantico, il W3C (World Wide Web Consortium) ha messo a disposizione un linguaggio per la definizione di ontologie strutturate e basate sul Web chiamato OWL (Web Ontology Language). In seguito, in questa trattazione, daremo un breve approfondimento per quanto riguarda XML, RDF ed OWL, ma prima una piccola panoramica sugli ultimi livelli dell'architettura, di cui si stava parlando prima, ancora in fase di sviluppo che potrebbero fornire la via per una rappresentazione ordinata ed efficiente della conoscenza on-line: • Unifying Logic, Proof e Trust sono i nomi degli strati non ancora sviluppati e sui quali si hanno ancora idee abbastanza incerte. A questi livelli dovrebbe risiedere l’intelligenza automatica (o se vogliamo artificiale) e l’attendibilità del Web Semantico. Il livello più alto tra i tre strati è rappresentato da Trust (Fiducia) che, dato il grande quantitativo di informazioni presenti in Rete, ha il compito di dividere i dati in affidabili o non affidabili. L’affidabilità dei dati può essere palese oppure potrebbe essere dedotta da parte di agenti intelligenti, a partire dai dati presenti. Nel caso di affidabilità inferita ,cioè dedotta a partire da una o più premesse e per via logica arrivare ad una conclusione, è necessario poter risalire ai meccanismi che hanno portato a stabilirne la validità. A tale necessità risponde il livello Proof (Prova) che dimostra quale sia stata la logica sottostante a un dato ragionamento e le relative conclusioni. Per essere in grado di fare questo, la Prova si serve della logica; quest'ultima, infatti, si pone al livello sottostante, chiamato Unifying Logic o Logica Unificante. Questa deve rispondere a due necessità: validare la prova e permettere di definire e descrivere l’informazione stessa. Le caratteristiche di questo linguaggio logico non sono ancora state definite con precisione. Entro il progetto del Web Semantico, nonostante questa vaghezza, la Logica ne costituisce il cuore pulsante. In particolare, a questo livello dovrebbe essere possibile derivare la conoscenza elaborata e prodotta (quindi dedotta) da 8 affermazioni esistenti; • ancora più incerto risulta essere lo strato delle applicazioni e delle interfacce utenti (User Interface & Applications) e quello della crittografia (Crypto); il primo, User Interface & Applications, dovrebbe essere costruito sulla base dell’insieme delle tecnologie sottostanti. Il secondo, includerebbe la crittografia e la firma digitale. Crypto rappresenterebbe un tassello importante per il raggiungimento di buoni livelli di affidabilità nel mondo del Web. Il livello di firma digitale potrebbe essere utilizzato, per esempio, per certificare la provenienza delle ontologie oltre che dei dati (strutturati).[16] 1.3 XML Attualmente il Web è un enorme contenitore di informazioni e l'utilizzo di un linguaggio come HTML (HyperText Markup Language), che assieme ad HTTP (HyperText Transfer Protocol) usato per la trasmissione delle informazioni basata sul modello client-server, ne ha sicuramente favorito lo sviluppo. Poiché si tratta di un linguaggio per la semplice formattazione grafica dei documenti (nel gergo si parla di informazioni “human-readble” e “machine-readble”) che non permette un approccio semantico, è nata la necessità di sviluppare linguaggi che consentano il recupero intelligente dei dati e di organizzarli in maniera efficiente dal punto di vista logico e semantico. A tale scopo si pone un linguaggio derivante da SGML (Standard Generalized Markup Language), chiamato XML – eXtensible Markup Language – che esplicita la struttura di un documento, dal punto di vista sintattico, attraverso marcatori (detti anche tag) che rendono le informazioni contenute in esse comprensibili anche alle macchine. A differenza di HTML, il quale possiede un certo insieme predefinito di etichette utilizzabili (standardizzate peraltro da un organismo internazionale, il Web Consortium), in XML l'autore ha la libertà di creare dei nuovi marcatori in base alle esigenze dei dati da descrivere: per tale motivo si parla di metalinguaggio. Per autore si intende un insieme di soggetti interessati alla distribuzione di documenti XML che descrivono una certa tipologia semantica e che concordano insieme una struttura comune da adottare(vedasi 9 XML Schema). Un documento XML può essere visto come una struttura logica ad albero dove, necessariamente, esiste un elemento definito root element (nodo radice) che a sua volta può contenere altri elementi, i nodi foglia. Ad ogni elemento dell'albero possono essere associati degli attributi, informazioni che ne descrivono le proprietà (potenzialmente in numero illimitato). Di seguito si riporta un esempio di struttura logica di un documento XML Fig.2: Diagramma documento XML La rappresentazione fisica del documento XML visto prima può essere la seguente (ogni elemento è caratterizzato da un tag di apertura ed uno di chiusura ): <?xml version="1.0"?> <books> <book> <author>Carson</author> <price format="dollar">31.95</price> <pubdate>05/01/2001</pubdate> </book> <pubinfo> <publisher>MSPress</publisher> <state>WA</state> </pubinfo> </books> La sintassi di un documento XML passa anche attraverso la definizione dei suoi due 10 componenti principali: • XML Schema che permette di definire la struttura, il contenuto e la semantica di documenti XML. Consente una tipizzazione dei dati sistematica, ovvero permette di definire un vocabolario XML che può essere utilizzato per descrivere documenti XML facendo ricorso sempre alla stessa sintassi. Documenti conformi allo standard possono essere convalidati come schemi validi; • Namespace XML cioè una raccolta di nomi identificati da un URI, utilizzata nel documento XML, nel momento in cui ci si riferisce ad un certo elemento, eliminando il rischio di ambiguità. Non andremo oltre nella descrizione di XML, ma una piccola panoramica su di esso era necessaria poiché RDF ed OWL , cuore dell'architettura del Web Semantico, sono linguaggi di markup derivanti proprio da esso. Per approfondimenti si può far riferimento a [12] . 1.4 RDF La necessità di utilizzare metadati affinché il Web sia uno strumento di “automazione dei dati”, ha portato a definire, per questi, convenzioni per la semantica, la sintassi e la struttura. La semantica dei metadati viene definita dalle singole comunità interessate alla descrizione delle loro specifiche risorse. La sintassi facilita l'utilizzo e lo scambio di metadati tra applicazioni diverse. La struttura, invece, può essere definita come un vincolo formale sulla sintassi cioè per dare una rappresentazione consistente della semantica. A tale scopo si pone RDF [17] – Resouce Description Framework – come base per la codifica, lo scambio e il riutilizzo di metadati strutturati, consentendo, inoltre, interoperabilità tra applicazioni che si scambiano sul Web informazioni “machineunderstadble”. Figlio del formalismo XML, è stato proposto dal W3C alla fine degli anni '90 e nel 2014 è stata pubblicata una nuova specifica (RDF 1.1). Con RDF è possibile ad esempio descrivere il contenuto di una pagina Web, implementare agenti intelligenti per lo scambio di conoscenza, stabilire proprietà intellettuali delle 11 singole pagine , contribuire alla creazione di un Web of Trust per il commercio elettronico, ecc. Dunque RDF non descrive la semantica, ma mette a disposizione una base comune per poterla esprimere, permettendo di definire la semantica dei tag XML (infatti XML definisce solo l'organizzazione dei dati all'interno di una risorsa web). RDF è costituito da due componenti: • RDF Model and Syntax che definisce il modello di dati RDF e la sua codifica XML, senza definire alcun livello di gerarchia o di relazione • RDF Schema che permette di definire specifici vocabolari per i metadati e creare nessi tra oggetti Quindi da una parte avremo i dati, dall'altra uno schema che definisce come i dati si strutturano e come sono in relazione fra loro; c'è bisogno anche di un livello intermedio in cui tenere traccia di come un dato specifico (istanza) può essere espresso a partire dallo schema. Per concludere la panoramica su RDF daremo uno sguardo generale al Data Model e allo Schema definito. Per ulteriori approfondimenti il lettore è invitato a consultare [17]. 1.4.1 RDF Data Model RDF si serve di un preciso modello – RDF Data Model – per la descrizione di un qualsiasi oggetto; per ogni oggetto vengono specificati 3 componenti: • risorsa, identificabile (univocamente) mediante un URI o un anchor identifier, descritta attraverso un'espressione RDF. Ogni risorsa RDF può essere inquadrata ad esempio in una pagina Web, in un'intera collezione di pagine Web o addirittura in un oggetto non direttamente accessibile via Web (libro, dipinto,...); • proprietà per definire una specifica caratteristica o attributo di una risorsa; una proprietà può anche descrivere relazioni con altre risorse. Ogni proprietà possiede un proprio significato, definisce i valori ammissibili, il tipo di risorse che può descrivere e le relazioni che possono instaurarsi con altre proprietà; • asserzione costituita dall'insieme di una risorsa, una proprietà e uno specifico 12 valore per quella proprietà e descrive le caratteristiche di una risorsa e le relazioni con altre risorse. Costituisce, dunque, una tripla composta da un soggetto (risorsa), un predicato (proprietà) ed un oggetto (valore). L'oggetto di un' asserzione può essere un qualsiasi tipo primitivo definito da XML oppure un'altra risorsa. Graficamente, ognuna delle triple costituenti la struttura di base di ogni espressione RDF viene rappresentata mediante grafo etichettato e orientato, in cui le risorse vengono identificate come nodi (graficamente delle ellissi), le proprietà come archi orientati etichettati, e i valori corrispondenti a sequenze di caratteri come rettangoli. Fig.3: Grafo triple RDF Poiché un grafo RDF non è comprensibile alle macchine, è necessario un processo di serializzazione che converta un oggetto in un form in grado di essere trasportato (es. HTTP). Le principali serializzazioni[2] per un grafo RDF sono le seguenti: • XML: il grafo RDF è serializzato mediante sintassi XML; • N-Triple: ogni espressione RDF viene serializzata in forma soggetto-predicatooggetto; • N3: si serializza il grafo, descrivendo una per volta, le risorse e tutte le sue proprietà. 13 1.4.2 RDF Schema Affinché si possa provvedere allo scambio di metadati, RDF necessita di una sintassi. A tale scopo il W3C ha messo a disposizione XML come sintassi di scambio RDF e permettere attraverso XML Namespace l’associazione delle proprietà con lo schema RDF che le definisce. A differenza di XML Schema, che vincola la struttura del documento stesso, RDF Schema fornisce informazioni utili alla sua interpretazione. In particolare permette di costruire vocabolari specifici per la descrizione di un insieme di proprietà, eventualmente vincoli sul dominio e sui singoli valori. In RDF Schema è definito il concetto di classe, ma a differenza dei linguaggi di programmazione orientati agli oggetti (come Java e C#), una classe viene descritta in termini delle risorse a cui si applicano. Una particolarità offerta da RDF Schema è la possibilità di estendere una versione precedente di un certo vocabolario senza ridefinire una gran mole di concetti. Per evitare problemi di ambiguità, ogni RDF Schema deve essere identificato attraverso un certo URI pur trattandosi dell'estensione di un altro Schema. 1.5 OWL Le specifiche fino ad ora trattate, XML ed RDF, hanno assicurato senz'altro un passo fondamentale nello sviluppo del Web Semantico. XML ha contribuito ad una maggiore interoperabilità sintattica, assicurando dunque una sintassi di superficie per la rappresentazione di dati anche molto diversi tra loro, mentre RDF una maggiore interoperabilità semantica che possa permettere alle macchine di interpretare al meglio il significato di un oggetto all'interno di una risorsa web. Inoltre abbiamo visto come con RDF Schema sia possibile costruire dei vocabolari, utili alla descrizione di un insieme di proprietà di una particolare risorsa. Poiché con RDF Schema non è possibile esprimere relazioni più complesse, quali unione, 14 cardinalità, uguaglianza, ecc., è necessario aggiungere più vocabolari per esprimere classi e proprietà. Per esprimere tutto ciò bisogna risalire al livello delle ontologie e servirsi del linguaggio OWL [7] – Web Ontology Language – diviso in tre sottolinguaggi differenti usabili a seconda delle esigenze: • OWL Lite: supporta quegli utenti che necessitano in primo luogo di una gerarchia di classificazione e di vincoli semplici ,ad esempio esso consente solo valori di cardinalità 0 o 1 e non permette di utilizzare contemporaneamente la sintassi OWL e la sintassi RDF. Una nuova classe può essere definita da zero oppure partendo da altre due classi, ma solamente con il costrutto IntersectionOf; • OWL DL: supporta quegli utenti che vogliono la massima espressività, pur mantenendo la completezza e la decidibilità. OWL DL comprende tutti i costrutti del linguaggio OWL, ma può essere utilizzato solo in determinate restrizioni (per esempio, mentre una classe può essere una sottoclasse di molte classi, una classe non può essere un'istanza di un'altra classe). OWL DL permette di definire le classi in maniera più complessa utilizzando i costrutti quali UnionOf, ComplementOf, IntersectionOf e inoltre non esistono limiti sulla cardinalità delle proprietà. L’aggettivo “DL” è dovuto alla corrispondenza del linguaggio con la “Description Logic” (logica descrittiva) che è un campo della ricerca che studia le logiche che formano la base formale dell’OWL; • OWL Full: è pensato per gli utenti che vogliono la massima espressività e la libertà sintattica di RDF senza le garanzie computazionali. Per esempio, in OWL Full una classe può essere trattata contemporaneamente come un insieme di individui e come un individuo a sé stante. OWL Full permette un'ontologia di aumentare il significato del vocabolario predefinito (RDF o OWL). E 'improbabile che qualsiasi software di ragionamento sarà in grado di sostenere un ragionamento completo per ogni caratteristica di OWL Full. 15 Capitolo 2: Panoramica sui database Triple Store 2.1 Introduzione Come da titolo ci dobbiamo occupare di Sesame, che anticipiamo subito, è un framework open-source per lo stoccaggio di dati RDF. Prima di parlare di tutto ciò è necessario un passaggio intermedio, cioè introdurre i concetti essenziali sui database Triple Store e SPARQL. 2.2 Database Triple Store Un Triplestore [8] è un framework usato per lo stoccaggio e l'interrogazione di dati RDF, e fornisce i meccanismi essenziali all'interrogazione e memorizzazione di grafi RDF. Ricordiamo ancora che un dato RDF è una tripla del tipo soggetto-predicato-oggetto. Lo sviluppo di framework per il trattamento di dati RDF ha avuto inizio nei primi anni 2000 con il rilascio di Jena e Sesame, fino ai nostri giorni di cui ne ricordiamo alcuni, quali: Garlik JXT (proprietario e non distribuito), AllegroGraph e BigOWLIM (distribuiti commercialmente), Mulgara, Sesame Native, Kowari, Jena SDB(gratuiti ed opensource),ecc. In base alla loro implementazione i database triplestore si classificano in: • in-memory: poiché lo stoccaggio dei grafi RDF avviene in memoria centrale, tali triplestore sono dotati di un'elevata velocità di elaborazione . Di contro, come per un qualsiasi calcolatore, a causa delle ridotte capacità di tali memorie (visti gli elevati costi per una sua produzione) non è possibile immagazzinare una gran mole di dati, ma triplestore del genere possono risultare utili ad esempio per il caching dati da siti remoti, oppure ottimizzati ad eseguire inferenze su database RDF persistenti. A titolo esemplificativo di triple store in-memory, possiamo citare TripleRush[4] progettato in modo tale da avere grafi efficienti, e che estrapoli i dati il più velocemente possibile anche se essi risiedono su grafi molto estesi. 16 • native: triplestore che offrono la memorizzazione di grafi RDF direttamente su una propria implementazione del database (le informazioni risiedono sul file system). Grazie ad un'ottima velocità di caricamento dei dati dalla memoria secondaria e alla capacità di trattare in maniera efficiente dati RDF, negli ultimi anni stanno riscuotendo un notevole successo; • non-native, non-memory: triplestore che essendo eseguiti su database relazionali, usufruiscono dei loro meccanismi di archiviazione e recupero dati. Si ricordi ad esempio Jena SDB che può essere accoppiato a database relazionali come MySql, Oracle, PostgreSQL. Su quest'ultima categoria di triplestore bisogna chiarire un aspetto. Poiché la memorizzazione di dati RDF viene fatta in tabelle relazionali, è necessario l'utilizzo di uno dei seguenti schemi [2]: • generic Schemas: il database è composto da un'unica tabella di campi soggetto, predicato e oggetto, che rispecchia in pieno la natura della tripla RDF. Inoltre vi è il vantaggio che l'aggiunta di nuove classi e proprietà all'ontologia, può essere effettuata semplicemente inserendo nuove righe nella tabella. Di contro vi è il fatto che inserire tutta l'ontologia in un'unica tabella, non dà la possibilità di avere una visione gerarchica delle varie classi. Inoltre eseguire query molto complesse richiede un elevato numero di self-join, specie se il database è estremamente popolato; • ontology-specific Schemas: i dati non risiedono più in una sola tabella, come sopra, ma lo schema del database riflette le proprietà stesse dell'ontologia. In particolare si può far in modo che per ogni classe dell'ontologia esista una tabella(one-table-forclass schema), oppure una tabella per ogni proprietà dell'ontologia (one-table-forproperty schema). Nel primo caso ogni tabella sarà costituita dai seguenti campi: id dell'istanza, nome della classe ed una o più colonne per le varie proprietà. Lo svantaggio di tale approccio è che se cambiasse l'ontologia bisognerebbe rivedere tutte le tabelle. Nel secondo caso, invece, ogni tabella contiene i campi soggetto e 17 oggetto. Lo svantaggio di tale approccio è che per query molto complesse vengono effettuati un numero elevato di join tra le tabelle proprietà; • hybrid Schemas: combina i vantaggi delle prime due soluzioni. 2.3 SPARQL Assodato che uno statement RDF è una tripla del tipo soggetto-predicato-oggetto, il classico linguaggio di interrogazione SQL – Structured Query Language – risulta poco adatto ad ispezionare intere collezioni di dati RDF (coinvolgerebbe un numero enorme di tabelle). A tale scopo è stato proposto SPARQL – Simple Protocol And RDF Query Language – dallo SPARQL Working Group del W3C. Il linguaggio di query SPARQL è strettamente legato alle seguenti specifiche: • SPARQL Protocol for RDF che definisce le modalità di interrogazione e ricezione dati da remoto; • SPARQL Query Result XML Format che definisce il formato di un documento XML contenente i risultati di query quali SELECT ed ASK. Di seguito daremo solo un breve assaggio di ciò che concerne SPARQL; se il lettore è interessato ad approfondimenti può consultare [18]. Pur essendo progettati per scopi diversi, SPARQL e SQL hanno una notevole somiglianza. Se pensassimo ad un'asserzione RDF del tipo Soggetto Predicato Oggetto id744 facoltà N46 è facilmente traducibile come segmento di riga della tabella relazionale di tipo “chiave– nome colonna– valore colonna” Codice Facoltà ... 744 N46 ... 18 dunque è possibile tradurre espressioni SPARQL in espressioni SQL [11], permettendo così a chi ne fa uso di immagazzinare i propri dati RDF in database relazionali e di scrivere le query, a seconda dei casi, in SQL oppure in SPARQL. Vediamo ora alcune caratteristiche sintattiche tipiche del linguaggio in questione. SPARQL adotta la sintassi Turtle, un'estensione di N-Triples, alternativa estremamente sintetica e intuitiva al tradizionale RDF/XML. Si considerino le seguenti triple RDF, che saranno usate per mostrare degli esempi successivamente: @prefix exp: <http://example.org/exp/> @prefix: <http://example.org/esempio/> :A_Multimedia_Recommender_System exp:autore “Vincenzo Moscato”. :A_Multimedia_Recommender_System exp:anno 2013. :The_Semantic_Web exp:autore “Tim Berners-Lee”. :Elaborato_Sesame exp:autore "Ciro Guida". Le asserzioni rispecchiano in pieno la natura di una tripla RDF, in particolare SPARQL le organizza secondo il costrutto “triple pattern” nella forma: ?subject ?predicate ?object dove le variabili contrassegnate da “?” denotano l'incognita dell'interrogazione (in particolare “?predicate” funge da costante nel nostro esempio). Prefissi e namespace denotati dalla clausola “@prefix”. Ecco un esempio di query SPARQL: PREFIX exp: <http://example.org/exp/> SELECT ?titolo ?autore ?anno FROM <http://exp.com/listaexp.ttl> WHERE {?titolo exp:autore ?autore. ?titolo exp:anno ?anno. } Possiamo notare molte affinità con una query SQL, in particolare la clausola FROM indica il dataset da cui prelevare le informazioni. Il risultato sarà il seguente: 19 Titolo Autore Anno A_Multimedia_Recommender_System Vincenzo Moscato 2013 Nell'esempio precedente sono state restituite tutte le triple dotate dei termini richiesti (titolo, autore, anno). È possibile riformulare la query in modo più elastico, prevedendo l'eventuale assenza di alcuni termini: PREFIX exp: <http://example.org/exp/> SELECT ?titolo ?autore ?anno FROM <http://exp.com/listaexp.ttl> WHERE {?titolo exp:autore ?autore. OPTIONAL{?titolo exp:anno ?anno.} } Il secondo pattern è dichiarato opzionale: l'informazione è aggiunta al risultato solo se disponibile, altrimenti le variabili compariranno prive di valore (unbound). Risultato della query: Titolo Autore Anno A_Multimedia_Recommender_System Vincenzo Moscato 2013 The_Semantic_Web Tim Berners-Lee Elaborato_Sesame Ciro Guida 20 Capitolo 3: Sesame 3.1 Introduzione Dopo aver introdotto i principali concetti alla base del Web Semantico e dei database triplestore, possiamo passare all'argomento principale di questo elaborato: Sesame. Sesame[13] è un framework scritto in Java per l'elaborazione e la gestione dei dati RDF . Ciò include la creazione , l'analisi , la conservazione ,l'inferenza e l'interrogazione su tali dati. Offre una API (Application Program Interface) facile da usare che può essere collegata a tutte le principali soluzioni di storage RDF. Il progetto e l'implementazione di Sesame sono indipendenti dal particolare dispositivo di archiviazione. In questo modo può essere installato al di sopra di molte periferiche di stoccaggio, quali database relazionali, triplestore e database object-oriented, senza modificare il query engine (motore di interrogazione) ed altri moduli funzionali. 3.2 Architettura Diamo uno sguardo ai principali componenti dell'architettura di Sesame [5]. Fig.4: Architettura Sesame 21 L'architettura su cui poggia Sesame è di tipo Web-based: per tale motivo lo stoccaggio permanente di dati e schemi RDF avviene nei cosiddetti repository (archivi web in cui sono raggruppati i dati). La gestione del repository potrebbe essere affidata ad un particolare DBMS, ma affinché sia mantenuta l'indipendenza dal dispositivo di memoria, il codice del gestore del database viene racchiuso all'interno del Repository Abstraction Layer (RAL). Il RAL offre metodi per il trattamento di dati RDF ai suoi client, e traduce tali metodi in chiamate specifiche al particolare DBMS su cui poggia Sesame (in questo modo si rende Sesame indipendente dal DBMS). I client di RAL sono dei moduli funzionali e di questi ne sono previsti 3: • RDF Query Module, per la valutazione di query RQL poste dagli utenti. L'RDF Query Language è un linguaggio dichiarativo per dati e schemi RDF (querying a livello semantico); l'output di una query su un RDF Schema è ancora un RDF Schema, dove quest'ultimo è in grado di funzionare da input per le query successive; • RDF Administration Module, che consente l'uploading incrementale di dati e schemi RDF, così come la cancellazione delle informazioni; • RDF Export Module, che consente l'estrazione di schemi e/o dati in formato RDF. A seconda dell'ambiente in cui viene distribuito, Sesame prevede diversi modi di comunicare coi vari moduli, ad esempio in ambiente web è preferibile usare HTTP oppure via RMI (Remote Method Invocation) se la comunicazione avviene tra processi java distribuiti. Per consentire la massima flessibilità, la gestione di tali protocolli viene effettuata all'esterno dei moduli funzionali, mentre la comunicazione tra questi ultimi e i client avviene tramite degli handler (intermediari), con la possibilità di aggiungerne dei nuovi in base alle necessità. Nella figura 4, si suppone l'esistenza di tre client interessati ad accedere/modificare/interrogare il repository di cui: due client comunicano via HTTP, il terzo via SOAP (Simple Object Access Protocol) che permette lo scambio di messaggi tra componenti software secondo la sintassi XML. Nei prossimi paragrafi daremo una visione 22 più completa delle varie componenti architetturali di Sesame. 3.3 Il Repository Abstraction Layer Nel paragrafo precedente abbiamo visto come il RAL offre un'interfaccia ad alto livello (API) di gestione dei dati all'interno del repository. In particolare il RAL traduce le chiamate al API in metodi appositi al repository sottostante. Quando un client ad esempio richiede dei dati dal repository, l'API li organizza in vari flussi di dati e ne restituisce uno per volta; questo fa si che Sesame sia in grado di adattarsi a grandi volumi di dati senza richiedere un hardware estremamente costoso. Infatti Sesame richiede una piccolissima quantità di memoria dati ed un'altra, anch'essa minima, dove far girare il programma. Queste caratteristiche, unitamente alla possibilità di utilizzare un archivio dati remoto, rendono Sesame molto apprezzato in ambienti “portatili”. Di contro la possibilità di poter memorizzare solo piccole quantità di dati provenienti dal repository risulta essere degradante in termini di prestazioni: se ad esempio gli stessi dati vengono richiesti spesso, ci sarà un numero elevato di letture dal repository con conseguente aumento dei tempi di attesa. Questo problema può essere risolto ricorrendo ad un caching, totale se si tratta di flussi dati di dimensioni ridotte (in tal caso il repository funge da memoria permanente), altrimenti selettivo. Un ulteriore compito affidato al RAL è la gestione della concorrenza: poiché il query module divide le query in tante sottoquery è necessario mantenere la coerenza del repository durante l'esecuzione delle sottoquery. 3.3.1 Stacking RAL Un'importante caratteristica prevista a questo livello è la possibilità di impilare una serie di RAL uno sopra l'altro. Quando uno dei moduli funzionali di Sesame (query, export, administration) interagisce col RAL, vede solo quello più in alto allo stack e se questo non è grado di soddisfare la richiesta pervenuta, viene girata lungo la pila dall'alto verso il basso fino al RAL in grado di poterla processare. 23 Tutto ciò ha senso poiché il RAL deve essere in grado di poter ospitare nuove funzionalità che potranno essere sviluppate in futuro. Fig.5: Organizzazione a stack del RAL Un altro vantaggio dato dallo stratificare il RAL è quello di poter essere collegati a più di un repository. A titolo di esempio si osservi la seguente figura: Fig.6: Collegamenti a più repository Si hanno a disposizione due repository, uno locale e l'altro in remoto. Un modulo funzionale chiede di poter accedere al repository sottostante: se la richiesta non può essere 24 soddisfatta dal RAL locale, questa viene girata al RAL in remoto. Il tutto avviene in maniera trasparente rispetto al richiedente che non avrà bisogno di adattarsi alla situazione sopra rappresentata. Inoltre un ulteriore vantaggio di tale approccio, è che i risultati trovati localmente possono essere presentati subito all'utente, mentre la query è ancora in esecuzione sul RAL in remoto. 3.4 Il Repository Poiché il RAL offre una API generica, Sesame può essere installato sopra ad un qualsiasi repository in grado di memorizzare RDF. I possibili repository potrebbero essere i seguenti: • DBMS: qualsiasi Database Managment System, da quelli relazionali (RDBMS) a quelli orientati agli oggetti (O-RDBMS); • RDF-store nativi: Sesame può essere installato sopra di essi, a patto che il RAL sia implementato in modo tale da potersi interfacciare con lo specifico RDF store; • RDF file: è possibile memorizzare RDF anche all'interno di file. Sebbene l'utilizzo di flat file, dove tutte le informazioni sono contenute all'interno di una singola tabella, sia deprecabile, è possibile utilizzarli se Sesame dovrà interagire con repository di piccole dimensioni e in tal caso il RAL dovrà provvedere alle operazioni di caching dati; • RDF-network service: Sesame può usufruire di un servizio di rete per memorizzare RDF. In questo modo Sesame può essere utilizzato come sistema distribuito che non necessita, per forza, di un repository locale. Un esempio di tale servizio è stato mostrato nel paragrafo precedente. Un repository su cui Sesame può essere installato è PostgreSQL, un DBMS orientato agli oggetti, gratuito ed open-source, che supporta molte caratteristiche in dotazione ad implementazioni commerciali (es. Oracle). In tal caso il RAL dovrà supportare un database schema dinamico: nuove tabelle sono aggiunte al database ogni volta che una classe o proprietà è aggiunta al repository. Se la classe che si vuole inserire è una 25 sottoclasse di altre classi, la tabella che si andrà a creare sarà una sottotabella delle tabelle per la superclasse. Similmente accade per le proprietà. 3.5 RQL Query Module Come già accennato in precedenza, in Sesame è previsto un RDF Query Module che permette di interrogare dati e schemi RDF e di ottenere ancora una volta dati in forma RDF. A differenza del linguaggio di interrogazione RQL proposto dallo European IST(Information Sociey Technologies) nell'ambito del progetto C-Web, la versione utilizzata da Sesame, OTK-RQL (On To Knwoledge-RQL), presenta delle differenze rispetto al linguaggio originario. Poiché non è nostro interesse approfondire questi aspetti, per maggiori informazioni si invita a consultare [6]. Il Query Module, una volta interpellato, esegue una serie di operazioni come mostrato nella seguente figura: Fig.7: Componenti con relativo output del layer RQL La query viene analizzata e rappresentata secondo un grafo ad albero. L'output del parser sarà inviato ad un query optimizer che costruirà un nuovo grafo ad albero più efficiente del primo. Successivamente il modello ottimizzato viene valutato a flussi seguendo la struttura ad albero in cui la query è rappresentata. In particolare ogni elemento del grafo rappresenta un'unità base della query originaria e la valutazione di ogni elemento serve ad interpellare, eventualmente, il RAL affinché recuperi il necessario dal repository. In questo modo i dati possono essere restituiti direttamente a flussi, invece di costruire prima l'intero set di informazioni in memoria centrale. In Sesame, una query RQL viene tradotta in una serie di chiamate al RAL, attraverso il 26 modello ad oggetti. Questo significa che la maggior parte della valutazione della query viene fatta stesso nel query engine. In questo modo, ad esempio, quando una query contiene un'operazione di join su due sottotabelle, il RAL preleva separatamente i risultati delle due sottoquery e il join dei risultati viene effettuato dal query engine. Anche se molti DBMS offrono buone performance di ottimizzazione di query, questo compito è stato delegato al RDF Query Module in modo tale che Sesame non dipenda da un particolare DBMS. Il prezzo da pagare è una maggiore complessità del query module. Un approccio alternativo potrebbe essere quello di tradurre direttamente query RQL in query per il repository sottostante. Il vantaggio di tale approccio è la possibilità di poter utilizzare senza troppi sforzi, i complessi meccanismi di valutazione ed ottimizzazione offerti dal DBMS. Lo svantaggio sarebbe che l'architettura di Sesame non possa passare facilmente da un repository all'altro. 3.6 RDF Administration Module Questo modulo provvede alla gestione dei metadati RDF, in particolare ai metodi di inserimento e cancellazione dal repository. I metadati da inserire nel repository vengono recuperati da un'altra fonte RDF, inseriti in un documento XML serializzato RDF ed analizzato da una componente del modulo amministrazione. Le informazioni fornite al modulo sono nella forma di statement RDF i quali, sono controllati per verificare la coerenza con gli statement già presenti nel repository: se il controllo va a buon fine i metadati sono aggiunti, altrimenti segnalati ed ignorati. Anche gli statement duplicati vengono ignorati. Infine per la cancellazione, Sesame in origine prevedeva solo una pulizia dell'intero repository, ma con le ultime versioni è possibile anche cancellare statement singoli. 3.7 RDF Export Module Il modulo di esportazione è un componente molto semplice dell'architettura di Sesame: provvede all'esportazione del contenuto del repository in modo tale da poter utilizzare gli 27 stessi dati con un altro tool capace di trattare RDF. In particolare con l'Export Module è possibile esportare i dati, lo schema o entrambi a seconda del tool che si vorrebbe utilizzare. Ad esempio un editor di ontologie ha bisogno solo dello schema RDF, altri, che non supportano la semantica di uno schema RDF, dei dati. 3.8 On-To-Knowledge Un esempio, famoso, di applicazione basata su Sesame è On-To-Knowledge, uno strumento per la gestione delle ontologie sviluppato allo European IST. La seguente figura ci mostra come Sesame faccia da centro-stella per un insieme di tool: Fig.8: OTK OntoExtract, sviluppata dal CognIT, provvede ad estrarre le strutture ontologiche da documenti scritti in linguaggio naturale. Tali ontologie vengono caricate in un repository tramite Sesame. Le ontologie presenti possono essere scaricate ed editate mediante OntoEdit, editor sviluppato dall' AIFB Institute della University of Karlsruhe, e successivamente ricaricate in Sesame. Infine con RDF Ferret, un'applicazione utente sviluppata dal BT Adastral Park Research Labs, è possibile scaricare le ontologie per poter effettuare ricerche ed interrogazioni su di esse. Poichè Sesame è un server web-based è possibile effettuare collegamenti coi vari tool (oltre a quelli citati nell'esempio precedente), semplicemente usando il protocollo HTTP. 28 Conclusioni Lo scopo di questa trattazione è stato quello di analizzare i principali concetti che stanno alla base del Web Semantico e le principali tecnologie messe a disposizione. Siamo partiti dal concetto di Web come enorme libreria, espressione degli utenti che costantemente condividono informazioni (non intesi solo come documenti testuali, ma basti pensare al mondo dei Social Network dove si condividono spesso pensieri personali, foto che ritraggono attimi di vita quotidiana,... ). La difficoltà incontrata da tutti noi, durante una ricerca sul Web, è quella di trovare “ciò che si vuole”: qui entrano in gioco i motori di ricerca. Poiché la Rete è in continua crescita, usufruire di semplici strumenti in grado di ricercare una o più parole chiavi non basta, ed è per questo motivo che si è avvertita la necessità di riorganizzare l'intero “sistema” in maniera semantica, cioè assegnare un significato alle informazioni a nostra disposizione. Questo è l'obiettivo principale del W3C. L'idea alla base del Web Semantico è quello di fornire agenti intelligenti in grado di svolgere compiti molto gravosi, lasciando all'utente l'onere di istruire tali entità. E' stato ritenuto opportuno trattare i principali strumenti messi a disposizione dal W3C (XML,RDF,OWL,...), oltre al come il Web Semantico possa rispettare e rappresentare gli infiniti domini della conoscenza. In definitiva, possiamo affermare con certezza che si è riusciti a rappresentare solo degli ambiti molto precisi della conoscenza, ma non ad automatizzarli del tutto. Nei prossimi anni, ed è inevitabile, ci si aspetta un incremento vertiginoso di metadati che possano specificare quantità di dati sempre più vaste e dell'utilizzo di ontologie in grado di poter illustrare i legami tra i vari dati. Successivamente abbiamo affrontato brevemente il concetto di database triplestore, in grado di memorizzare statement RDF, e di SPARQL, linguaggio per l'interrogazione di intere collezioni di dati RDF. Abbiamo notato come un triplestore è più un middleware che un database in grado di poter immagazzinare RDF, e di fornire un supporto al 29 ragionamento ontologico. Non a caso, spesso un triplestore è una tecnologia (che abbiamo definito come framework) in grado di poter girare su database ad esempio relazionali o object-oriented. Abbiamo illustrato nel dettaglio Sesame, un framework per la trattazione e l'interrogazione di dati e schemi RDF. La sua caratteristica fondamentale è l'astrazione dai particolari di un qualsiasi repository utilizzato per l'immagazzinamento. Ciò consente a Sesame di adattarsi ad una gran varietà di repository come database relazionali, triplestore nativi e perfino a servizi di immagazzinamento remoti. Inoltre abbiamo visto come Sesame sia indipendente dal particolare protocollo di comunicazione (HTTP, SOAP, WML,...), il che rende molto semplice collegarsi a differenti client che usufruiscono di diversi protocolli di comunicazione. 30 Bibliografia [1] Alongheu A., Linguaggi – Corso di Laurea in Ingegneria delle telecomunicazioni, Università di Catania, http://www.diit.unict.it/users/alongheu/lingtlc/aa1011/lezione22_semantic_web.pdf, 17-04-2015 [2] Basciano D., tesi di laurea triennale in “RDF (Triple Store) Database”, AA 2012-2013 [3] Berners-Lee T., Hendler J., Lassila O., “The Semantic Web”, Scientific American, May 2001 [4] Bernstein A., Fisher L., Stutz P., Verman M., “Triple Rush: A Fast and Scalable Triple Store” [5] Boekstra J., Kampman A., “Sesame: An Architecture for Storing and Querying RDF Data and Schema Information” [6] Boekstra J., Kampman A., “On-To-Knowledge RQL”, http://www.callisto.nsu.ru/documentation/CSIR/qmeta/del9.pdf,04-05-2015 [7] Buongiorno D., Tesi di laurea specialistica in “Web Semantico: lo stato dell'arte”, AA 2008-2009 [8] Comparison of Triple Stores, http://www.bioontology.org/wiki/images/6/6a/Triple_Stores.pdf , 28-04-2015 [9] Fiacco N., tesi di laurea specialistica in “Applicazioni e tecnologie semantiche: prospettive per lo sviluppo di una rete intelligente”, AA 2008-2009 [10] Internet Engineering Task Force, “URI”, http://www.ietf.org/rfc/rfc2396.txt, 19-04-2015 [11] Melton J., “SQL, XQuery and SPARQL. What's wrong with this picture?”, http://www.w3.org/2006/Talks/0301-melton-query-langs.pdf, 30-04-2015 [12] Quin L., “eXtensible Markup Language”, http://www.w3.org/XML, 28-04-2015 [13] Sesame project web site, http://www.rdf4j.org, 03-05-2015 31 [14] Unicode, http://www.unicode.org/standard/translation/italian.html, 19-04-2015 [15] Vitali F., Dipartimento di Informatica – Scienza e Ingegneria, Università di Bologna, http://www.cs.unibo.it/~fabio/corsi/ltw01/slides/19-RDF/19-RDF.pdf, 17-04-2015 [16] W3C, “Semantic Web Architecture”, http://www.w3.org/DesignIssues/Semantic.html, 23-04-2015 [17] W3C, “RDF” http://www.w3c.it/papers/RDF.pdf, 23-04-2015 [18] W3C, “RDF SPARQL Query”, http://www.w3.org/TR/rdf-sparql-query/, 01-05-2015 [19] W3C, “RDF syntax”, http://www.w3.org/TR/REC_rdf_syntax, 23-04-2015 [20] W3schools, “RDF schema”, http://www.w3schools.com/schema, 21-04-2015 [21] Websemantico.org: il Web semantico, il futuro del Web, “il Web Semantico” http://www.websemantico.org/articoli/approcciwebsemantico.php#otto,21-04-2015 [22] Wikipedia the free enciclopedy, “Ontology (information science)”, http://en.wikipedia.org/wiki/Ontology_(information_science), 21-04-2015 32