Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Basi di Dati RDF Triple Store: Virtuoso Anno Accademico 2013/2014 Candidato: Alessandro Losco matr. N46/874 Ai miei genitori Indice 1 2 3 Introduzione 5 1.1 Web Semantico . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2 eXtensible Markup Language . . . . . . . . . . . . . . . . . . . . 8 1.3 RDF Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.4 Web Ontology Language . . . . . . . . . . . . . . . . . . . . . . . 10 1.5 Triplestore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 SPARQL 12 2.1 Perchè SPARQL? . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2 Linguaggio ARQ . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3 Condizioni Opzionali . . . . . . . . . . . . . . . . . . . . . . . . . 14 OpenLink Virtuoso 16 3.1 Cos' è Virtuoso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 Architettura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.3 Distributed Transaction Model . . . . . . . . . . . . . . . . . . . 18 3.4 Persistenza dei dati . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5 Consistenza e integrità dei dati . . . . . . . . . . . . . . . . . . . 19 3.6 XML Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.7 Parser per XML DTD 3.8 Congurazione e dimensionamento . . . . . . . . . . . . . . . . . 22 3.9 Ottimizzazione I/O su disco . . . . . . . . . . . . . . . . . . . . . 22 3.10 Il futuro di Virtuoso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 20 23 Prefazione Desta meraviglia pensare con quanta rapidità, in particolare negli ultimi decenni, l' ingegno umano abbia saputo inventare. Dalla rivoluzione industriale ( 17701830 ), passando per la diusione della ferrovia ( 1840-1890 ), all' elettricazione e l' industria chimica ( 1890-1930 ), no ai motori, al fordismo, al consumismo, alla produzione di massa ( 1930-1980 ), per giungere, ai giorni nostri, all' era delle tecnologie di comunicazione di massa ( dal 1980 ), la crescita tecnologica è aumentata esponenzialmente nel tempo. Nel ciclo economico in cui viviamo, sono le sfere dell' informazione e della comunicazione a compiere i più grandi passi, a partire dall' inizio del secolo con la radio del premio Nobel Guglielmo Marconi, passando per le valvole termoioniche di John Amborse Fleming del 1904, la svolta dei transistor, equivalente a semiconduttore più economico, più adabile e meno ingombrante. Tali fattori hanno permesso in breve tempo la diusione di logiche transistor-transistor in circuiti integrati prodotte, ad oggi, no a 16nm ( 1 nanometro è pari ad un milionesimo di millimetro ) dando vita a ciò che è chiamato VLSI ( Very Large Scale Integration, ovvero Integrazione in scala MOLTO grande ). Le macchine, però, evidenziavano il problema di dover essere programmate: nasce così l' Informatica. Compaiono quelle che diventeranno in seguito alcune delle più grandi aziende al mondo: Microsoft, Apple, IBM, Samsung, Intel, Philips, solo per citarne alcune. E' incredibile pensare quanti degli oggetti e delle tecnologie che oggi utilizziamo con naturalezza,no a qualche anno fa non esistevano neanche. Prima del 2010 Whatsapp non esisteva. Sdo chiunque legga questa tesi ad aermare di aver sentito parlare di Facebook prima del 2007, stesso anno in cui vennero prodotti i primi smartphone. Prima del 2000 non sapevamo cosa signicasse 2 INDICE la parola Wi-Fi, non esisteva MSN Messenger, fatto che sembra ininuente se pensiamo che Google era soltanto una parola signicante un numero inpronunciabile composto da un 1 seguito da 100 zeri, e solo nel 1996 Hotmail aprì i battenti dando vita ad uno dei mezzi di comunicazioni più utilizzati della storia: la posta elettronica. Ecco quindi che le più grandi invenzioni degli ultimi 20 anni ruotano attorno ad un perno comune: Internet. Internet nasce come sistema di comunicazione militare realizzato, nel 1969, dal Dipartimento della Difesa USA, con il nome di ARPANET. E' solo nel 1991- però- che un ricercatore del CERN a Ginevra, Tim Berners-Lee denì il protocollo HTTP ( Protocollo di trasferimento di ipertesti ), che permetteva ad un utente collegato da un computer di saltare da una pagina all' altra con un click del mouse. Fu così che nacque il WWW, il World Wide Web, reso pubblico nel 1993 ma diusosi nelle case solo nel 1995. Oggi internet è un territorio sconnato. Chi legge ha sicuramente un idea della vastità della rete vista come pagine web collegate tra loro, ma è incredibile pensare che meno del 2% dei contenuti mondiali è raggiungibile tramite un ipertesto. Gli attuali protocolli di indirizzamento sono talmente prevenuti e lungimiranti da supportare - mi scuso per la dicoltà nel riuscire a comprendere la grandezza del numero - 34 · 1038 macchine connesse contemporaneamente ( quanticando, per ogni metro quadrato di supercie terrestre, potrebbero essere presenti 655.571 miliardi di miliardi di macchine, e Internet potrebbe ancora funzionare ). La rete è un ambiente talmente grande che è dicile persino dare statistiche sulle sue dimensioni, e nonostante ciò, quello che colpisce maggiormente è il suo tasso di crescita. Nel 1998 veniva stimata la presenza di circa 26 milioni di pagine web indicizzate, contro il miliardo del 2008, e 206 milioni di domini registrati, e nel 2010 le dimensioni sono aumentate del 20%, e ad oggi la crescita è arrivata al 40%. Ogni pagina web oggi assume le dimensioni relative di un puntino in un universo che cresce con velocità comparabili a quelle cosmiche. Internet oggi è sinonimo di globalizzazione. Tutto oggi orbita attorno alla rete: il lavoro, gli amici, i parenti, il tempo libero, i viaggi, lo studio... Avere un sito internet equivale a possedere una vetrina sul mondo. Sono pochi irriducibili coloro che non hanno mai avuto a che fare con il Web, non hanno tratto informazioni, o non le abbiano elargite, volente o nolente. Nonostante ciò il web è solo il 45% di Internet: il resto sono email, P2P, streaming, VoIP, VPN, Gaming, elettrodomestici e altro ancora. E' impressionante quanto Internet, che è a tutti gli eetti una macchina dall' architettura estremamente complessa, eterogenea, 3 INDICE e che ricopre gran parte del pianeta, sia in grado di spostare una mole enorme di dati e informazioni da un punto all' altro in una frazione di secondo. Anche nello sviluppo di questo lavoro di tesi, è risultato complesso navigare in questa incredibile mole di informazioni: è come cercare un piccolissimo ago in un enorme pagliaio. Oggi la più grande sda che viene richiesta agli ingegneri del domani non è indicizzare e fornire dati, non informazioni, ma conoscenza, ed è proprio questo l' obiettivo di ciò che oggi viene chiamato Semantic Web. Nelle pagine che seguono andrò ad analizare l' insieme delle tecniche e delle tecnologie identicate con Figura 1: Numero di computer connessi alla rete dal 1993 ad oggi. Milioni di Host il nome più aascinante di Semantic Web. 4 Cifre in Capitolo 1 Introduzione 1.1 Web Semantico Prima che Tim Berners-Lee ponesse le basi del World Wide Web erano disponibili più e più performanti sistemi ipertestuali. Fu però lui il primo a denire quelle semplici speciche che furono, poi, pubblicate quali standard pubblici. Questo consentì agli sviluppatori di implementare il sistema del ricercatore inglese per proprio conto ( il che si concretizza nel progettare i propri standard, i propri web server, browser, e sopratutto pagine web ). Berners-Lee ha fondato il W3C per sovrintendere questi standard e il web semantico stesso è costruito al di sopra degli standard del W3C: L' RDF Data Model, il linguaggio di interrogazione SPARQL, gli standard RDF Schema e OWL per lo storing di vocabolari e ontologie. Un prodotto o un progetto potrebbe persino essere progettato facendo uso della semantica, ma se non utilizza tali standard, non può connettersi al resto del mondo ed essere parte del web semantico, o almeno non più di quanto possa un sistema a ipertesti del 1985 linkare una pagina sul WWW senza l' uso di HTML o HTTP. Il punto fondamentale della nuova tecnologia è che il web primitivo di Berners-Lee fu progettato per fornire documenti human-readable. Ad esempio, se si pensa di acquistare un biglietto aereo da un aereoporto ad un altro aereoporto, ci si può collegare al sito web della compagnia aerea preferita, immettere i dati, e leggere i risultati. Tuttavia sappiamo che esistano numerose compagnie aeree che - sulla stessa tratta - forniscono tarie anche notevolmente diverse. 5 I siti di comparazione 1.1. WEB SEMANTICO Figura 1.1: Lo stack del Semantic Web nelle sue due accezioni: astratta e concreta delle compagnie aeree dispongono di sistemi che recuperano pagine web dai siti delle diverse compagnie ed estraggono le informazioni di cui necessitano con un processo noto come screen scraping. I dati raccolti vengono quindi presentati aggregati sul sito del comparatore ed ordinati secondo vari ltri ( prezzo, durata del volo, numero di scali, ecc. ). Prima di scrivere un software di tal tipo, uno sviluppatore del sito di comparazione deve analizzare la struttura HTML di ogni singola compagnia aerea per determinare dove il software di screen scraping dovrebbe cercare le informazioni necessarie. Tutto ciò oltre ad essere poco immediato, ineciente e dispendioso, è anche poco essibile, in quanto qualora una compagnia aerea decidesse di rinnovare il proprio portale, 1 il comparatore deve essere aggiornato per supportare il nuovo layout . L' idea di Linked Data di Berners-Lee consiste in un insieme di best-practices nalizzate a condividere i dati attraverso le infrastrutture web in modo che le applicazioni, le macchine ( e non più solo gli esseri umani ) possano più facilmente recuperare dati da siti pubblici senza necessità di screen scraping. 1 Questo è probabilmente il motivo per cui i portali delle compagnie aeree sono inalterati da anni fornendo una user experience decisamente scadente 6 1.1. WEB SEMANTICO Figura 1.3: L' evoluzione del web Queste best practices raccomandano l' uso di URIs per identicare cose e l' uso di standard come RDF e SPARQL. Il termine semantica è spesso denito come il signicato delle parole. I principi del Linked Data e gli standard correlati rendono più semplice la condivisione dei dati e l' uso di URIs può fornire un pò di semantica dando il contesto ad un termine. Ad esempio, se non conosco cosa signica W3C posso saperlo attraverso l' URI http://www.w3.org/Consortium/. Conservare il signicato completo delle parole in modo che le macchine possano comprendere questi signicati potrebbe essere una richiesta troppo ambiziosa per gli attuali computer, ma il W3C Web Ontology Language ( OWL ), come vedremo, aiuta in questo fornendo la dinamica e le relazioni necessarie ai termini dei vocabolari. Figura Il web semantico è quindi un evoluzione dell' attuale web 1.2: Skyscanner in cui è previsto che i singoli atomici dati siano legati tra di loro con ciò che viene indicato con il termine predicato. Nel nuovo web, la parola non acquista signicato in maniera autonoma, ma quest' ultimo dipende dal contesto, ovvero dalle altre parole che la circondano. 7 1.2. EXTENSIBLE MARKUP LANGUAGE 1.2 eXtensible Markup Language XML è un linguaggio di markup denito da W3C basato su una sintassi che consente la denizione del signicato degli elementi contenuti in un documento. Mentre l' HTML denisce una grammatica per la presentazione visiva di pagine web e relativi ipertesti, XML è un linguaggio per la descrizione strutturata del contenuto di documenti. In un documento XML sono presenti marcatori, o tag. Gli elementi, che devono essere aperti o chiusi nel giusto ordine, possono contenere degli attributi. Un documento XML può essere rappresentato visivamente tramite una stuttura dati ad albero che rappresenta bene le relazioni padre-glio degli elementi che lo compongono. I nomi degli elementi possono essere scelti liberamente a patto di fornire una grammatica che denisca l' insieme dei nomi validi e le regole per la loro composizione. XML è case sensitive. Tutti gli elementi devono appartenere allo stesso nodo principale. Un documento XML si dice ben formato se non contiene errori sintattici, mentre si dice invece valido se segue una precisa grammatica, detta DTD ( Document Type Denition ). In pratica questa grammatica denisce l' insieme degli elementi validi e le regole di scrittura, ovvero viene specicata di quanti e quali elementi è composta una classe. DTD non è l' unico modo per specicare una grammatica. Esiste uno standard più recente di nome XML SCHEMA che utilizza lo stesso XML per denire una nuova grammatica XML. I le RSS sono, ad esempio, dei documenti scritti in XML per consentire la facile consultazione da parte di applicazioni esterne 1.3 RDF Schema Nel web semantico, un vocabolario è un insieme di termini registrati utilizzando un formato standard. Un vocabolario ha tipicamente il suo proprio namespace che gli permette di coesistere con altri vocabolari che possono essere preesistenti. Questi possono essere gestiti utilizzando Resource Description Framework Schema ( RDFS ) e OWL che vedremo in seguito. Dublin Core ( dc: ) è un insieme standard di termini di metadati. RDF è un linguaggio di descrizione per vocabolari, ovvero di metadati. Il linguaggio di interrogazione denito sugli RDF Schema è SPARQL. Il modello dati di RDFS può essere visto come un grafo composto da nodi e archi, a cui corrispondono termini e relazioni. 8 1.3. RDF SCHEMA (a) Una singola tripla Figura 1.5: (b) Un intero schema Una singola tabella può portare a schemi molto complessi, ma facilmente navigabili Trasformando un database Entità-Relazione in un database RDF, si compie il passaggio da una rappresentazione dei dati in tuple ad una rappresentazione in triple. Una tripla ( s, p, o ) composta da soggetto, predicato ( o proprietà ), oggetto ( o valore ) è ciò che individua una cella in un database relazionale classico: ovvero l' intersezione tra colonna e riga. Ogni schema relazionale può essere quindi rappresentato da triple.I dati in questo formato sono molto più semplici da utilizzare: basti pensare ad una operazione di merge che nel caso di tabelle con un numero grande di colonne e strutture diverse da loro è un operazione molto complessa. Nel caso di triple ( ovvero di gra ), la complessità computazionale crolla drammaticamente. Analizzando uno schema RDF, potrebbe sembrare di utilizzare una visione del mondo ad oggetti. Nelle basi di dati object-oriented se dichiariamo che i membri di una classe x hanno la proprietà y, vuol dire che un membro della classe x deve avere un valore ben denito della proprietà y. L' approccio di RDFS e OWL è invece opposto: Se una qualche entità dell' insieme possiede una proprietà y, allora fa parte della classe x. La dierenza è sottile ma evidente: inserendo nuove proprietà possiamo cambiare il grafo rappresentante la conoscenza dell' insieme in maniera bidirezionale, collegando Figura 1.4: Da tupla a tripla nodi ad altri nodi attraverso relazioni. Questo rende quindi il web essibile agli aggiornamenti dei dati. L' abilità delle risorse RDF di diventare membri di classi basandosi sui valori dei propri dati ha reso il web semantico una tecnologia popolare in aree come 9 1.4. WEB ONTOLOGY LANGUAGE 2 per esempio la ricerca medica : i ricercatori possono accumulare dati senza un apparente struttura iniziale che li lega tra loro. Sara' proprio lo schema ad autocostruirsi e rivelare collegamenti tra i dati che dicilmente potevano essere notati a priori. Questo particolare approccio allarga le possibilità di SPARQL come linguaggio di interrogazione, o in un certo senso, di information retrieval. 1.4 Web Ontology Language W3C's Web Ontology Language, in breve OWL, si utilizza al di sopra di RDFS per denire ontologie. Le ontologie sono denizioni formali di vocabolari che permettono di denire strutture complesse come nuove relazioni tra i termini di vocabolario e tra i membri della classe che si vuole denire. Le ontologie denite in OWL sono a tutti gli eetti collezioni di triple, esattamente come RDF: si può dire anzi che OWL sia una vera e propria estensione del linguaggio RDF. OWL permette di ricavare dinamicamente informazioni dal set di dati presente negli RDFS. Esempio Tramite RDF possiamo denire che id3536 è una persona di nome Piero Rossi che è paziente di id9988. D' altro canto id9988 è denito come una persona di nome Giulio Verdi. OWL stabilisce che il termine paziente è l' opposto di medico, e quindi possiamo concludere che Giulio Verdi sia un medico nonostante il dataset non lo abbia dichiarato esplicitamente. Esempio Riprendendo il dataset dell' esempio precedente, se aggiungiamo all' istanza id3536 l' informazione che questa stessa sia coniuge di id1122, dove id1122 è una persona di nome Giulia Neri e coniuge è un termine appositamente denito tramite OWL come bidirezionale, allora anche id1122 diventa automaticamente coniuge di id 3536. Riunendo tutte le informazioni, potremmo eettuare una query SPARQL che ci restituisce il risultato: Il medico del coniuge di Giulia Neri, Piero Rossi, è Giulio Verdi. 2 Pubmed ( http://www.ncbi.nlm.nih.gov/pubmed ) è un database bibliograco contenente informazioni sula letteratura scientica biomedica dal 1949 ad oggi. La prima versione è online dal 1996 10 1.5. TRIPLESTORE 1.5 Triplestore Il termine utilizzato per conservare in memoria secondaria RDF come una stringa di byte è serializzazione. Un primo e primitivo metodo di serializzazione può essere quello di sfruttare le di testo con diverse sintassi. Questa soluzione però è molto ineciente quando si parla di Big Data, che si concretizza in una mole inenumerabile di triple. Un sistema che indicizza i dati e decide quali dati caricare in memoria principale, come farlo e quando farlo, può essere sicuramente una soluzione più adatta. Esistono metodi per importare RDF in database relazionali come MySQL o Oracle DBMS. Il miglior metodo è però quello di utilizzare appositi DBMS ottimizzati per triple RDF, i cosiddetti triplestore. Ne sono disponibili diversi, sia con licenza commerciale che Open Source. questa tesi sarà analizzato in particolare OpenLink Virtuoso. 11 In Capitolo 2 SPARQL 2.1 Perchè SPARQL? Il web semantico, come abbiamo visto, si propone di essere una estensione del web ordinario, tale da supportare meccanismi di information retrieval da parte delle macchine, in maniera molto più evoluta, ecace ed eciente di quanto si possa eettivamente con i normali strumenti come SQL e i database relazionali classici. Come abbiamo visto inoltre, l' RDF Data Model può essere ottenuto direttamente dall' osservazione del modello Entità-Relazione e viceversa. Se ciò è possibile, vuol dire che in un modo o nell' altro, anche i rispettivi linguaggi di interrogazione godono di una proprietà isomorca, ovvero di una corrispondenza 1:1 l' uno con l' altro. Tuttavia un database relazione è piato, tabellare, mentre uno schema RDF può si essere visto come una struttura simile, ma è in realtà molto più orientato ad una struttura a grafo, alla rete di oggetti, e OWL complica addirittura le cose fornendo associazioni bidirezionali tra i nodi. Le Triple forniscono una miriade di informazioni atomiche, e non più enormi tabelle. Ecco quindi che, quando SQL fallisce nell' eseguire query complesse che coinvolgono un numero troppo elevato di tabelle, sorge la necessità di un nuovo linguaggio e protocollo, per l' appunto detto SPARQL Protocol And RDF Query Language, progettato per l' interrogazione di intere collezioni di triple, e per l' attraversamento trasparente delle relazioni tra i nodi di un RDFS, ma che conserva la piena compatibilità con SQL, così come RDF con i database E-R. 12 2.2. LINGUAGGIO ARQ Listato 2.1 una semplice query SPARQL 1 PREFIX 2 SELECT ? x : 3 WHERE { # http : / / s c u o l a p s b . unina . i t / i n g e g n e r i a / o n t o l o g i e s / esempio ?x : worksIn : via_claudio . } Listato 2.2 Una query SPARQL con clausola FROM 1 2 3 PREFIX #> h t t p : / / s c u o l a p s b . u n i n a . i t / i n g e g n e r i a / o n t o l o g i e s / e s e m p i o# > s t x : < http : / / s c u o l a p s b . unina . i t / i n g e g n e r i a / o n t o l o g i e s / esempio SELECT ? p e r s o n 4 FROM < 5 WHERE { ? person s t x : name ? name . } SPARQL è dunque non solo un linguaggio di interrogazione, ma anche un protocollo di comunicazione costruito sopra HTTP ( o altri protocolli di comunicazione ) che permette l' interrogazione di triple store e il recupero delle informazioni inviati come risposta da questi ultimi. Nei capitoli successivi esamineremo alcune semplici query SPARQL, anticipando che è impossibile in questa sede trattare in maniera completa ed esaustiva l' intero linguaggio. 2.2 Linguaggio ARQ Come vedremo SPARQL ha alcune similitudini con SQL, ma anche alcune novità necessarie per adattarsi ad un contesto come RDFS. In SPARQL la query comincia sempre con un presso URI del dominio di interesse, utilizzato per riferire le risorse del grafo da interrogare, e il nome di una variabile comincia sempre con un punto interrogativo. Nella query del listato 2.1, per esempio, vengono prelevate le informazioni di tutti i dipendenti memorizzati in un database che lavorano a Via Claudio. In questa Query nella clausola WHERE è specicata una tripla: il soggetto è ?x, il predicato è worksIn, e l' oggetto è via_claudio. Nella query del listato 2.1 è stato denito un namespace per riferire le risorse del grafo. Questa è una maniera compatta per dire che ?name è un predicato denita nell' ontologia specicata nel primo rigo. Mentre nella clausola PREFIX l' indirizzo web è utilizzato come un URI, nella clausola FROM si tratta di un vero e proprio URL che contiene il le del database. 13 2.3. CONDIZIONI OPZIONALI Listato 2.3 Notare come in questo formato di query, detto Turtle, ogni tripla termina con un punto. 1 PREFIX ab : 2 SELECT ? f i r s t 3 WHERE 4 #> <h t t p : / / l e a r n i n g s p a r q l . com/ n s / a d d r e s s b o o k ? last { 5 ? person ab : homeTel 6 ? person ab : f i r s t N a m e ? person ab : l a s t N a m e 7 8 " 081 2762934 " . ? first . ? last . } rst last Richard Mutt Tabella 2.1: il risultato della query Se consideriamo uno schema come quello rappresentato nel listato 2.5, effettuando la query del listato 2.3 otteniamo il risultato espresso in tabella 2.1 ovvero, com'è facilmente intuibile, è la clausola SELECT a denire quali proprietà ( rst e last, ovvero colonne ) restituire, mentre nella clausola WHERE viene specicato che i soggetti ( le persone, cioè le righe ) candidate ad essere stampate sono quelle che hanno il numero di telefono indicato, e le indicazioni sulle proprietà rstName e lastName servono solo a denire quali valori stampare della persona selezionata. Le tre triple indicate sono legate da loro implicitamente da una AND logica. 2.3 Condizioni Opzionali Consideriamo lo schema rappresentato nel listato 2.5 e la query del listato 2.4 contenente la clausola OPTIONAL. La clausola OPTIONAL permette di aggiungere, nell' esempio trattato, la condizione che il numero telefonico di lavoro va inserito nei risultati ( come colonna ), ma sono comunque ammesse triple che non presentano nello schema questo attributo. Il risultato di questa query è presentato in tabella 2.2. Anche all' interno della OPTIONAL innestata è possibile specicare più tuple legate da una AND logica. 14 2.3. CONDIZIONI OPZIONALI Listato 2.4 Notare che il soggetto ?s può essere omesso in tuple ripetute, previa il capolinea preceduto da ; e non dal semplice punto. 1 PREFIX ab : #> <h t t p : / / l e a r n i n g s p a r q l . com/ n s / a d d r e s s b o o k 2 3 SELECT ? f i r s t 4 WHERE 5 ? last { 6 ?s ab : f i r s t N a m e 7 ? first ab : l a s t N a m e 8 ; ? last . OPTIONAL 9 { 10 ?s 11 12 ? workTel ab : w o r k T e l ? workTel . } } Listato 2.5 Schema RDF considerato 1 @prefix a b : < h t t p : // l e a r n i n g s p a r q l . com/ n s / a d d r e s s b o o k#> 2 @prefix d: < h t t p : // l e a r n i n g s p a r q l . com/ n s / d a t a#> . 3 4 d:i0432 ab:firstName " Richard " 5 d:i0432 ab:lastName " Mutt " . . 6 d:i0432 ab:homeTel " (229) 276 − 5135 " 7 d:i0432 ab:nick " Dick " . 8 d:i0432 ab:email " r i c h a r d 4 9 @ h o t m a i l . com" . . 9 10 d:i9771 ab:firstName " Cindy " 11 d:i9771 ab:lastName " Marshall " . 12 d:i9771 ab:homeTel " (245) 13 d:i9771 ab:email " cindym@gmail . com" . 646 − 5488 " . . 14 15 d:i8301 ab:firstName " Craig " 16 d:i8301 ab:lastName "Ellis" . 17 d:i8301 ab:workTel " (245) 18 d:i8301 ab:email " c r a i g e l l i s @ y a h o o . com" 19 d:i8301 ab:email " c . e l l i s @ u s a i r w a y s g r o u p . com" . 315 − 5486 " . rst last workTel Craig Ellis (245) 315-5486 Cindy Marshall Richard Mutt Tabella 2.2: Il risultato della query 2.4 15 . . . Capitolo 3 OpenLink Virtuoso 3.1 Cos' è Virtuoso Principalmente Virtuoso è un database SQL object-relational. Come database fornisce il meccanismo delle transazioni, un interprete SQL, stored-procedure, backup a caldo. JDBC, ecc. E' dotato di tutte le interfacce più utilizzate come ODBC, E' inoltre dotato di un web-server che fornisce pagine web dina- miche in PHP, ASP e molti altri, oltre che il linguaggio proprietario VSP. Fornisce inoltre accesso SOAP e REST alle stored procedures. Virtuoso supporta SPARQL per l' interrogazione dei dati RDF memorizzati nella base di dati. Le interrogazioni SPARQL sono ottimizzate a basso livello per garantire migliori performance nei benchmark e nell' utilizzo reale. Una delle sde più grandi dell' avvento di XML è la disponibilità degli stessi Dati XML. Virtuoso semplica il processo di creazione di dati XML da HTML esistente, pubblicazioni RSS, e database SQL classici supportando la generazione in tempo reale di documenti dinamici ( basati sia su DTD che XML Schema ). Virtuoso è detto Universal Server perchè implementa un vasto numero di protocolli in un singolo server, riducendo i costi di aggregazione dei dati da fonti eterogenee, ampliando i margini di produttività. Con virtuoso è possibile sviluppare soluzioni che utilizzano XML come livello fondamente per l' accesso ai dati, mediante il quale viene fornito un accesso trasparente a dati strutturati e non strutturati. In particolare i documenti XML possono sia essere generati internamente, sia importanti dal Web e memorizzati nell' ecosistema di Virtuoso. Possono essere generati on-the-y in maniera e- 16 3.2. ARCHITETTURA Figura 3.1: Virtuoso Universal Server cace ed eciente documenti XML dinamici trasformando query SQL in XML. Supporta XPATH2.0, XQUERY Draft 1.0, XML Schema. I documenti possono essere presentati persino all' interno di pagine HTML collocate su un web server col supporto di PHP4, piuttosto che essere recapitati via STMP, POP3, e IMAP4, o ancora via NNTP ai svariati servizi di newsgroup E' disponibile in una versione commerciale ed una open source, a cui farò riferimento in questo lavoro di tesi. In particolare sarà presa in esame la versione 7.1.0 risalente a Febbraio 2014. 3.2 Architettura Virtuoso è progettato per avvantaggiarsi del supporto multithread e multiprocessore dei moderni sistemi operativi. Esso consiste di un singolo processo con un numero variabile di thread condivisi tra i clients. Piu' thread possono coo- 17 3.3. DISTRIBUTED TRANSACTION MODEL Figura 3.2: Commit a due fasi perare sulla stessa struttura dati causando la minima interferenza l' uno con l' altro. I thread condividono una cache delle pagine del database e le vecchie pagine sono scritte su disco come processo in background a minima priorità. Tutte le tabelle del database sono conservate in un singolo insieme di le. Un insieme separato è utilizzato per tutti i dati temporanei. La dimensione massima per il database è di 32 Terabyte. 3.3 Distributed Transaction Model Una transazione sul server Virtuoso potrebbe contenere operazioni da eettuare su più fonti di dati remote. Come regola generale le connessioni remote sono in modalità di commit manuale e Virtuoso eettua il commit o il rollback della transazione su ogni connessione remota ogni volta che la transazione termina. Una transazione tra tabelle locali e tabelle poste su una singola fonte di dati remota si completerà sempre con successo dal momento che la fonte remota eettua il commit prima di quella locale e la locale compie il rollback se fallisce il commit remoto. Virtuoso supporta 2PC ( 2 Phase Commit ). Questo è un protocollo che prevede che il usso di dati verso un database sia committato in due fasi, come visualizzato in gura 3.2. Nella prima fase il transaction coordinator controlla che tutte le parti della transazione possano essere committate. 18 3.4. PERSISTENZA DEI DATI Nella seconda fase, tutte le parti della transazione vengono eettivamente committate. Se qualsiasi parte della transazione non può essere committata, la seconda fase non avviene. ODBC non supporta 2PC. Le transazioni nei database SQL sono generalmente obbligate a rispettare le proprietà ACIDe: Atomicità, Consistenza, Isolamento, Persistenza. 2PC è necessario per garantire il soddisfacimento delle proprietà fondamentali quando la transazione interessa l' I/O verso più di un database. Questo può essere il caso di una transazione che interessa tabelle di database remoti. 2PC necessita un Distributed Transaction Coordinator ( DTC ) di terze parti. Virtuoso in particolare supporta Microsoft Transaction Server ( MTS DTC ). 3.4 Persistenza dei dati Il database è in grado di eettuare backup a caldo ad un checkpoint sicuro, ed è disponibile lo storico delle transazioni committate e non committate no a questo checkpoint. Per far ciò utilizza un logle contenente tutte le transazioni eettuate dall' ultimo checkpoint, che può essere conservato per un tempo stabilito a priori. Salvare un checkpoint consiste nello scrivere l' ultimo stato committato di una pagina sullo stato pre-checkpoint, nel caso la pagina sia già esistente prima del checkpoint. Se la pagina è stata creata dopo l' ultimo checkpoint, bisogna semplicemente scriverla su disco. Ora se il numero di pagina modicata tra un checkpoint e l' altro supera la quantità di RAM disponibile, il checkpoint diventerà un processo disk-to-disk che proporzionalmente al numero di pagine modicate può risultare lento ed ineciente. Virtuoso ore un meccanismo chiamato Rimappatura di Checkpoint che permette di rendere persistente uno stato committato, ovvero sicuro, senza dover scrivere su disco tutte le dierenze collezionate nel quanto di tempo infra-checkpoint. 3.5 Consistenza e integrità dei dati Virtuoso è dotato di un meccanismo di locking, a partire dalla singola riga no all' intera pagina, a cascata. La cascata accade quando nessun' altra transazione detiene lock sulla stessa pagina, questo per assicurare l' impossibilità di ricadere in deadlock. 19 3.6. XML TEMPLATES Virtuoso, inoltre, supporta integrità di entità tramite vincoli UNIQUE e PRIMARY KEY e l' integrità referenziale tramite i costraint necessari. Sup- porta, inoltre, i vincoli NOT NULL che forzano un valore ad essere denito obbligatoriamente per ogni tupla di un tabella. Virtuoso supporta il meccanismo dei Trigger: un trigger è una procedura associata ad una tabella ed un evento. Il trigger può essere scatenato prima, dopo, o invece dell' evento sulla tabella scelta, tramite le parole chiave BEFORE, AFTER, INSTEAD OF. I trigger sono attivabili a cascata, ovvero un trigger può attivare un altro trigger. Ciò potrebbe causare una ricorsione divergente: i trigger andrebbero disattivati manualmente per sicurezza. 3.6 XML Templates Un template XML è un le XML contenente principalmente una query e parametri opzionali con valuri di default per la query stessa, oltre che una serie di informazioni aggiuntive, come dei fogli di stile XLS ( excel ). I template possono essere eseguiti dal linguaggio procedurale di Virtuoso utilizzando la funzione xml_template(). I template forniscono un accesso ai risultati di una normale query SQL, con la dierenza la denizione della query può essere salvata su le. Questo viene fatto per produrre rapidamente report dinamici da presentare a seconda delle necessità in maniera diversa secondo i vari fogli di stile XLS contenuti nel le del template. Questi report possono essere quindi ranati on-the-y fornendo parametri per le query di volta in volta dierenti. L' output può essere quindi visualizzato via HTTP digitando direttamente l' URL del template all' interno del browser. La trasformazione XSLT è eettuata solo se desiderata, ma è obbligatoria se la richiesta è un HTTP GET 3.7 Parser per XML DTD Come abbiamo visto nel capitolo introduttivo, XML DTD è un insieme di direttive per descrivere la struttura di un documento XML e lo mette in relazione con altri documenti XML. Virtuoso è dotato di un pareser XML che può riconoscere e processare la maggior parte delle direttive DTD, e vericare che il documento rispetti le direttive DTD e possa così essere ritenuto valido. 20 3.7. PARSER PER XML DTD Figura 3.3: L' approccio di Virtuoso ad un XML Template Se DTD descrive le relazioni con entità XML esterne, il parser può costruire rappresentazioni interne dei dati, che possono essere standalone o non standalone. Per costruire una rappresentazione standalone, o statica, il parser recupera tutte le risorse esterne e rimpiazzerà ogni occorrenza di relazione con una copia dell' intero contenuto della risorsa. Per costruire una rappresentazione non standalone, o dinamica, invece, il parser ricorda solo le informazioni per la dereferenziazione dei contenuti e non cerca di ottenere l' intera risorsa, che verrà invece recuperata su richiesta, se necessario. In un mondo ideale, i documenti matchano perfettamente gli standard XML e tutte le URI dichiarate sono valide e accessibili, ma nella realtà, potrebbero esserci delle URI non più valide. Virtuoso per questo motivo permette di congurare la reazione del parser ad ogni sorta di problema, per rendere possibile la presentazione parziale dei dati, tralasciando gli errori che riguardano la porzione di dati non recuperabili. Inoltre un log dettagliato e humand-readable può essere generato per permettere all' utente di vericare i problemi sopraggiunti ed eventualmente xarli. 21 3.8. CONFIGURAZIONE E DIMENSIONAMENTO Figura 3.4: Dimensionamento consigliato 3.8 Congurazione e dimensionamento Per elevate performance nelle interrogazioni delle strutture RDF, un database dev' essere congurato opportunamente per gestire insiemi di big data. Vediamo ora come Virtuoso eccelle in questo. Quando si ha a che fare con insiemi di dati molto grandi è consigliabile dedicare a Virtuoso dai 3 2 3 ai 5 della memoria principale ed eettuare uno striping su tutti i dischi disponibili. Queste congurazioni e molte altre sono disponibili nel le virtuoso.ini. In particolari i parametri NumberOfBuers e MaxDirtyBuers rappresentano il numero massimo di Buer ( di default 8KB ciascuno ) e il numero massimo di Buer sporchi, ovvero pagine modicate ma non ancora scritti su disco. Valori consigliati al variare della RAM disponibile sono rappresentati in gura. Il parametro MaxCheckPointRemap specica quante pagine Virtuoso è abilitato a rimappare, ed è consigliato mantenerlo ad 1 4 della dimensione totale del database. 3.9 Ottimizzazione I/O su disco Virtuoso permette di dividere un database in più le che possono essere sparsi su dischi dierenti. Allocando un frammento di database in dischi indipendenti le performance di I/O possono essere notevolmente aumentate sia in operazione ad accesso casuale che sequenziale. L' unità di misura di base del database è il segmento: consiste di un numero intero di pagine da 8KB. Un segmento consiste di uno o più le chiamati stripes. Se un segmento ha più stripes, queste saranno della stessa lunghezza e la dimensione dell' intero segmento sarà un multiplo intero della dimensione delle stripes. 22 3.10. IL FUTURO DI VIRTUOSO La dimensione limite del singolo le di database dipende dalla piattaforma, ma l' architettura a 64 bit è sfruttata dove possibile. Per database grandi, è raccomandato l' uso di dischi multipli e di segmentazione per motivi legati allo sfruttamento del parallelismo. Un database può arrivare no a 32TB ( indirizzi di pagina a 32 bit con 8KB per pagina ). Quando viene eettuato lo striping di un segmento, ogni pagina logicamente consecutiva risiede in le diversi, perciò per un segmento da 2 stripes, la prima conterrà tute le pagine pari, e la seconda le pagine dispari. Le stripes andrebbero salvate in dischi diversi. Nel servire le richieste di client che prevedono accesso casuale alle tabelle, Virtuoso può così eettuare più operazioni di I/O su disco in parallelo sfruttando il vantaggio dei device indipendenti. Lo striping quindi garantisce una frequenza d' accesso statisticamente uniforme tra i dischi. Lo striping è utile anche per un singolo client che eettua operazioni di lunghe letture sequenziali. Virtuoso può accorgersi della natura seriale della richiesta e può ottimizzare le operazioni: se la tabella è posizionata in un segmento sottoposto a striping, il server leggerà tutti i dischi interessati in parallelo. 3.10 Il futuro di Virtuoso Le ricerche dello sviluppatore OpenLink Software sono piuttosto intense e sono divise in svariate aree attorno Virtuoso. Lo sviluppatore dichiara di voler estendere le funzionalità attorno RDF e supportare un accesso trasparente ai dati native-relational, con maggiori congurazioni e supporto inferenziale, oltre che al supporto di XQUERY che è attualmente supportato ma la versione 1.0 è un semplice draft di W3C. 23 Bibliograa [1] Bob DuCharme, Learning SPARQL 2nd Edition, O' Really, 201 [2] 3Tim Berners-Lee, The Semantic Web , in Scientic American, maggio 2001 [3] A. Chianese,V. Moscato, A. Picariello, L. Sansone, Basi di dati per la gestione dell'informazione 2/ed, McGraw-Hill, 2009 [4] Tim Berners-Lee, L'architettura del nuovo Web, Feltrinelli, Milano, 2002 [5] Elisabetta Curzel, Il web semantico il futuro, Il web semantico: il futuro dei motori di ricerca, corriere.it, 3 novembre 2014 [6] Wikipedia l' enciclopedia libera, Storia di Internet [7] Wikipedia l' enciclopedia libera, Internet [8] Wikipedia l' enciclopedia libera, Web Semantico [9] OpenLink Software, Virtuoso Documentation, http://docs.openlinksw.com/ [10] Giorgio Fontana, Quanto è grande Internet?, wired.it, 2011 [11] Commissione di coordinamento SPC, Linee guida per l' interoperabilità semantica attraverso i Linked Open Data, Agenzia per l' Italia digitale, 2012 [12] E. Prud'hommeaux, A. Seaborne, SPARQL Query Language for RDF, W3C Reccomendation http://www.w3.org/TR/rdf-sparql-query/, 2008 24 BIBLIOGRAFIA [13] N. Sadawi, Semantic Web Tutorial, youtu- be.com/user/DrNoureddinSadawi [14] O. Hassanzadeh, Introduction to Semantic Web, University of Toronto, 2011 25 Elenco delle gure 1 Numero di computer connessi alla rete dal 1993 ad oggi. Cifre in Milioni di Host . . . . . . . . . . . . . . . . . . . . . . . . 1.1 4 Lo stack del Semantic Web nelle sue due accezioni: astratta e concreta . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 L' evoluzione del web . . . . . . . . . . . . . . . . . . . . . 7 1.2 Skyscanner . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.5 Una singola tabella può portare a schemi molto complessi, ma facilmente navigabili . . . . . . . . . . . . . . . . . . . . 9 1.4 Da tupla a tripla 9 3.1 Virtuoso Universal Server 3.2 Commit a due fasi 3.3 L' approccio di Virtuoso ad un XML Template 3.4 Dimensionamento consigliato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 . . . . . . . . . . . . . . . . . . . . . . . 18 26 . . . . . . . 21 . . . . . . . . . . . . . . . . . 22 Elenco degli algoritmi 2.1 una semplice query SPARQL . . . . . . . . . . . . . . . . . . . . 13 2.2 Una query SPARQL con clausola FROM . . . . . . . . . . . . . . 13 2.3 Notare come in questo formato di query, detto Turtle, ogni tripla termina con un punto. 2.4 2.5 . . . . . . . . . . . . . . . . . . . . 14 Notare che il soggetto ?s può essere omesso in tuple ripetute, previa il capolinea preceduto da ; e non dal semplice punto. . . 15 Schema RDF considerato 15 . . . . . . . . . . . . . . . . . . . . . . 27 ELENCO DEGLI ALGORITMI RDF Triple Store: Virtuoso di Alessandro Losco è distribuito con Licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 4.0 Internazionale. 28