Indice Prefazione v 1 Introduzione al progetto Meta 1 2 Le tecnologie dei metadati 2.1 Resource Description Framework . . . . . . . . . . 2.1.1 Il modello . . . . . . . . . . . . . . . . . . . 2.1.2 La sintassi . . . . . . . . . . . . . . . . . . . 2.1.3 Altri elementi di sintassi . . . . . . . . . . . 2.1.4 La reificazione . . . . . . . . . . . . . . . . . 2.1.5 La grammatica formale . . . . . . . . . . . . 2.2 RDF Schema . . . . . . . . . . . . . . . . . . . . . 2.2.1 Classi e proprietà . . . . . . . . . . . . . . . 2.2.2 I vincoli . . . . . . . . . . . . . . . . . . . . 2.2.3 La documentazione . . . . . . . . . . . . . . 2.3 Topic Maps . . . . . . . . . . . . . . . . . . . . . . 2.3.1 I concetti fondamentali . . . . . . . . . . . . 2.3.2 Esempi di utilizzo dei costrutti fondamentali 2.3.3 Altri elementi del modello . . . . . . . . . . 2.3.4 Published Subject Identifier . . . . . . . . . 2.3.5 Descrizione della sintassi XTM . . . . . . . 2.3.6 Vincoli di consistenza e validità . . . . . . . . . . . . . . . . . . . . . . . . 5 6 7 9 13 15 18 21 21 23 25 25 26 29 33 40 44 49 3 Conversione di formati 3.1 Confronto fra i due paradigmi . . . . . . . . . . . . . . . . . . 57 58 i . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Problematiche di conversione . . . . . . . . . . . . . . 3.3 Confronto fra modelli: differenze e soluzioni proposte 3.3.1 Identificazione di ciò che è descritto . . . . . . 3.3.2 Assegnazione dei nomi . . . . . . . . . . . . . 3.3.3 Relazioni tra oggetti descritti . . . . . . . . . 3.3.4 Attributi . . . . . . . . . . . . . . . . . . . . . 3.3.5 Tipizzazione . . . . . . . . . . . . . . . . . . . 3.3.6 Metainformazioni contestuali . . . . . . . . . . 3.3.7 Reificazione . . . . . . . . . . . . . . . . . . . 3.3.8 Schema RDF di traduzione . . . . . . . . . . . 3.4 Descrizione delle soluzioni proposte in letteratura . . 3.4.1 Convergenza secondo Moore . . . . . . . . . . 3.4.2 Integrazione secondo Lacher . . . . . . . . . . 3.4.3 Mapping secondo Ogievetsky . . . . . . . . . . 4 Implementazione del convertitore 4.1 Strumenti utilizzati nell’implementazione . . . . 4.2 Problematiche di traduzione . . . . . . . . . . . 4.2.1 Relazioni tra documenti e schemi . . . . 4.2.2 Relazioni tra i modelli di RDF e di Topic 4.3 Esempi di conversione . . . . . . . . . . . . . . 4.3.1 Conversione di documenti XTM in RDF 4.3.2 Conversione di documenti RDF in XTM 4.4 Architettura del sistema . . . . . . . . . . . . . 4.5 Dettagli di implementazione . . . . . . . . . . . 4.5.1 Il serializzatore RDF . . . . . . . . . . . 4.5.2 La fase di bootstrap . . . . . . . . . . . 4.5.3 I plugin . . . . . . . . . . . . . . . . . . 4.6 Configurazione e installazione del software . . . 4.6.1 Il file di configurazione . . . . . . . . . . 4.6.2 I driver di conversione . . . . . . . . . . 4.6.3 I plugin . . . . . . . . . . . . . . . . . . 4.6.4 Esecuzione dell’applicazione . . . . . . . 4.7 Possibili estensioni . . . . . . . . . . . . . . . . ii . . . . . . . . . . . . . . . . . . . . . . . . . . Maps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 61 61 64 67 75 78 79 83 83 85 85 86 87 . . . . . . . . . . . . . . . . . . 89 90 91 93 94 95 95 101 118 121 121 122 123 126 126 127 130 131 131 5 Editazione di documenti RDF e XTM 5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Caratteristiche generali dell’editor . . . . . . . . . . . . . 5.2.1 Schemi per l’editazione . . . . . . . . . . . . . . . 5.2.2 Relazioni e attributi . . . . . . . . . . . . . . . . 5.2.3 Regole per l’applicabilità di attributi e risorse . . 5.2.4 Indicizzazione delle risorse descritte . . . . . . . . 5.2.5 Operazioni effettuabili . . . . . . . . . . . . . . . 5.3 Architettura del sistema . . . . . . . . . . . . . . . . . . 5.4 Strumenti utilizzati . . . . . . . . . . . . . . . . . . . . . 5.5 Modello concettuale e implementazione . . . . . . . . . . 5.5.1 Accesso ai dati: il servlet . . . . . . . . . . . . . . 5.5.2 Il modello del documento e dello schema: l’applet 5.5.3 Il visualizzatore di documenti . . . . . . . . . . . 5.5.4 Diagramma delle classi . . . . . . . . . . . . . . . 5.5.5 Interazione fra i componenti dell’editor . . . . . . 5.5.6 Ciclo di vita dell’editor . . . . . . . . . . . . . . . 5.5.7 Diagramma dei componenti . . . . . . . . . . . . 5.6 Configurazione e installazione del software . . . . . . . . 5.6.1 Configurazione del servlet . . . . . . . . . . . . . 5.6.2 La firma dell’applet . . . . . . . . . . . . . . . . . 5.6.3 Configurazione del client . . . . . . . . . . . . . . 5.6.4 Installazione del software . . . . . . . . . . . . . . 5.7 Possibili estensioni . . . . . . . . . . . . . . . . . . . . . 6 Navigazione di documenti RDF e XTM 6.1 La navigazione di metainformazioni . . . 6.2 Caratteristiche del navigatore . . . . . . 6.2.1 Attributi e relazioni . . . . . . . . 6.2.2 Classificazione degli attributi . . 6.2.3 Schemi e istanze . . . . . . . . . 6.3 Navigazione . . . . . . . . . . . . . . . . 6.4 Architettura del sistema . . . . . . . . . 6.5 Strumenti utilizzati . . . . . . . . . . . . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 133 134 135 136 138 138 139 142 143 145 145 146 146 148 150 156 157 157 158 158 160 160 160 . . . . . . . . 163 163 166 166 167 168 169 173 174 6.6 Modello concettuale e implementazione . . . . . 6.6.1 Accesso ai dati . . . . . . . . . . . . . . 6.6.2 Il modello del documento e dello schema 6.6.3 Il visualizzatore . . . . . . . . . . . . . . 6.6.4 Diagramma delle classi . . . . . . . . . . 6.6.5 Interazione fra i componenti dell’editor . 6.6.6 Diagramma dei componenti . . . . . . . 6.7 Configurazione e installazione del software . . . 6.8 Test di navigazione . . . . . . . . . . . . . . . . 6.9 Possibili estensioni . . . . . . . . . . . . . . . . 7 Manuale di utilizzo dei tool sviluppati 7.1 L’ontologia . . . . . . . . . . . . . . . . . . . . 7.2 Il convertitore . . . . . . . . . . . . . . . . . . . 7.2.1 Conversione da XTM a RDF . . . . . . . 7.2.2 Le risorse RDF di traduzione . . . . . . 7.2.3 Conversione da RDF a XTM . . . . . . . 7.3 L’editor . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Lo schema per XTM . . . . . . . . . . . 7.3.2 Lo schema per RDF . . . . . . . . . . . 7.3.3 Editazione di documenti . . . . . . . . . 7.3.4 Differenze di editazione fra RDF e XTM 7.4 Il navigatore . . . . . . . . . . . . . . . . . . . . 7.4.1 Navigazione di documenti . . . . . . . . 7.4.2 Le risorse e gli PSI proprietari . . . . . . 8 Conclusioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 175 175 176 178 180 181 182 183 184 . . . . . . . . . . . . . 187 187 188 188 200 201 210 210 215 216 219 219 220 223 227 iv Prefazione Possiamo affermare che oggi, grazie al Web, siamo in grado di accedere ad ogni genere di informazione. Gli utenti possono consultare le ultime notizie, le previsioni del tempo, i servizi finanziari; possono inoltre affettuare acquisti, prenotare dei biglietti aerei o un albergo, etc. Le possibilità offerte dal Web sembrano illimitate, ma l’attuale tecnologia si deve confrontare con un problema generato dalla natura stessa del Web. Esso infatti fu in origine pensato per pubblicare documenti visualizzabili mediante un browser e consultabili da utenti. Ma cosa succede se il fruitore di un servizio non è un essere umano ma una macchina? Sebbene ogni risorsa sia leggibile da un computer, questo non è in grado di “capirne” il significato. Una soluzione a tale problema è data dall’uso dei metadati, mediante i quali è possibile descrivere le informazioni contenute nel web. I metadati, che in seguito verranno indicati anche con il termine metainformazioni, sono “dati sui dati” (per esempio un catalogo librario è composto da metadati, in quanto descrive dei libri) e, nello specifico, dati che descrivono risorse accessibili dal Web. La distinzione fra i dati veri e propri e i metadati non è assoluta, ma è dipendente dal contesto, e la stessa risorsa può anche essere considerata in ambedue i modi. Attraverso l’uso dei metadati potremo passare dall’attuale Web ad uno completamente nuovo, in cui anche le macchine potranno effettuare delle ricerche ed interpretare (sul piano semantico) le informazioni. La capacità di un motore di ricerca di indicizzare le pagine web mediante l’uso delle metainformazioni reperibili in un documento HTML sembrerà un concetto di semantica molto “primitivo” se confrontato con quanto può essere raggiunto mediante l’utilizzo dei metadati. Una delle caratteristiche del Web con estensioni semantiche è certamente quella di definire una nuova struttura, in cui tutte le risorse si vedano associare delle descrizioni, secondo formati standardizzati ed elaborabili in modo automatico. Le due tecnologie che si sono affermate in tale campo e che definiscono tali formati sono Resource Description Framework (RDF ) e Topic Maps. Dal punto di vista architetturale, il Web semantico si può considerare un layer che estende il Web attuale e mediante il quale sia favorita la cooperazione fra utenti e fra calcolatori, che potranno scambiarsi informazioni di cui comprendono il significato. Al fine di evitare un partizionamento del Web in collezioni di metadati incompatibili, si è sviluppato un tool da utilizzare per effettuare la conversione fra RDF e Topic Maps, in modo tale da poter importare nella propria base di conoscenza le informazioni descritte in un formato diverso. Inoltre sono stati sviluppati due ulteriori strumenti: un editor di documenti scritti in tali formati e un visualizzatore, che permette la navigazione dei metadati associati a informazioni correlate. La presente dissertazione è pertanto cosı̀ articolata: Capitolo 1 Presentazione del progetto Meta. Capitolo 2 Descrizione e commento di RDF, RDF Schema e Topic Maps. Capitolo 3 Viene documentata in maniera approfondita la differenza fra RDF e Topic Maps, alla luce della creazione del tool di conversione fra documenti scritti nei due formati. Capitolo 4 Viene presentato il convertitore e vengono descritti i dettagli relativi all’implementazione dello strumento di conversione. Capitolo 5 Presentazione dell’editor di documenti scritti nei due formati. Vengono affrontate le problematiche di editazione e viene fornita la soluzione poi implementata. Capitolo 6 Presentazione dello strumento atto a permettere la navigazione nei documenti scritti nei due formati. vi Capitolo 7 Contiene il manuale utente relativo a gli strumenti presentati. Infine il capitolo conclusivo riassume il lavoro svolto e presenta ulteriori estensioni ai problemi affrontati. vii viii Capitolo 1 Il progetto Meta Le attuali problematiche relative al mondo delle metainformazioni sono di diversa natura e legate al limitato impiego degli strumenti che ne implementano le funzionalità, nonostante le enormi potenzialità che queste tecnologie offrono in termini di sovrastruttura semantica associabile all’informazione non struttura. Una parziale giustificazione di questo è da ricercarsi nella presenza di due standard in competizione che, seppur diversi nella loro concezione, vengono incontro alle medesime esigenze. Inoltre tali standard, essendo relativamente giovani, non hanno ancora raggiunto una completa maturità. A ciò va aggiunta l’inerente difficoltà nella creazione di documenti metainformativi: l’estrazione automatica delle metainformazioni rappresenta un problema di difficile soluzione, fino ad essere del tutto impraticabile in presenza di sorgenti informative scevre di struttura. Spesso l’unico modo per individuare i concetti semantici da descrivere è mediante l’intervento umano, ossia tramite la lettura e la catalogazione delle risorse, e la susseguente creazione manuale dei documenti. Inoltre, l’utilizzo effettivo delle metainformazioni, benchè potenzialmente vario ed esteso a varie branche del settore informatico, non è stato tutt’oggi approfonditamente esplorato. I modelli di specifica di metainformazioni cui si fa riferimento nel progetto sono lo standard RDF, edito dal W3C, e lo standard Topic Maps, sviluppato dall’ISO. Entrambe le tecnologie si prestano all’impiego nel settore del Semantic Web, e, più in generale, ad ogni contesto applicativo nel quale si possa trarre beneficio dall’utilizzo di tecniche standard per la formalizzazione 2 Capitolo 1. Introduzione al progetto Meta della semantica presente in insiemi di risorse. Entrambi inoltre prevedono la possibilità di serializzare i modelli in documenti XML, con una sintassi propria a ciascuno di essi. Il progetto Meta descritto in questa dissertazione cerca di soddisfare le esigenze di questo campo applicativo attraverso l’implementazione di tre strumenti atti a facilitare la gestione dei documenti di metainformazioni, e ad indagare sulle potenzialità offerte da RDF e da Topic Maps al loro stato attuale di evoluzione. I problemi a cui il progetto cerca di offrire risposta sono: • La divergenza dei linguaggi di specifica. • La necessità di uno strumento per la gestione automatica dei documenti che consenta la loro creazione e modifica senza obbligare l’utente ad affrontare le complicazioni dovute ai dettagli sintattici. • L’utilizzo delle metainformazioni come supporto informativo supplementare per l’utente, nell’ambito della navigazione delle risorse. Sono stati implementati pertanto tre strumenti: un convertitore di documenti da e per entrambi i formati, un editor per la creazione e la modifica di documenti basati su schema, e un navigatore di documenti di metainformazioni che mettesse in luce l’utilità di queste tecnologie in termini di descrizione, catalogazione, e interconnessione semantica delle risorse. Relativamente al primo degli strumenti implementati, la ragione che ha spinto la ricerca di tecniche di conversione di documenti espressi nei diversi formati, è rappresentata dal fatto che fondamentalmente entrambi i modelli sono pensati per descrivere relazioni tra entità dotate di identità. La mappatura reciproca dei costrutti definiti da i due paradigmi, implementata dallo strumento di conversione, offre un primo supporto alla loro interoperabilità. Indagando sulle differenze tra RDF e Topic Maps si è cercato di far luce sulle rispettive capacità espressive, aprendo la strada alle possibili sinergie ottenibili dall’uso di entrambe le tecnologie, nell’ottica di poter trarre il meglio da entrambi i mondi. Per le necessità di editazione dei documenti metainformativi, sono state esplorate le caratteristiche, proprie ad entrambi gli standard, di tipizzazione 3 delle entità, e le possibilità da essi offerte in termini di creazione di tesauri su cui basare le descrizioni semantiche delle risorse. Il supporto all’editazione è stato cosı̀ esteso dalla semplice astrazione sintattica ottenibile sfruttando DTD o schemi XML, propria alla maggior parte degli editor già esistenti, ad un livello di astrazione basato sugli schemi semantici, che sia RDF che Topic Maps rendono possibili. Lo strumento di editing, basato su interfaccia HTML, implementa tale funzionalità sfruttando queste caratteristiche, rendendo uniforme la visione di entità e relazioni, rispetto al reale formato del documento. Il terzo strumento del progetto implementa un navigatore di metainformazioni, anch’esso basato sull’idea di offrire uniformità di visione fra i due formati. Attraverso il sistema di tipizzazione e di correlazione introdotto dagli schemi semantici, il navigatore permette all’utente di prendere visione delle caratteristiche associate alle entità. La navigazione avviene attraverso un’interfaccia che separa le metainformazioni in base al ruolo, e rende navigabili i riferimenti ad altre entità, al sistema dei tipi e ad eventuali riferimenti Web propri a ciascuna entità. Lo strumento mostra come l’utilizzo di queste tecnologie possa da un lato automatizzare l’implementazione di sistemi di ricerca gerarchici, e dall’altro arricchire l’espressività dei sistemi di indicizzazione, sia quando le entità sono rappresentate da risorse Web, sia nel caso in cui siano concetti semantici astratti caratterizzati da eventuali riferimenti a documenti reperibili online. 4 Capitolo 1. Introduzione al progetto Meta Capitolo 2 XML e metadati: un’introduzione Di solito i metadati vengono definiti come “dati sui dati”. Infatti essi possono rappresentare dati su qualunque cosa; ma ciò che li caratterizza è lo scopo e l’utilizzo che se ne fa piuttosto che il loro contenuto o struttura. Spesso i metadati vengono utilizzati per fornire un aiuto, sia ad esseri umani che a programmi, nell’individuare e raccogliere informazioni. I metadati hanno di solito una struttura semplice, e, sorprendentemente, ogni persona li usa spesso nell’arco di una giornata. Ad esempio, supponiamo di essere i proprietari di una collezione di DVD; se ogni custodia fosse semplicemente nera, per cercare un particolare film dovremmo vedere il contenuto (anche solo parzialmente) di ogni disco. Ma basta apporre un’etichetta su ogni custodia per sveltire sensibilmente il processo di ricerca. Se la nostra collezione fosse molto vasta, si potrebbe creare anche un indice o un elenco dei DVD. Se invece di una semplice collezione di DVD pensiamo ad una biblioteca o al Web, è chiaro che la complessità del problema cresce enormemente. La soluzione, comunque, è la stessa: fornire dei cataloghi e indici che permettano di effettuare delle ricerche sulle informazioni che ci interessano. Le tecnologie usate per esprimere i metadati cercano di risolvere questi problemi, al fine di fornire a chi naviga sul Web lo stesso servizio che avrebbe camminando per i corridoi di una libreria ben organizzata. 6 Capitolo 2. Le tecnologie dei metadati I metadati possono essere espressi in varie forme: inclusi nello stesso documento cui si riferiscono o contenuti in un documento esterno. In questo caso, la risorsa che descrivono viene referenziata mediante il proprio URI o mediante un’espressione XPath [CD99]. Esistono vari tipi di metadati, in base al problema affrontato: Annotazioni - Sono note aggiunte al documento per uno scopo specifico; sono usate solo da alcuni lettori ma in tempi diversi e per motivi diversi. Un esempio è dato dalle note o dai commenti aggiunti in un testo letterario. Cataloghi - Associano delle coppie proprietà-valore a ciò che descrivono. Ad esempio un catalogo librario associa ad ogni libro il titolo, l’autore, l’editore. Indici - Permettono di accomunare delle informazioni per argomento e definirne le eventuali relazioni che intercorrono fra esse. Ad esempio un indice per argomenti dei libri di una biblioteca o una pagina Web che contiene dei collegamenti a delle risorse, suddivise per argomento. Riferimenti incrociati - Permettono di definire dei collegamenti fra risorse che si ritengono correlate. Questi riferimenti possono avere un significato particolare, ad esempio “vedi anche” o “sostituito da”. In questo capitolo verranno presentate le due tecnologie che si sono imposte nella definizione dei metadati. In seguito si faranno inoltre notare i pro ed i contro nell’adottare le soluzioni proposte da tali tecnologie. 2.1 Resource Description Framework La soluzione proposta dal W3C in [LS99] per elaborare i metadati usati nella descrizione delle risorse presenti nel Web consiste nell’utilizzo del Resource Description Framework (da ora in avanti RDF ). Fra gli obiettivi che il W3C si è proposto di raggiungere con la definizione di RDF possiamo considerare: interoperabilità fra applicazioni e sviluppo di applicazioni automatizzate per il trattamento delle risorse del Web in modo 2.1 Resource Description Framework 7 semplice. RDF potrà essere utilizzato in svariate aree applicative, come, ad esempio, la catalogazione di risorse facenti parte di un sito Web o di una libreria digitale, descrivendone il contenuto e le relazioni esistenti; rendere più efficienti le indicizzazioni effettuate dai motori di ricerca; aiutare la condivisione e lo scambio di informazioni da parte di agenti software intelligenti. In questo paragrafo verrà introdotto il modello usato per rappresentare RDF e la sintassi usata per codificare e trasportare i metadati cosı̀ espressi. Tale codifica verrà effettuata in modo da massimizzare l’interoperabilità e l’indipendenza dai server che forniranno i metadati e dai client che usufruiranno di tali servizi. La sintassi presentata farà uso di XML [BPSMM]. Inoltre bisogna sottolineare come l’obiettivo di RDF sia quello di definire un meccanismo per descrivere risorse che non fa assunzioni su un particolare dominio applicativo, nè definisce a priori la semantica per uno specifico dominio. La definizione di tale meccanismo sarà quindi indipendente dal campo di applicazione e permetterà la descrizione di informazioni relative ad ogni dominio. 2.1.1 Il modello RDF si basa su un modello per rappresentare proprietà e valori ad esse associati. Le proprietà possono essere pensate come attributi di risorse e corrispondono ad una coppia attributo-valore. Inoltre mediante le proprietà si possono rappresentare le relazioni fra le risorse e quindi il modello di RDF può essere visto come uno schema entità-relazione. Per usare la terminologia della programmazione object-oriented, le risorse possono essere viste come oggetti e le proprietà come variabili d’istanza. Il modello è composto da tre tipi di oggetti: Risorse: tutto ciò che viene descritto da RDF è detto risorsa. Una risorsa può essere una pagina Web, una parte di essa (identificata da un particolare elemento HTML o XML) o un intero sito Web. L’identificatore di ogni risorsa è il proprio URI [BLFIM98] e pertanto una risorsa può anche essere un oggetto non direttamente accessibile dal Web. Proprietà: una proprietà è una caratteristica, un attributo o una relazione 8 Capitolo 2. Le tecnologie dei metadati utilizzata per descrivere una risorsa. Ogni proprietà ha un significato specifico, definisce i valori che può assumere e i tipi di risorse a cui può essere associata. Questo aspetto verrà trattato nel paragrafo 2.2. Asserzioni: una risorsa con una proprietà ed un valore ad essa associato è un’asserzione. Gli oggetti che prendono parte a questa associazione sono detti, rispettivamente: il soggetto, il predicato e l’oggetto. L’oggetto può essere una risorsa o un letterale. Esempio 2.1 La frase: “Mario Rossi è l’autore della risorsa identificata dall’URL http://www.myhost.org/˜mrossi” è composta dagli elementi elencati nella tabella seguente. Soggetto (risorsa) Predicato (proprietà) Oggetto (letterale) http://www.myhost.org/˜mrossi Autore “Mario Rossi” Tabella 2.1: Componenti della frase dell’esempio 2.1 Questa frase può anche essere rappresentata mediante un grafo in cui i nodi (gli ovali) rappresentano le risorse e gli archi rappresentano le proprietà. I nodi che rappresentano invece dei letterali sono disegnati come rettangoli. http://www.myhost.org/˜mrossi Autore Mario Rossi Figura 2.1: Grafo corrispondente alla frase dell’esempio 2.1 Esempio 2.2 L’oggetto della frase: “La persona di nome Mario Rossi e con email [email protected] è autore della pagina identificata dall’URL http://www.myhost.org/˜mrossi” è questa volta non più un letterale, ma un’entità strutturata, rappresentata da un’altra risorsa. 2.1 Resource Description Framework 9 http://www.myhost.org/˜mrossi Autore Nome Mario Rossi Email [email protected] Figura 2.2: Grafo corrispondente alla frase dell’esempio 2.2 2.1.2 La sintassi In questo paragrafo verranno presentati due tipi di sintassi per codificare un’istanza del modello di RDF: La sintassi di serializzazione: permette di esprimere il modello di RDF in maniera regolare. La sintassi abbreviata: estende la sintassi precedente, fornendo altri costrutti che permettono una scrittura più compatta del modello. Queste sintassi hanno comunque lo stesso potere espressivo. Ogni proprietà assegnata ad una risorsa viene elencata dentro un elemento rdf:Description. Questo elemento permette di identificare la risorsa mediante l’attributo rdf:about, contenente l’URI di tale risorsa. Se invece la risorsa non ha un URI, questo può essere fornito usando l’attributo rdf:ID; in questo modo viene creata una risorsa che fa da proxy per quella originaria. Le proprietà cosı̀ specificate corrispondono ad archi diversi di un grafo relativo al documento RDF. Ad ogni proprietà deve inoltre essere assegnato uno schema. Questo può essere fatto aggiungendo ad ogni proprietà il 10 Capitolo 2. Le tecnologie dei metadati namespace in cui viene definito l’elemento che rappresenta la proprietà stessa. Si può pensare ad uno schema come ad un dizionario, che definisce i termini che verranno usati e vi associa un particolare significato. Esempio 2.3 La frase dell’esempio 2.1: “Mario Rossi è l’autore della risorsa definita dall’URI http://www.myhost.org/˜mrossi” può essere rappresentata in RDF/XML come: <?xml version="1.0"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore>Mario Rossi</s:Autore> </rdf:Description> </rdf:RDF> Nei casi in cui sia preferibile usare una forma più compatta si utilizza la forma abbreviata. Ne esistono tre forme, utilizzabili solo in particolari condizioni: 1. Si può utilizzare nel caso in cui non ci siano proprietà ripetute più volte entro l’elemento rdf:Description e i valori di tali proprietà siano dei letterali. In questo caso le proprietà possono essere scritte come attributi dell’elemento rdf:Description. Esempio 2.4 Il documento scritto nell’esempio 2.3 diventa: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi" s:Autore="Mario Rossi"/> </rdf:RDF> 2. Questa forma è applicabile quando l’oggetto di un’asserzione è un’altra risorsa le cui proprietà sono definite nel documento stesso ed i cui valori sono dei letterali. In questo caso i predicati della risorsa referenziata diventano attributi del predicato che referenzia la risorsa stessa. 2.1 Resource Description Framework 11 Esempio 2.5 La frase: “La persona di codice 1375 si chiama Mario Rossi e ha email [email protected]; la risorsa definita dall’URI http://www.myhost.org/˜mrossi è stata creata da costui” può essere scritta come: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore rdf:resource="http://www.myhost.com/people/1375"/> </rdf:Description> <rdf:Description rdf:about="http://www.myhost.com/people/1375"> <s:Nome>Mario Rossi</s:Nome> <s:Email>[email protected]</s:Email> </rdf:Description> </rdf:RDF> Usando la seconda forma abbreviata, si ottiene: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore rdf:resource="http://www.myhost.com/people/1375" s:Nome="Mario Rossi" s:Email="[email protected]"/> </rdf:Description> </rdf:RDF> 3. Questa forma abbreviata si applica quando l’elemento rdf:Description contiene rdf:type. Questo elemento definisce il tipo della risorsa. Per ulteriori approfondimenti si rimanda al paragrafo 2.1.4. In questo caso il tipo viene usato direttamente come proprietà della risorsa. 12 Capitolo 2. Le tecnologie dei metadati Esempio 2.6 Se si volesse rappresentare il fatto che la risorsa “http://www.myhost.com/people/1375” è un oggetto di tipo “Persona”, la frase dell’esempio 2.5 diventa: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore> <rdf:Description rdf:about="http://www.myhost.com/people/1375"> <rdf:type rdf:resource="http://schema.org/Persona"/> <s:Nome>Mario Rossi</s:Nome> <s:Email>[email protected]</s:Email> </rdf:Description> </s:Autore> </rdf:Description> </rdf:RDF> Usando la terza forma abbreviata si ottiene: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore> <s:Persona rdf:about="http://www.myhost.com/people/1375"> <s:Nome>Mario Rossi</s:Nome> <s:Email>[email protected]</s:Email> </s:Persona> </s:Autore> </rdf:Description> </rdf:RDF> 2.1 Resource Description Framework 2.1.3 13 Altri elementi di sintassi Quando si assegna un valore ad una proprietà, può essere importante qualificare tale valore, ad esempio specificando l’unita di misura o la valuta in cui si sta esprimendo il valore. A tal fine si ricorre all’uso di rdf:value. Un valore cosı̀ espresso è rappresentato da un’entità strutturata. Esempio 2.7 Quando si afferma che il peso di una persona è 85, l’informazione data non è completa, in quanto è necessario specificare anche l’unità di misura usata. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/" xmlns:u="http://www.nist.gov/units/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Peso rdf:parseType="Resource"> <rdf:value>85<rdf:value> <u:units rdf:resource="http://www.nist.gov/units/Kilos"/> </s:Peso> </rdf:Description> </rdf:RDF> Un altro elemento di uso comune è rappresentato dai contenitori, ovvero delle strutture che permettono di contenere collezioni di risorse. Mediante queste strutture si ha cosı̀ la possibilità di riferirsi ad insiemi di risorse in maniera semplice. Per utilizzare un contenitore basta definire una risorsa rdf:Description la cui proprietà rdf:type ha come valore l’URI del contenitore stesso. Le risorse elencate in tale contenitore sono identificate da rdf: n (con n ∈ N + ). Esempio 2.8 La frase “I nipoti di Paperino sono Qui, Quo e Qua” corrisponde al seguente documento RDF. La risorsa più interna rappresenta un Bag, cioè un lista non ordinata in cui sono ammessi duplicati. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> 14 Capitolo 2. Le tecnologie dei metadati <rdf:Description rdf:about="http://www.disney.it/paperino"> <s:Nipote> <rdf:Description> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="http://www.disney.it/qui"/> <rdf:_2 rdf:resource="http://www.disney.it/quo"/> <rdf:_3 rdf:resource="http://www.disney.it/qua"/> </rdf:Description> </s:Nipote> </rdf:Description> http://www.disney.it/paperino s:Nipote rdf:Bag rdf:type rdf: 1 http://www.disney.it/qui rdf: 2 http://www.disney.it/quo rdf: 3 http://www.disney.it/qua Figura 2.3: Grafo corrispondente alla frase dell’esempio 2.8 Oltre al contenitore rdf:Bag, il modello RDF definisce altri due tipi: 1. rdf:Sequence: definisce un contenitore il cui ordine degli elementi è significativo; 2. rdf:Alternative: in cui gli elementi contenuti rappresentano alternative del valore della proprietà. 2.1 Resource Description Framework 15 In [LS99] era stato definito un modo sintatticamente diverso a quello qui presentato, ma ormai obsoleto. Quanto discusso in questo paragrafo, invece, si rifà all’ultimo aggiornamento delle specifiche di RDF (vedi [Bec02]). 2.1.4 La reificazione Finora abbiamo visto RDF come uno strumento per fare asserzioni su delle risorse Web. Ma RDF può anche essere utilizzato per fare asserzioni di livello più alto, cioè asserzioni fatte su altre. Per effettuare questo tipo di asserzioni il modello RDF definisce le seguenti proprietà: rdf:subject - identifica la risorsa su cui si vuole effettuare l’asserzione di alto livello; rdf:predicate - identifica la proprietà associata alla risorsa; rdf:object - identifica l’oggetto dell’asserzione originaria; rdf:type - definisce il tipo dell’asserzione di alto livello. Il modello RDF assegna a tali asserzioni il tipo rdf:Statement, definito nello schema di RDF stesso. Questo processo è formalmente detto reificazione e l’asserzione su cui viene effettuato tale procedimento è detta asserzione reificata. La risorsa che contiene le quattro proprietà descritte rappresenta l’asserzione reificata. Esempio 2.9 Se volessimo rappresentare la frase “Andrea afferma che Mario Rossi è l’autore della risorsa http://www.myhost.org/˜mrossi”, non dovremmo più definire la risorsa “http://www.myhost.org/˜mrossi”, ma dovremmo esprimere il fatto che Andrea sta facendo un’affermazione. Definiamo quindi la seguente asserzione reificata: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description> <rdf:subject rdf:resource="http://www.myhost.com/~mrossi"/> <rdf:predicate rdf:resource="http://schema.org/Autore"/> 16 Capitolo 2. Le tecnologie dei metadati <rdf:object>Mario Rossi</rdf:object> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"/> <s:AffermatoDa>Andrea</s:AffermatoDa> </rdf:Description> </rdf:RDF> Questa affermazione è rappresentata anche dal seguente grafo: http://www.myhost.org/˜mrossi Mario Rossi rdf:subject rdf:type rdf:object rdf:predicate rdf:Statement s:Autore s:AffermatoDa Andrea Figura 2.4: Grafo corrispondente alla frase dell’esempio 2.9 Per rappresentare la reificazione di più asserzioni contemporaneamente, il modello RDF mette a disposizione rdf:bagID, la cui semantica è la seguente: quando un elemento rdf:Description ha questo attributo, allora ogni asserzione definita viene reificata e diventa membro di un Bag il cui identificatore coincide con il valore di rdf:bagID. Esempio 2.10 Se volessimo rappresentare la frase “Andrea afferma che Mario 2.1 Resource Description Framework 17 Rossi è l’autore della risorsa http://www.myhost.org/˜mrossi, il cui titolo è ¿La Home Page di MarioÀ”, dovremmo scrivere il seguente documento: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:about="http://www.myhost.com/~mrossi" rdf:bagID="R_001"> <s:Autore>Mario Rossi</s:Autore> <s:Titolo>La Home Page di Mario</s:Titolo> </rdf:Description> <rdf:Description rdf:about="#R_001"> <s:AffermatoDa>Andrea</s:AffermatoDa> </rdf:Description> </rdf:RDF> Tale documento coincide, semanticamente, con il seguente (più prolisso): <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:s="http://schema.org/"> <rdf:Description rdf:ID="Reif_001"> <rdf:subject rdf:resource="http://www.myhost.com/~mrossi"/> <rdf:predicate rdf:resource="http://schema.org/Autore"/> <rdf:object>Mario Rossi</rdf:object> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"/> </rdf:Description> <rdf:Description rdf:ID="Reif_002"> <rdf:subject rdf:resource="http://www.myhost.com/~mrossi"/> <rdf:predicate rdf:resource="http://schema.org/Titolo"/> <rdf:object>La Home Page di Mario</rdf:object> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Statement"/> </rdf:Description> 18 Capitolo 2. Le tecnologie dei metadati <rdf:Description rdf:ID="R_001"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#Reif_001"/> <rdf:_2 rdf:resource="#Reif_002"/> </rdf:Description> <rdf:Description rdf:about="#R_001"> <s:AffermatoDa>Andrea</s:AffermatoDa> </rdf:Description> </rdf:RDF> 2.1.5 La grammatica formale Qui di seguito vengono presentate e commentate le produzioni grammaticali che definiscono il modello RDF. È da notare, comunque, che la grammatica qui definita è in parte differente da quanto era stato formalizzato nelle prime specifiche dal W3C (in [LS99]), a causa degli emendamenti recentemente effettuati dal working group in [Bec02]. 1. RDF ::= "<rdf:RDF>" description* "</rdf:RDF>" | description 2. description ::= "<rdf:Description" idAboutAttr? bagIdAttr? propAttr* "/>" | "<rdf:Description" idAboutAttr? bagIdAttr? propAttr* ">" propertyElt* "</rdf:Description>" | typedNode 3. idAboutAttr ::= idAttr | aboutAttr 4. idAttr ::= "rdf:ID=/"" IDsymbol "/"" 5. aboutAttr ::= "rdf:about=/"" URI-reference "/"" 6. bagIdAttr ::= "rdf:bagID=/"" IDsymbol "/"" 2.1 Resource Description Framework 7. propAttr ::= typeAttr | propName "=/"" string "/"" 8. typeAttr ::= "rdf:type=/"" URI-reference "/"" 9. propertyElt ::= "<" propName idAttr? ">" value "</" propName ">" | "<" propName idAttr? parseLiteral ">" literal "</" propName ">" | "<" propName idAttr? parseResource ">" propertyElt* "</" propName ">" | "<" propName idRefAttr? bagIdAttr? propAttr* "/>" 10. typedNode ::= "<" typeName idAboutAttr? bagIdAttr? propAttr* "/>" | "<" typeName idAboutAttr? bagIdAttr? propAttr* ">" propertyElt* "</" typeName ">" 11. propName ::= Qname 12. typeName ::= Qname 13. idRefAttr ::= idAttr | resourceAttr 14. value ::= description | string 15. resourceAttr ::= "rdf:resource=/"" URI-reference "/"" 16. Qname ::= NSprefix ":" name 17. URI-reference ::= string, interpreted per [BLFIM98] 18. IDsymbol ::= (any legal XML name symbol) 19. name ::= (any legal XML name symbol) 20. NSprefix ::= (any legal XML namespace prefix) 21. string ::= (any XML text, with "<", ">", and "\" escaped) 19 20 Capitolo 2. Le tecnologie dei metadati 22. parseLiteral ::= "rdf:parseType=/"Literal/"" 23. parseResource ::= "rdf:parseType=/"Resource/"" 24. literal ::= (any well-formed XML) Ogni propertyElt e di un elemento rdf:Description corrisponde ad una tripla (p, r, v), in cui (vedi produzione 9): • p è il risultato della concatenazione del namespace a cui appartiene e con il nome stesso di e; • r rappresenta: – una risorsa identificata dal valore dell’attributo rdf:about di rdf:Description (se presente); – una nuova risorsa, il cui identificatore è data dal valore dell’attributo rdf:ID, se presente, oppure una nuova risorsa senza identificatore. • v rappresenta: – la risorsa il cui identificatore è dato dal valore dell’attributo rdf:resource di e (se presente); – un letterale, nel caso in cui sia presente l’attributo rdf:parseType con valore Literal o nel caso in cui il contenuto di e sia del testo XML; – una risorsa, nel caso in cui sia presente l’attributo rdf:parseType con valore Resource; – la risorsa il cui identificatore è ottenuto dal valore dell’attributo (anche implicito) rdf:about o rdf:ID dell’elemento rdf:Description contenuto in e. Quando in un elemento rdf:Description è specificato l’attributo rdf:about, l’asserzione si riferisce alla risorsa identificata dal valore dell’attributo. Se invece è presente rdf:ID o rdf:bagID, la tripla stessa rappresenta una risorsa, il cui URI è dato dalla concatenazione dell’URI del documento in cui è definita la tripla con il valore dell’attributo stesso. 2.2 RDF Schema 2.2 21 RDF Schema Nel paragrafo precedente è stato presentato il modello di RDF come un mezzo per rappresentare metadati e una sintassi RDF/XML come trasporto di tale modello. In questo modo si è reso possibile associare delle coppie nome-valore a delle risorse o URI. Ma spesso questo non basta. Ad esempio nel caso in cui si ha una proprietà che si riferisce ad uno scrittore, sarebbe semanticamente scorretto associarla ad una macchina o a un’abitazione. Oppure nel caso in cui si ha una proprietà che rappresenta un compleanno è importante vincolarne i valori a delle date (e non numeri generici o caratteri). Il modello di RDF non permette di effettuare validazione di un valore o restrizione di un dominio di applicazione di una proprietà. Questo compito è svolto, invece, da RDF Schema. Però, a differenza di XML Schema o di un DTD, RDF Schema non vincola la struttura del documento, ma fornisce informazioni utili all’interpretazione del documento stesso. In seguito il namespace di RDF Schema sarà indicato con rdfs; quello di RDF semplicemente con rdf. 2.2.1 Classi e proprietà In questo paragrafo sono presentate le classi principali e le proprietà che fanno parte del vocabolario definito da RDF Schema. Le classi permettono di definire i tipi base di ogni risorsa che verrà descritta in RDF; le proprietà sono lo strumento utilizzato per esprimere le relazioni fra esse. rdfs:Resource Tutto ciò che viene descritto in RDF è detto risorsa. Ogni risorsa è istanza della classe rdfs:Resource. rdfs:Literal Sottoclasse di rdfs:Resource, rappresenta un letterale, una stringa di testo. rdf:Property Rappresenta le proprietà, cosı̀ come sono state definite nel paragrafo 2.1.1. È sottoclasse di rdfs:Resource. rdfs:Class Corrisponde al concetto di tipo e di classe della programmazione 22 Capitolo 2. Le tecnologie dei metadati object-oriented. Quando viene definita una nuova classe, la risorsa che la rappresenta deve avere la proprietà rdf:type impostata a rdfs:Class. rdf:type Indica che una risorsa è membro di una classe, è cioè istanza di una specifica classe. Il valore di rdf:type deve essere una risorsa che è istanza di rdfs:Class (o sua sottoclasse). In pratica permette di specificare il tipo di una risorsa. rdfs:subClassOf Specifica la relazione di ereditarietà fra classi. Questa proprietà può essere assegnata solo a istanze di rdfs:Class. Una classe può essere sottoclasse di una o più classi (ereditarietà multipla). rdfs:subPropertyOf Istanza di rdf:Property, è usata per specificare che una proprietà è una specializzazione di un’altra. Ogni proprietà può essere la specializzazione di zero o più proprietà. rdfs:seeAlso Specifica una risorsa che fornisce ulteriori informazioni sul soggetto dell’asserzione. Ciò che rappresenta questa risorsa comunque non può essere specificato, ed è a carico dell’applicazione specifica la sua interpretazione. rdfs:isDefinedBy È sottoproprietà di rdfs:seeAlso e indica una risorsa che definisce il soggetto di un’asserzione. L’uso più comune di questa proprietà è di fornire un URI che identifichi lo schema in cui è stata definito il soggetto. rdfs:Container Rappresenta la classe base da cui sono derivati i contenitori di RDF. rdfs:ContainerMembershipPropriety È la classe da cui derivano i membri rdf: 1, rdf: 2, etc. dei contenitori. Esempio 2.11 Qui di seguito verrà adottata la sintassi abbreviata; sono quindi equivalenti le seguenti due scritture, che definiscono una classe di tipo Tipo. <rdf:Description rdf:about="http://schema.org/Tipo"> <rdf:type 2.2 RDF Schema 23 rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdfs:Class rdf:about="http://schema.org/Tipo"/> Definiamo ora la classe Persona, la sua sottoclasse Politico e la classe Candidato, che è sottoclasse di Politico. Infine istanziamo la classe Candidato. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <rdfs:Class rdf:about="http://schema.org/Persona"/> <rdfs:Class rdf:ID="Politico"> <rdfs:subClassOf rdf:resource="http://schema.org/Persona"/> </rdfs:Class> <rdfs:Class rdf:ID="Candidato"> <rdfs:subClassOf rdf:resource="#Politico"/> </rdfs:Class> <rdf:Description rdf:about="http://politics.org/mrossi"> <rdf:type rdf:resource="#Candidato"/> </rdf:Description> </rdf:RDF> 2.2.2 I vincoli Le specifiche di RDF Schema definiscono un vocabolario che permette di effettuare delle asserzioni vincolando le proprietà e le risorse che prendono parte all’associazione. rdfs:ConstraintResource Sottoclasse di rdfs:Resource, le sue istanze rappresentano costrutti di RDF Schema utilizzati per esprimere vincoli. Lo scopo di questa classe è fornire un mezzo ai parser RDF per 24 Capitolo 2. Le tecnologie dei metadati riconoscere i costrutti che rappresentano vincoli. Non è però possibile indicare al parser come utilizzare i vincoli cosı̀ identificati. rdfs:ConstraintProperty Sottoclasse di rdf:Property e rdf:ConstraintResource, le sue istanze sono proprietà usate per specificare dei vincoli. Sia rdfs:domain che rdfs:range sono sue istanze. rdfs:range Usato come predicato di una risorsa r, indica le classi di cui devono essere membri le risorse a cui verrà applicata r. rdfs:domain Usato come predicato di una risorsa r, indica le classi valide che saranno soggetto di un’asserzione che ha come predicato r. Esempio 2.12 Riprendendo l’esempio precedente, definiamo delle proprietà, vincolandole ai tipi definiti in precedenza. Quando reistanziamo un oggetto di tipo Candidato, possiamo comunque applicarvi i predicati definiti per le superclassi da cui discende. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:s="http://schema.org/"> <rdf:Property rdf:about="http://schema.org/Nome"> <rdfs:domain rdf:resource="http://schema.org/Persona"/> <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/> </rdf:Property> <rdf:Property rdf:about="http://schema.org/DataNascita"> <rdfs:domain rdf:resource="http://schema.org/Persona"/> <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/> </rdf:Property> <rdf:Property rdf:ID="Membro"> <rdfs:domain rdf:resource="#Politico"/> 2.3 Topic Maps 25 <rdfs:range rdf:resource="#Partito"/> </rdf:Property> <rdf:Class rdf:about="http://schema.org/Partito"/> <rdf:Description rdf:about="http://politics.org/parties#labour"> <rdf:type rdf:resource="http://schema.org/Partito"/> </rdf:Description> <rdf:Description rdf:about="http://politics.org/mrossi"> <rdf:type rdf:resource="#Candidato"/> <s:Nome>Mario Rossi</s:Nome> <s:DataNascita>08 Ottobre, 1968</s:DataNascita> <epx:Membro rdf:resource="http://www.ePolitix.com/parties#labour"/> </rdf:Description> </rdf:RDF> 2.2.3 La documentazione Le proprietà che seguono forniscono il supporto per una semplice documentazione e per la visualizzazione di risorse descritte in RDF in applicativi specifici. rdfs:label In alcune situazioni può essere necessario fornire una descrizione in forma leggibile (da parte di un essere umano) ad una risorsa, ad esempio per visualizzare tale risorsa in un’applicazione. A tal fine basta aggiungere questo predicato alla risorsa. rdfs:comment Permette di aggiungere un commento ad una risorsa. 2.3 Topic Maps Oltre al W3C, anche l’ISO (International Standard Organization) ha formalizzato uno standard per definire i metadati. Tale standard prende 26 Capitolo 2. Le tecnologie dei metadati il nome di Topic Maps (ISO/IEC 13250) [fS00] e si pone, come obiettivi principali: • La standardizzazione di una notazione per la rappresentazione di metadati, applicabili a qualunque tipo di risorsa. • Favorire l’interoperabilità fra applicazioni che gestiscono queste le informazioni. • Facilitare la navigazione attraverso grandi volumi di dati. L’approccio seguito dall’ISO al problema della definizione di metadati consiste nell’offrire uno strumento che fornisca la necessaria potenza espressiva per permettere l’indicizzazione di qualsiasi tipo di struttura informativa, fornendo nel contempo un potente strumento per la navigazione automatica. Al pari di RDF, quindi, Topic Maps si rende utile nell’ottica del World Wide Web, offrendo la possibilità di una ricerca più efficiente delle informazioni, sfruttando la caratterizzazione semantica attribuita loro. Da qui l’appellativo di “GPS (Global Positioning System) dell’universo informativo” con cui questo standard viene spesso referenziato. L’architettura di Topic Maps è stata inoltre definita con l’intento di facilitare la fusione di più mappe aventi intersezioni nelle strutture informative indicizzate, in modo tale da non richiedere modifiche od operazioni di copia tra documenti. Al fine di evitare ambiguità, d’ora in poi ci riferiremo allo standard Topic Maps ISO/IEC 13250 usando le maiuscole, mentre con il termine “mappe” o “topic maps” intenderemo un generico documento, istanza del modello di dati definito dallo standard. 2.3.1 I concetti fondamentali Lo standard definisce dei costrutti fondamentali per la rappresentazione di meta informazioni, sufficientemente complessi e generici da poter modellare qualsiasi tipo di base informativa. I concetti cardine su cui si basa il modello di Topic Maps sono i topic, le associazioni e le occorrenze. 2.3 Topic Maps 27 I topic Un topic è il più generico concetto che possa essere espresso. Secondo la descrizione dello standard “può essere qualsiasi cosa, indipendentemente dal fatto che esista o meno, e che abbia qualsiasi tipo di caratteristica”. Il ruolo che hanno i topic è quindi paragonabile a quello che hanno le risorse nel modello RDF, ma con due sottili ma importanti differenze: • Un topic può essere completamente scorrelato da qualsiasi riferimento a risorse esterne. • Un topic può essere considerato la reificazione di un oggetto del mondo reale, cioè un “sinonimo” o “rappresentante”, nella mappa, dell’effettiva essenza di ciò a cui si riferisce. Ad ogni topic possono essere associati uno o più nomi, ognuno con diverse funzioni, in base all’utilizzo che si deve fare del topic stesso. Ad esempio, è possibile assegnare dei nomi alternativi al fine di fornire supporto alle applicazioni che dovranno effettuare l’ordinamento e la visualizzazione delle mappe contenenti tali topic. Per un approfondimento su questi concetti di rimanda all’esempio 2.18. Cosı̀ come in RDF un elemento rdf:Description poteva essere istanza di una o più classi, in Topic Maps un topic può essere istanza di zero o più topic types. I topic types rappresentano dei particolari topic, utilizzabili per tipizzarne altri. Pertanto i topic types forniscono uno strumento per definire relazioni di tipo classe-istanza, e quindi possono essere utilizzati per la creazione di ontologie. Le occorrenze Un topic può essere correlato ad una o più risorse o, più generalmente, a strutture informative, considerate rilevanti ai fini della descrizione del topic stesso. Esempi di occorrenze di un topic sono: un articolo o una pagina web in cui si parli della materia oggetto del topic; un libro che lo descriva o che faccia riferimento ad esso; un’immagine che lo ritragga; una breve descrizione interna alla mappa stessa. 28 Capitolo 2. Le tecnologie dei metadati Le occorrenze possono essere caratterizzate da un “ruolo”, l’occurrence role, che deve essere opportunamente tipizzato da un topic type. Secondo la nomenclatura dello standard, questo prende il nome di occurrence role type. Se ad esempio l’occorrenza o consiste in una pagina web che contiene citazioni relative al topic di riferimento, si può definire un occurrence role type “pagina web” ed associarlo ad o. In questo modo si afferma che o è un’occorrenza di tipo “pagina web” per il topic che la contiene. In realtà, per essere più formali, si dovrebbe affermare che un’istanza di “pagina web” viene associata ad o, in maniera analoga a quanto avviene tra topic e topic types. Le associazioni Le associazioni rappresentano una relazione tra due o più topic. Analogamente ai precedenti costrutti, le associazione possono essere caratterizzate da un tipo, ossia possono essere o meno istanza di un topic type. Nel caso specifico il topic type assume il nome di association type. Per meglio definire l’associazione, ciascun topic all’interno di essa può essere caratterizzato da un ruolo, l’association role, che anche in questo caso non è altro che un topic type. A differenza del concetto matematico di relazione le associazioni sono inerentemente simmetriche: se A è in associazione con B, B è necessariamente in associazione con A. È da notare come la relazione tra i topic type e topic “regolari” da essi tipizzati potrebbe essere ugualmente espressa da una associazione tra la classe e l’istanza, cosı̀ come le occorrenze potrebbero essere viste come associazioni tra i topic e le risorse che le descrivono. Pertanto sia la tipizzazione di un topic che le occorrenze di topic possono essere considerate delle forme implicite di associazioni. La ridondanza semantica dei costrutti offerti espone al rischio di errori progettuali nella realizzazione di una mappa, ma viene giustificata da una maggiore flessibilità fornita dallo standard, soprattutto nell’ottica di fusioni tra topic map diverse. 2.3 Topic Maps 2.3.2 29 Esempi di utilizzo dei costrutti fondamentali Gli esempi che seguono sono basati sul modello XTM (XML Topic Maps) versione 1.0, che è stato recentemente adottato come standard per la serializzazione di mappe, sebbene il modello Topic Maps, in maniera analoga a RDF, si presti anche ad essere espresso in termini di grafo. Tali specifiche rielaborano le direttive dello standard ISO/IEC 13250, formalizzando i concetti con una sintassi XML. La sintassi utilizzata per il linking è XLink versione 1.0. Nel seguito verrà descritta la semantica degli elementi che compongono la specifica mediante vari esempi. Per una descrizione più formale della grammatica mediante il DTD si rimanda al paragrafo 2.3.5. In seguito, inoltre, si ricorrerà all’uso di grafi per rappresentare, in modo simile a quanto fatto per RDF, i documenti XTM definiti. In un grafo, i nodi, se ovali, corrispondono ai vari topic; se rettangolari rappresentano dei letterali. Le associazioni fra topic sono rappresentate da rombi. Gli altri elementi del modello XTM sono definiti dagli archi. A differenza di RDF, la rappresentazione mediante grafi non è stata mai specificata, pertanto quanto presentato in seguito è stato definito per l’occasione e naturalmente non ha riferimenti bibliografici. Esempio 2.13 Per esprimere il concetto “Mario Rossi è una persona”, definiamo il topic Persona con identificatore tt-person ed il topic Mario Rossi come istanza di Persona. La doppia t iniziale usata nella definizione del primo topic rappresenta una notazione sintattica atta ad evidenziare che il topic è un topic type. Si noti inoltre che per aver modo di referenziare i vari topic all’interno del documento, ciascuno di essi viene definito mediante una stringa univoca, che rappresenta un’ancora nella mappa. <topic id="tt-person"> <baseName> <baseNameString>Persona<baseNameString> <baseName> </topic> <topic id="mario_rossi"> <instanceOf> 30 Capitolo 2. Le tecnologie dei metadati <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Mario Rossi</baseNameString> </baseName> </topic> Esempio 2.14 Per aggiungere l’informazione “Mario Rossi è l’autore della pagina web http://www.myhost.com/˜mrossi” definiamo prima il topic type per la pagina web. <topic id="tt-web_page"> <baseName> <baseNameString>Web Page</baseNameString> </baseName> </topic> Definiamo quindi il topic che identifica la pagina web come istanza del tipo tt-web page. Maggiori dettagli su subjectIdentity verranno forniti nel paragrafo 2.3.3; per ora basti sapere che questo elemento permette di referenziare una risorsa che definisce l’oggetto rappresentato dal topic. <topic id="WebPage001"> <instanceOf> <topicRef xlink:href="#tt-web_page"> </instanceOf> <subjectIdentity> <subjectIndicatorRef xlink:href="http://www.myhost.com/~mrossi"/> </subjectIdentity> <baseName> <baseNameString>Home Page di Mario Rossi</baseNameString> </baseName> </topic> Dopo aver definito tutti i topic che rappresentano le entità che si vogliono modellare, definiamo l’associazione fra di essi. Come primo passo si crea un 2.3 Topic Maps 31 topic con funzione di association type. Tale topic verrà utilizzato per tipizzare l’associazione autore di. <topic id="at-author"> <baseName> <baseNameString>Autore</baseNameString> </baseName> </topic> Infine, creiamo l’associazione. Questa è istanza del tipo at-author, definito precedentemente, ed ha come membri i topic che rappresentano Mario Rossi e la pagina web. Per ciascun membro viene specificato il ruolo assunto all’interno dell’associazione. <association id="Association001"> <instanceOf> <topicRef xlink:href="#at-author"> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#tt-web_page"/> </roleSpec> <topicRef xlink:href="#WebPage001"/> </member> <member> <roleSpec> <topicRef xlink:href="#tt-person"/> </roleSpec> <topicRef xlink:href="#mario_rossi"/> </member> </association> Come si nota, è possibile associare un identificatore univoco anche alle associazioni in modo tale da potersi riferire ad esse. 32 Capitolo 2. Le tecnologie dei metadati instanceOf at-author Association001 baseName member member Autore topicRef topicRef roleSpec roleSpec mario rossi instanceOf WebPage001 instanceOf tt-person tt-web page baseName baseName Persona Mario Rossi baseName Home Page di Mario Rossi subjectIdentity baseName Web Page http://www.myhost.org/˜mrossi Figura 2.5: Grafo corrispondente al documento dell’esempio 2.14 Esempio 2.15 Il modello Topic Maps permette di differenziare, per ogni risorsa informativa, il ruolo di soggetto di un topic da quello di risorsa che faccia semplicemente riferimento ad esso, cosı̀ come avviene nelle occorrenze. Nell’esempio precedente, la pagina web è stata rappresentata nella mappa attraverso un topic, di cui quindi rappresenta il soggetto. In questo esempio verrà presentato il caso in cui una risorsa è l’occorrenza di un topic. Supponendo che la risorsa “http://www.anagrafe.it/rossi.html” descriva i dati anagrafici di Mario Rossi, potremmo estendere la definizione del topic relativo alla persona di Mario Rossi, affermando che in tale risorsa “si parla” proprio di Mario Rossi. Si aggiunge pertanto a tale topic un riferimento a 2.3 Topic Maps 33 questa pagina. Viene inoltre specificato il ruolo dell’occorrenza mediante l’elemento instanceOf di occurrence: in questo caso si è scelto l’occurrence role type ort-anagrafe. <topic id="ort-anagrafe"> <baseName> <baseNameString>Dati Anagrafici</baseNameString> </baseName> </topic> <topic id="mario_rossi"> <instanceOf> <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Mario Rossi</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#ort-anagrafe"/> </instanceOf> <resourceRef xlink:href="http://www.anagrafe.it/rossi.html"/> </occurrence> </topic> 2.3.3 Altri elementi del modello Come si è visto, un topic può talvolta essere visto come la reificazione di un’entità o di un concetto che rappresenta. Di qui la possibilità di associare al topic un attributo di identità (subjectIdentity) che abbia come valore un riferimento al soggetto che si vuole reificare. L’attributo subjectIdentity permette quindi di distinguere le differenti situazioni in cui una risorsa rappresenti una semplice occorrenza del topic (come visto nell’esempio 2.15) o sia il soggetto stesso del topic (esempio 2.14). 34 Capitolo 2. Le tecnologie dei metadati Dati Anagrafici mario rossi occurrence instanceOf tt-person baseName baseName ort-anagrafe instanceOf resourceRef Mario Rossi http://www.anagrafe.it/rossi.html Persona Figura 2.6: Grafo corrispondente al documento dell’esempio 2.15 La possibilità di poter accedere a qualsiasi cosa sia referenziabile, e quindi anche ad altri topic o associazioni, rende possibile la loro stessa reificazione. Secondo il modello Topic Maps se due topic diversi reificano uno stesso soggetto vengono considerati semanticamente equivalenti al singolo topic ottenuto unendo le caratteristiche di entrambi. Esempio 2.16 Se volessimo reificare l’asserzione dell’esempio 2.14, specificando che tale affermazione è stata compiuta da Andrea, potremmo definire un topic che abbia come subjectIdentity un riferimento all’associazione da reificare e quindi creare un’associazione (opportunamente tipizzata) tra questo topic ed il topic che definisce Andrea. <topic id="andrea"> <instanceOf> <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Andrea</baseNameString> </baseName> </topic> <topic id="tt-reified_statement"> 2.3 Topic Maps <baseName> <baseNameString>Reified Statement</baseNameString> </baseName> </topic> <topic id="Reif001"> <instanceOf> <topicRef xlink:href="#reified_statement"/> </instanceOf> <subjectIdentity> <subjectIndicatorRef xlink:href="#Association001"/> </subjectIdentity> </topic> <topic id="at-affermato_da"> <baseName> <baseNameString>Affermato da</baseNameString> </baseName> </topic> <association id="Association002"> <instanceOf> <topicRef xlink:href="#tt-affermato_da"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#tt-reified_statement"/> </roleSpec> <topicRef xlink:href="#Reif001"/> </member> <member> <roleSpec> <topicRef xlink:href="#tt-person"/> </roleSpec> <topicRef xlink:href="#andrea"/> </member> 35 36 Capitolo 2. Le tecnologie dei metadati </association> Per reificare l’associazione “Association001” potrebbe sembrare più ovvio referenziare direttamente tale associazione da “Association002”, ma il modello Topic Maps non permette di utilizzare un’associazione come membro di un’altra associazione. Per sopperire a questa mancanza è stata sufficiente la creazione del topic “Reif001” il cui soggetto, espresso mediante l’elemento subjectIdentity, è l’associazione “Association001”, quella si vuole reificare. Sarà poi questo topic ad essere uno dei membri di “Association002”. Come si vedrà in seguito, una possibile alternativa per esprimere lo stesso concetto in Topic Maps sarà la creazione di uno scope, ossia di un contesto, entro il quale vincolare la validità dell’associazione da reificare. L’attributo scope serve, come il nome stesso suggerisce, a limitare la validità di alcune definizioni, specificandone il contesto di riferimento. In particolare, è possibile assegnare degli scope ai seguenti costrutti: • nomi dei topic (baseName); • occorrenze; • associazioni. In questo modo ciascuno di questi concetti viene considerato valido solamente in riferimento allo scope specificato, se ve n’è uno, o globalmente valido altrimenti. Gli scope sono definiti in termini di temi (definiti themes nello standard), ossia di topic specificamente creati per essere usati come valori di scope. Esempio 2.17 Applicando degli scope a elementi baseName di topic, possiamo assegnare loro i nomi espressi in più lingue, ad ognuna delle quali corrisponderà un tema. <topic id="language"> <baseName> <baseNameString>Language</baseNameString> </baseName> 2.3 Topic Maps 37 </topic> <topic id="italiano"> <instanceOf> <topicRef xlink:href="#language"/> </instanceOf> <baseName> <baseNameString>Italiano</baseNameString> </baseName> </topic> <topic id="inglese"> <instanceOf> <topicRef xlink:href="#language"/> </instanceOf> <baseName> <baseNameString>English</baseNameString> </baseName> </topic> Volendo assegnare un nome diverso alla pagina web definita in precedenza, a seconda della lingua, possiamo vincolare il baseName allo scope determinato dai precedenti temi linguistici. <topic id="WebPage001"> <instanceOf> <topicRef xlink:href="#tt-web_page"> </instanceOf> <subjectIdentity> <subjectIndicatorRef xlink:href="http://www.myhost.com/~mrossi"/> </subjectIdentity> <baseName> <baseNameString>Nome di default</baseNameString> </baseName> <baseName> <scope><topicRef xlink:href="#italiano"/></scope> 38 Capitolo 2. Le tecnologie dei metadati <baseNameString> Home Page di Mario Rossi </baseNameString> </baseName> <baseName> <scope><topicRef xlink:href="#inglese"/></scope> <baseNameString>Mario Rossi’s Home Page</baseNameString> </baseName> </topic> In maniera analoga all’esempio precedente, associazioni e occorrenze possono essere contestualizzate. All’interno degli elementi occurrence e association può comparire l’elemento scope con riferimento ad uno o più topictheme o ad una risorsa, che viene in questo caso interpretata come tema. Uno scope può essere l’unione di un numero arbitrario di temi, nel qual caso la validità è estesa a ciascuno di essi. Un elemento baseName permette di assegnare un nome al topic cui fa parte. Entro tale elemento è anche possibile specificare degli elementi variant, mediante i quali si possono assegnare al topic degli ulteriori nomi. A differenza del nome espresso dall’elemento baseName, quelli espressi per mezzo di un elemento variant hanno significato solo entro uno specifico contesto. Esempio 2.18 Supponendo che un’applicazione abbia la necessità di ordinare alfabeticamente la base di dati a cui Mario Rossi appartiene, potremmo aggiungere la stringa “rossi, mario”, da utilizzare in questa situazione. I valori dell’elemento parameters determinano i casi di utilizzo di questo “nome alternativo” aggiunto. <topic id="mario_rossi"> <instanceOf> <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Mario Rossi</baseNameString> <variant> <parameters> 2.3 Topic Maps 39 http://www.myhost.org/˜mrossi instanceOf subjectIdentity tt-web-page WebPage001 baseName baseName baseName Nome di default baseNameString scope baseNameString Home Page di Mario Rossi scope Mario Rossi’s Home Page inglese italiano instanceOf baseName language instanceOf baseName baseName Language Italiano English Figura 2.7: Grafo corrispondente al documento dell’esempio 2.17 <topicRef xlink:href="#ordinamento"/> </parameters> <variantName> <resourceData>rossi, mario</resourceData> </variantName> </variant> </baseName> </topic> Nello standard ISO è stato definito anche attributo facet, pensato per assegnare, in maniera diretta, metadati di tipo proprietà-valore alle risorse informative che costituiscono le occorrenze nelle definizioni di topic, svolgendo pertanto un compito molto simile ad un’asserzione RDF. Inoltre tale attributo 40 Capitolo 2. Le tecnologie dei metadati potrebbe essere usato per filtrare le risorse referenziate dipendentemente dal valore della proprietà. Tuttavia i facet non sono stati inclusi nella specifica XTM. La semantica di tale costrutto è d’altronde piuttosto ridondante rispetto a quanto già definito, soprattutto in relazione agli scope. Infatti essa è riproducibile aggiungendo alle occorrenze del topic dei riferimenti che rappresentino i valori delle proprietà. Esempio 2.19 Se si volesse aggiungere all’occorrenza interna del topic Mario Rossi l’informazione “la pagina web è in italiano”, (corrispondente alla coppia proprietà-valore lingua-italiano), potremmo specificare uno scope che rappresenta il valore del facet. <topic id="mario_rossi"> <instanceOf> <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Mario Rossi</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#ort-anagrafe"/> </instanceOf> <scope><topicRef xlink:href="#italiano"/></scope> <resourceRef xlink:href="http://www.anagrafe.it/rossi.html"/> </occurrence> </topic> 2.3.4 Published Subject Identifier A differenza dello standard RDF, incentrato sulle risorse, lo standard Topic Maps, spesso definito come “topic centrico”, non pone alcun vincolo alla referenziazione a documenti reali. In questo modo si rende possibile sia la descrizione di risorse accedibili da Web, organizzate gerarchicamente, sia la creazione di topic maps puramente dichiarative, senza alcun link a risorse esterne. 2.3 Topic Maps 41 In generale non esiste una distinzione sintattica tra la parte dichiarativa e quella descrittiva di una mappa, il che può rendere difficile l’interpretazione della mappa stessa. Sono quindi stati creati i cosiddetti topic-template, che permettono una definizione sistematica dei topic da utilizzare come tipi base nella creazione di ulteriori mappe. I topic-template sono definiti mediante PSI (Published Subject Identifier), il cui URI può essere utilizzato per referenziarli. Nonostante allo stato attuale il numero dei PSI definiti sia piuttosto limitato, il loro utilizzo permette di riferirsi a tipi standard, la cui semantica è nota, senza avere in questo modo la necessità di ridefinire gli stessi concetti in ogni mappa. La specifica XTM 1.0 descrive i seguenti tipi: topic - Classe generica che tipizza tutti i topic, se non altrimenti specificato. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#topic occurrence - Classe generica che tipizza tutte le risorse utilizzate come occorrenze, se non altrimenti specificato. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#occurrence association - Classe generica che tipizza tutte le associazioni, se non altrimenti specificato. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#association class-instance - Classe delle associazioni atte a rappresentare relazioni di classe-istanza tra topic. Associazioni di questo tipo sono semanticamente equivalenti all’uso dell’elemento instanceOf nella descrizione di un topic. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#class-instance class - Classe per la tipizzazione del ruolo di classe nei membri di associazione di tipo class-instance. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#class instance Classe per la tipizzazione del ruolo di istanza nei membri di associazione di tipo class-instance. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#instance 42 Capitolo 2. Le tecnologie dei metadati superclass-subclass Classe delle associazioni atte a rappresentare relazioni di superclasse-sottoclasse tra topic. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass superclass Classe per la tipizzazione del ruolo di superclasse nei membri di associazione di tipo superclass-subclass. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#superclass subclass Classe per la tipizzazione del ruolo di sottoclasse nei membri di associazione di tipo superclass-subclass. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#subclass sort Topic utile alla definizione di nomi per l’ordinamento, pensato per essere usato come scope degli elementi variant. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#sort display Topic utile alla definizione di nomi per l’ordinamento, pensato per essere usato come scope degli elementi variant. URI: http://www.topicmaps.org/xtm/1.0/core.xtm#display Topic Maps, come si è visto, permette in maniera diretta di definire relazioni di tipo classe-istanza tra topic, senza l’overhead della dichiarazione esplicita dell’associazione. Facendo a meno di questi meccanismi di tipizzazione, è possibile comunque creare gerarchie di classi definendo una sottoclasse come istanza di una superclasse. Esempio 2.20 Si definisce Candidato come sottoclasse di Politico, e quest’ultimo come sottoclasse di Persona nel modo seguente. <topic id="tt-politico"> <instanceOf> <topicRef xlink:href="#tt-person"/> </instanceOf> <baseName> <baseNameString>Politico</baseNameString> </baseName> </topic> 2.3 Topic Maps 43 <topic id="tt-candidato"> <instanceOf> <topicRef xlink:href="#tt-politico"/> </instanceOf> <baseName> <baseNameString>Candidato</baseNameString> </baseName> </topic> Mediante PSI è tuttavia possibile specificare direttamente la relazione classe-sottoclasse. Limitandoci alle classi Politico e Candidato, l’esempio precedente potrebbe essere riformulato nel seguente modo. <topic id="tt-politico"> <baseName> <baseNameString>Politico</baseNameString> </baseName> </topic> <topic id="tt-candidato"> <baseName> <baseNameString>Candidato</baseNameString> </baseName> </topic> <association> <instanceOf> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass"/> </roleSpec> <topicRef xlink:href="#tt-politico"/> 44 Capitolo 2. Le tecnologie dei metadati </member> <member> <roleSpec> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#subclass"/> </roleSpec> <topicRef xlink:href="#tt-candidato"/> </member> </association> 2.3.5 Descrizione della sintassi XTM A causa dell’iniziale assenza nello standard ISO/IEC 13250 di specifiche per la serializzazione di Topic Maps, il consorzio indipendente denominato TopicMaps.org ([PM01]), formato dalle maggiori aziende interessate allo sviluppo del paradigma, ha redatto le specifiche di XTM 1.0, con l’intento di creare uno standard de facto per la rappresentazione e lo scambio di documenti topic maps. Tra gli obiettivi progettuali dichiarati dagli autori della specifica XTM sono: • Massimizzare la semplicità di utilizzo nel Web; • Minimizzare le funzionalità opzionali; • Facilitare la creazione e la manipolazione di mappe; • Rendere ragionevolmente leggibili i documenti. Negli esempi finora presentati sono stati presentati tutti i costrutti definiti in XTM, ma nulla è stato esposto sui vincoli della grammatica, definita da un apposito DTD, che riportiamo per completezza. È strano che le specifiche di RDF siano state invece definite mediante produzioni grammaticali [Dum]... <!ELEMENT topicMap ( topic | association | mergeMap )* > 2.3 Topic Maps 45 <!ATTLIST topicMap id ID #IMPLIED xmlns CDATA #FIXED ’http://www.topicmaps.org/xtm/1.0/’ xmlns:xlink CDATA #FIXED ’http://www.w3.org/1999/xlink’ xml:base CDATA #IMPLIED > <!ELEMENT topic ( instanceOf*, subjectIdentity?, ( baseName | occurrence )* ) > <!ATTLIST topic id ID #REQUIRED > <!-- instanceOf: Points To a Topic representing a class --> <!ELEMENT instanceOf ( topicRef | subjectIndicatorRef ) > <!ATTLIST instanceOf id ID #IMPLIED > <!-- subjectIdentity: Subject reified by Topic --> <!ELEMENT subjectIdentity ( resourceRef?, ( topicRef | subjectIndicatorRef )* ) > <!ATTLIST subjectIdentity id ID #IMPLIED > <!-- topicRef: Reference to a Topic element --> <!ELEMENT topicRef EMPTY > <!ATTLIST topicRef id ID xlink:type NMTOKEN xlink:href CDATA #IMPLIED #FIXED ’simple’ #REQUIRED 46 Capitolo 2. Le tecnologie dei metadati > <!-- subjectIndicatorRef: Reference to a Subject Indicator --> <!ELEMENT subjectIndicatorRef EMPTY > <!ATTLIST subjectIndicatorRef id ID #IMPLIED xlink:type NMTOKEN #FIXED ’simple’ xlink:href CDATA #REQUIRED > <!-- baseName: Base Name of a Topic --> <!ELEMENT baseName ( scope?, baseNameString, variant* ) > <!ATTLIST baseName id ID #IMPLIED > <!-- baseNameString: Base Name String container --> <!ELEMENT baseNameString <!ATTLIST baseNameString id ID > ( #PCDATA ) > #IMPLIED <!-- variant: Alternate forms of Base Name --> <!ELEMENT variant <!ATTLIST variant id > ( parameters, variantName?, variant* ) > ID #IMPLIED <!-- variantName: Container for Variant Name --> <!ELEMENT variantName <!ATTLIST variantName ( resourceRef | resourceData ) > 2.3 Topic Maps id 47 ID #IMPLIED > <!-- parameters: Processing context for Variant --> <!ELEMENT parameters ( topicRef | subjectIndicatorRef )+ > <!ATTLIST parameters id ID #IMPLIED > <!-- occurrence: Resources regarded as an Occurrence --> <!ELEMENT occurrence ( instanceOf?, scope?, ( resourceRef | resourceData ) ) > <!ATTLIST occurrence id ID #IMPLIED > <!-- resourceRef: Reference to a Resource --> <!ELEMENT resourceRef EMPTY <!ATTLIST resourceRef id ID xlink:type NMTOKEN xlink:href CDATA > > #IMPLIED #FIXED ’simple’ #REQUIRED <!-- resourceData: Container for Resource Data --> <!ELEMENT resourceData <!ATTLIST resourceData id ID > ( #PCDATA ) > #IMPLIED <!-- association: Topic Association --> 48 Capitolo 2. Le tecnologie dei metadati <!ELEMENT association ( instanceOf?, scope?, member+ ) > <!ATTLIST association id ID #IMPLIED > <!-- member: Member in Topic Association --> <!ELEMENT member ( roleSpec?, ( topicRef | resourceRef | subjectIndicatorRef )* ) > <!ATTLIST member id ID #IMPLIED > <!-- roleSpec: Points to a Topic serving as an Association Role --> <!ELEMENT roleSpec ( topicRef | subjectIndicatorRef ) > <!ATTLIST roleSpec id ID #IMPLIED > <!-- scope: Reference to Topic(s) that comprise the Scope --> <!ELEMENT scope <!ATTLIST scope id > ( topicRef | resourceRef | subjectIndicatorRef )+ > ID #IMPLIED <!-- mergeMap: Merge with another Topic Map --> <!ELEMENT mergeMap (topicRef | resourceRef | subjectIndicatorRef)* > <!ATTLIST mergeMap id ID #IMPLIED 2.3 Topic Maps xlink:type xlink:href 49 NMTOKEN CDATA #FIXED ’simple’ #REQUIRED > 2.3.6 Vincoli di consistenza e validità Benché sia chiara la necessità di un meccanismo per la definizione di vincoli semantici sulla struttura delle mappe, al momento della stesura di questa dissertazione non è stato ufficializzato nessuno standard in proposito. La possibilità di definire schemi di mappe è una necessità stringente per molte applicazioni basate sul linguaggio, soprattuto, come vedremeo, per gli strumenti di authoring. L’ISO sta elaborando TMCL (Topic Map Constraint Language), [Ste01] un linguaggio che permetterà la definizione di “schemi” mediante i quali sarà possibile specificare vincoli strutturali sui topic, consentendo la validazione delle mappe. Il documento di specifica finora pubblicato riguardante lo sviluppo di tale linguaggio ne descrive i requisiti e fornisce, a scopo propositivo una prima bozza di specifica di TMCL, che permette la definizione dei più comuni vincoli auspicabilmente esprimibili da uno schema. Tale specifica è stata pubblicata con l’intento di rappresentare un punto di partenza per le discussioni sulle esigenze del linguaggio, in particolare sulle potenzialità espressive che tale linguaggio dovrà possedere. Requisiti di TMCL I principali requisiti riconosciuti dal draft ISO per il linguaggio di specifica di vincoli sono riassumibili in: • Un supporto per definire topic con funzioni di classe, utilizzabili solo per tipizzare rispettivamente altri topic, associazioni e occorrenze, e ruoli di associazioni. • Vincoli sulla presenza di attributi dalla struttura predefinita (quali nomi, soggetto e occorrenze) che devono essere specificati per topic di un dato tipo. 50 Capitolo 2. Le tecnologie dei metadati • Vincoli sulla presenza di associazioni a cui topic di un dato tipo devono partecipare. • Possibilità di vincolare la struttura delle associazioni in base al loro tipo, in modo da permettere la sola presenza di membri di un dato tipo. • Vincoli di cardinalità sugli attributi associabili ai costrutti, sia per quanto riguarda i topic (numero minimo e massimo di nomi, occorrenze etc..), sia per le associazioni (numero dei membri e dei partecipanti a ciascun membro). Un ulteriore importante requisito relativo al linguaggio riconosciuto dal draft ISO è la sua esprimibilità attraverso la sintassi XTM. Ciò infatti permetterebbe alle applicazioni di gestire ogni documento di schema alla stregua delle proprie istanze, consentendo il riutilizzo degli strumenti di parsing finora sviluppati. Proposta ISO di TMCL La prima istanza di specifica di TMCL fa ricorso essenzialmente al meccanismo dei PSI per la definizione delle classi e l’estensione semantica dei costrutti di Topic Maps. In particolare non viene aggiunto alcun nuovo tag per la sintassi XTM. Il meccanismo di applicabilità dei vincoli espressi dallo schema consiste essenzialmente nel matching tra i tipi di topic e delle associazioni nel documento istanza e la definizione degli stessi nel documento che descrive lo schema: ogni topic o associazione tipizzata con un topic-type definito nello schema è soggetto ai vincoli ivi espressi. I concetti necessari al sistema di vincoli descritti dal draft di specifica vengono identificati attraverso dei PSI, rappresentati da URL ancora provvisori ed indicati a scopo illustrativo, e servono a rappresentare i seguenti concetti: topic type - Classe di un topic con funzioni di tipizzazione per topic: ogni topic dello schema tipizzato con tale PSI potrà essere usato per la tipizzazione dei topic di documenti conformi allo schema. 2.3 Topic Maps 51 occurrence type - Classe di un topic con funzioni di tipizzazione per occorrenze. association type - Classe di un topic con funzioni di tipizzazione per associazioni. association role type - Classe di un topic con funzioni di tipizzazione per ruoli di associazioni. theme - Classe di un topic con funzioni di tipizzazione per temi. template - Un topic template è riconosciuto come un tema utilizzabile per specificare, attraverso uno scope, il ruolo di schema del costrutto che contestualizza. Se ad esempio viene indicato nello scope di un’occorrenza di un topic-type dello schema, ogni topic di un documento conforme allo schema, che sia istanza di tale topic-type, dovrà presentare un’occorrenza strutturalmente identica a quella dello schema (salvo la presenza del tema template stesso nello scope). Esempio 2.21 La definizione seguente definisce un topic-type e fornisce dei template per nomi e occorrenze specificabili in topic istanza di questo tipo. <topic id="country"> <instanceOf> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#topic-type"/> </instanceOf> <baseName> <baseNameString>country</baseNameString> </baseName> <baseName> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> <topicRef xlink:href="#en"/> </scope> <baseNameString>English name</baseNameString> 52 Capitolo 2. Le tecnologie dei metadati </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#map"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <resourceRef xlink:href="http://www.maps.com/"/> </occurrence> </topic> Per essere conforme a questo schema un topic di tipo “country” deve avere un nome con scope “en”, atto ad indicare il nome in lingua inglese, deve avere occorrenze di tipo “map”, localizzabile tramite un riferimento a risorsa il cui URI inizi con “http://www.maps.com/”. Il seguente topic ne è un esempio: <topic id="norway"> <instanceOf> <topicRef xlink:href="#country"/> </instanceOf> <baseName> <scope> <topicRef xlink:href="#en"/> </scope> <baseNameString>Norway</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#map"/> </instanceOf> <resourceRef xlink:href="http://www.maps.com/norway.jpg"/> </occurrence> </topic> Esempio 2.22 La seguente definizione descrive un template di associazione tra persone e città, utile a specificare il luogo di nascita. 2.3 Topic Maps 53 <topic id="#born-in"> <instanceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#association-type"/> </instanceOf> </topic> <topic id="#person-role"> <instanceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#association-role-type"/> </instanceOf> </topic> <topic id="#place-role"> <instanceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#association-role-type"/> </instanceOf> </topic> <topic id="#person"> <instanceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#association-role-type"/> </instanceOf> </topic> <topic id="#city"> <instanceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#association-role-type"/> </instanceOf> </topic> <association> 54 Capitolo 2. Le tecnologie dei metadati <instanceOf> <topicRef xlink:href="#born-in"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <member> <roleSpec> <topicRef xlink:href="#person-role"/> </roleSpec> <topicRef xlink:href="#person"/> </member> <member> <roleSpec> <topicRef xlink:href="#place-role"/> </roleSpec> <topicRef xlink:href="#city"/> </member> </association> Ogni definizione di associazione istanza conforme a questo template, ossia di tipo “born-in” dovrà possedere come membri due topic, il primo di tipo e “person” con ruolo “person-role” ed il secondo di tipo “city” con ruolo “placerole”. Il seguente frammento di documento XTM è conforme allo schema precedente: <topic id="riccardo"> <instanceOf> <topicRef xlink:href="#person"/> </instanceOf> </topic> <topic id="pesaro"> <instanceOf> <topicRef xlink:href="#city"/> 2.3 Topic Maps 55 </instanceOf> </topic> <association> <instanceOf> <topicRef xlink:href="#born-in"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#person-role"/> </roleSpec> <topicRef xlink:href="#riccardo"/> </member> <member> <roleSpec> <topicRef xlink:href="#place-role"/> </roleSpec> <topicRef xlink:href="#pesaro"/> </member> </association> In generale, in presenza di uno schema esistono due modi di considerare la validazione dei documenti, ossia con interpretazione lasca o stringente. Nel primo caso i vincoli espressi nello schema vengono considerati validi solo nelle condizioni in cui sono applicabili ed ogni definizione che esuli dalle condizioni espresse dai vincoli dello schema è accettata. Nel secondo caso i documenti sono validi solo se tutti gli elementi in esso definiti sono tipizzati e in accordo allo schema definito. Questa proposta di specifica sembra soddisfare la maggior parte delle necessità di utilizzo per vincolare mappe. Lo stesso documento di specifica indica quella descritta come una soluzione tra il 60/40 e l’80/20 in termini di esigenze di casi d’uso. Le potenzialità espressive di questa versione di TMCL sono tuttavia solo una parte dell’insieme dei requisiti che lo standard si prefigge di raggiungere nella futura versione definitiva. In particolare, le limitazioni più stringenti riconosciute da questo primo draft sono: 56 Capitolo 2. Le tecnologie dei metadati 1. Impossibilità di imporre che topic appartenenti ad una certa classe di tipi debbano partecipare a determinate associazioni, in un determinato ruolo. 2. Impossibilità di esprimere vincoli di cardinalità sul numero degli attributi associati ai vari costrutti, ad esempio sull’esatto numero (o intervallo di validità) dei membri di una associazione di un determinato tipo. 3. Impossibilità di definire le valide combinazioni di temi che possono costituire uno scope valido per i costrutti che lo prevedono. OSL: Ontopia Schema Language Un altra specifica di linguaggio di schema per documenti Topic Maps è rappresentata dal linguaggio di “constraint” sviluppato in maniera indipendente da Ontopia Inc. [Ont]. Presentato nel novembre scorso col nome di OSL (Ontopia Schema Language), tale linguaggui ha l’obiettivo di fornire un supporto concreto, funzionale ed efficiente al problema della definizione di schemi per documenti XTM, in attesa che l’ISO ufficializzi una versione definitiva del linguaggio TMCL ufficiale. OSL ha anche un valore propositivo nei confronti di TMCL, racchiudendo in se parte delle funzionalità auspicate ma non ancora definite dallo stesso. Tuttavia, OSL ha lo svantaggio di essere frutto di una iniziativa del tutto independente di una azienda interessata allo standard Topic Maps, e pertanto legata alle volontà di un’unica azienda. Un ulteriore caratteristica negativa di OSL è l’estensione della sintassi XTM utilizzata per definire gli schemi. Il vantaggio di OSL rispetto al “low bar proposal” di TMCL sta nella più fine granularità con cui è possibile controllare la struttura dei documenti, ma al prezzo di avere schemi che non sono documenti XTM validi. Capitolo 3 Conversione fra RDF e Topic Maps Gli standard RDF e Topic Maps, presentati nel capitolo precedente, definiscono due diverse tecnologie che forniscono supporto per lo stesso dominio applicativo: la specifica di metadati. Ma, come dice un adagio in uso nell’informatica, “il bello degli standard sta nella possibilità di poter scegliere fra i tanti”. Pertanto il problema che si pone in presenza di più standard riguardanti lo stesso contesto applicativo è l’interoperabilità fra le applicazioni che ne implementano le specifiche. L’intento che ci si è proposti, pertanto, è quello di capire le differenze sostanziali tra i due modelli ed i problemi derivanti dalla necessità di rappresentare tutti i concetti esprimibili secondo un modello nei termini dell’altro. A tal fine, per tutti i costrutti di entrambi i modelli, verranno commentati gli approcci di traduzione descritti nei lavori in materia finora pubblicati. Verranno inoltre proposti e argomentati gli schemi di traduzione scelti e implementati. 58 Capitolo 3. Conversione di formati 3.1 Confronto fra i due paradigmi Sebbene le due tecnologie condividano il dominio applicativo della descrizione di metadati, i differenti contesti in cui si sono evoluti hanno comportato un diverso approccio alla formulazione dei costrutti di base da cui sono composti. In generale, entrambi gli standard sono volti all’utilizzo nel settore del knowledge management, in tutte le accezioni attribuibili al termine, anche se l’idea ispiratrice della loro creazione ha posto l’accento su un diversi aspetti. Topic Maps è nato con l’intento di risolvere il findability problem, ossia di creare uno strumento che permetta un’efficiente ricerca di argomenti sulla base della loro semantica. Tali argomenti possono rappresentare concetti astratti o possono essere documenti reali. La loro ricerca viene effettuata mediante un complesso meccanismo di indicizzazione e caratterizzazione, grazie al quale è possibile fornire alle applicazioni un modo standard di trattare le informazioni, in particolare se esse sono risorse web. RDF è stato sviluppato come strumento di base per la creazione del Semantic Web [Mil01], pensato per essere un’estensione del Web di oggi, in cui sia possibile associare ad ogni risorsa pubblicata un insieme di metainformazioni, atte ad esprimerne la semantica. I vantaggi che si possono trarre in questo modo permetterebbero, in prima istanza, una più efficiente ricerca e interpretazione automatica di tali risorse. Nonostante ciò, comunque, entrambi i paradigmi cercano di raggiungere i rispettivi obiettivi mediante concetti comuni: • definizione di entità, astratte (ossia che modellano un concetto e non rappresentano risorse fisiche) o concrete; • definizione di relazioni di varia natura tra entità; • rappresentazione del modello mediante grafo con archi etichettati; • definizione di una sintassi di serializzazione per rendere pratico l’interscambio dei metadati attraverso la rete. Nella stesura dei rispettivi paradigmi, benché fossero pressoché analoghe le finalità, sono state prese scelte implementative significativamente diverse, che 3.1 Confronto fra i due paradigmi 59 hanno portato un maggiore potere espressivo per i costrutti di base di Topic Maps. Questo aspetto verrà discusso spesso in seguito, specialmente quando si dovrà effettuare la conversione verso RDF. Come è stato evidenziato nel precedente capitolo, il livello di specifica raggiunto nei due casi non è a tutt’oggi uniforme. Nel caso di RDF il lavoro della comunità interessata si spinge su più fronti: • è in corso la stesura di standard a supporto con funzionalità di constraint e di estensione semantica, quali RDFS stesso, DAML e OIL ([dam02] e [oil02]), che forniranno il supporto di meccanismi inferenziali a sistemi deduttivi; • sono già disponibili le prime proposte (già implementate e funzionali) di meccanismi di query come RQL (RDF Query Language, vedi [oCS01]), RDQL (vedi [rdq02]) e Sesame (vedi [ses02]); • sono ancora in fase di aggiornamento alcune delle specifiche di base: il documento che descrive le specifiche sintattiche [Bec02] si trova tutt’ora allo stato di Working Draft. Per quanto riguarda Topic Maps, benché lo standard ISO 13250 appaia ormai stabilmente consolidato, i linguaggi di quering (TMQL: Topic Maps Query Language [Han01]) e le specifiche di validazione (TMCL: Topic Maps Constraint Language [Ste01]) attendono ancora una prima stesura, sebbene se ne avverta la necessità impellente. Il loro stato di avanzamento inoltre appare strettamente legato alle (ancore poche) compagnie che supportano questa tecnologia. I limiti delle potenzialità espressive di entrambi i meta linguaggi sono a tutt’oggi poco definiti. I reciproci sostenitori dichiarano che l’uno sia in grado di coprire qualsiasi contesto applicativo dell’altro. Tra l’altro, non si conoscono analisi critiche comparative che dimostrino in maniera imparziale la superiorità di uno dei due, o che ne abbiano evidenziato le possibili sinergie. 60 Capitolo 3. Conversione di formati 3.2 Problematiche di conversione Per offrire interoperabilità tra i due paradigmi è necessario poter rendere le applicazioni RDF in grado di gestire ed interrogare documenti nella specifica Topic Maps e viceversa, attraverso la conversione dei documenti da un formato all’altro. Esistono fondamentalmente due approcci alternativi al problema della conversione. • Il primo consiste nella descrizione dei costrutti di base di un paradigma mediante gli strumenti dell’altro. Nel caso RDF si può definire uno schema che descriva topic, associazioni, occorrenze, etc. attraverso predicati e risorse astratte. Viceversa, in Topic Maps è possibile descrivere attraverso una serie di topic-templates i ruoli dei costituenti delle asserzioni RDF. Un simile approccio è plausibile, ma risolve solo parzialmente il problema dell’interoperabilità, poiché le applicazioni sviluppate per uno dei due paradigmi sono costrette a conoscere i concetti dell’altro per gestire correttamente i metadati cosı̀ espressi. Inoltre i documenti prodotti da tale conversione assumono una forma poco leggibile e sono molto lontani da quelli scritti in forma nativa. • Il secondo approccio risolve il problema ad un livello più alto, e consiste nell’individuazione, ove possibile, delle equivalenze semantiche tra i costrutti dei due modelli. In questo modo si evitano gli svantaggi della prima metodologia di traduzione, ma la diversa natura dei due standard non sempre rende agevole e praticabile questa strada. In generale, possiamo riassumere gli aspetti peculiari di uno schema di conversione in: • grado di completezza semantica: quanta della semantica dei rispettivi modelli viene conservata nella traduzione; • produzione di documenti tradotti quanto più vicini possibile ad una forma nativa, e quindi diretta e leggibile, dell’altro standard; 3.3 Confronto fra modelli: differenze e soluzioni proposte 61 • riproducibilità del documento originale applicando una nuova conversione al documento prodotto dalla traduzione. Come vedremo, a causa delle inerenti diversità concettuali dei due modelli, difficilmente tutti questi requisiti possono essere soddisfatti. Al fine di affrontare tali problematiche è stato sviluppato un framework, atto a fornire un supporto alla traduzione automatica fra i documenti scritti nei due formalismi. Uno degli obiettivi proposti è stato rendere tale procedimento il più possibile flessibile. Poiché è ragionevole supporre che l’utente manipoli documenti relativi ad un particolare contesto applicativo, questi potrebbe avere la necessità di effettuare delle conversioni mirate. L’implementazione fornita opera una traduzione dei modelli, e pertanto è relativamente generica. Il framework, comunque, consente la riscrittura delle metodologie di conversione in maniera agevole, anche se limitatamente all’espressione di relazioni fra entità, permettendo in questo modo di considerare casi non prevedibili a priori. 3.3 Confronto fra modelli: soluzioni proposte differenze e In questo paragrafo verranno confrontati i modelli di RDF e di Topic Maps, mettendo alla luce ed approfondendo le similitudini e le diversità adottate nella descrizione dei metadati. 3.3.1 Identificazione di ciò che è descritto In RDF ciascuna risorsa che si descrive è rappresentata da un URI univoco: • se la risorsa fa riferimento ad un documento indirizzabile, l’URI sarà quello del documento stesso (definito dall’attributo rdf:about); • per oggetti astratti l’URI sarà un identificatore simbolico (definito dall’attributo rdf:ID). 62 Capitolo 3. Conversione di formati La natura della risorsa descritta può essere ulteriormente dettagliata attraverso RDFS, che definisce il predicato rdfs:isDefinedBy, che ha come oggetto una qualsiasi risorsa atta a definire il soggetto dell’asserzione. In Topic Maps la “cosa” che si descrive (ciò che il topic reifica) viene indicata mediante il subjectIdentity. La sua identificazione è più raffinata; vengono distinti i casi in cui il soggetto è: • una risorsa indirizzabile (elemento resourceRef); • un altro topic utile per descrizioni incrementali unificabili mediante regole di merging (elemento topicRef); • un URI utile ad indicare all’applicazione quale sia il soggetto descritto (elemento subjectIndicatorRef); • un insieme di questi ultimi due. Possono essere ripetuti più volte gli elementi topicRef e subjectIndicatorRef In linea di massima la corrispondenza diretta esistente è topic-risorsa, tuttavia le differenze fra le due rappresentazioni necessitano di una traduzione più raffinata, che vedremo essere non banale. La soluzione qui proposta consiste in: Traduzione da Topic Maps a RDF - Si possono distinguere i seguenti casi: • Il topic ha l’elemento resourceRef, figlio di subjectIdentity, che punta ad un documento. In questo caso viene creata una risorsa RDF con attributo rdf:about e valore posto all’URI del documento stesso. • Se l’elemento resourceRef non è presente viene creata una nuova risorsa il cui identificatore (rdf:ID) è funzione del nome del topic stesso. • Se il topic non ha nemmeno un nome la nuova risorsa avrà come identificatore una stringa generata randomicamente. 3.3 Confronto fra modelli: differenze e soluzioni proposte 63 Inoltre il SubjectIndicatorRef del topic viene mappato con il predicato rdfs:isDefinedBy. Infatti, secondo le specifiche di RDFS [BG00], tale elemento “indica la risorsa che definisce il soggetto della descrizione”. Il topicRef, invece, viene ignorato, in quanto funzionale solo alla fusione fra mappe. Esempio 3.1 Il topic WebPage001 indica la home page di Mario Rossi, identificata dall’URL http://www.myhost.com/˜mrossi. Viene tradotto in una risorsa RDF il cui soggetto rdfs:about è dato proprio dall’URL. <topic id="WebPage001"> ... <subjectIdentity> <resourceRef xlink:href="http://www.myhost.com/~mrossi"/> </subjectIdentity> </topic> <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> ... </rdf:Description> Traduzione da RDF a Topic Maps - In maniera analoga, una risorsa astratta (rdf:ID) viene mappata in un topic che ha per baseName l’identificatore della risorsa stessa. Le stesse considerazioni valgono per la traduzione dell’elemento rdfs:isDefinedBy in subjectIndicatorRef. Nel caso la risorsa sia identificata da un URI, questo diventa immediatamente il valore dell’elemento resourceRef di subjectIdentity del topic. Utilizzando tale metodologia si ottiene biunivocità semantica e chiarezza espressiva. Esempio 3.2 Si suppone che l’URL http://www.anagrafe.it/rossi.html contenga i dati anagrafici che distinguano univocamente Mario Rossi. Pertanto si può affermare che la risorsa mario rossi sia definita da tale URL. 64 Capitolo 3. Conversione di formati <rdf:Description rdf:ID="mario_rossi"> ... <rdfs:isDefinedBy rdf:resource="http://www.anagrafe.it/rossi.html"/> </rdf:Description> <topic id="mario_rossi"> ... <baseName> <baseNameString>mario_rossi</baseNameString> </baseName> <subjectIdentity> <subjectIndicatorRef xlink:href="http://www.anagrafe.it/rossi.html"/> </subjectIdentity> </topic> 3.3.2 Assegnazione dei nomi Uno dei concetti in cui RDF e Topic Maps maggiormente differiscono è l’assegnazione dei nomi alle risorse descritte. RDF non gestisce l’uso di nomi (utilizzabili ai fini di visualizzazione di tali risorse), ma fa uso dell’elemento rdfs:label, definito nelle specifiche di RDFS. Topic Maps, invece, fornisce un supporto avanzato a tale funzionalità: oltre all’elemento baseName, che permette di assegnare un insieme di nomi a ciascun topic, è previsto l’uso di elementi variant. Il loro valore fornisce una forma alternativa ai baseName, ottimizzata per un particolare fine computazionale, come, ad esempio, la visualizzazione o l’ordinamento. È compito dell’applicazione valutare tali elementi in base al valore degli elementi parameter ad essi associati. Poiché i variant rappresentano una struttura informativa complessa, la loro semantica non è direttamente riproducibile mediante un’asserzione RDF, ma è necessario adottare una soluzione più articolata. Pertanto si è scelto di creare una risorsa astratta contenente le informazioni corrispondenti a quelle contenute nell’elemento variant. Il solo modo per potere aggiungere questo potere espressivo anche ad RDF consiste nel creare ulteriori predicati, 3.3 Confronto fra modelli: differenze e soluzioni proposte 65 assegnando loro lo stesso tipo di semantica. Come vedremo in seguito, questo approccio verrà seguito anche in altre situazioni in cui RDF non fornisce un supporto nativo ai concetti di Topic Maps. Esempio 3.3 Il topic mario rossi ha nome “Mario Rossi”. Sono però presenti entro il baseName due elementi variant, che in questo caso definiscono il comportamento delle applicazioni nel manipolare il topic. Nello specifico, questo topic viene visualizzato con il letterale “Rossi, Mario” e per l’ordinamento viene usata la stringa “rossi mario”. Queste informazioni sono espresse mediante l’utilizzo di parametri che si riferiscono a particolari topic definiti nella specifica XTM 1.0. <topic id="mario_rossi"> ... <baseName> ... <baseNameString>Mario Rossi</baseNameString> <variant> <parameters> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm\#display"/> </parameters> <variantName> <resourceData>Rossi, Mario</resourceData> </variantName> </variant> <variant> <parameters> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm\#sort"/> </parameters> <variantName> <resourceData>rossi mario</resourceData> </variantName> </variant> </baseName> 66 Capitolo 3. Conversione di formati </topic> Non è possibile convetire le informazioni contenute negli elementi variant in modo diretto, ma è necessaria la creazione di strutture astratte, atte a modellare queste informazioni complesse. A tal fine vengono definiti i seguenti predicati RDF, definiti in uno schema apposito identificato dal prefisso tm2rdf: tm2rdf:baseName poiché un topic può avere un numero indefinito di elementi baseName, si usa questo predicato per referenziare la struttura usata per mappare ognuno di questi elementi; tm2rdf:variant punta alla risorsa astratta contenente tutte le informazioni contenute nell’elemento variant del baseName; tm2rdf:parameter punta alla risorsa che modella il parametro usato; tm2rdf:variantName può assumere forme diverse in base alla struttura del topic: • se entro l’elemento variantName è stato usato resourceRef, allora punta alla risorsa che contiene le informazioni relative al nome del variant; • se entro l’elemento variantName è stato usato resourceData, contiene il letterale che rappresenta il nome del variant. <rdf:Description rdf:ID="mario_rossi"> ... <tm2rdf:baseName rdf:resource="#bn1_mario_rossi"> </rdf:Description> <rdf:Description rdf:ID="bn1_mario_rossi"> ... <rdfs:label>Mario Rossi</rdfs:label> <tm2rdf:variant rdf:resource="#v11_mario_rossi"/> <tm2rdf:variant rdf:resource="#v12_mario_rossi"/> </rdf:Description> 3.3 Confronto fra modelli: differenze e soluzioni proposte 67 <rdf:Description rdf:ID="v11_mario_rossi"> <tm2rdf:parameter rdf:resource="#param1"/> <tm2rdf:variantName>Rossi, Mario</s:variantName> </rdf:Description> <rdf:Description rdf:ID="v12_mario_rossi"> <tm2rdf:parameter rdf:resource="#param2"/> <tm2rdf:variantName>rossi mario</s:variantName> </rdf:Description> Esempio 3.4 A causa della gestione minimale del nomi da parte del modello RDF, la conversione di un elemento rdfs:label è semplice. Si è pensato di farlo coincidere, in Topic Maps, con un baseName, il cui valore letterale coincide con quello dell’elemento RDF. <rdf:Description rdf:ID="mario_rossi"> ... <rdfs:label>Mario Rossi</rdfs:label> </rdf:Description> <topic id="mario_rossi"> ... <baseName> <baseNameString>Mario Rossi</baseNameString> </baseName> </topic> 3.3.3 Relazioni tra oggetti descritti In RDF attraverso l’uso dei predicati possiamo stabilire una relazione tra coppie di risorse o possiamo definire una coppia attributo-valore associata alla risorsa descritta. Quest’ultimo è il caso in cui l’oggetto del predicato sia un letterale. In Topic Maps, mediante il concetto di associazione, vengono messi in una relazione (determinata dal tipo dell’associazione) un arbitrario numero 68 Capitolo 3. Conversione di formati di topic, per ognuno dei quali può anche essere specificato il ruolo all’interno dell’associazione stessa. Le differenze in questo contesto sono evidenti e difficilmente conciliabili e sono dovute alla natura più primitiva di RDF nei confronti di Topic Maps. RDF mette in una relazione ordinata e non commutativa due risorse, mentre Topic Maps crea relazioni n-arie, non ordinate, tra topic, permettendo anche di specificare il tipo di coinvolgimento (il ruolo) di ciascun topic nell’associazione. Una conversione a livello di modello, nel caso generico, benché complessa e artificiosa, è comunque possibile, al prezzo di snaturare RDF nel modo di esprimere relazioni: è possibile tradurre una generica associazione n-aria in un rdf:Bag che abbia come elementi le risorse astratte corrispondenti ai membri dell’associazione. Per ciascuna di tali risorse si utilizzano i seguenti predicati: • rdfs:isDefinedBy, dell’associazione; con oggetto la risorsa relativa al membro • rdf:type, atto ad indicare il ruolo del membro. Tale risorsa astratta è referenziata dalla risorsa che modella l’associazione mediante il predicato tm2rdf:association. Esempio 3.5 Ricordando l’esempio 2.14, si definisce l’associazione di tipo “at-autore di” fra i topic “mario rossi” e “WebPage001”, in cui si afferma che Mario Rossi è autore della propria home page. <association id="Association001"> <instanceOf> <topicRef xlink:href="#at-autore_di"> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#tt-pagina_web"/> </roleSpec> <topicRef xlink:href="#WebPage001"/> </member> <member> <roleSpec> 3.3 Confronto fra modelli: differenze e soluzioni proposte 69 <topicRef xlink:href="#tt-person"/> </roleSpec> <topicRef xlink:href="#mario_rossi"/> </member> </association> Viene prima modellata la risorsa che rappresenta l’associazione, assegnandole il tipo at-autore di. <rdf:Description rdf:ID="Association001"> <rdf:type rdf:resource="#at-autore-di"/> <tm2rdf:association rdf:resource="#members_Association001"/> </rdf:Description> I membri dell’associazione vengono inclusi un un rdf:Bag. <rdf:Description rdf:ID="members_Association001"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#WebPage001_Association001"/> <rdf:_2 rdf:resource="#mario_rossi_Association001"/> </rdf:Description> Viene descritto ogni membro con il proprio ruolo, relativo alla specifica associazione. In questo modo vengono vincolate le descrizioni dei membri alle singole associazioni. <rdf:Description rdf:ID="WebPage001_Association001"> <rdf:type rdf:resource="#tt-pagina_web"/> <rdfs:isDefinedBy rdf:resource="#WebPage001"/> </rdf:Description> <rdf:Description rdf:ID="mario_rossi_Association001"> <rdf:type rdf:resource="#tt-person"/> <rdfs:isDefinedBy rdf:resource="#mario_rossi"/> </rdf:Description> 70 Capitolo 3. Conversione di formati Esempio 3.6 Il predicato di supporto tm2rdf:association permette di aggiungere un pò di leggibilità al documento prodotto. Comunque, si potrebbero far coincidere la risorsa astratta usata per modellare i membri dell’associazione e l’associazione stessa, eliminando in questo modo la necessità di usare questo predicato. L’associazione descritta nell’esempio precedente può pertanto essere modellata come segue. <rdf:Description rdf:ID="Association001"> <rdf:type rdf:resource="#at-autore-di"/> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#WebPage001_Association001"/> <rdf:_2 rdf:resource="#mario_rossi_Association001"/> </rdf:Description> <rdf:Description rdf:ID="WebPage001_Association001"> <rdf:type rdf:resource="#tt-pagina_web"/> <rdfs:isDefinedBy rdf:resource="#WebPage001"/> </rdf:Description> <rdf:Description rdf:ID="mario_rossi_Association001"> <rdf:type rdf:resource="#tt-person"/> <rdfs:isDefinedBy rdf:resource="#mario_rossi"/> </rdf:Description> Una traduzione alternativa potrebbe essere quella, sotto certi aspetti più naturale, di far corrispondere i concetti di predicato e di associazione. Il problema di fondo sta nella natura inerentemente binaria e unidirezionale dei predicati RDF: se da un lato passare da un predicato RDF ad una associazione binaria Topic Maps non pone problemi, una generica associazione n-aria dovrebbe tradursi nell’inserimento di n-1 predicati nella descrizione di ciascuno dei membri dell’associazione. Tali predicati dovrebbero corrispondere al tipo dell’associazione e dovrebbero avere per oggetto ciascuno degli altri membri. Si perderebbe comunque l’informazione relativa al ruolo di ciascun membro, nonché, come vedremo, quella relativa al possibile scope dell’associazione. 3.3 Confronto fra modelli: differenze e soluzioni proposte 71 Esempio 3.7 L’associazione “the clash band” associa la band dei Clash con ciascuno dei suoi componenti. <association id="the_clash_band"> <instanceOf> <topicRef xlink:href="#at-member_of"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#tt-band"/> </roleSpec> <topicRef xlink:href="#the_clash"/> </member> <member> <roleSpec> <topicRef xlink:href="#tt-vocalist"/> </roleSpec> <topicRef xlink:href="#joe_strummer"/> </member> <member> <roleSpec> <topicRef xlink:href="#tt-guitarist"/> </roleSpec> <topicRef xlink:href="#mick_jones"/> </member> ... </association> Viene definito il predicato “at-member of”, relativo al tipo dell’associazione. Vengono poi descritte le risorse relative ad ogni membro di “the clash band”. Da notare che vengono persi i ruoli di ogni membro. <rdf:Property rdf:ID="at-member_of"/> <rdf:Description rdf:ID="the_clash"> ... <at-member_of rdf:resource="#joe_strummer"/> 72 Capitolo 3. Conversione di formati <at-member_of rdf:resource="#mick_jones"/> </rdf:Description> <rdf:Description rdf:ID="joe_strummer"> ... <at-member_of rdf:resource="#the_clash"/> <at-member_of rdf:resource="#mick_jones"/> </rdf:Description> <rdf:Description rdf:ID="mick_jones"> ... <at-member_of rdf:resource="#the_clash"/> <at-member_of rdf:resource="#joe_strummer"/> </rdf:Description> Un ulteriore raffinamento a tale approccio potrebbe consistere nel definire predicati diversi per ogni ruolo ricoperto dai membri. In questo modo verrebbero mantenute tutte le informazioni, comprese quelle espresse dai ruoli. <rdf:Property rdf:ID="at-member_of_tt-band"/> <rdf:Property rdf:ID="at-member_of_tt-vocalist"/> <rdf:Property rdf:ID="at-member_of_tt-guitarist"/> <rdf:Description rdf:ID="the_clash"> ... <at-member_of_tt-vocalist rdf:resource="#joe_strummer"/> <at-member_of_tt-guitarist rdf:resource="#mick_jones"/> </rdf:Description> <rdf:Description rdf:ID="joe_strummer"> ... <at-member_of_tt-band rdf:resource="#the_clash"/> <at-member_of_tt-guitarist rdf:resource="#mick_jones"/> </rdf:Description> <rdf:Description rdf:ID="mick_jones"> ... 3.3 Confronto fra modelli: differenze e soluzioni proposte 73 <at-member_of_tt-band rdf:resource="#the_clash"/> <at-member_of_tt-vocalist rdf:resource="#joe_strummer"/> </rdf:Description> Come si può notare il numero dei predicati definiti per ciascuna associazione aumenta con il numero dei ruoli ricoperti dai membri. RDF e RDFS permettono di associare solo un “primo livello” di semantica a questi predicati, ad esempio usando: • rdfs:subPropertyOf per specificare che il predicato è una specializzazione di un’altro; • rdfs:range e rdfs:domain per definirne i vincoli di applicabilità. Poiché tali predicati vengono generati automaticamente non è possibile usare gli strumenti forniti da RDF/RDFS per poter assegnare loro la semantica necessaria ad una corretta interpretazione. Sarebbe neccessario utilizzare un meta linguaggio dal maggiore potere espressivo. Non essendo ciò possibile la logica necessaria all’interpretazione dovrebbe essere spostata a livello applicativo. L’approccio presentato nell’esempio 3.5, invece, non ha questo limite, poiché è sufficiente che l’applicazione che dovrà manipolare il documento RDF prodotto sia a conoscenza dell’unico schema usato nella traduzione. Viceversa, per effettuare la conversione di un predicato appartenente ad un generico schema di RDF in costrutti di Topic Maps, è possibile far coincidere tale predicato con un topic la cui funzione è di association type. L’asserzione RDF può quindi essere mappata con un’associazione di questo tipo, i cui membri siano i topic corrispondenti al soggetto e all’oggetto. Esempio 3.8 Per esprimere l’asserzione RDF in XTM si crea l’associazione di tipo “Autore” avente come membri il soggetto e l’oggetto della descrizione. <rdf:Description rdf:about="http://www.myhost.com/~mrossi"> <s:Autore rdf:resource="#mario_rossi"/> </rdf:Description> 74 Capitolo 3. Conversione di formati <topic id="Autore"> ... </topic> <topic id="rnd001"> ... <subjectIdentity> <resourceRef xlink:href="http://www.myhost.com/~mrossi"/> </subjectIdentity> </topic> <association> <instanceOf> <topicRef xlink:href="#Autore"/> </instanceOf> <member> <topicRef xlink:href="#rnd001"/> </member> <member> <topicRef xlink:href="#mario_rossi"/> </member> </association> Tuttavia, come si vedrà nel paragrafo 3.3.4, nonostante questo approccio rappresenti una buona soluzione generica, può essere preferibile, in certi contesti, applicare altri tipi di conversione. Se si conoscesse la semantica associata al predicato RDF, sarebbe possibile trovare un equivalente costrutto di Topic Maps più appropriato rispetto ad una generica associazione. In questo modo il documento prodotto rispecchierebbe meglio la forma di un documento scritto nativamente in Topic Maps. 3.3 Confronto fra modelli: differenze e soluzioni proposte 3.3.4 75 Attributi In RDF non esiste, a livello di modello, una classificazione degli attributi o delle meta informazioni associate ad una risorsa. Al di fuori delle poche proprietà definite dal modello RDF, lo schema RDFS, attraverso la definizione di ulteriori predicati con semantica predeterminata: • permette una classificazione più dettagliata di alcuni attributi; • fornisce gli strumenti semantici per la descrizione di ulteriori schemi, permettendo la definizione e la caratterizzazione di predicati e risorse. Nel modello Topic Maps esiste invece il concetto di occorrenza. Un’occorrenza è inerentemente associata ad un topic, a cui permette di associarvi come attributi una risorsa o un letterale. È inoltre possibile assegnare all’occorrenza un tipo, permettendone cosı̀ una classificazione. Una conversione da RDF a Topic Maps più accurata rispetto a quanto proposto nel paragrafo precedente può essere eseguita nel caso in cui si sappia che la semantica del predicato che si vuole tradurre coincida con quello di occurrence di Topic Maps. In questo caso si possono eseguire i seguenti passi: • si fa coincidere il predicato con un topic con funzione di occurrence role type; • si crea un’occorrenza all’interno del topic che rappresenta il soggetto dell’asserzione RDF; • si pone tale occorrenza istanza del tipo definito. Naturalmente tale procedimento non è automatizzabile, in quanto non è in generale noto a priori lo schema utilizzato. Esempio 3.9 Viene effettuata la traduzione del predicato RDF s:homepage, che indica la home page relativa al soggetto dell’asserzione. Tale predicato è assimilabile a un elemento occurrence di Topic Maps. <rdf:Property rdf:ID="homepage"/> 76 Capitolo 3. Conversione di formati <rdf:Description rdf:ID="mario_rossi"> <s:homepage rdf:resource="http://www.myhost.com/~mrossi"/> </rdf:Description> <topic id="homepage"> ... </topic> <topic id="mario_rossi"> ... <occurrence> <instanceOf> <topicRef xlink:href="#homepage"/> <instanceOf> <resourceRef xlink:href="http://www.myhost.com/~mrossi"/> </occurrence> </topic> Nel caso in cui l’oggetto dell’asserzione fosse stato un letterale, si sarebbe utilizzato un elemento resourceData al posto di resouceRef. Nel caso di traduzione di Topic Maps verso RDF è possibile adottare l’approccio inverso: • si definisce un predicato (di tipo rdf:Property) corrispondente al topic utilizzato per tipizzare l’occorrenza; • si usa tale predicato in una nuova asserzione RDF; • si usa la risorsa referenziata dall’occorrenza come oggetto dell’asserzione RDF. Tuttavia, è possibile che all’interno dell’elemento occurrence sia presente uno scope. In questo caso la traduzione è più complessa e non automatizzabile nel modo presentato. Inoltre, poiché in Topic Maps non vi è una separazione netta fra i ruoli che può ricoprire un topic, l’approccio presentato potrebbe 3.3 Confronto fra modelli: differenze e soluzioni proposte 77 portare a definire in RDF, per lo stesso topic, delle risorse astratte che sarebbero descritte sia come proprietà che in altro modo. Per questi motivi la soluzione proposta, adatta nel caso più generale, fa ricorso al predicato rdfs:seeAlso, la cui semantica è quella di “specificare una ulteriore risorsa che possa fornire informazioni addizionali sulla risorsa soggetto”. Si crea quindi una risorsa astratta usata per includere tutte le informazioni riguardanti l’occorrenza e la si lega alla risorsa mediante il predicato rdfs:seeAlso. Per una discussione più approfondita della traduzione dell’elemento scope si rimanda al paragrafo 3.3.6. Esempio 3.10 Il topic “mario rossi” occorre nell’URL http://www.myhost.com/office/1375. Tale occorrenza ha validità solo nel contesto definito dal topic “ufficio”. Viene creata la risorsa astratta “oc1 mario rossi”, atta a modellare l’occorrenza. <topic id="mario_rossi"> ... <occurrence> ... <scope> <topicRef xlink:href="#ufficio"/> </scope> <resourceRef xlink:href="http://www.myhost.com/office/1375"/> </occurrence> </topic> <rdf:Description rdf:ID="mario_rossi"> ... <rdfs:seeAlso rdf:resource="#oc1_mario_rossi"/> </rdf:Description> <rdf:Description rdf:ID="oc1_mario_rossi"> ... <rdfs:isDefinedBy rdf:resource="http://www.myhost.com/office/1375"/> 78 Capitolo 3. Conversione di formati <s:scope rdf:resource="#anagrafe"/> </rdf:Description> 3.3.5 Tipizzazione I due standard presentano entrambi meccanismi per la creazione di relazioni di tipo classe istanza e per la creazione di ontologie tra i concetti descritti. RDF mette a disposizione la proprietà rdf:type che crea la relazione classe-istanza tra soggetto e oggetto dell’asserzione. RDFS aggiunge la semantica necessaria per specificare relazioni di tipo superclasse-sottoclasse mediante il predicato rdfs:subClassOf. In Topic Maps, invece, tale dipendenza è esprimibile a livello di modello: per ciascun topic e ciascuna associazione è prevista la specifica del tipo o dei tipi che li caratterizzano. In RDF la relazione superclasse-sottoclasse si realizza mediante la combinazione della proprietà rdf:type e di rdfs:subClassOf entro la stessa descrizione. Tali predicati sono usati, rispettivamente: • per dichiarare la natura di classe della risorsa (viene posto a valore rdfs:Class). • per specificare la superclasse da cui la risorsa discende. In Topic Maps non esiste al momento un metodo standard per dichiarare la natura di tipo di un certo topic: il dominio dei topic con funzione di tipizzazione non è necessariamente disgiunto da quello dei topic istanza. La natura del topic è quindi dipendente dal contesto. La specifica XTM prevede la possibilità di poter distinguere la relazione di tipo classe-istanza da quella di superclasse-sottoclasse. Il primo caso è espresso nel topic istanza con il costrutto instanceOf); nel secondo caso è previsto un tipo di associazione identificato da un URI (PSI superclass-subclass). Esempio 3.11 Rifacendoci all’esempio 2.11, la conversione della risorsa “politico”, sottoclasse di “persona” è diretta. <rdfs:Class rdf:ID="politico"> 3.3 Confronto fra modelli: differenze e soluzioni proposte 79 ... <rdfs:subClassOf rdf:resource="#persona"/> </rdfs:Class> <topic id="politico"> ... </topic> <association> <instanceOf> <topicRef xlink:link= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass"/> </roleSpec> <topicRef xlink:href="#persona"/> </member> <member> <roleSpec> <topicRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#subclass"/> </roleSpec> <topicRef xlink:href="#politico"/> </member> </association> 3.3.6 Metainformazioni contestuali Nel definire meta informazioni può essere utile poter limitare le definizioni dei concetti descritti ad un determinato contesto. Topic Maps prevede questa possibilità attraverso il meccanismo degli scope. E possibile contestualizzare tali meta informazioni nei seguenti costrutti: 80 Capitolo 3. Conversione di formati • occorrenze; • associazioni; • nomi associati ai topic (baseName). Il modello RDF non permette di descrivere in maniera esplicita il concetto di contesto di validità delle asserzioni. In questo caso quindi il problema della convergenza si pone soltanto in un senso. L’unico modo per far fronte a questa mancanza è probabilmente la definizione di proprietà RDF aggiuntive che incorporino questa semantica. Un modo poco elegante per farlo potrebbe essere quello di definire più predicati RDF in modo di legare oggetto e soggetto in un certo contesto. Ognuno di questi predicati potrebbe essere specializzato in modo da indicare come ulteriore tipo il predicato di base, privo di contesto. Esempio 3.12 Viene effettuato il mapping di elementi baseName, contenenti uno scope, in due risorse astratte con funzione di predicati RDF. Queste risorse vengono definite di tipo tm2rdf:baseName. <topic id="mario_rossi"> ... <baseName> <scope> <topicRef xlink:href="#matricola"/> </scope> <baseNameString>1375</baseNameString> </baseName> <baseName> <scope> <topicRef xlink:href="#nickname"/> </scope> <baseNameString>Homer</baseNameString> </baseName> </topic> 3.3 Confronto fra modelli: differenze e soluzioni proposte 81 <rdf:Property rdf:ID="baseName_matricola"> <rdf:type rdf:resource="http://cs.unibo.it/schemas/tm2rdf#baseName"/> </rdf:Property> <rdf:Property rdf:ID="baseName_nickname"> <rdf:type rdf:resource="http://cs.unibo.it/schemas/tm2rdf#baseName"/> </rdf:Property> <rdf:Description rdf:ID="mario_rossi"> ... <nome_matricola>1375</nome_matricola> <nome_nickname>Homer</nome_nickname> </rdf:Description> Si noti che sarebbe scorretto definire questi predicati “contestualizzati” usando il predicato rdfs:subPropertyOf posto a valore uguale al predicato privo di contesto, in quanto, secondo le specifiche RDFS, rimarrebbe valida anche la proprietà di tipo base (senza contesto), che è proprio ciò che si vuole evitare. Inoltre questo approccio presenta ulteriori problemi: il numero dei predicati “contestualizzati” creati è pari al numero degli scope utilizzati. In questo modo vengono definiti numerosi predicati con la stessa semantica, ma con diversi vincoli di validità. Questa non rappresenta una soluzione ottimale, in quanto si preferirebbe un unico predicato, con una determinata semantica, e vincolato mediante altri predicati. Un’altra soluzione potrebbe essere quella di creare, per ciascun predicato soggetto a scope, uno statement di reificazione, in modo potersi riferire ad essi come risorse e potervi quindi associare dei vincoli di validità. Sarebbe comunque necessaria l’introduzione di predicati a cui attribuire la semantica di “scope”, non essendo questa prevista in nessun costrutto RDF/RDFS. 82 Capitolo 3. Conversione di formati La soluzione proposta fa effettivamente ricorso alla definizione di un predicato RDF tm2rdf:scope che incorpora la semantica di contestualizzazione. Esso viene applicato alle risorse astratte create per modellare elementi baseName, occurrence e association. In particolare ciascun tema presente nello “scope” di questi costrutti sarà l’oggetto di un predicato tm2rdf:scope nella descrizione della risorsa astratta. Esempio 3.13 Rifacendosi all’esempio 3.5, si può limitare la validità dell’associazione ponendo entro l’elemento association un elemento scope. L’associazione risultante è definita come segue. <association id="Association001"> <instanceOf> <topicRef xlink:href="#at-autore_di"> </instanceOf> <scope> <topicRef xlink:href="#web_design"/> <scope> <member> <roleSpec> <topicRef xlink:href="#tt-pagina_web"/> </roleSpec> <topicRef xlink:href="#WebPage001"/> </member> <member> <roleSpec> <topicRef xlink:href="#tt-person"/> </roleSpec> <topicRef xlink:href="#mario_rossi"/> </member> </association> La traduzione produce le stesse risorse RDF definite nell’esempio 3.5. L’unica risorsa ad essere modificata è la seguente, in cui viene utilizzato anche il predicato atto a mappare l’elemento scope di XTM. <rdf:Description rdf:ID="Association001"> 3.3 Confronto fra modelli: differenze e soluzioni proposte 83 <rdf:type rdf:resource="#at-autore-di"/> <tm2rdf:scope rdf:resource="#web_design"/> <tm2rdf:association rdf:resource="#members_Association001"/> </rdf:Description> 3.3.7 Reificazione In Topic Maps non esistono costrutti espliciti per la reificazione, a differenza di RDF, il quale definisce i predicati rdf:subject, rdf:object, rdf:predicate per la descizione di un’asserzione da reificare, e rdf:bagID per riferirsi ad un insieme di asserzioni. Come detto nel paragrafo 2.3.3, reificare un’associazione “A” in Topic Maps può essere visto come rendere “A” membro di un’altra associazione “B”, la quale permette di esprimere affermazioni ulteriori su “A”. Per fare ciò è sufficiente creare un topic che abbia come subjectIdentity l’URI di “A” e usarlo come membro di “B”. Si rimanda all’esempio 2.16. I due modelli in questo caso non presentano grosse differenze a livello concettuale. La traduzione in ambedue i versi non pone particolari problemi, ma la rappresentazione sintattica è sensibilmente diversa. In particolare, nel caso della traduzione da XTM a RDF, se si considera l’alternativa esposta nell’esempio 3.5 per la traduzione delle associazioni, non occorre aggiungere altre regole di traduzione. Viceversa il secondo modello di traduzione da associazioni (vedi esempio 3.7), presenta ulteriori complicazioni: se si traduce una associazione reificata in un predicato RDF, non si ha più la possibilità di riferirsi ad esso e quindi poter effettuare affermazioni su di esso. 3.3.8 Schema RDF di traduzione Si presenta in questo paragrafo lo schema contenente i predicati utilizzati per la traduzione da Topic Maps. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> xmlns:xtm2rdf="http://cs.unibo.it/schemas/xtm2rdf#"> 84 Capitolo 3. Conversione di formati <rdf:Property baseName> <rdfs:comment>Indica la risorsa astratta che contiente le informazioni sulla denominazione del soggetto </rdfs:comment> </rdf:Property> <rdf:Property variant> <rdfs:comment>Indica la risorsa astratta che contiente le informazioni sulle denominazioni alternative del soggetto </rdfs:comment> </rdf:Property> <rdf:Property parameter> <rdfs:comment>Indica la risorsa astratta che contiente le informazioni sul contesto di validità della denominazione alternativa del soggetto </rdfs:comment> </rdf:Property> <rdf:Property variantName> <rdfs:comment>Indica la risorsa astratta che contiente la denominazione alternativa del soggetto </rdfs:comment> </rdf:Property> <rdf:Property association> <rdfs:range rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdfs:comment>Indica la risorsa astratta di tipo rdf:Bag che contiene i riferimenti ai membri di una associazione </rdfs:comment> </rdf:Property> <rdf:Property scope> <rdfs:comment>Indica una risorsa astratta che serve 3.4 Descrizione delle soluzioni proposte in letteratura 85 a contestualizzare il soggetto </rdfs:comment> </rdf:Property> <rdf:RDF> 3.4 Descrizione delle soluzioni proposte in letteratura Prima di scendere nel dettaglio della soluzione proposta verranno mostrati i lavori presentati per risolvere tali problematiche e verranno discussi alla luce delle considerazioni fatte nei paragrafi precedenti. 3.4.1 Convergenza secondo Moore La prima proposta per integrare RDF e Topic Maps è stata presentata in [Moo01]. In questo articolo per prima cosa viene descritto un modo per rappresentare il modello RDF mediante topic map. Tale conversione è effettuata in maniera molto semplice: vengono definiti i subject indicators per ogni componente del modello RDF, cioè per le asserzioni, i predicati, i soggetti e gli oggetti. Cosı̀ ogni asserzione RDF diventa un’associazione di tipo RDF statement, in cui il soggetto, il predicato e l’oggetto hanno ruoli definiti dai subject indicators. In questo modo la rappresentazione di un documento RDF mediante mappe è diretta, ma ancora non vengono affrontate varie problematiche. Ad esempio, le risorse RDF probabilmente vengono convertite in topic, ma non è specificato cosa accade ai loro URI: diventano il valore dell’elemento resourceRef o dell’elemento subjectIndicatorRef? La differenza potrebbe sembrare sottile, ma in realtà la loro semantica è molto diversa. Per un ulteriore approfondimento si rimanda al paragrafo 3.3.1. C’è da dire, comunque, che Moore afferma che lo scopo propostosi nello scrivere il proprio articolo è mostrare che le mappe sono un strumento abbastanza flessibile da permettere di modellare RDF, senza volere fornire una soluzione esaustiva al problema. Successivamente viene mostrato come modellare Topic Maps mediante 86 Capitolo 3. Conversione di formati documenti RDF. Anche in questo caso la soluzione proposta è semplice: per quasi ogni costrutto di Topic Maps vengono definiti dei predicati RDF, a cui viene attribuita una semantica che permette un mapping diretto. Il modello presentato, comunque, non è completo, poiché manca il mapping per gli elementi variant e non viene affrontato il problema di come gestire gli elementi resourceRef e subjectIndicatorRef. Comunque, anche qui, Moore afferma di voler semplicemente mostrare come RDF permetta di rappresentare mappe. In seguito viene affrontato il problema di come effettuare il mapping fra i due modelli. In questa sezione vengono confrontati il modello RDF con quello Topic Maps e i topic con le risorse. Gli URI delle risorse RDF diventano valore degli elementi subjectIndicatorRef dei topic, ma non viene affrontato il problema di quando mappare certi URI di risorse con elementi resourceRef. Infine le asserzioni RDF vengono confrontate con le associazioni di Topic Maps. Ogni asserzione viene mappata con un’associazione in cui: • Il predicato diventa il tipo dell’associazione. • I ruoli di soggetto e oggetto dell’associazione sono definiti da topic già prefissati, definiti per tale tipo di mapping. Il lavoro proposto da Moore sembra interessante, anche se ad uno stadio ancora non maturo, ma, in fondo, egli stesso afferma che è “solo un articolo introduttivo”. 3.4.2 Integrazione secondo Lacher Un altro articolo interessante è stato proposto in [LD01]. In questo lavoro viene presentato un metodo per effettuare il mapping di Topic Maps in RDF secondo il data model definito in [NB01], in cui viene spiegato il significato della sintassi XTM. Infatti l’approccio qui descritto fa uso di uno schema RDF in cui vengono definiti varie asserzioni RDF, atte a mappare i costrutti commentati in [NB01]. Questo metodo è completo e reversibile, ma il documento RDF risultante dal mapping è difficilmente rappresentabile. Inoltre Lacher non fornisce alcun esempio di serializzazione di un documento RDF cosı̀ prodotto e pertanto risulta in parte difficoltoso valutare completamente il suo lavoro. Comunque vari punti sono chiari: 3.4 Descrizione delle soluzioni proposte in letteratura 87 • Il mapping fa uso di uno schema RDF, pertanto per manipolare i documenti prodotti è necessario che le applicazioni siano in grado di capire lo schema utilizzato. • Il documento RDF è di difficile comprensione; ad esempio, per ottenere il valore dell’elemento baseName di un topic è necessario effettuare delle query tutt’altro che banali sul documento RDF. • Il problema degli elementi resourceRef e subjectIndicatorRef non è affrontato. • Non viene proposto il mapping da RDF verso Topic Maps. 3.4.3 Mapping secondo Ogievetsky Anche in [Ogi01] viene seguito un approccio simile al precedente: Ogievetsky si basa su [NB01], e introduce uno schema RDF molto diverso da quello presentato in [LD01]. Vi sono svariati aspetti interessanti: • Se un topic ha un elemento resourceRef, questo diventa l’URI della risorsa RDF corrispondente (attributo rdf:about), in caso contrario viene generato un identificatore univoco e viene posto come valore dell’attributo rdf:ID. I campi subjectIndicatorRef diventano proprietà della risorsa, anche se in RDF la semantica di risorsa e di soggetto che costituisce la risorsa non è chiara. • La relazione classe-istanza tra topic è rappresentata usando rdf:type. • Le associazioni diventano risorse, i cui predicati rappresentano i topic facenti parte dell’associazione. • I nomi e le occorrenze di un topic diventano risorse. • Lo scope è rappresentato da uno specifico predicato. La proposta di Ogievetsky per il mapping da Topic Maps a RDF è praticamente completa, ma il mapping inverso non è stato affrontato. Inoltre, i documenti RDF prodotti sono in una forma molto complessa. 88 Capitolo 3. Conversione di formati Capitolo 4 Implementazione degli strumenti di conversione In questo capitolo verrà descritto lo strumento implementato per la realizzazione della conversione di documenti di meta informazioni espressi nei formati RDF e Topic Maps. Le motivazioni da cui nasce la necessità di un simile strumento sono da ricercarsi nella possibilità di poter importare, in una base di dati di metainformazioni espressa in uno dei due formati, dei documenti espressi nell’altro formato e permettere alle applicazioni specializzate nella gestione di solo RDF o solo XTM di poter trattare in modo trasparente i documenti risultanti dalle conversioni. Ciò consente di raggiungere un elevato grado di interoperabilità tra le applicazioni che gestiscono meta-informazioni, senza che sia necessario doverle modificare o aggiunger loro ulteriori funzionalità. In particolare, ci si aspetta che le funzionalità di ricerca presenti in entrambi gli ambiti, e implementati da linguaggi in via di standardizzazione quali TMQL [Han01] e RQL [oCS01], possano essere utilizzati per interrogazioni su documenti in qualsiasi formato, senza previa eventuale traduzione. 90 4.1 Capitolo 4. Implementazione del convertitore Strumenti utilizzati nell’implementazione Il convertitore è stato implementato con il linguaggio di programmazione Java, nella versione 1.4. Non sono state utilizzate estensioni proprietarie al linguaggio e come unico strumento di sviluppo si è utilizzato l’SDK fornito gratuitamente da Sun [jav02a]. Per la manipolazione dei documenti RDF e Topic Maps si è pensato di utilizzare delle librerie che consentissero la creazione dei Document Object Model relativi ad entrambi i linguaggi, e che quindi permettessero la manipolazione dei modelli attraverso comode API, rendendo del tutto trasparenti i dettagli relativi al parsing e alla serializzazione dei documenti. Per la gestione di documenti in formato XTM si è utilizzato il framework TM4J [tm402] nella versione 0.6.5, Questo è un progetto individuale ancora in fase di sviluppo ma allo stato attuale sufficientemente evoluto da permettere una gestione del documento in memoria più agevole rispetto a quella offerta dalla mera interfaccia DOM dell’XML. Il livello di astrazione creato dall’insieme delle interfacce esposte all’utente permette di agire in maniera diretta sugli elementi della sintassi XTM. Tuttavia, come testimonia il numero della versione, la scarsa maturità del pacchetto ha richiesto, oltre ad una buona dose di lavoro per la correzione dei numerosi bachi segnalati di volta in volta all’autore, la scrittura di numerose funzioni di utilità non ancora supportate per una manipolazione dei documenti più agevole. La natura Open Source del progetto ha facilitato in questo senso le correzioni e la riscrittura del codice necessario. La scelta di questo framework, operata anche per l’implementazione degli altri strumenti oggetto di questa dissertazione, è stata dettata dal linguaggio di programmazione, comune alla scelta progettuale effettuata per l’implementazione, dall’assenza di valide alternative, e dalla prevalenza che lo strumento ha ottenuto in ambito scientifico. Per la gestione di documenti in formato RDF, si è optato per il framework Jena, nella versione 1.3.2, edito dal gruppo di ricerca Hewlett-Packard attivo nel campo del Semantic Web [jen02]. Si tratta in questo caso di un framework maturo e ampiamente utilizzato in ambito scientifico, completo delle più comuni funzionalità auspicabili. Al pari del precedente, viene offerto un 4.2 Problematiche di traduzione 91 insieme di interfacce che permettono un più elevato livello di astrazione rispetto alla rappresentazione XML del documento. In questo caso, data la natura più primitiva del modello RDF rispetto a Topic Maps, l’astrazione creata permette la gestione del modello attraverso la manipolazione delle terne soggetto, predicato e oggetto degli statement di cui è composto. Va sottolineato che anche in questo caso si tratta di un prodotto Open Source, liberamente scaricabile da rete ed utilizzabile in ambito sia privato che commerciale. Entrambi questi framework si appoggiano a loro volta su vari altri diffusi strumenti Open Source, tra cui in primis il parser XML Xerces dell’Apache Software Fondation [xer02], usato da entrambi per il parsing dei documenti. 4.2 Problematiche di traduzione L’ambito teorico del problema può essere collocato a metà strada fra la trasformazione di documenti XML e la traduzione tra programmi espressi in due diversi linguaggi di programmazione. Tuttavia, gli approcci seguiti in letteratura nella risoluzione di simili problemi sono difficilmente applicabili al contesto di conversione tra documenti RDF e Topic Maps. Le trasformazioni di documenti XML in diversi formati sono spesso limitate alla mera trasposizione sintattica di semplici strutture informative e, benché sia possibile costruire un foglio di stile che trasformi ogni singola istanza di documento RDF in un documento XTM (e viceversa) nel modo che più si ritiene adatto, la generalizzazione del problema rende difficilmente praticabile questa strada. Per quanto visto nel capitolo precedente spesso la conversione è fortemente dipendente dalla natura semantica dei concetti descritti nei documenti, difficilmente catturabile nella logica di un foglio di stile XSL. Oltre a ciò, un simile approccio renderebbe problematica anche la parametrizzazione della conversione sulla base delle reali esigenze dell’utente. Come è stato fatto notare nei precedenti capitoli, il livello semantico raggiungibile da un documento in termini di caratterizzazione delle risorse descritte è del tutto arbitrario per entrambi i modelli. Ciò lascia ampia libertà in fase di creazione dei documenti e rende gli standard flessibili senza limitarne 92 Capitolo 4. Implementazione del convertitore l’estendibilità. Il compito di vincolare le strutture dei documenti espressi in entrambi i formati è in effetti lasciato a livelli di specifica superiori: • RDF Schema e successive estensioni nel caso di RDF. • TMCL per Topic Map se e quando uno standard definitivo verrà finalmente redatto. In assenza di schemi vincolanti, i documenti di entrambi i modelli possono rivelarsi perfettamente corretti sintatticamente e coerenti alle poche regole imposte dal modello stesso, ed essere al tempo stesso ambigui e difficilmente interpretabili, se non completamente privi di significato reale. Considerando ad esempio RDF, si pensi al sistema di tipizzazione definito dalle specifiche RDF Schema [BG00]. Benché introduca concetti quali quelli di classe, di proprietà e di tipo, non pone barriere alla definizione di una risorsa come classe e proprietà allo stesso tempo, o come sottoclasse e al tempo stesso istanza di un’altra classe. Non esistono cioè sufficienti distinzioni concettuali tra gli stessi costrutti primitivi del linguaggio per poter pensare di assimilare il problema della traduzione nel caso generico all’ambito dei linguaggi di programmazione, come siamo comunemente abituati ad intenderli. Su questo fronte, le stesse problematiche si presentano per Topic Maps, il quale ha già insito un sistema di tipizzazione con le stesse caratteristiche di potenziale ambiguità. In effetti, il valore aggiunto che TMCL si propone di apportare in termini di espressività consiste nella possibilità di vincolare l’applicabilità dei costrutti Topic Maps sulla base dei tipi loro assegnati. L’assenza di vincoli strutturali di questo tipo e le inerenti potenziali ambiguità proprie ai modelli, ostacolano l’applicabilità di metodi di traduzione automatica ma non ne pregiudicano la possibilità. In effetti, le considerazioni fatte ci permettono di classificare il problema della traduzione nel caso generico come appartenente alla cosiddetta classe GIGO, acronimo di Garbage In Garbage Out: se i dati in input sono privi di coerenza, cosı̀ saranno i dati in output. Il problema che ci si è posto è quindi quello di riuscire ad ottenere documenti tradotti che ricalchino la semantica contenuta in quelli di partenza, nella misura in cui quest’ultimi siano sufficientemente coerenti e non ambigui, rifacendoci alle convenzionali regole in uso nella redazione di documenti per 4.2 Problematiche di traduzione 93 entrambi gli standard. In particolare, non ci si è preoccupati dei risultati ottenibili da documenti redatti al di fuori di queste assunzioni. 4.2.1 Relazioni tra documenti e schemi Come è stato ampiamente descritto nel capitolo precedente, il problema della traduzione tra RDF e Topic Maps è più compiutamente affrontabile se si considera RDF affiancato ad un layer semantico, quale appunto RDF Schema: in questo modo, nonostante i differenti approcci seguiti dai due standard, è stato possibile proporre delle equivalenze di costrutti. RDF Schema svolge nei confronti di RDF un doppio ruolo: oltre ad offrire un sistema di tipizzazione, permette di definire vincoli sull’applicabilità delle Property definite. Spesso i documenti RDF fanno riferimento a schemi pubblici (si pensi al Dublin Core) o comunque definiti esternamente al documento stesso. Per consentire un’operazione di traduzione di tipo batch, sono stati ignorate problematiche derivanti dal recupero di informazioni esterne al documento oggetto della traduzione. Poiché tali informazini sono comunque necessarie per la corretta interpretazione semantica del documento, lo strumento sviluppato necessita, per traduzione da RDF a XTM, di un unico documento nel quale siano presenti sia la parte dichiarativa, cioè l’insieme delle classi e delle proprietà utilizzate e definibili con RDF Schema, sia la parte descrittiva rappresentata dalle asserzioni che associano metainforamzioni alle risorse. Inoltre viene assunta la validazione del documento RDF di origine relativamente ai vincoli RDFS applicabili. Considerazioni simili valgono nel caso opposto di traduzione, ossia da XTM a RDF. Come è stato descritto in precedenza, l’ambito della definizione di schemi per Topic Maps è ancora poco definito. Tuttavia il linguaggio possiede già gli strumenti per la definizione di sistemi di tipi che prescindono da qualsiasi schema. Infatti, attraverso i Published Subject Indicators introdotti da XTM 1.0 è possibile sia specificare il ruolo di classe, di tipo di associazione, di tipo di occorrenza che possono avere i vari topic, sia specificare esplicite associazioni di tipo superclasse e sottoclasse. Sebbene anche in questo caso possa essere considerata pratica comune la separazione in file diversi del sistema di tipi e del documento istanza, lo strumento di traduzione assume per semplicità la 94 Capitolo 4. Implementazione del convertitore presenza di tutte le definzioni necessarie all’interno del documento XTM di origine. 4.2.2 Relazioni tra i modelli di RDF e di Topic Maps Come ampiamente argomentato nel precedente capitolo, attuare delle conversioni di documenti tra i due formati in modo da preservare la semantica del documento originario, produrre allo stesso tempo un documento convertito semanticamente autocontenuto e quanto più vicino possibile ad una forma nativa dello stesso, rappresenta un’operazione difficilmente automatizzabile nel caso generico. Si è scelto pertanto di permettere all’utente di pilotare la conversione attraverso delle regole basate sul matching dei vari costrutti, in modo da offrire la possibilità di produrre documenti quanto più possibile conformi alle reali esigenze dell’utente stesso. I modelli di conversione discussi nel precedente capitolo rappresentano la base per la traduzione di documenti tra i due formati, utile per l’ottenimento di modelli che conservino il contenuto meta-informativo secondo una struttura coerente alle caratteristiche dei due linguaggi. La difficoltà nel discernere, nel caso generico, il reale significato delle relazioni esistenti tra risorse e metainformazioni ad esse associate, ha suggerito l’introduzione di un semplice meccanismo che permetta di stabilire in che modo mappare i vari tipi di relazioni. In particolare, nel caso di conversione da modelli XTM a modelli RDF, è possibile stabilire quali tipi di associazioni e quali tipi di occorrenze debbano essere rappresentati come predicati RDF. Abbiamo visto infatti che a causa dei diversi livelli semantici di associazioni e occorrenze rispetto a predicati RDF preservare completamente i contenuti informativi di una generica associazione XTM (potenzialmente composta da più di due membri, varie occorrenze e scope) è piuttosto complicato. È necessario creare una insieme di classi e proprietà RDF che costringono le applicazioni a conoscere il significato di tali definizioni. Ciò può comportare la necessità di estendere le funzionalità di applicazioni già esistenti, cosa non sempre possibile, e può non essere la soluzione 4.3 Esempi di conversione 95 migliore in più situazioni. Non sempre infatti è desiderabile complicare la struttura delle informazioni nell’intento di volerne conservare il più possibile. Spesso la priorità può essere rivolta ad una maggiore conformità alle comuni regole redazionali di un documento RDF, e soprattuto all’ottenimento di un documento semanticamente autocontenuto e privo di riferimenti a strutture di schema artificiose e dipendenti dall’applicazione. Nel caso delle conversioni da modelli RDF a modelli XTM, lo stesso problema si ripropone a parti invertite: predicati generici definiti dal documento di origine possono essere riconoscibili più adatti ad essere rappresentati come associazioni o occorrenze di Topic Maps in maniera inequivocabile solo conoscendo il significato del predicato, difficilmente estrapolabile automaticamente dal contesto, senza una descrizione corretta di dominio e codominio del predicato stesso. Per questi motivi l’implementazione qui descritta fa uso di un sistema di traduzione che consente la specifica di regole per pilotare le conversioni in entrambe le direzioni in maniera più appropriata. Un insieme di regole vuoto porta la traduzione al caso generico come descritta nel precedente capitolo. Queste regole sono definibili per ciascun verso di conversione mediante un file XML che verrà descritto in seguito. 4.3 Esempi di conversione Il framework di conversione realizzato ha un meccanismo di funzionamento diverso a seconda del modello cui appartiene il file di partenza, in linea con la struttura del formato. 4.3.1 Conversione di documenti XTM in RDF Nel caso della conversione da XTM a RDF, la mappa di partenza viene inizialmente parsata al fine di ottenere la rappresentazione in memoria del documento. Il modello di scansione è simile a quello realizzato dai parser XML di tipo SAX. Per ciascun elemento definito nella sintassi XTM è stato definita la routine di gestione che riceve come parametri tutte le informazioni necessarie per 96 Capitolo 4. Implementazione del convertitore la generazione degli statement RDF di traduzione. Le funzioni di gestione per gli elementi innestati vengono invocate direttamente dagli elementi che li contengono. In maniera iterativa vengono elaborati prima tutti i topic e quindi tutte le associazioni. Per ciascun topic e ciascuna associazione vengono invocate le rispettive funzioni di traduzione, che a loro volta invocheranno le funzioni per la traduzione degli elementi innestati presenti nel modello del documento in memoria. Le modalità di traduzione sono quelle descritte nel precedente capitolo, ossia orientate all’utilizzo di uno schema RDF che descrive le classi e le proprietà necessarie a conservare interamente il contenuto informativo del documento XTM di origine. Come anticipato, la traduzione di occorrenze e associazioni è parametrizzabile rispetto alle regole definibili mediante un opportuno file di configurazione in XML. È cosı̀ possibile specificare che tutte le associazioni e tutte le occorrenze tipizzate nello stesso modo devono essere tradotte con proprietà la cui struttura è definita nel file di configurazione. Per le associazioni è inoltre possibile specificare quali ruoli devono essere considerati come dominio e quali come codominio della proprietà, offrendo cosı̀ la possibilità di risolvere il problema risultante dalla multidirezionalità delle associazioni Topic Maps, discusso precedentemente nel paragrafo 3.3.3. Esempio 4.1 Riprendendo e ampliando alcuni degli esempi già visti nei capitoli precedenti, consideriamo il seguente esempio: <?xml version="1.0" encoding="ISO-8859-1"?> <topicMap xmlns="http://www.topicmaps.org/xtm/1.0/" xmlns:xlink="http://www.w3.org/1999/xlink"> <topic id="at-autore-di"> <baseName> <baseNameString>Autore Di</baseNameString> </baseName> 4.3 Esempi di conversione </topic> <topic id="art-autore"/> <topic id="art-website"/> <topic id="ort-age"/> <topic id="mario_rossi"> <baseName> <baseNameString>Mario Rossi</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#ort-age"/> </instanceOf> <resourceData>25</resourceData> </occurrence> </topic> <topic id="mario_rossi_web_site"> <subjectIdentity> <resourceRef xlink:href="http://www.mariorossi.com/"/> </subjectIdentity> </topic> <association id="assoc"> <instanceOf> <topicRef xlink:href="#at-autore-di"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#art-autore"/> </roleSpec> <topicRef xlink:href="#mario_rossi"/> </member> <member> <roleSpec> 97 98 Capitolo 4. Implementazione del convertitore <topicRef xlink:href="#art-website"/> </roleSpec> <topicRef xlink:href="#mario_rossi_web_site"/> </member> </association> </topicMap> Le impostazioni di default, cosı̀ come descritte nel precedente capitolo, producono il seguente documento RDF: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:xtm2rdf="http://cs.unibo.it/meta/tmschema.rdf#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> <rdf:Description rdf:ID="membro_2"> <rdf:type rdf:resource="#art-website"/> <rdfs:isDefinedBy rdf:resource="http://www.mariorossi.com/"/> </rdf:Description> <rdf:Description rdf:ID="membro_1"> <rdf:type rdf:resource="#art-autore"/> <rdfs:isDefinedBy rdf:resource="#mario_rossi"/> </rdf:Description> <rdf:Description rdf:ID="assoc"> <xtm2rdf:association rdf:resource="#members_assoc"/> <rdf:type rdf:resource="#at-autore-di"/> </rdf:Description> <rdf:Description rdf:ID="at-autore-di"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Class"/> <rdfs:label>Autore Di</rdfs:label> </rdf:Description> 4.3 Esempi di conversione 99 <rdf:Description rdf:ID="members_assoc"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#membro_1"/> <rdf:_2 rdf:resource="#membro_2"/> </rdf:Description> <rdf:Description rdf:ID="dataOccurrence_643"> <rdf:type rdf:resource="#ort-age"/> <rdfs:label>25</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="mario_rossi"> <rdfs:label>Mario Rossi</rdfs:label> <rdfs:seeAlso rdf:resource="#dataOccurrence_643"/> </rdf:Description> </rdf:RDF> La natura binaria dell’associazione tra l’autore del sito ed il sito stesso, può suggerire una traduzione mediante proprietà associabile all’autore e con oggetto la risorsa che rappresenta il sito o, viceversa, come una proprietà associata al sito e che ha per oggetto il suo autore. Analogamente, l’occorrenza di tipo age che associa a Mario Rossi la sua età può essere interpretata, senza perdita di informazioni, come una proprietà della persona. Pertanto si è reso possibile un simile comportamento mediante la specifica delle seguenti regole: <?xml version="1.0"?> <xtm2rdf> <property_associations> <li id="at-autore_di"> <domain_role id="art-autore"/> <range_role id="art-website"/> </li> </property_associations> 100 Capitolo 4. Implementazione del convertitore <property_occurrences> <li id="ort-age"/> </property_occurrences> </xtm2rdf> Ossia, si specificano gli identificatori dei tipi di associazione e dei tipi di occorrenze che si desidera tradurre come proprietà. Per le associazioni è possibile stabilire anche quali occurrence role types devono essere considerati soggetto e quali oggetto della proprietà relativa. Con l’aggiunta di queste regole si ottiene il seguente documento RDF: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:NS0="http://cs.unibo.it/test.rdf#"> <rdf:Description rdf:ID="at-autore_di"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> <rdfs:label>Autore Di</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="ort-age"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <rdf:Description rdf:ID="mario_rossi"> <rdfs:label>Mario Rossi</rdfs:label> <NS0:ort-age>25</NS0:ort-age> <NS0:at-autore_di rdf:resource="http://www.mariorossi.com/"/> </rdf:Description> </rdf:RDF> Va sottolineato come ciò comporti la perdita delle eventuali informazioni di 4.3 Esempi di conversione 101 scope relative alle associazioni ed occorrenze mappate a proprietà. Tuttavia, estendendo il meccanismo ad ogni tipo di associazione e di occorrenza, si ottiene l’indipendenza del documento prodotto dallo schema di traduzione. 4.3.2 Conversione di documenti RDF in XTM Consideriamo ora la conversione in senso opposto a quello appena esaminato, ossia da documenti RDF a documenti XTM. La struttura XML della serializzazione RDF è priva di livelli innestati. In effetti, benché le sintassi abbreviate possono portare, attraverso descrizioni anonime, ad un arbitrario livello di “nesting”, il modello risultante è comunque rappresentabile in forma “lineare”, ovvero in una forma che elenca le descrizioni di risorse di primo livello. Inoltre, il modello in memoria successivo al parsing è costituito dalla lista di statement che il documento RDF rappresenta. Quindi, l’analisi del documento RDF di origine avviene mediante una scansione dell’elenco di statement, e procede sulla base del tipo di predicato esaminato. In questo modo si attua una sorta di verifica sulla struttura del grafo diretto che il modello rappresenta. Il procedimento equivale, in effetti, ad esaminare tutti gli archi uscenti da ciascun nodo del grafo e ad applicare l’opportuna funzione di conversione, basata sulla natura dell’arco e dei nodi ai suoi estremi. Per ciascun predicato definito, vengono applicate le regole di conversione viste nel capitolo precedente. In particolare, per i predicati non appartenenti alle specifiche RDF e RDFS, è possibile, come nel caso precedente, specificare la modalità di conversione attraverso un file XML. Vengonono riportati qui di seguito alcuni possibili esempi di conversione. Esempio 4.2 Consideriamo un esempio di documento RDF comprendente lo schema Dublin Core [dc01] ed una descrizione di risorsa relativa alla pagina iniziale del sito stesso e da esso linkata. Per brevità si è preferito eliminare le parti non essenziali dello schema, comprendenti commenti e proprietà non significative per l’esempio. 102 Capitolo 4. Implementazione del convertitore <?xml version="1.0"?> <!-RDF Schema declaration for the Dublin Core Element Set 1.1 2001/08/14 comments, etc. to webteam <[email protected]> --> <!DOCTYPE rdf:RDF [ <!ENTITY rdfns ’http://www.w3.org/1999/02/22-rdf-syntax-ns#’> <!ENTITY rdfsns ’http://www.w3.org/2000/01/rdf-schema#’> <!ENTITY dcns ’http://purl.org/dc/elements/1.1/’> ]> <rdf:RDF xmlns:rdf="&rdfns;" xmlns:rdfs="&rdfsns;" xmlns:dc="&dcns;"> <!-- Begin: Title Declaration --> <rdf:Property rdf:about = "&dcns;title"> <rdfs:label>Title</rdfs:label> <rdfs:comment>A name given to the resource.</rdfs:comment> </rdf:Property> <rdf:Property rdf:about = "&dcns;contributor"> <rdfs:label>Contributor</rdfs:label> <rdfs:comment> An entity responsible for making contributions to the content of the resource. </rdfs:comment> </rdf:Property> <rdf:Property rdf:about = "&dcns;description"> <rdfs:label>Description</rdfs:label> <rdfs:comment> An account of the content of the resource. </rdfs:comment> </rdf:Property> 4.3 Esempi di conversione <rdf:Property rdf:about = "&dcns;date"> <rdfs:label>Date</rdfs:label> <rdfs:comment> A date associated with an event in the life cycle of the resource. </rdfs:comment> </rdf:Property> <rdf:Property rdf:about = "&dcns;format"> <rdfs:label>Format</rdfs:label> <rdfs:comment> The physical or digital manifestation of the resource. </rdfs:comment> <rdfs:isDefinedBy rdf:resource = "&dcns;" /> </rdf:Property> <rdf:Property rdf:about = "&dcns;language"> <rdfs:label>Language</rdfs:label> <rdfs:comment> A language of the intellectual content of the resource. </rdfs:comment> <rdfs:isDefinedBy rdf:resource = "&dcns;" /> </rdf:Property> <!-- esempio di descrizione basata su schema Dublin Core --> <rdf:Description rdf:about="http://dublincore.org/"> <dc:title> Dublin Core Metadata Initiative (DCMI) Home Page </dc:title> <dc:description> The Dublin Core Metadata Initiative is an open forum engaged in the development of interoperable 103 104 Capitolo 4. Implementazione del convertitore online metadata standards that support a broad range of purposes and business models. DCMI’s activities include consensus-driven working groups, global workshops, conferences, standards liaison, and educational efforts to promote widespread acceptance of metadata standards and practices. </dc:description> <dc:date>2001-01-16</dc:date> <dc:format>text/html</dc:format> <dc:language>en</dc:language> <dc:contributor> Dublin Core Metadata Initiative </dc:contributor> </rdf:Description> </rdf:RDF> Quello riportato qui di seguito è il documento tradotto in XTM. Anche in questo caso sono state eliminate per brevità le parti poco significative e sono stati resi più leggibili gli identificatori dei costrutti normalmente costiuite da stringhe esadecimali. <?xml version="1.0" encoding="UTF-8"?> <topicMap xmlns="http://www.topicmaps.org/xtm/1.0/" xmlns:xlink="http://www.w3.org/1999/xlink"> <topic id="occ-type"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#occurrence"/> </subjectIdentity> </topic> <topic id="ass-type"> <subjectIdentity> 4.3 Esempi di conversione <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#association"/> </subjectIdentity> </topic> <topic id="topic-type"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#class"/> </subjectIdentity> </topic> <topic id="format"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://purl.org/dc/elements/1.1/format"/> </subjectIdentity> <baseName> <baseNameString>Format</baseNameString> </baseName> <occurrence> <resourceData> The physical or digital manifestation of the resource. </resourceData> </occurrence> </topic> <topic id="title"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef 105 106 Capitolo 4. Implementazione del convertitore xlink:href="http://purl.org/dc/elements/1.1/title"/> </subjectIdentity> <baseName> <baseNameString>Title</baseNameString> </baseName> <occurrence> <resourceData>A name given to the resource.</resourceData> </occurrence> </topic> <topic id="language"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://purl.org/dc/elements/1.1/language"/> </subjectIdentity> <baseName> <baseNameString>Language</baseNameString> </baseName> <occurrence> <resourceData> A language of the intellectual content of the resource. </resourceData> </occurrence> </topic> <topic id="contributor"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://purl.org/dc/elements/1.1/contributor"/> </subjectIdentity> 4.3 Esempi di conversione <baseName> <baseNameString>Contributor</baseNameString> </baseName> <occurrence> <resourceData> An entity responsible for making contributions to the content of the resource. </resourceData> </occurrence> </topic> <topic id="date"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://purl.org/dc/elements/1.1/date"/> </subjectIdentity> <baseName> <baseNameString>Date</baseNameString> </baseName> <occurrence> <resourceData> A date associated with an event in the life cycle of the resource. </resourceData> </occurrence> </topic> <topic id="description"> <instanceOf> <topicRef xlink:href="#occ-type"/> </instanceOf> <subjectIdentity> <resourceRef 107 108 Capitolo 4. Implementazione del convertitore xlink:href="http://purl.org/dc/elements/1.1/description"/> </subjectIdentity> <baseName> <baseNameString>Description</baseNameString> </baseName> <occurrence> <resourceData> An account of the content of the resource. </resourceData> </occurrence> </topic> <topic id="dublinCoreHomePage"> <subjectIdentity> <resourceRef xlink:href="http://dublincore.org/"/> </subjectIdentity> <occurrence> <instanceOf> <topicRef xlink:href="#language"/> </instanceOf> <resourceData>en</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#format"/> </instanceOf> <resourceData>text/html</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#contributor"/> </instanceOf> <resourceData>Dublin Core Metadata Initiative</resourceData> </occurrence> <occurrence> <instanceOf> 4.3 Esempi di conversione 109 <topicRef xlink:href="#description"/> </instanceOf> <resourceData> The Dublin Core Metadata Initiative is an open forum engaged in the development of interoperable online metadata standards that support a broad range of purposes and business models. DCMI's activities include consensus-driven working groups, global workshops, conferences, standards liaison, and educational efforts to promote widespread acceptance of metadata standards and practices. </resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#title"/> </instanceOf> <resourceData> Dublin Core Metadata Initiative (DCMI) Home Page </resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#date"/> </instanceOf> <resourceData>2001-01-16</resourceData> </occurrence> </topic> </topicMap> Come si può notare il modello prodotto esprime i concetti del documento originale, identificando propriamente i ruoli delle proprietà RDF come tipi di occorrenze, istanziate poi nel topic corrispondente alla risorsa a cui le proprietà si riferiscono. Si noti come l’identifcazione della parte dichiarativa della mappa faccia 110 Capitolo 4. Implementazione del convertitore riferimento ai Published Subject Indicators per descrivere il sistema di tipizzazione di XTM. Esempio 4.3 A complemento dell’esempio precedente presentiamo la traduzione di un documento RDF che definisce una semplice ontologia, presente nel documento di specifica di RDF Schema. Esso definisce un insieme di classi che modellano autoveicoli associabili ai proprietari. <?xml version=’1.0’ encoding=’ISO-8859-1’?> <!DOCTYPE rdf:RDF [ <!ENTITY rdf ’http://www.w3.org/1999/02/22-rdf-syntax-ns#’> <!ENTITY rdfs ’http://www.w3.org/TR/1999/PR-rdf-schema-19990303#’> <!ENTITY mv ’http://targetnamespace/vehicle-onthology#’> ]> <rdf:RDF xmlns:rdf="&rdf;" xmlns:rdfs="&rdfs;"> <rdfs:Class rdf:about="&mv;MiniVan"> <rdfs:subClassOf rdf:resource="&mv;PassengerVehicle"/> <rdfs:subClassOf rdf:resource="&mv;Van"/> </rdfs:Class> <rdfs:Class rdf:about="&mv;MotorVehicle"> <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> </rdfs:Class> <rdfs:Class rdf:about="&mv;PassengerVehicle"> <rdfs:subClassOf rdf:resource="&mv;MotorVehicle"/> </rdfs:Class> <rdfs:Class rdf:about="&mv;Truck"> <rdfs:subClassOf rdf:resource="&mv;MotorVehicle"/> </rdfs:Class> <rdfs:Class rdf:about="&mv;Van"> 4.3 Esempi di conversione 111 <rdfs:subClassOf rdf:resource="&mv;MotorVehicle"/> </rdfs:Class> <rdfs:Class rdf:about="&mv;Person"> <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> </rdfs:Class> <rdf:Property rdf:about="&mv;name"> <rdfs:domain rdf:resource="&mv;Person"/> <rdfs:range rdf:resource="&rdfs;Literal"/> </rdf:Property> <rdf:Property rdf:about="&mv;rearSeatLegRoom"> <rdfs:domain rdf:resource="&mv;MotorVehicle"/> <rdfs:range rdf:resource="&rdfs;Literal"/> </rdf:Property> <rdf:Property rdf:about="&mv;registeredTo"> <rdfs:domain rdf:resource="&mv;MotorVehicle"/> <rdfs:range rdf:resource="&mv;Person"/> </rdf:Property> </rdf:RDF> Il documento tradotto in XTM è quello che segue. Si noti che il documento di origine definisce solamente un sistema di tipi senza introdurre alcuna risorsa istanza, e che pertanto utilizza solamente proprietà di RDF Schema. La tipizzazione dei topic di traduzione fa ricorso ai Subject Indicators di XTM. I rapporti di tipo superclasse sottoclasse tra topic sono definiti mediante un’apposita associzione che esplicita i ruoli. Anche in questo caso, per facilitare la leggibilità del documento si sono sostituiti gli idetificatori. <?xml version="1.0" encoding="UTF-8"?> <topicMap xmlns="http://www.topicmaps.org/xtm/1.0/" 112 Capitolo 4. Implementazione del convertitore xmlns:xlink="http://www.w3.org/1999/xlink"> <topic id="tt-class"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#class"/> </subjectIdentity> </topic> <topic id="tt-association"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#association"/> </subjectIdentity> </topic> <topic id="tt-occurrence"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#occurrence"/> </subjectIdentity> </topic> <topic id="at-superclass-subclass"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass"/> </subjectIdentity> </topic> <topic id="ort-superclass"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass"/> </subjectIdentity> </topic> 4.3 Esempi di conversione <topic id="ort-subclass"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#subclass"/> </subjectIdentity> </topic> <topic id="motorVehicle"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/MotorVehicle"/> </subjectIdentity> </topic> <topic id="passengerVehicle"> <instanceOf> <topicRef xlink:href="#x1gmot94il-1b"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/PassengerVehicle"/> </subjectIdentity> </topic> <topic id="rearSeatLegRoom"> <instanceOf> <topicRef xlink:href="#tt-occurrence"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/rearSeatLegRoom"/> </subjectIdentity> 113 114 Capitolo 4. Implementazione del convertitore </topic> <topic id="registeredTo"> <instanceOf> <topicRef xlink:href="#tt-association"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/registeredTo"/> </subjectIdentity> </topic> <topic id="person"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/Person"/> </subjectIdentity> </topic> <topic id="van"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/Van"/> </subjectIdentity> </topic> <topic id="name"> <instanceOf> <topicRef xlink:href="#tt-occurrence"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/name"/> 4.3 Esempi di conversione </subjectIdentity> </topic> <topic id="miniVan"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/MiniVan"/> </subjectIdentity> </topic> <topic id="truck"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://vehicle-onthology/Truck"/> </subjectIdentity> </topic> <association> <instanceOf> <topicRef xlink:href="#at-superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#ort-subclass"/> </roleSpec> <topicRef xlink:href="#passengerVehicle"/> </member> <member> <roleSpec> <topicRef xlink:href="#ort-superclass"/> </roleSpec> <topicRef xlink:href="#motorVehicle"/> 115 116 Capitolo 4. Implementazione del convertitore </member> </association> <association> <instanceOf> <topicRef xlink:href="#at-superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#ort-subclass"/> </roleSpec> <topicRef xlink:href="#truck"/> </member> <member> <roleSpec> <topicRef xlink:href="#ort-superclass"/> </roleSpec> <topicRef xlink:href="#motorVehicle"/> </member> </association> <association> <instanceOf> <topicRef xlink:href="#at-superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#ort-subclass"/> </roleSpec> <topicRef xlink:href="#miniVan"/> </member> <member> <roleSpec> <topicRef xlink:href="#ort-superclass"/> </roleSpec> <topicRef xlink:href="#passengerVehicle"/> 4.3 Esempi di conversione </member> </association> <association> <instanceOf> <topicRef xlink:href="#at-superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#ort-subclass"/> </roleSpec> <topicRef xlink:href="#van"/> </member> <member> <roleSpec> <topicRef xlink:href="#ort-superclass"/> </roleSpec> <topicRef xlink:href="#motorVehicle"/> </member> </association> <association> <instanceOf> <topicRef xlink:href="#at-superclass-subclass"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#ort-subclass"/> </roleSpec> <topicRef xlink:href="#miniVan"/> </member> <member> <roleSpec> <topicRef xlink:href="#ort-superclass"/> </roleSpec> <topicRef xlink:href="#van"/> 117 118 Capitolo 4. Implementazione del convertitore </member> </association> </topicMap> Come si nota, la convenzione adottata per la referenziazione a soggetti pubblici è quella di definire topic stub che rappresentino i PSI per poter ottenere riferimenti locali. Questo approccio, oltre ad essere sintatticamente corretto, facilita le operazioni di manipolazione del documento in fase di creazione. 4.4 Architettura del sistema L’implemetazione del convertitore è stata pilotata dall’idea di produrre un software quanto più modulare possibile. Questa scelta è stata dettata, oltre dalle regole di buona programmazione, anche dall’esigenta di rendere tale software il più configurabile possibile, persino da parte di un utente che sia poco avvezzo alle problematiche di conversione e di manipolazione di metadati. Pertanto, come si può notare dal seguente class diagramm, si possono individuare i seguenti componenti: Meta Il cuore dell’applicazione. Richiama tutti i componenti necessari al fine di eseguire la conversione richiesta. ConfEngine Si occupa di leggere i file di configurazione. Per una descrizione del formato di tali file di rimanda la paragrafo 4.6. PluginEngine Permette il caricamento dinamico dei moduli (o plugin) usati per la conversione. Nel paragrafo 4.6 verrà mostrato come installare correttamente tali componenti. Si possono notare inoltre le classi: ClassLoader Si occupa dell’effettivo caricamento dei plugin. ConversionTable Pilota la conversione usando i parametri letti nei file di configurazione e i moduli prima caricati. 4.4 Architettura del sistema 119 InputParser Legge il file di cui si vuole effettuare la conversione e le crea il modello il memoria. OutputSerializer Al termine della conversione questo componente si occupa di serializzare il modello risultante, salvandolo cosı̀ nel file specificato. ConfigurationManager ConfEngine InputParser OutputSerializer Meta ConversionTable ClassLoader PluginEngine Figura 4.1: Il class diagram concettuale del covertitore Proseguendo con la specifica dei componenti si è reso necessario suddividere le funzionalità di lettura e di salvataggio di un file in base al verso di traduzione: da Topic Maps verso RDF o viceversa. Nel primo caso (vedi figura 4.2) i componenti InputParser e OutputSerializer sono stati sostituiti da una gerarchia di classi un po’ più complicata: XTMDocParser Effettua il caricamento del documento XTM da convertire. Ne crea il modello usando MyXTMBuilder, che implementa l’interfaccia TopicMapHandler definita nelle API del pacchetto TM4J. 120 Capitolo 4. Implementazione del convertitore RDFProducer È la classe astratta, che in seguito verrà specificata, che si occupa di creare il modello RDF corrispondente al documento XTM prima caricato. Infine il modello verrà serializzato in XML. ConfigurationManager ConfEngine RDFProducer MyXTMBuilder Meta ConversionTable TopicMapHandler XTMDocParser ClassLoader XTMPlugin PluginEngine Figura 4.2: Il class diagram per la traduzione da Topic Maps verso RDF Nel caso di traduzione da RDF verso Topic Maps (vedi figura 4.3), i componenti InputParser e OutputSerializer sono stati sostituiti dalle seguenti classi: RDFDocParser Effettua il caricamento del documento RDF da convertire e ne crea il modello. XTMProducer Crea il modello del documeto XTM risultante dalla conversione. A tal fine usa la classe MyTopicMapWalker, che permette la navigazione del modello stesso. La serializzazione, infine, è effettuata mediante MyXTMWriter. 4.5 Dettagli di implementazione 121 ConfigurationManager ConfEngine ConversionTable ClassLoader PluginEngine Meta RDFPlugin MyXTMWriter RDFDocParser TopicMapWriter XTMProducer MyTopicMapWalker Figura 4.3: Il class diagram per la traduzione da RDF verso Topic Maps 4.5 Dettagli di implementazione In questo paragrafo verranno trattati tutti gli aspetti di implementazione necessari a comprendere la particolare organizzazione in classi del convertitore; verranno mostrati i passi compiuti durante la traduzione ed infine verrà commentata l’achitettura a plugin utilizzata. 4.5.1 Il serializzatore RDF Come anticipato nel paragrafo precedente, i costituenti del componente atto alla serializzazione del documento nel caso di traduzione da XTM verso RDF sono rappresentati nella figura 4.4. Si noti il supporto fornito a due insiemi di API: Jena, di cui è già stato discusso prima, e le cosidette Stanford RDF API, prodotte dall’Università di Stanford, il cui ultimo aggiornamento risale agli inizi del 2001. A tal fine sono state definite due classi, JenaRDFProducer e W3CRDFProducer (entrambe implementano RDFProducer), che si occupano di serializzare 122 Capitolo 4. Implementazione del convertitore il documento RDF mediante, rispettivamente, JenaRDFXMLWriter e MySerializer. RDFResource RDFStatement RDFLiteral RDFProperty RDFProducer Comparator JenaRDFProducer W3CRDFProducer RDFXMLWriter JenaRDFXMLWriter RDFSerializer MyRDFFactoryImpl MySerializer RDFFactoryImpl Figura 4.4: Il class diagram per il serializzatore RDF 4.5.2 La fase di bootstrap Dopo aver definito nei paragrafi precedenti le dipenze fra i componenti che compongono il convertitore, a causa del loro gran numero è necessario chiarire anche l’ordine in cui essi interagiscono. Nel sequence diagram di figura 4.5 vengono mostrati i messaggi scambiati fra i vari componenti del convertitore durante la fase di bootstrap. Si possono notare i seguenti passi salienti: 1. Il componene principale, Meta, ottiene un’istanza del lettore del file di configurazione, che usa per inizializzare i parametri dell’applicazione (initConfig()). 2. Viene richiesto al PluginEngine di caricare i plugin installati e quindi di inizializzarli. 4.5 Dettagli di implementazione 123 3. Viene iniziato il parsing del documento da convertire. Nell’esempio è mostrato il parsing di un file XTM, e pertanto vengono chiamati i metodi startTopicGeneration() e startAssociationGeneration(). 4. Alla fine della conversione il modello viene serializzato (writeRDF()). m : Meta ce : ConfEngine pe : PluginEngine dp : XTMDocParser rp : JenaRDFProducer getInstance( ) initConfig( ) initPlugins( ) identifyFile( ) loadPlugin( ) registerPlugins( ) initParsing( ) startTopicGeneration( ) startAssociationGeneration( ) writeRDF( ) writeRDF( ) Figura 4.5: Fase di bootstrap del convertitore 4.5.3 I plugin L’alto grado di configurabilità richiesto è stato soddisfatto realizzando due strumenti che permettono di pilotare la traduzione: 124 Capitolo 4. Implementazione del convertitore Driver di traduzione È un file XML che permette di definire come devono essere trattati i predicati RDF rispetto alle associazioni ed alle occorrenze di Topic Maps e viceversa. Come è stato descritto nell’esempio 4.1, è possibile definire, ad esempio, quali tipi di associazione e di occorrenza che devono essere tradotti in predicati. Nel paragrafo 4.6 verrà mostrato il DTD secondo cui è possibile creare tali driver. Plugin Nel caso in cui non sia sufficiente il supporto fornito dai driver, è possibile addirittura sostituire i plugin eseguiti di default dall’applicazione al riconoscimento dei vari costrutti sintattici di RDF e XTM. A tal fine è stata definita una gerarchia di interfacce, che devono essere implementate affinchè sia possibile far caricare al convertitore i nuovi plugin scritti. Naturalmente, nel caso in cui si voglia gestire alla stessa maniera elementi di sintassi diversi, si può far implementare più interfacce allo stesso plugin. Interfaccia Topic BaseNameInTopic InstanceOfInTopic SubjectIdentityInTopic VariantInTopic OccurrenceInTopic ScopeInOccurrence ScopeInBaseName Association InstanceOfInAssociation MemberInAssociation ScopeInAssociation Plugin TopicImpl BaseNameImpl InstanceOfImpl SubjectIdentityInTopicImpl VariantInTopicImpl OccurrenceImpl ScopeInOccurrenceImpl ScopeInBaseNameImpl AssociationImpl InstanceOfImpl MemberImpl ScopeImpl Tabella 4.1: Interfacce e plugin per XTM 4.5 Dettagli di implementazione 125 Nella tabella 4.1 è possibile notare le relazioni esistenti fra i plugin e le interfacce definite nel caso della traduzione da XTM verso RDF. Si noti che: • Ogni interfaccia estende la classe XTMPlugin. • In nome di ogni interfaccia è nella forma NomeElemento-InNomeGenitore, dove NomeElemento indica l’elemento XTM che ha generato la chiamata al plugin corrispondente, e NomeGenitore indica l’elemento che contiene NomeElemento. • Come si è potuto notare dal sequence diagram di figura 4.5, la traduzione inizia scandendo prima tutti i topic ed in seguito tutte le associazioni. È compito di questi plugin invocare gli altri, in base agli elementi contenuti in Topic e in Association. Interfaccia Default RDFDescription RDFSLabel RDFType RDFSSubClassOf RDFSSubPropertyOf RDFSRange RDFSDomain RDFSIsDefinedBy RDFSSeeAlso RDFListItem RDFReif RDFSComment Plugin DefaultImpl RDFDescriptionImpl RDFSLabelImpl RDFTypeImpl RDFSSubClassOfImpl RDFSSubPropertyOfImpl RDFSRangeImpl RDFSDomainImpl RDFSIsDefinedByImpl RDFSSeeAlsoImpl RDFListItemImpl RDFReifImpl RDFSCommentImpl Tabella 4.2: Interfacce e plugin per RDF Nella tabella 4.2 è possibile notare le relazioni esistenti fra i plugin e le interfacce definite nel caso della traduzione da RDF verso XTM. Si noti che ogni interfaccia estende RDFPlugin. 126 Capitolo 4. Implementazione del convertitore La traduzione è questa volta pilotata dal tipo di predicato trovato durante il parsing. In particolare: Default Indica tutti i predicati che non fanno parte del namespace di RDF e di RDFS. RDFListItem Indica i predicati rdf: 1, rdf: 2, etc. racchiusi in un contenitore RDF. RDFReif Indica i predicati RDF usati per identificare un costrutto di reificazione: rdf:subject, rdf:predicate, rdf:object. 4.6 Configurazione e installazione del software In questi paragrafo verrà discusso come configurare il convertitore, ponendo particolare attenzione alla scrittura del file di configurazione ed al driver di conversione. Infine verrà mostrato come installare i plugin, nel caso in cui non si vogliano usare quelli forniti. 4.6.1 Il file di configurazione Il file di configurazione dell’editor si chiama config.xml ed è contenuto nella directory conf. Esso è composto dalle seguenti sezioni: general Contiene le impostazioni generali del converitore. proprietà: convType Il tipo di conversione. rdf2xtm. Consta delle Può assumere i valori xtm2rdf e inFile Il nome del file da convertire, comprensivo di eventuale path. outFile Il file che dovrà contenere il risultato della conversione. parser Il parser XML da usare. Di solito coincide con org.apache.xerces.parsers.SAXParser. xtm Contiene le impostazioni relative alla manipolazione dei documenti XTM. È composto da: 4.6 Configurazione e installazione del software 127 baseURL URL, anche fittizio, del documento da convertire. XTMSchema URL dello schema XTM. pluginsPath Directory contenente i plugin utilizzati per la conversione da XTM verso RDF. driverFile Nome del driver di conversione, comprensivo di eventuale path, oppure none. rdf-api Nome del pacchetto di API usato per la manipolazione di documenti RDF. Può assumere i valori jena o w3c. rdf Contiene le impostazioni relative alla manipolazione dei documenti RDF. Include: pluginsPath Directory contenente i plugin utilizzati per la conversione da RDF verso XTM. driverFile Nome del driver di conversione, comprensivo di eventuale path, oppure none. 4.6.2 I driver di conversione Il driver permette di ottenere una traduzione molto accurata, poiché permette di specificare come trattare ogni tipo presente nel documento da convertire. Nel caso di conversione da XTM: • Permette di elencare, attraverso gli elementi property associations, gli identificatori dei tipi di associazione che devono essere tradotte direttamente come predicati RDF, senza l’uso delle risorse astratte necessarie alla conversione di associazioni generiche. Permette inoltre di definire quali membri dell’associazione devono essere considerati soggetto e quali oggetto della proprietà RDF risultante. In particolare, ogni qualvolta il motore di conversione dovrà convertire un’istanza di associazione tipizzata con il topic che ha per identificatore quello specificato, verranno inseriti nel documento RDF degli statement cosı̀ fatti: 128 Capitolo 4. Implementazione del convertitore – Hanno per soggetto le risorse corrispondenti ai topic tipizzati con il topic-type il cui identificatore è indicato come attributo id in un elemento domain role; – Hanno come oggetto le risorse corrispondenti ai topic il cui topictype ha identificatore corrispondente all’attributo id di un elemento range role. Si noti che vengono creati automaticamente tutti gli statement nei quali è possibile specificare come soggetto un membro con ruolo di dominio e come oggetto un membro con ruolo di codominio. • Permette di elencare gli identificatori delle occorrenze che devono essere tradotte direttamente in predicati RDF. In particolare, tutte le occorrenze tipizzate con un topic (che ha identificatore corrispondente all’attributo id di un elemento li innestato in property occurrences) verranno tradotte con proprietà della risorsa relativa al topic che contiene l’occorrenza, aventi per oggetto il link o il testo dell’occorrenza. Il DTD del driver per la coversione da XTM verso RDF è il seguente: <!ELEMENT xtm2rdf ( property_associations | property_occurrences )* > <!ELEMENT property_associations ( li )* > <!ELEMENT li ( domain_role, range_role )* > <!ATTLIST li id ID > #REQUIRED 4.6 Configurazione e installazione del software 129 <!ELEMENT domain_role EMPTY > <!ATTLIST domain_role id ID #REQUIRED > <!ELEMENT range_role EMPTY > <!ATTLIST range_role id ID #REQUIRED > <!ELEMENT property_occurrences ( li )* > Nel caso di conversione da RDF, il driver di conversione: • Permette di elencare, attravero gli elementi predicate innestati in association predicates i predicati non standard, cioè non appartenenti ai namespace normalmente indicati con rdf e rdfs, che devono essere trasformati in associazioni Topic Maps. L’identificazione del predicato avviene mediante specifica del suo namespace e del suo identificatore. Poiché in RDF non è definito il concetto di ruolo in una associazione, essendo implicito in quello di soggetto e oggetto di un predicato, tali informazioni non vengono specificate nell’associazione creata. • Permette di elencare, attravero gli elementi predicate innestati in occurrence predicates, i predicati non standard che devono essere trasformati in occorrenze Topic Maps. Analogamente al caso precedente, l’identificazione del predicato avviene mediante specifica del suo namespace e del suo identificatore. 130 Capitolo 4. Implementazione del convertitore Il DTD del driver per la coversione da XTM verso RDF è il seguente: <!ELEMENT rdf2xtm ( association_predicates | occurrence_predicates )* > <!ELEMENT association_predicates ( predicate )* > <!ATTLIST association_predicates nameSpace CDATA #IMPLIED predicateId CDATA #REQUIRED > <!ELEMENT occurrence_predicates ( predicate )* > <!ATTLIST occurrence_predicates nameSpace CDATA #IMPLIED predicateId CDATA #REQUIRED > <!ELEMENT predicate EMPTY > 4.6.3 I plugin I plugin, indieme al driver, rappresentano uno dei mezzi atti a configurare la traduzione. Nel paragrafo 4.5.3 è stato mostrata la gerarchia di classi definita dai plugin; in questo paragrafo verrà mostrato come installare ulteriori plugin rispetto a quelli già forniti. Il file di configurazione conf.xml definisce due proprietà di nome pluginsPath, che rappresentano le directory in cui risiedono tali plugin. 4.7 Possibili estensioni 131 I plugin di sistema sono contenuti nelle directory plugins e plugins2. Ogni classe ivi definita dichiara inoltre appartenere al package plugins o plugins2. Affinchè il PluginEngine carichi nuovi plugin è pertanto necessario effettuare i seguenti passi: • Aggiornare il file di configurazione, inserendo le directory in cui si trovano i plugin. • Scrivere il plugin in modo che appartenga al package il cui nome coincida con quello della directory in cui è contenuto e che implementi l’opportuna interfaccia. • Compilare tutto mediante lo script build.xml, eseguibile mediante il tool Ant [ant02]. È sufficiente eseguire ant install dalla directory che contiene i sorgenti. Se tutto è stato eseguito correttamente, durante la fase di avvio verrà mostrato un messaggio che notifica il caricamento del nuovo plugin. 4.6.4 Esecuzione dell’applicazione A causa del gran numero di librerie a cui il convertitore fa riferimento, lo script build.xml fornisce anche il supporto all’avvio dell’applicazione. Pertanto è sufficiente eseguire ant run dalla directory che contiene i sorgenti. 4.7 Possibili estensioni Come abbiamo visto, affrontare il problema della traduzione nel caso generico è un compito particolarmente difficile. Ciò è dovuto al fatto che la “migliore” traduzione di un documento è fortemente vincolata dal contesto, da quali informazioni si vogliono preservare e da come tali informazioni debbano essere rappresentate. Lo strumento fornito cerca di risolvere il problema generando una traduzione corretta ma che può ovviamente non coincidere con la “migliore” ottenibile. 132 Capitolo 4. Implementazione del convertitore Il supporto fornito alla risoluzione di questo problema consiste nella personalizzazione della traduzione mediante gli opportuni file di configurazione che sono stati descritti nei paragrafi precedenti. Capitolo 5 L’editor Come si è visto nei capitoli precedenti, attraverso RDF e Topic Maps è possibile descrivere risorse associando loro metainformazioni. Dopo aver esaminato entrambi i modelli ed aver mostrato le caratteristiche sintattiche delle rispettive grammatiche di serializzazione, vediamo quali sono le problematiche relative alla creazione guidata di documenti nei due formati, nell’ottica di automatizzare il processo di scrittura e portarlo ad un livello di astrazione che nasconda all’utente i dettagli sintattici. 5.1 Introduzione Gli indubbi vantaggi dell’utilizzo di XML come formato per documenti di qualsiasi genere si scontrano spesso con le difficoltà di editazione che essi presentano. In generale, il problema dell’editazione può essere affrontato con strumenti più sofisticati di un semplice editor di testo, in modo che i dettagli sintattici del documento siano resi trasparenti all’utente. In alcuni casi, il documento XML è il prodotto di un processo completamente automatico, conseguente alla serializzazione di un modello di dati editati o estratti da sorgenti informative di tutt’altra natura. Si pensi ad esempio all’XML data binding di oggetti Java. In altri casi, quando cioè la struttura dell’XML è esposta all’utente, gli strumenti di editazione utilizzano il DTD o lo schema XML di riferimento per 134 Capitolo 5. Editazione di documenti RDF e XTM permettere all’utente, tra le altre cose, di sapere quali elementi è necessario inserire e quali valori siano consentiti per gli elementi e gli attributi definiti. La creazione e l’editazione di documenti di metainformazioni nei formati presi in esame in questa dissertazione è sicuramente più vicino al secondo di questi casi. In effetti, gli strumenti per la creazione di documenti RDF e XTM a tutt’oggi disponibili sono essenzialmente editor XML basati sulla grammatica dei due formati, definita da un DTD nel caso di Topic Maps e da una specifica in EBNF per RDF. Tuttavia, sebbene strumenti di questa natura facilitino la creazione, il grado di trasparenza che offrono all’utente è molto limitato. In particolare l’utente è costretto a conoscere i concetti propri a ciascuno dei due paradigmi per essere in grado di inserire metainformazioni su qualsiasi tipo di risorsa. In questo modo, inoltre, non viene posta alcuna distinzione tra le risorse che formano il sistema di tipizzazione del modello e quelle che rappresentano le reali metainformazioni. 5.2 Caratteristiche generali dell’editor L’idea alla base dello strumento di editazione che qui viene presentato è quella di sfruttare le informazioni semantiche, rappresentate dalle ontologie e dai vincoli definiti in appositi documenti di schema, per guidare l’utente alla creazione di documenti validi e significativi, in maniera del tutto trasparente. In questo modo si sposta il livello di astrazione dei modelli ad un livello più elevato rispetto al mero sistema di vincoli imposto dalla sintassi. In effetti, se si pensa al sistema di tipi e all’insieme di vincoli di relazioni introdotti da un’istanza di RDF Schema, si nota come queste informazioni possano essere utilizzate come supporto alla creazione di documenti validi e conformi allo schema, rendendo il processo di creazione rapido e sistematico. In particolare, l’idea è quella di consentire la creazione di risorse descrittive tipizzabili sulla base delle classi definite nello schema, e quindi, in base al tipo specificato, consentire l’inserimento solo degli attributi e delle relazioni con le altre risorse previste dallo schema stesso. 5.2 Caratteristiche generali dell’editor 5.2.1 135 Schemi per l’editazione In virtù dell’approfondita indagine sulle analogie tra i due standard, l’obiettivo che ci si è posti per la creazione dell’editor è stato quello di rendere del tutto omogenea la visione dei modelli percepita dall’utente in relazione al linguaggio di specifica. Il problema principale in questo senso è rappresentato dall’assenza di uno standard ufficiale per la specifica di schemi in Topic Maps che permetta di esprimere vincoli sulle relazioni possibili tra le risorse, simile a RDF Schema. Pertanto, piuttosto che introdurre arbitrariamente un meccanismo che consentisse di parificare i due standard sotto questo aspetto, si è optato per l’implementazione di un sistema di vincoli analogo a quello introdotto dalla versione propositiva di TMCL, pubblicata dalla ISO nel primo draft di specifica [Ste01]. In effetti la potenzialità espressiva raggiunta da questa prima istanza del linguaggio raggiunge il livello necessario agli scopi del progetto. Interpretazione di schemi XTM La caratteristica essenziale degli schemi esprimibili in questa versione di TMCL è la definizione di tipi attraverso template. In particolare per esprimere l’applicabilità di tipi di occorrenze ai topic si elencano tali occorrenze nel template. Vediamo un esempio: Esempio 5.1 <topic id="ort-birthday"> <instnceOf> <topicRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#occurrence-type"/> </instanceOf> <baseName> <baseNameString>Data di nascita</baseNameString> </baseName> </topic> <topic id="person"> <instnceOf> <topicRef 136 Capitolo 5. Editazione di documenti RDF e XTM xlink:href="http://www.iso.org/iso13250/tmcl.xtm#topic-type"/> </instanceOf> <baseName> <baseNameString>Persona</baseNameString> </baseName> <occurrence> <instnceOf> <topicRef xlink:href="#ort-birthday"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <resourceData></resourceData> </occurrence> </topic> In questo caso si è definito un template di persona per il quale si è specificata l’applicabilità dell’occorrenza di tipo ort-birthday. Come si è accennato nel primo capitolo, l’interpretazione di uno schema Topic Maps può essere di due tipi: stringente (strict) o lasca (loose). Nel primo caso, l’occorrenza dell’esempio precedente, cioè la data di nascita della persona, verrebbe considerata necessaria per ogni topic istanza della classe persona, mentre nel secondo caso sarebbe considerata solo facoltativamente applicabile. Il diverso modo di interpretazione si riflette ovviamente nello strumento di editazione guidata. Come si è visto, la filosofia di RDF Schema è quella di definire proprietà specificando le classi delle risorse a cui possono essere applicate, e non obbligare quindi la specifica di una proprietà per una determinata risorsa. Quindi, poiché si è voluta offrire la trasparenza del linguaggio utilizzato per i documenti editati, si è scelta l’interpretazione lasca. 5.2.2 Relazioni e attributi Le caratteristiche semantiche di RDF e Topic Maps rendono possibile la creazione di strumenti che permettono di uniformare la visione dei modelli 5.2 Caratteristiche generali dell’editor 137 di metainformazioni. Nei precedenti capitoli si è fatto spesso notare come una delle caratteristiche che li differenzia maggiormente sia il modo in cui vengono associati attributi alle cose descritte ed il modo in cui queste vengono messe in relazione. Nel caso di RDF si utilizzano in entrambi i casi delle proprietà che associano alle risorse dei valori letterali o altre risorse, opportunamente tipizzate. L’approccio di Topic Maps è quello di dividere tali informazioni in occorrenze e associazioni. Il diverso ruolo di queste informazioni è in effetti evidente. Per questo motivo, per raggiungere un sufficiente grado di trasparenza, si è scelto di esporre attraverso l’editor tale diversità. In particolare vengono identificati come attributi le proprietà RDF che lo schema definisce con codominio di tipo Literal. Ad esempio: <rdf:Property rdf:ID="birthday"> <rdfs:domain rdf:resource="#Persona"/> <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/> </rdf:Property> Per Topic Maps, sono considerati attributi tutti i tipi di occorrenze definite nello schema TMCL, come visto nell’esempio precedente. Viceversa, vengono considerate relazioni tutte le proprietà RDF che specificano una classe dello schema quale codominio, mentre per Topic Maps sono relazioni tutti i tipi di associazioni. Un ruolo particolare all’interno dell’editor è svolto dagli attributi di nome e di tipo. In effetti entrambi gli standard hanno definito dei meccanismi built-in per la specifica di tali informazioni. Attorno alla scelta del tipo di una risorsa ruota tutto il meccanismo di inserimento delle metainformazioni ad essa attribuibili, secondo le impostazioni dettate dallo schema associato al documento. 138 5.2.3 Capitolo 5. Editazione di documenti RDF e XTM Regole per l’applicabilità di attributi e risorse L’applicabilità di attributi e la specifica di relazioni tra risorse è vincolata dal tipo specificato per ciascuna risorsa. Si è fatto precedentemente notare come entrambi gli standard supportino la tipizzazione multipla: una risorsa RDF (o un topic) può in generale essere caratterizzata da un numero arbitrario di tipi. Tuttavia appare casisticamente improbabile la necessità di ricorre alla specifica multipla di tipi per le istanze. In effetti, seguendo la metafora delle gerarchie di classi nei linguaggi di programmazione ad oggetti, l’ereditarietà multipla (laddove sia possibile) è limitata al sistema di classi: gli oggetti (le istanze) sono tipizzabili con un’unica classe, ed eventualmente è possibile effettuare il casting a classi imparentate con quella di appartenenza. Pertanto la necessità di poter trattare una stessa istanza con due diversi tipi si deve riflettere nella costruzione di gerarchie di classi che consentano il casting dell’istanza. Per gli attributi vale la regola di ereditarietà: ogni attributo applicabile alle istanze di una classe A, diventa applicabile a tutte le istanze di quelle classi che hanno A fra i propri superiori (ancestors) nella gerarchia. Lo stesso vale per le relazioni. 5.2.4 Indicizzazione delle risorse descritte La gestione dei documenti che vengono elaborati presenta spesso caratteristiche simili a quelle di comuni basi di dati di tipo relazionale. L’implementazione prevede che il repository dei modelli sia semplicemente una directory che contiene tutti i documenti editabili. Tuttavia, il modello di dati costituito da ogni singolo documento presenta delle analogie con un database, relativamente alle operazioni di ricerca, modifica e cancellazione delle risorse descritte. In un documento di metainformazioni, sia esso espresso in RDF o XTM, ogni cosa descritta può essere referenziata in vari modi, e pertanto a ciascuna di esse è associato un identificatore univoco interno al documento. In RDF, il ruolo di identificazione della risorsa descritta può essere ricoperto dall’URI della risorsa stessa, e ci si riferisce ad essa senza utilizzare identificatori interni al documento di metainformazioni. È comunque possibile 5.2 Caratteristiche generali dell’editor 139 specificare un identificatore interno al documento per riferirsi alle varie risorse RDF. Nel normale modo di operare per Topic Maps tutti i topic del documento hanno il proprio identificatore e, nel caso la risorsa descritta abbia un URI, lo si specifica mediante il tag subjectIdentity. Per raggiungere univocità di rappresentazione, si è scelto quindi di utilizzare anche per RDF un identificatore interno al documento per ciascuna risorsa descritta, e si utilizza eventualmente il predicato di sistema rdf:subject per specificare l’URI della risorsa nel caso esista. Negli esempi fin qui presentati si è preferito utilizzare degli identificatori che aiutassero la leggibilità. Nei normali casi d’uso e in particolar modo nei casi di generazione automatica dei documenti come quello qui descritto, tale identificatore è spesso costituito da stringhe esadecimali incrementali e, avendo principalmente un utilizzo interno, non possono essere esposte a livello di interfaccia utente. Il problema della reperibilità delle risorse descritte all’interno del documento è stato risolto attraverso l’esposizione dei nomi ad esse associati, ossia ai baseName dei topic di XTM e alle rdf:label delle risorse RDF. Ovviamente, per entrambi gli standard non esiste nessuna regola che obblighi la specifica di un attributo di nome univoco a tutto ciò che è descritto. É altrettanto vero che è necessario poter avere un’informazione leggibile che abbia funzione di chiave per dare all’utente la possibilità di referenziare ogni singola risorsa. Pertanto, la specifica di nomi univoci internamente al documento è lasciato come onere all’utente. Come si vedrà nel paragrafo 5.5.3, per risolvere casi di ambiguità dovuti a possibili omonimie, è possibile la specifica di nomi in numero arbitrario. La sidebar dell’editor che elenca le risorse contenute del documento specificherà l’insieme dei nomi per ciascuna risorsa, mentre i SELECT di HTML che elencano le risorse per l’istanziazione di relazioni tra esse fanno ricorso semplicemente al primo dei nomi definiti. 5.2.5 Operazioni effettuabili L’avvio dell’applicazione, che consiste nel caricamento della pagina iniziale dell’editor dal browser, consente la scelta del file da editare dall’elenco di quelli 140 Capitolo 5. Editazione di documenti RDF e XTM disponibili, oppure la creazione di un nuovo file sulla base di uno schema tra quelli selezionabili. Il formato del documento creato, trasparente all’utente, sarà dipendente dal formato dello schema prescelto, che è constatabile dall’estensione del file di schema associato. Creazione e modifica di una nuova entità È questa l’operazione fondamentale per l’editor. L’area di editazione principale consente la definizione di un’entità tipizzabile, per la quale, indipendentemente dal tipo prescelto, è possibile specificare uno o più nomi, un commento per la sua descrizione e l’attributo che consiste nell’URL che rappresenta l’eventuale soggetto. La specifica di questo e degli altri eventuali attributi specificabili in funzione del tipo prescelto, è facoltativa. Si è scelta l’applicabilità incondizionata dell’attributo soggetto ad ogni tipo di entità in considerazione del prevalente ruolo di descrizione di risorse online o con riferimenti Web che è ricoperto dalle metainformazioni. Essendo il sistema di editazione guidata essenzialmente basato sui tipi, la modifica del tipo di un’entità ha ripercussioni sia sugli attributi che sulle relazioni definite per essa. Alla modifica del tipo, gli attributi, salvo l’eventuale commento, vengono cancellati, non essendo più garantita la compatibilità fra questi e la nuova classe che tipizza l’entità. Creazione e modifica delle relazioni Contestualmente alla creazione, o alla modifica di un’entità, è possibile specificare, in numero arbitrario, le eventuali relazioni dell’entità corrente con altre già definite. I possibili tipi di relazioni specificabili dipendono dal tipo dell’entità corrente, poiché almeno uno dei ruoli dell’associazione deve essere compatibile con la classe d’appartenenza dell’entità. Scelto il tipo di relazione da aggiungere, vengono mostrate le entità istanze che hanno tipi compatibili con gli altri ruoli previsti dal tipo di relazione. In caso di relazioni n-arie viene indicato anche il ruolo di ogni altro membro da specificare. In effetti la presenza di più di due membri per una relazione è possibile solo nel caso in cui si stia creando un modello Topic Maps, essendo le association di natura n-aria e le Property inerentemente binarie. 5.2 Caratteristiche generali dell’editor 141 Un’ulteriore differenza tra i due paradigmi si ha nell’interpretazione unidirezionale delle relazioni per documenti RDF e in quella multidirezionale per quelle di Topic Maps. Ciò significa che per RDF i tipi di relazione possibili per le entità istanza di una determinata classe corrispondono alle sole Property per le quali è specificata come dominio (attraverso rdfs:domain) la stessa classe o una classe genitrice. Viceversa, per XTM, i tipi di relazione possibili sono tutte le associazioni che prevedono tra i propri membri un elemento che è istanza della classe dell’entità corrente, o di una delle sue superclassi. Per questo motivo sono necessarie delle linee guida nella costruzione di schemi Topic Maps, in particolare: • anche se può sembrare un banale problema di nomenclatura, onde evitare che l’utente rimanga confuso, è appropriato che si scelgano dei nomi per i tipi di relazioni che non esprimano direzionalità laddove la relazione non sia inerentemente biunivoca; • per tipi di relazioni non biunivoche che coinvolgono entità della stessa classe o di classi con rapporti di discendenza è appropriata una modifica alla gerarchia che disambigui la relazione. Ad esempio, un tipo di relazione padre di tra due entità istanze della classe persona in Topic Maps è ambigua, non essendo chiari i ruoli nell’associazione. Tuttavia, creando due classi, padre e figlio, entrambe sottoclassi di persona è possibile esplicitare il tipo di relazione indicando con la classe padre l’istanza che deve avere ruolo di padre e con classe figlio l’istanza che deve avere ruolo di figlio. Proseguendo l’esempio, nel caso in cui si preveda che una stessa istanza possa essere nella stessa relazione con altre entità ricoprendo potenzialmente sia il ruolo di figlio che di padre è possibile creare un tipo che erediti da entrambi. In questo caso l’editor si accorgerà della possibile ambiguità della relazione ed espliciterà i ruoli della relazione nel form. Eliminazione delle entità L’eliminazione di un’entità è possibile previa selezione dell’entità stessa. Come si è detto, nel caso dell’eliminazione si presentano problemi di integrità del 142 Capitolo 5. Editazione di documenti RDF e XTM documento. Vengono risolti con la contemporanea eliminazione di tutte le relazioni in cui l’entità partecipa. Ricerca di entità La ricerca che è necessaria per poter selezionare le entità che si vogliono modificare. Con l’aumentare delle entità definite nello stesso documento, finisce per essere difficoltoso il loro reperimento nell’editor. Per questo motivo viene offerta una funzione di ricerca basata sul pattern matching del nome. Salvataggio Il salvataggio del documento corrente consta nell’invio al server del modello XML serializzato e quindi nella risincronizzazione di client e server relativamente al documento in questione. 5.3 Architettura del sistema Il software sviluppato fornisce le funzionalità di manipolazione ed editazione di documenti RDF e XTM. L’editor è composto da vari layer, ognuno dei quali fornisce un particolare supporto all’accesso ed alla manipolazione dei documenti. Esso consta essenzialmente di due componenti, la cui comunicazione è descritta mediante architettura client server. Il primo componente risiede su un server remoto, e fornisce l’accesso ai documenti ivi memorizzati. È composto da due sotto-componenti: Data Layer Permette il reperimento dei documenti contenuti nel database. Document Layer Rende remotamente disponibili i documenti presenti. Il secondo componente risiede sul client, e permette l’interazione fra l’utente ed il documento stesso. Quest’ultimo componente è a sua volta composto da altri sotto-componenti: Model Layer Il gestore del modello rappresentativo del documento e dello schema ad esso associato. 5.4 Strumenti utilizzati 143 Rendering Layer Il motore di rendering del documento, che fornisce la visualizzazione su schermo del documento caricato, permettendo all’utente la sua editazione. Document Layer Rendering Layer Data Layer Model Layer Server Client Database Figura 5.1: La composizione in layer dell’editor Nella figura 5.2 è mostrata l’interazione fra l’utente, l’editor ed il server remoto. Si notino le funzionalità direttamente offerte all’utente: caricamento, creazione e salvataggio di un documento, e l’editazione e visualizzazione dello stesso. Le fasi di gestione del documento implicano una comunicazione con il server, al fine di ottenere la lista dei documenti disponibili o di salvare i documenti modificati. 5.4 Strumenti utilizzati Per l’implementazione di questo progetto sono state scelte due tecnologie differenti: • Il linguaggio Java, in versione 1.4. • Il linguaggio di scripting Javascript, nell’implementazione fornita da Internet Explorer 6. 144 Capitolo 5. Editazione di documenti RDF e XTM Create New Document Load Document <<include>> Save Current Document <<include>> <<include>> Manage Document <<communicate>> <<communicate>> User <<communicate>> Remote Server <<uses>> <<uses>> Edit Document Fornisce le funzionalità di editazione Render Document Visualizza il documento su schermo Documents Database Figura 5.2: L’use case dell’editor; i servizi forniti Il componente che risiede sul server remoto è stato implementato come un servlet [jav02c], ed è quindi stato installato in un application server. Il componente residente sul client fa uso di entrambe le tecnologie. Il gestore del documento caricato è stato implementato come un applet; il motore di rendering, invece, fa largo uso di Javascript per trasformare il documento caricato in oggetti HTML visualizzabili da Internet Explorer e manipolabili mediante la loro rappresentazione DOM fornita dal browser. La comunicazione fra Javascript e l’applet è stata implementata sfruttando la tecnologia LiveConnect [liv02], prodotta da Netscape, ma da tempo inclusa anche nel browser di casa Microsoft. Inoltre, poichè Internet Explorer fornisce anche il supporto per i CSS (livello 1) [css99], sono stati definiti numerosi stili, al fine di rendere più elegante l’aspetto dell’applicazione prodotta. 5.5 Modello concettuale e implementazione 5.5 145 Modello concettuale e implementazione In questo capitolo verranno trattati gli aspetti concettuali che hanno guidato la scrittura dell’editor e verrà commentata l’architettura del sistema. 5.5.1 Accesso ai dati: il servlet Il servlet è il mezzo per accedere da remoto ai documenti disponibili. Esso fornisce i seguenti servizi, in base ai parametri che vengono passati: • L’interfaccia web verso il database contenente i documenti RDF e XTM, se invocato con parametro task=init (figura 5.3). Figura 5.3: Risposta del servlet alla richiesta dei documenti disponibili • Il caricamento del documento specificato, se invocato con parametri task=load e filename con il nome del documento che si vuole caricare. • Il caricamento dello schema associato al documento, se invocato con parametri task=loadschema e filename con il nome del documento di cui si richiede lo schema. 146 Capitolo 5. Editazione di documenti RDF e XTM • Il salvataggio di un documento, se invocato con parametri task=save, filename con il nome del file da salvare, filedesc con una sua eventuale descrizione, schemaname con il nome dello schema ad esso associato e filecontent con la serializzazione del documento da salvare. Ad esclusione del primo caso, tutti questi servizi vengono richiamati dall’applet, su richiesta dell’utente. Per una trattazione più approfondita dell’interazione fra il servlet e l’applet si rimanda al paragrafo 5.5.5. 5.5.2 Il modello del documento e dello schema: l’applet In seguito alla richiesta di caricamento di un documento l’applet effettua una richiesta remota al servlet, che si occupa di fornirlo al richiedente. Una volta ricevuto tale documento, l’applet stesso ne effettua il parsing, creando il modello corrispondente in memoria. Da questo momento in poi ogni modifica al documento coinciderà con una modifica al modello. Quando verrà richiesto il salvataggio del documento, l’applet si occuperà di serializzare il modello in RDF o XTM e di inviare il risultato al servlet, al fine di memorizzare le modifiche apportate. 5.5.3 Il visualizzatore di documenti Questo componente, interamente scritto in Javascript, si occupa di visualizzare sullo schermo i costituenti del documento caricato. Un costituente rappresenta un topic di Topic Maps o una risorsa di RDF. Il modulo non è a conoscenza di cosa sia un documento RDF o XTM, ma si occupa solo di effettuare il rendering degli oggetti che gli vengono forniti dall’applet. La GUI dell’editor (figura 5.4) è composta essenzialmente da una pagina HTML, divisa in tre aree, implementate come tre IFRAME, adibite a ruoli diversi: Toolbar Contiene la bottoniera per accedere alle funzionalità di editazione. Comprende le icone relative all’apertura ed al salvataggio di un documento. 5.5 Modello concettuale e implementazione 147 SideBar Contiene l’elenco degli elementi definiti nel documento corrente. Cliccando su ognuno di essi di ottengono le informazioni relative all’elemento selezionato. Figura 5.4: La GUI dell’editor: visualizzazione di un elemento Workbench È l’area in cui si effettua l’editazione di ogni elemento. È composta da tre sezioni, ognuna delle quali permette l’editazione di una parte delle informazioni relative all’elemento selezionato. • La prima sezione contiene le informazioni generali, comuni ad ogni tipo di elemento: i suoi nomi, il tipo ed un eventuale commento. • La seconda sezione permette di editare le relazioni in cui l’elemento prende parte. Dopo aver selezionato una relazione vengono mostrati gli altri membri che possono partecipare alla relazione stessa. Nel caso in cui l’elemento corrente possa ricoprile più ruoli entro la relazione selezionata, verrà aggiunto nell’elenco dei membri anche un segnaposto per l’elemento attuale, con nome Current Element. 148 Capitolo 5. Editazione di documenti RDF e XTM • L’ultima sezione permette di editare gli attributi dell’elemento. Un attributo rappresenta una coppia proprietà-valore, in cui il valore è un letterale. Fra gli attributi di ogni elemento è sempre presente il Subject URL, che indica l’eventuale risorsa che è soggetto dell’elemento che si sta editando. 5.5.4 Diagramma delle classi In questo paragrafo verrà fornito un modello concettuale dettagliato per l’editor. Verrà mostrato il class diagram che definisce la struttura statica del modello. Si occupa di effettuare il rendering del documento Definisce un'interfaccia comune fra gli applet e la libreria javascript Permette l'editazione di documenti scritti in XTM SchemaInterface JS Library Applet XTMAppletEngine <<Http Servlet>> ...>> MetaServlet HttpServlet Documents Database RDFAppletEngine Permette l'editazione di documenti scritti in RDF Rende disponibili i documenti remoti e ne permette il caricamento e salvataggio (from Use Case View) Figura 5.5: Il class diagram dell’editor 5.5 Modello concettuale e implementazione 149 Si può notare come siano stati specificati i componenti definiti nei paragrafi precedenti: Data Layer e Document Layer Sono stati collassati in un’unica entità, MetaServlet. Model Layer Questo componente invece è stato suddiviso in due classi, XTMAppletEngine e RDFAppletEngine, che si occupano cosı̀ di manipolare rispettivamente i documenti scritti in XTM e in RDF. È stata inoltre creata l’interfaccia SchemaInterface allo scopo di definire le funzionalità comuni che devono implementare i due applet. Rendering Layer È stato implementato mediante la libreria JS Library. Da questo class diagram si possono inoltre notare le relazioni di dipendenza fra i vari componenti: • Il motore di rendering fa uso degli applet per accedere alle porzioni dei documenti caricati. La comunicazione fra l’applet e il visualizzatore avviene mediante lo scambio di codice XML. • Gli applet, come già specificato, possono accedere all’archivio dei documenti solo mediante il servlet. La comunicazione fra tali componenti è stata implementata mediante il protocollo HTTP. In pratica, quando è necessario caricare un documento viene effettuata una GET all’url del servlet, specificando il file richiesto, secondo la sintassi definita nel paragrafo 5.5.1. Nel caso in cui sia necessario salvare un file, viene invece effettuata una POST, contenente la serializzazione del documento che si vuole memorizzare. Il seguente class diagram mostra i dettagli di implementazione per l’applet XTMAppletEngine. Si possono notare le seguenti classi: • MyXTMBuilder: si occupa di leggere il documento richiesto al server. • MyXTMWriter: permette la serializzazione del modello del documento caricato in memoria. Questa classe viene usata al momento di salvare il documento. 150 Capitolo 5. Editazione di documenti RDF e XTM • MyTopicMapWalker: classe di utilità che permette di navigare il modello in memoria. • MyIDGeneratorFactory e MyIDGenerator: è la factory e il “prodotto concreto” [GHJV95] relativi al generatore di identificatori assegnati ai vari topic. SchemaInterface TopicMapHandler MyIDGeneratorFactory XTMAppletEngine MyIDGenerator MyXTMWriter MyXTMBuilder MyTopicMapWalker WalkerHandler TopicMapWriter Figura 5.6: Il class diagram per l’applet XTMAppletEngine 5.5.5 Interazione fra i componenti dell’editor In questo paragrafo verranno mostrate alcune delle fasi salienti nell’utilizzo dell’editor. Per dettagliare meglio tali situazioni si farà uso dei sequence diagram. Caricamento di un documento Quando viene richiesto il caricamento di un documento, viene chiamata la funzione loadDocument, che si occupa 5.5 Modello concettuale e implementazione 151 di effettuare la chiamata remota al server. In risposta si ottiene il documento richiesto, di cui viene creata una rappresentazione in memoria. A questo punto viene preparata l’interfaccia grafica principale dell’editor, creando la ToolBar, la SideBar (con l’elenco degli elementi presenti nel modello) e il Workbench vuoto. ie : Browser js : JS Library loadDocument( ) ms : MetaServlet applet : SchemaInter... loadDocument( ) service( ) Richiesta del documento selezionato cleanPage( ) getToolBar( ) getItemsList( ) getElementsInModel( ) Elenco degli elementi istanza presenti nel documento caricato getElementsInModel( ) getWorkbench( ) Figura 5.7: Caricamento di un documento 152 Capitolo 5. Editazione di documenti RDF e XTM Creazione di un nuovo elemento In seguito alla richiesta di creazione di un elemento viene prima inizializzato il Workbench (resetPage), che viene poi aggiornato aggiungendovi i campi per i nomi, il tipo e il commento dell’elemento. I tipi assegnabili all’elemento sono visualizzati in un SELECT di HTML, riempito mediante la chiamata alla funzione getTypesInSchema. ie : Browser js : JS Library applet : SchemaI... newItem( ) resetPage( ) createNameInput( ) createTypeInput( ) getTypesInSchema( ) Figura 5.8: Creazione di un nuovo elemento 5.5 Modello concettuale e implementazione 153 Aggiunta delle relazioni Quando si vuole introdurre una nuova relazione per l’elemento corrente, viene invocata la getRelationsInSchema, che si occupa di creare un nuovo SELECT contenente tutte le relazioni che sono compatibili con il tipo assegnato all’elemento stesso. Una volta selezionata una specifica relazione, vengono creati tanti SELECT quanti sono i membri che possono partecipare alla relazione scelta (funzione getRelationMembers). Si noti che prima della chiamata alla getRelationsInSchema viene effettuato un salvataggio preventivo dell’elemento, affinché l’applet sia in grado di selezionare solo le relazioni compatibili con esso. ie : Browser js : JS Library applet : SchemaI... getRelationsInSchema( ) saveElement( ) getRelationsInSchema( ) getRelationMembers( ) getRelationMembers( ) Figura 5.9: Aggiunta delle relazioni 154 Capitolo 5. Editazione di documenti RDF e XTM Aggiunta degli attributi Un attributo è una coppia proprietà-valore, dove il valore è un letterale. Alla richiesta degli attributi relativi all’elemento corrente vengono creati tanti campi di testo quanti sono gli attributi compatibili con il tipo selezionato. ie : Browser js : JS Library applet : SchemaI... getAttributesInSchema( ) saveElement( ) getAttributesInSchema( ) Figura 5.10: Aggiunta degli attributi 5.5 Modello concettuale e implementazione 155 Modifica di un elemento È possibile effettuare la modifica di un elemento semplicemente cliccando su di esso, nella SideBar. Viene cosı̀ chiamata la funzione resetPage, che si occupa di reinizializzare il Workbench. Successivamente vengono richieste all’applet tutte le informazioni associate all’elemento selezionato, che vengono poi visualizzate su schermo. ie : Browser applet : SchemaI... js : JS Library modifyItem( ) resetPage( ) getElement( ) createNameInput( ) createTypeInput( ) getTypesInSchema( ) getRelationsInSchema( ) getRelationMembers( ) getAttributesInSchema( ) Figura 5.11: Modifica di un elemento 156 5.5.6 Capitolo 5. Editazione di documenti RDF e XTM Ciclo di vita dell’editor Lo state diagram che segue descrive gli stati che assume l’editor nella varie fasi del suo utilizzo. All’avvio dell’applicazione non è stato caricato alcun documento. L’utente può scegliere di creare un nuovo documento o di aprirne un altro. Queste operazioni implicano una connessione al server, al fine di ottenere il documento richiesto o di allocare le risorse specificate. Se questa operazione è andata a buon fine può iniziare la fase di editazione del documento. Avvio applicazione Chiusura Applicazione Nessun Documento Apri Documento Crea Documento Connessione al Server Salva Documento [ Errore ] [ OK ] Creazione o Editazione Componente del Documento Editazione Nome Editazione Attributi Editazione Tipo Editazione Relazioni Chiusura Applicazione Figura 5.12: Lo state diagram dell’editor 5.6 Configurazione e installazione del software 5.5.7 157 Diagramma dei componenti Per quanto detto sinora, la rappresentazione dei componenti costituenti l’editor è mostrata nella figura seguente. Si possono notare due package, relativi al lato server ed al lato client dell’applicazione. Il Client Package rappresenta il browser dell’utente, contenente l’applet e la libreria Javascript. Il Server Package rappresenta invece Tomcat, il servlet container in cui è in esecuzione il MetaServlet. <<Browser>> Client Package <<Applet>> Documents Editor << Javascript Lib >> JS Library Richiesta remota dei documenti. Usa HTTP. <<Servlet Container>> Server Package <<Servlet>> Documents Supplier Documents Database Figura 5.13: I componenti principali dell’editor 5.6 Configurazione e installazione del software In questo capitolo verrà descritto come configurare l’editor e come installarlo in un application server conforme alle specifiche prodotte da Sun in [jav02d]. 158 Capitolo 5. Editazione di documenti RDF e XTM In seguito verrà usato Tomcat [tom02], progetto open source di “The Jakarta Project” di Apache. 5.6.1 Configurazione del servlet La configurazione del servlet avviene mediante il file web.xml, in cui sono stati definiti due parametri: fileDir Indica il percorso assoluto in cui si trova il database dei documenti RDF e XTM. webDir Indica l’URL della web application che contiene l’editor. Questi parametri dovranno essere modificati in base alle caratteristiche della macchina in cui è installato il web server ed in base alla configurazione di Tomcat. 5.6.2 La firma dell’applet Poiché parte delle librerie java utilizzate necessitano di accedere alle risorse di sistema si è reso necessario firmare l’applet con un certificato RSA. È stato seguito quanto specificato in [sig02]. Il primo strumento utilizzato, fornito dal JDK, è il keytool. Mediante di esso è stato possibile generare una coppia di chiavi, pubblica e privata, ed il certificato ad esse associato. Questi oggetti vengono memorizzati nel keystore, e sono accessibili mediante la definizione di opportuni alias univoci. Infine è stato utilizzato il jarsigner, anch’esso incluso nel JDK, mediante il quale sono state firmate le librerie usate dall’applet. Sono stati eseguiti i seguenti passi: 1. keytool -genkey -alias meta -keypass <pwd> -keystore metastore Viene creata la coppia di chiavi, pubblica e privata, con alias meta. Queste chiavi vengono memorizzate nel keystore di nome metastore. La password pwd sarà necessaria, in seguito, per accedere a tali chiavi. All’esecuzione di tale comando verrà prima richiesta la password da associare al keystore ed in seguito verranno richieste delle informazioni 5.6 Configurazione e installazione del software 159 relative all’identità del proprietario delle chiavi. Dopo aver risposto ad ogni domanda verrà creato il keystore contenente le chiavi. 2. keytool -export -alias meta -keystore metastore -file meta.cer Viene creato il certificato meta.cer usando le informazioni contenute nel keystore. È necessario inserire la password che è stata ad esso associata al passo precedente. Questo certificato verrà in seguito installato nel web server, rendendolo di fatto disponibile all’applet. Figura 5.14: La richiesta di esecuzione dell’applet firmato 3. jarsigner -keystore metastore -signedjar <siglib.jar> <lib.jar> meta Si effettua la firma della libreria lib.jar usando il keystore metastore e l’alias definito al primo punto. La libreria, cosı̀ firmata, viene salvata in siglib.jar. Sono state firmate le seguenti librerie: • Jena, che fornisce le API per manipolare i documenti RDF. • TM4J, che fornisce le API per manipolare i documenti XTM. • Xerces, il parser XML. • Meta, che contiene l’applet vero e proprio. 160 5.6.3 Capitolo 5. Editazione di documenti RDF e XTM Configurazione del client Per una corretta installazione dell’applet nel browser dell’utente è necessario che sia stato preventivamente installato il JRE versione 1.4. Al primo avvio dell’applet verrà scaricato il certificato ad esso associato e verrà richiesto se estendere i normali diritti dell’applet. Per un corretto funzionamento sarà necessario fornire un accesso alle risorse di sistema. Fatto ciò verranno caricate le librerie necessarie. 5.6.4 Installazione del software Per automatizzare l’installazione del software è stato fornito uno script, build.xml, eseguibile mediante il tool Ant [ant02]. In questo script vengono definite due variabili (o property): tomcatdir Definisce la directory di installazione di Tomcat. webxml Il nome del file di configurazione del servlet. Una volta modificati tali valori sarà sufficiente eseguire ant install dalla directory che contiene i sorgenti dell’editor e tutte le librerie verranno installate ove necessario. 5.7 Possibili estensioni Dal punto di vista dell’usabilità, lo strumento sviluppato è sicuramente estendibile con le più moderne funzionalità comuni agli ambienti di sviluppo più diffusi. Il lavoro svolto, benchè pratico, funzionale ed usabile, è stato mirato principalmente a suggerire un nuovo modo di interpretare l’editazione per le metainformazioni, basato su un più elevato livello di astrazione e orientato all’utilizzo da parte di un’utenza potenzialmente ignara di qualsiasi nozione sui formati di metainformazioni. Particolare attenzione è stata posta nell’offrire un’interfaccia comune per i due standard. In questo modo tuttavia si è dovuto rinunciare ad alcune delle caratteristiche peculiari di ciascuno dei due linguaggi. Si pensi a funzionalità quali la specifica di scope per i costrutti Topic Maps, o all’utilizzo di strutture 5.7 Possibili estensioni 161 complesse quali i containers nello standard RDF, che difficilmente potrebbero trovare una convergenza nell’altro paradigma senza artificiose estensioni. L’architettura client-server rende inoltre lo strumento particolarmente adatto ad un utilizzo su rete locale. Tuttavia manca il supporto per la gestione della concorrenza nell’accesso ai documenti, essendo questa una problematica di natura prettamente pratica e di corredo allo strumento. L’editazione vincolata allo schema definito astrae il modello di metainformazioni dal formalismo. Tuttavia la presenza di uno schema è necessaria per poter usufruire della creazione guidata. La presenza di uno schema sintatticamente corretto e semanticamente significativo è la condizione necessaria per poter usufruire delle potenzialità dello strumento. La costruzione degli schemi necessita di conoscenze teoriche sia dal punto di vista dei formalismi, sia da quello del disegno di tesauri che abbiano requisiti di coerenza ed espressività. Sarebbe possibile in questo senso pensare di estendere la creazione guidata anche agli schemi, creando una sorta di meta-schema, ossia uno schema per schemi, per entrambi i formati. L’utilità di una simile funzionalità consisterebbe nel dispensare l’utente dall’editazione manuale del documento di schema, ma non presenterebbe vantaggi sostanziali a supporto della progettazione concettuale delle ontologie. Un file di schema, inoltre, a differenza dei documenti istanza, ha una natura prettamente statica. Le modifiche apportate ad uno schema in riferimento al quale siano stati creati uno o più documenti istanza può pregiudicare la loro consistenza, e quindi renderli non più validi. In particolare è possibile aggiungere nuove classi e nuovi tipi di relazioni e attributi senza compromettere la validità delle istanze, mentre è decisamente rischiosa la modifica di classi, tipi di relazioni e attributi già definiti. 162 Capitolo 5. Editazione di documenti RDF e XTM Capitolo 6 Il navigatore In questo capitolo vengono analizzate le possibilità offerte da RDF e Topic Maps nell’ambito della navigazione semantica dei documenti descritti in termini di metainformazioni. Viene inoltre descritto lo strumento implementato quale dimostrazione delle idee espresse. 6.1 La navigazione di metainformazioni Il Web, cosı̀ come oggi lo conosciamo, rappresenta una tecnologia attraverso la quale è possibile navigare agevolmente attraverso un insieme di documenti online, arbitrariamente distribuiti, attraverso collegamenti ipertestuali. La natura dell’associazione fra documento linkato e linkante rimane comunque implicita, dipendente da un contesto difficilmente estrapolabile in maniera automatica dalle applicazioni. Il Semantic Web vuole introdurre un sistema per la rappresentazione formale dei significati dei documenti, permettendo la classificazione dei contenuti e associando un significato non ambiguo ai collegamenti tra le risorse. Entrambe le tecnologie oggetto di questa dissertazione consentono la creazione di questa nuova infrastruttura informativa, che permette la costituzione di layer semantici al di sopra dei documenti che vengono indicizzati, senza comunque richiedere la loro modifica. La classificazione dei 164 Capitolo 6. Navigazione di documenti RDF e XTM contenuti delle risorse può avvalersi di opportune ontologie che includano al loro interno i rapporti di correlazione fra le entità definite. Supponiamo ad esempio di definire in un’ontologia i concetti di linguaggio di programmazione, di Java e di C++. Supponiamo inoltre che questi ultimi due concetti siano sottoclassi di linguaggio di programmazione. Se si indicano una serie di siti Web, attraverso i rispettivi URL, come istanze di risorse informative relative a queste sottoclassi di argomenti, si sono realizzati dei collegamenti semantici che creano delle associazioni di natura nota tra queste risorse. Naturalmente queste relazioni saranno corrette solo se i contenuti dei documenti ospitati dai siti Web avranno in comune il fatto di descrivere lo stesso linguaggio o semplicemente di essere inerenti all’argomento linguaggi di programmazione. La ricerca e la navigazione di risorse Web passa spesso attraverso la consultazione di siti ospitanti motori di ricerca, alcuni dei quali sono organizzati in modo da catalogare le pagine web indicizzate in base al loro contenuto, formando cosı̀ un albero semantico che consente di raggiungere agevolmente delle risorse relative ai contenuti di interesse. Tale catalogazione permette la navigazione attraverso una gerarchia, ma, oltre a richiedere un intervento umano di notevole impegno (in mancanza di una collaborazione attiva da parte di chi espone le risorse) per esaminarne e classificarne i contenuti, presenta lo svantaggio di permettere solo la navigazione attraverso tipi di argomento, mascherando eventuali ulteriori rapporti esistenti tra le risorse indicizzate. Si perde cioè la possibilità di sfruttare tutti quei collegamenti semantici, non dettati dalla gerarchia usata nella catalogazione, e che, come si è visto, è possibile esprimere con gli strumenti offerti dalle due tecnologie per le metainformazioni prese in esame. Il link alla risorsa finisce inoltre per essere il punto di uscita della navigazione semantica, e l’utente non ha la possibilità di prendere visione di eventuali metainformazioni utili alla ricerca delle reali informazioni di cui necessita preventivamente alla lettura delle risorse. Rifacendoci all’esempio precedente, per un utente risulta spesso difficile, se non impossibile, prendere visione dell’autore o dell’editore di un tutorial sul linguaggio Java, piuttosto che della sua data di pubblicazione, senza accedere e leggere direttamente il documento stesso, benchè esso sia stato 6.1 La navigazione di metainformazioni 165 opportunamente catalogato nella gerarchia degli argomenti. Allo stesso modo, la lettura del documento è necessaria per poter verificare quali siano le eventuali risorse bibliografiche linkate al suo interno. Estrapolando tutte queste metainformazioni in un documento a corredo della risorsa reale, risulta possibile la costruzione di un navigatore semantico molto più ricco in termini di contenuti informativi, e in definitiva più utile e pratico per l’utente. Limitandoci al caso di indicizzazione di risorse Web, dal punto di vista dell’utente, il vantaggio ottenibile col supporto delle metainformazioni è quello di poter usufruire di un livello intermedio aggiuntivo tra la ricerca di materiale informativo relativo ad un determinato argomento, e la lettura dei documenti di interesse, utile a riassumere le caratteristiche essenziali dei contenuti dei documenti e ad offrire immediatamente dei collegamenti semantici ad altri documenti in qualche modo correlati a questo. Dal punto di vista dell’implementazione di strumenti che consentono la navigazione, l’utilizzo esteso delle metainformazioni accompagnate ai documenti rende automatico il meccanismo di catalogazione ed aumenta notevolmente la scalabilità dei server, sia nel caso di contesti chiusi, ossia dove le risorse hanno un’unica provenienza e sono relative ad un determinato argomento, sia soprattutto in ambiti estremamente eterogenei, come nel caso dei motori di ricerca gerarchici, dove le risorse sono arbitrariamente distribuite. Va detto che affinchè le tecnolgie delle metainformazioni possano avere effettiva applicabilità in questo ambito, sarebbe necessario trovare soluzione ai problemi di ambiguità nella definizione degli argomenti, e in generale delle “cose” che possono essere descritte. Occorrerebbe cioè fare in modo che le ontologie utilizzate siano standardizzate e rese pubbliche, come del resto auspicato dal manifesto del Semantic Web [BLHL01]. È bene sottolineare che i campi di applicabilità di queste teconolgie non sono necessariamente legati ai motori di ricerca del Web. Qualsiasi tesauro che modelli le entità semantiche di un determinato contesto informativo, costituito da un’insieme di documenti, e i cui contenuti abbiano riferimenti impliciti (determinati dai tipi delle entità individuabili dal contenuto del documento) o espliciti (dettati dal contesto descrittivo), può beneficiare del supporto delle metainformazioni. In termini più astratti è possibile pensare ai layer semantici costruiti 166 Capitolo 6. Navigazione di documenti RDF e XTM attraverso metainformazioni come ad un meccanismo per indicizzare tutte quelle informazioni non strutturate contenute in documenti di testo, che quindi sfuggono al dominio applicativo delle comuni basi di dati relazionali. Un esempio di contesto nel quale è in fase di studio l’utilizzo delle metainformazioni in questo senso è rappresentato dal progetto NIR (Norme In Rete) [nir02] che mira a formalizzare un formato in cui scrivere i documenti normativi. A tal fine è stato definito un particolare DTD, atto a definire opportuni tag XML con cui marcare porzioni rilevanti dei documenti di legge. Ad esempio sono stati definiti tag per identificare i libri, parti, sezioni, articoli e commi che compongono l’articolato. È evidente che gli elementi sintattici cosı̀ definiti hanno un ruolo semantico, in quanto rappresentano i concetti di libro, parte, sezione, etc. e forniscono delle relazioni implicite fra di essi, come, ad esempio, l’associazione composto-da fra l’articolato e i libri. 6.2 Caratteristiche del navigatore L’obiettivo principale che ci si è posti per l’implementazione di un navigatore è stato quello di offrire la possibilità di navigare all’interno di un contesto di metainformazioni in maniera il più possibile uniforme per entrambi gli standard, rendendo del tutto trasparente all’utente la struttura interna delle metainformazioni, cercando cioè di rendere possibile un’efficiente ricerca dei contenuti senza costringere l’utente a conoscere i concetti alla base delle tecnologie utilizzate per la specifica di metainformazioni. Sulla base delle similarità dei due paradigmi, su cui si è indagato nei precedenti capitoli, si è cercato pertanto di offrire all’utente un’interfaccia univoca per la navigazione di documenti, rendendo quanto più possibile trasparente anche il linguaggio di specifica dei dati esposti. 6.2.1 Attributi e relazioni Le metainformazioni associate alle entità descritte sono state suddivise in attributi e relazioni. I primi possono essere semplici valori letterali, oppure link a risorse utili a sottolineare le caratteristiche dell’entità descritta, e sono quindi dati non 6.2 Caratteristiche del navigatore 167 soggetti a tipizzazione. Ad esempio, nella descrizione di opere bibliografiche gli attribuiti possono essere informazioni come il titolo dell’opera o la data di pubblicazione. Le relazioni sono invece associazioni che coinvolgono due o più entità istanza di qualche tipo dell’ontologia di riferimento. Sia gli attributi che le relazioni sono tipizzati, e a ciascun tipo viene associato un nome in modo che in fase di presentazione l’utente sia in grado di discernerne la natura. 6.2.2 Classificazione degli attributi Entrambi gli standard classificano in maniera nativa una serie di attributi, che sono quindi considerati di prim’ordine per la caratterizzazione di un’entità. In particolare il tipo, il nome e il link alla risorsa soggetto della descrizione sono tipi di attributi esprimibili senza l’ausilio di schemi semantici di ulteriore specifica. Ovvero sono esprimibili attraverso predicati predefiniti nel caso di RDF, e attraverso costrutti base del modello di Topic Maps. L’individuazione della natura di questi attributi è quindi immediata e può essere sfruttata adeguatamente in fase di presentazione. Viceversa, attributi generici introdotti da schemi semantici necessitano dell’interpretazione da parte dell’applicazione, in questo caso il navigatore, che può non conoscerne la natura. Se ad esempio per la classe Persona si definisse mediante schema l’attributo fotografia, o allo stesso modo per la classe Libro fosse definito l’attributo copertina, un software di navigazione che conosca la natura di immagine dell’attributo potrebbe scegliere di recuperare il file dell’immagine attraverso il link, ridimensionarla e collocarla adeguatamente nel layout della pagina offerta all’utente. Quindi, congiuntamente alla standardizzazione di ontologie, l’introduzione di schemi pubblici per la descrizione degli attributi di entità specifiche, di cui Dublin Core [dc01] è un (limitato) esempio, faciliterebbe la gestione dei documenti anche dal punto di vista della presentazione. A tale proposito, l’applicazione sviluppata fa ricorso, a titolo esemplificativo, a soggetti pubblici per la tipizzazione di attributi che hanno per oggetto risorse con contenuti multimediali. In particolare, nel caso di RDF, il software per la navigazione conosce gli attributi relativi alle seguenti proprietà: 168 Capitolo 6. Navigazione di documenti RDF e XTM <?xml version="1.0"?> <!DOCTYPE rdf:RDF [ <!ENTITY ns ’http://cs.unibo.it/meta/rdfmediaschema#’> ]> <rdf:RDF xmlns:ns="&ns;"> <rdf:Property rdf:about="&ns;image"/> <rdf:Property rdf:about="&ns;audio"/> <rdf:Property rdf:about="&ns;video"/> <rdf:Property rdf:about="&ns;flash"/> <rdf:RDF> 6.2.3 Schemi e istanze Il sistema di navigazione implementato attua una divisione tra parte ontologica e parte descrittiva delle metainformazioni, associando ad ogni documento istanza, contenente attributi e relazioni relative alle risorse descritte, un unico schema, contenente l’ontologia e, in generale, tutto il sistema di tipizzazione delle entità e delle relazioni tra entità. Nel caso di RDF, l’interpretazione dello schema è quella dettata dalle specifiche stesse dello standard. Le Property definite nello schema rappresentano associazioni nel caso in cui nella loro descrizione sia specificata una delle classi (risorse tipizzate come Class) appartenenti allo schema come oggetto di un predicato range; sono considerate attributi altrimenti. Nel caso di XTM, ogni elemento association definito nello schema corrisponde ad una relazione fra oggetti del tipo elencato nelle sezioni member. Ogni associazione è tipizzata con un topic di tipo association-type che definisce il nome che verrà visualizzato all’utente durante la navigazione. Gli attributi, invece, in XTM sono stati mappati come elementi occurrence, inclusi in ogni topic-type che necessita di ulteriori informazioni rappresentabili semplicemente come stringhe di testo. Ulteriori informazioni sull’interpretazioni di schemi espressi nei due formati si rimanda al capitolo 2. 6.3 Navigazione 6.3 169 Navigazione La navigazione ha inizio con la scelta del documento RDF o XTM del quale si vogliono visualizzare le informazioni. Figura 6.1: La scelta dei file su cui iniziare la navigazione Come s’è detto, a ciascun documento istanza corrisponde uno schema, e per la navigazione vengono esposte l’insieme delle informazioni deducibili da entrambi i documenti. Al caricamento del documento istanza, viene analizzata la gerarchia delle classi, per la quale è supportata l’editarietà multipla. I rapporti gerarchici fra le classi che tipizzano le entità sono esposti all’utente mediante link navigabili. Le informazioni visualizzate relativamente a ciascuna classe sono: • I percorsi dalle classi radici alla classe corrente; • L’insieme delle entità istanza della classe corrente; Nella figura 6.2 si possono notare la tabella che contiene i tipi radice definiti nello schema e la tabella contenente gli elementi che sono istanza di questi tipi. Ognuno di questi elementi è un link che permette di effettuare la navigazione per categorie e di visualizzare i dettagli di un’istanza. Per ogni entità che si sceglie di visionare, vengono visualizzati separatamente relazioni e attributi. Gli attributi costituiti da URL 170 Capitolo 6. Navigazione di documenti RDF e XTM corripondenti a risorse Web esterne al documento sono resi linkabili, e determinano l’uscita dal navigatore, mentre per gli altri viene semplicemente riportato il valore letterale. Nelle relazioni viene reso linkabile ogni riferimento ad altre entità definite nel documento. Nella figura 6.3 è mostrata un’istanza del tipo Person. Si possono notare i nomi alternativi (Other Names), le relazioni fra l’oggetto corrente ed altre entità (Relations), altre informazioni di tipo testuale (Attributes), il commento (Comment), un’area riservata ad elencare delle informazioni multimediali, come immagini, audio, etc. (Multimedia contents), ed infine un menu di navigazione verso gli ultimi link visitati (Jump to). 6.3 Navigazione Figura 6.2: La prima schermata di navigazione: categorie ed istanze 171 172 Capitolo 6. Navigazione di documenti RDF e XTM Figura 6.3: Visualizzazione di un’istanza di Person 6.4 Architettura del sistema 6.4 173 Architettura del sistema Il software sviluppato fornisce le funzionalità di navigazione di documenti RDF e XTM. Il navigatore è composto da vari layer, ognuno dei quali fornisce un particolare supporto all’accesso ed alla visualizzazione di tali documenti. Presentation Layer Model Layer Browser Data Layer Server Client Database Figura 6.4: La composizione in layer del navigatore Data Layer Fornisce accesso ai documenti disponibili, database. contenuti nel Model Layer Il gestore del modello rappresentativo del documento e dello schema ad esso associato. Presentation Layer Il motore di rendering, che fornisce la visualizzazione su schermo del documento caricato, permettendo all’utente la sua navigazione. Browser Rappresenta il mezzo usato dall’utente per accedere alla porzione di documento prodotto dal Presentation Layer. Nella figura seguente è mostrata l’interazione fra l’utente, il navigatore ed il server remoto. Si notino le funzionalità direttamente offerte all’utente: navigazione delle categorie e delle istanze contenute nel documento. 174 Capitolo 6. Navigazione di documenti RDF e XTM Ogni fase di navigazione implica una comunicazione con il server, al fine di ottenere la porzione di documento interessata. Come detto, si possono identificare, in ogni documento, particolari porzioni di interesse al fine della navigazione: le categorie e le istanze. Categoria Ad ogni elemento contenuto nel documento è assegnato un tipo, che identifica ciò che l’elemento è. Una categoria corrisponde proprio ad un tipo. In questo modo è possibile fornire la navigazione fra elementi messi in relazione da una gerarchia superclasse - sottoclasse. Istanza Rappresenta un elemento tipizzato contenuto nel documento. View Instances Navigate Categories <<include>> <<include>> <<uses>> User Navigate Documents Remote Server Figura 6.5: L’use case del navigatore: i servizi forniti 6.5 Strumenti utilizzati L’implementazione di questo progetto è state effettuata utilizzando essenzialmente il linguaggio Java, in versione 1.4. Tutti i layer concettuali sono stati definiti come componenti di un servlet [jav02c], installato in un application server conforme alle specifiche Sun presenti in [jav02d]. La parte client dell’applicativo necessita di un qualunque browser compatibile con le specifiche dei CSS (livello 1) [css99]. 6.6 Modello concettuale e implementazione 6.6 175 Modello concettuale e implementazione In questo capitolo verranno trattati gli aspetti concettuali che hanno guidato la scrittura del navigatore e verrà commentata l’architettura del sistema. 6.6.1 Accesso ai dati La funzionalità di accesso remoto ai documenti disponibili è reso possibile dal servlet. Esso fornisce i seguenti servizi, in base ai parametri che vengono passati: • L’interfaccia web verso il database contenente i documenti RDF e XTM, se invocato con parametro task=init. • L’elenco delle categorie disponibili per il documento selezionato, se invocato con parametro task=root e filename con il nome del documento. • L’elenco delle sotto categorie disponibili per la categoria selezionata, se invocato con parametro task=type e id con l’identificatore associato allla categoria stessa. • I dettagli disponibili per un elemento istanza selezionato, se invocato con parametro task=instance e id con l’identificatore dell’istanza stessa. Ogni richiesta effettuata al servlet viene inoltrata prima al Model Layer, che si occuperà di effettuare le ricerche nel documento richiesto, e poi al Presentation Layer, che produrrà una pagina HTML contenente il risultato della ricerca. Il gestore del modello, se necessario, sfutterà i servizi offerti dal Data Layer per caricare il documento richiesto. 6.6.2 Il modello del documento e dello schema In seguito alla richiesta di caricamento di un documento, il Model Layer si occupa di crearne una rappresentazione in memoria. Da questo momento in poi ogni richiestà verrà effettuata navigando tale modello. 176 Capitolo 6. Navigazione di documenti RDF e XTM Il risultato della ricerca nel modello è un documento XML, che verrà passato al Presentation Layer al fine di inviarlo, dopo le opportune trasformazioni, al browser dell’utente. 6.6.3 Il visualizzatore Questo componente, si occupa di visualizzare sullo schermo i costituenti del documento caricato. Riceve dal Model Layer il risultato della ricerca effettuata sul modello e si occupa di produrre una pagina HTML contenente il risultato di tale ricerca. Figura 6.6: Categorie, sotto-categorie e istanze Come si nota dalla figura 6.6 l’area di navigazione è composta da varie sezioni contenenti diverse informazioni: 6.6 Modello concettuale e implementazione 177 Categories Contiene l’elenco delle categorie disponibili, organizzate gerarchicamente. Sub Categories Contiene l’elenco delle sotto categorie, ovvero dei tipi che sono sottotipi della categoria selezionata. Available elements Contiene l’elenco degli elementi il cui tipo coincide con la categoria selezionata. Ricordando la figura 6.3, in seguito al click su un link relativo ad un elemento istanza vengono mostrate le informazioni relative all’istanza: Other names Elenco dei nomi associati all’elemento corrente. Relations Elenco delle relazioni a cui l’elemento partecipa. In questa sezione sono anche presenti i nomi degli altri membri coinvolti nelle relazioni. Ogni nome è un link verso i dettagli dell’elemento membro. Attributes Elenco degli attributi. Questi possono essere delle semplici stringhe di testo o dei link a risorse esterne. Comment Eventuale commento associato all’elemento. Multimedia contents Elenco di collegamenti a risorse multimediali esterne messe in relazione con l’elemento. Jump to Area di navigazione che permette di tornare agli argomenti visualizzati in precedenza. 178 6.6.4 Capitolo 6. Navigazione di documenti RDF e XTM Diagramma delle classi In questo paragrafo verrà fornito un modello concettuale dettagliato per il navigatore. Verrà quindi mostrato il class diagram che definisce la struttura statica del modello. HttpServlet <<Http Servlet>> NavigatorServlet MetaLayoutManager ModelCache MetaDataManager RDFMediaSchema ModelInt RDFModel XTMModel NavigatorPSI Figura 6.7: Il class diagram del navigatore Si può notare come siano stati specificati i componenti definiti nei paragrafi precedenti: Data Layer Corrisponde al MetaDataManager. Si occupa di chiamare il gestore del modello appropriato in base al tipo di documento (XTM o RDF). 6.6 Modello concettuale e implementazione 179 Model Layer La gestione dei modelli per i due tipi di documenti è stata meglio specificata. Sono state definite due classi, RDFModel e XTMModel, che si occupano, rispettivamente, di manipolare il modello dei documenti RDF e XTM. Come si può notare dal diagramma è stata anche definita l’interfaccia ModelInt, al fine di raggruppare le funzionalità comuni ai due modelli. È stato inoltre definito un meccanismo di caching, al fine di evitare il continuo caricamento dello stesso documento (con conseguente creazione in memoria del modello) in chiamate successive effettuate al servlet. Le classi RDFMediaSchema e NavigatorPSI, infine, contengono la definizioni di particolari risorse atte ad identificare le informazioni che andranno inserite nell’area Multimedia contents prodotta dal layer di presentazione. Presentation Layer Corrisponde alla classe MetaLayoutManager. Ogni interrogazione al modello del documento richiesto produce una risposta XML, passata a questo componente, che si occupa di effettuare le dovute trasformazioni per produrre una pagina HTML visibile dal browser. Il class diagram di figura 6.8 mostra i dettagli di implementazione per la classe XTMModel. Si possono notare le seguenti classi: • MyXTMBuilder: si occupa di leggere il documento richiesto al server. • MyTopicMapWalker: classe di utilità che permette di navigare il modello in memoria. 180 Capitolo 6. Navigazione di documenti RDF e XTM TopicMapHandler ModelInt MyXTMBuilder NavigatorPSI XTMModel WalkerHandler MyTopicMapWalker Figura 6.8: Il class diagram per la class XTMModel 6.6.5 Interazione fra i componenti dell’editor Nel seguente sequence diagram vengono mostrate le fasi che portano alla visualizzazione di una categoria durante la navigazione di un documento. I dettagli della sintassi utilizzata per la richiesta di tale servizio sono stati presentati nel paragrafo 6.6.1. Come si nota, per prima cosa il NavigatorServlet invia la richiesta ricevuta al MetaDataManager, al fine di effettuare le ricerche necessarie nel modello che rappresenta il documento caricato. Per trovare il modello necessario al completamento della richiesta viene chiesto alla ModelCache di verificare se quanto richiesto sia già presente in cache. In caso affermativo viene subito ritornato il modello; in caso contrario viene prima caricato il documento richiesto, di cui viene poi creato il modello, che infine viene inserito in cache e restituito. Una volta che il MetaDataManager ha ottenuto un riferimento al modello richiesto, viene effettivamente eseguita la richiesta generata dal browser. 6.6 Modello concettuale e implementazione 181 Il risultato di questa ricerca vine quindi passato, sotto forma di un documento XML, al MetaLayoutManager, che si occupa, infine, di effettuare le opportune trasformazioni per produrre una pagina HTML che verrà cosı̀ inviata al browser. ie : Browser ns : mdm : NavigatorServlet MetaDataManager service( ) getTypes( ) cache : ModelCache mi : ModelInt mlm : MetaLayoutManager getModel( ) getTypes( ) getHTMLFromTypes( ) Figura 6.9: Interazione fra i componenti dell’editor 6.6.6 Diagramma dei componenti Per quanto detto sinora, la rappresentazione dei componenti costituenti il navigatore è mostrata nella figura seguente. Si possono notare due package, relativi al lato server ed al lato client dell’applicazione. Il Client Package rappresenta il browser dell’utente. Il Server Package rappresenta invece Tomcat, il servlet container in cui è in esecuzione il NavigatorServlet, contenuto in Navigator. Per completezza sono state indicate anche le librerie esterne utilizzate: • Jena [jen02], che fornisce le API per manipolare i documenti RDF. 182 Capitolo 6. Navigazione di documenti RDF e XTM • TM4J [tm402], che fornisce le API per manipolare i documenti XTM. • Xerces [xer02], il parser XML. • Log4J [log02], che fornisce funzionalità di debug per TM4J. <<Browser>> Client Package Documents Database <<Servlet Container>> Server Package << Java Lib >> Navigator << Java Lib >> TM4J << Java Lib >> Xerces << Java Lib >> Jena << Java Lib >> Log4J Figura 6.10: I componenti principali del navigatore 6.7 Configurazione e installazione del software Per automatizzare l’installazione del software è stato fornito uno script, build.xml, eseguibile mediante il tool Ant [ant02]. In questo script vengono definite due variabili (o property): tomcatdir Definisce la directory di installazione di Tomcat. webxml Il nome del file di configurazione del servlet. Una volta modificati tali valori sarà sufficiente eseguire ant install dalla directory che contiene i sorgenti dell’editor e tutte le librerie verranno installate ove necessario. 6.8 Test di navigazione 6.8 183 Test di navigazione Per effettuare un test intensivo del navigatore è stato necessario produrre un’ontologia abbastanza complessa da mettere in luce tutte le caratteristiche del prodotto. Si è scelto di utilizzare come base di partenza il materiale già catalogato su web e reso disponibile dai vari motori di ricerca di tipo gerarchico. In particolare è stato scelto di utilizzare il servizio di directory fornito da Google [goo02a]. Però, data la vastità delle informazioni archiviate, è stata scelta la categoria Programming [goo02b], che ad oggi raccoglie comunque più di 16000 risorse web. Pertanto il primo problema è stato raccoglere una tale quantità di informazioni. Naturalmente non è stato possibile effettuare un recupero manuale di tutte questa pagine, ma è stato utilizzato lo spider Wget [wge02]. Una volta effettuato il download di tutte queste informazioni si è posto un ulteriore problema: Google ritorna queste pagine in formato HTML, e pertanto è stato necessario effettuare varie trasformazioni per ottenere dei documenti RDF e Topic Maps. • In primo luogo è stato scritto un semplice script Perl, googleXHTML.pl, atto ad identificare, fra le pagine scaricate, quelle da cui estrarre le metainformazioni necessarie. • In seguito ogni pagina è stata trasformata in XHTML mediante il tool HTMLTidy [htm02]. • Successivamente è stata scritta un’utility in Java atta a manipolare ogni file XHTML prima prodotto, al fine di creare uno schema per l’ontologia ed un file di istanze. Tale utillity viene pilotata da un altro script Perl, googleMetadata.pl. Ogni pagina ritornata da Google è essenzialmente composta da due sezioni: le “Categories” e le “Web Pages”. Si è scelto di includere gli elementi della prima sezione nello schema, creando in questo modo una gerarchia di tipi. Le risorse elencate nella seconda sezione sono invece state inserite nel documento delle istanze. 184 Capitolo 6. Navigazione di documenti RDF e XTM • Come è stato fatto notare il precedenza, le metainformazioni che possono estrapolare dalle risorse catalogate da motori di ricerca riducono solo ad un insieme di relazioni di tipo class-sottoclasse fra categorie e ad una collezione di relazioni di tipo classe-istanza fra categorie e le risorse catalogate. si si le le Pertanto, al fine di produrre un’ontologia sufficientemente complessa, si è reso necessario un’ulteriore modifica, questa volta manuale, dei documenti cosı̀ prodotti. 6.9 Possibili estensioni A supporto delle tecnologie finora descritte si stanno studiando delle specifiche per la ricerca dei contenuti nei documenti metainformativi, largamente ispirate al linguaggio SQL utilizzato per l’interrogazione di database relazionali. Per RDF sono già state implementati, in maniera indipendente, diversi query language e diverse tecniche di mappatura dei documenti in basi di dati relazionali, come Sesame [ses02], RDQL [rdq02] e RQL [oCS01], che sfruttano principalmente la rappresentazione a triple dei modelli RDF. Per Topic Maps, sebbene ancora lontano da una forma definitiva, è in fase di standardizzazione da parte dell’ISO il linguaggio TMQL [Han01] che ha come obiettivo quello di fornire funzionalità di ricerca all’interno di mappe basate sul matching del contenuto dei costrutti Topic Maps. Anche in questo caso esiste un’implementazione indipendente di un linguaggio “SQL-like” (che fa fronte al ritardo nel rilascio dello standard) che ha caratteristiche simili a quelli che sono ancora solo i requisiti di TMQL [tol]. L’utilizzo diretto da parte dell’utente (frontend) di linguaggi di interrogazione di questo tipo è inerentemente improponibile in termini di usabilità. Un sistema di navigazione user friendly non può ovviamente obbligare un utente a conoscere i linguaggi per il recupero delle informazioni necessarie. Sarebbe invece interessante considerare la possibilità di permettere delle ricerche guidate basate su pattern matching e implementate attraverso query di questo tipo che mascherino i dettagli dei formati di specifica e permettano ricerche contestuali, dipendentemente dallo schema. 6.9 Possibili estensioni 185 Viceversa, l’utilizzo backend del supporto di query non aggiungerebbe funzionalità significativamente migliori in termini di praticità di utilizzo delle API, ma potrebbe sicuramente consentire una migliore efficienza e aumentare la scalibilità rispetto alle dimensioni dei file elaborati. Non avendo efficienza e scalabilità tra i requisiti, e anche in considerazione della scarsa maturità finora raggiunta da queste tecnologie, lo strumento di navigazione implementato non fa utilizzo di questi meccanismi. 186 Capitolo 6. Navigazione di documenti RDF e XTM Capitolo 7 Manuale di utilizzo Per rendere più immediato l’utilizzo dei tool presentati in questa dissertazione si è reso necessario anche un capitolo atto a far prendere dimestichezza all’utente con i compiti più comuni che dovrà eseguire. Per un’utilizzo avanzato degli strumenti e per una guida all’installazione, comunque, sarà necessario studiare quanto detto nei capitoli precedenti. 7.1 L’ontologia Nei paragrafi seguenti si farà riferimento sempre al medesimo esempio, al fine di mettere in evidenza tutte le sfumature dell’ontologia qui presentata, e disponibile negli schemi googleSchemaNew.xtms e googleSchemaNew.rdfs nella directory tests/files della distribuzione. In questa ontologia vengono definite varie risorse che modellano alcuni linguaggi di programmazione, e vengono messe in relazione fra loro. Inoltre viene definito il tipo Persona, contenente vari attributi, come la data di nascita, il luogo di nascita, etc. In seguito verranno specificati i passi da seguire per scrivere tali schemi. 188 7.2 Capitolo 7. Manuale di utilizzo dei tool sviluppati Il convertitore Le motivazioni da cui nasce la necessità di un convertitore sono da ricercarsi nella possibilità di poter importare, in una base di dati di metainformazioni espressa in uno dei due formati, dei documenti espressi nell’altro formato e permettere alle applicazioni specializzate nella gestione di solo RDF o solo XTM di poter trattare in modo trasparente i documenti risultanti dalle conversioni. Al fine di effettuare una traduzione fra documenti scritti in XTM e in RDF non è obbligatorio definire uno schema separato dal documento delle istanze. Basta effettuare la traduzione di un unico documento contenente la definizione di classi, di predicati e di istanze. I passi da seguire per scrivere uno schema verranno mostrati nel paragrafo 7.3. 7.2.1 Conversione da XTM a RDF Per questo esempio si utilizzerà il documento XTM contenuto nel file UltimateGoogle.xtm della directory tests/conversion/xtm2rdf della distribuzione. In tale documento vengono definiti vari topic: • I topic type che rappresentano una persona, una home page e un linguaggio di programmazione, con le relative istanze. • Gli occurrence role type per visualizzare un’immagine e un commento associabili ad ogni istanza. Per una definizione formale di questi topic si rimanda ai paragrafi seguenti, in cui verrà spiegato come crearli ed utilizzarli nell’editor e nel navigatore. • Un theme per la visualizzazione del nome di ogni istanza. <topic id="person"/> <topic id="display"/> <topic id="image"/> <topic id="birthplace"/> 7.2 Il convertitore <topic id="birthday"/> <topic id="comment"/> <topic id="larrywall"> <instanceOf> <topicRef xlink:href="#person"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://www.larrywall.com"/> </subjectIdentity> <baseName> <scope> <topicRef xlink:href="#display"/> </scope> <baseNameString>Larry Wall</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#image"/> </instanceOf> <resourceRef xlink:href="http://www.photos.com/wall_l.gif"/> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#birthplace"/> </instanceOf> <resourceData>Boulder, Colorado</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#birthday"/> </instanceOf> <resourceData>21 Jan 1956</resourceData> </occurrence> <occurrence> <instanceOf> 189 190 Capitolo 7. Manuale di utilizzo dei tool sviluppati <topicRef xlink:href="#comment"/> </instanceOf> <resourceData>The creator of Perl</resourceData> </occurrence> </topic> <topic id="homepage"/> <topic id="larryhome"> <instanceOf> <topicRef xlink:href="#homepage"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://wall.org/~larry/ "/> </subjectIdentity> <baseName> <scope> <topicRef xlink:href="#display"/> </scope> <baseNameString>Larry Wall's Home Page </baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#comment"/> </instanceOf> <resourceData> Official site which includes photographs, links, his geek code block and transcripts of his speeches. </resourceData> </occurrence> </topic> <topic id="language"/> <topic id="perl"> <instanceOf> 7.2 Il convertitore 191 <topicRef xlink:href="#language"/> </instanceOf> <baseName> <scope> <topicRef xlink:href="#display"/> </scope> <baseNameString>The Perl Language</baseNameString> </baseName> <occurrence> <instanceOf> <topicRef xlink:href="#comment"/> </instanceOf> <resourceData> Perl: Practical Extraction and Report Language </resourceData> </occurrence> </topic> Vengono in seguito definite le seguenti relazioni: • L’associazione ass-creator-of fra l’istanza di tipo person e l’istanza di tipo language. • L’associazione ass-homepage fra l’istanza di tipo person e l’istanza di tipo homepage. <topic id="ass-homepage"/> <topic id="ass-creator-of"/> <association> <instanceOf> <topicRef xlink:href="#ass-homepage"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#person"/> </roleSpec> 192 Capitolo 7. Manuale di utilizzo dei tool sviluppati <topicRef xlink:href="#larrywall"/> </member> <member> <roleSpec> <topicRef xlink:href="#homepage"/> </roleSpec> <topicRef xlink:href="#larryhome"/> </member> </association> <association> <instanceOf> <topicRef xlink:href="#ass-creator-of"/> </instanceOf> <member> <roleSpec> <topicRef xlink:href="#person"/> </roleSpec> <topicRef xlink:href="#larrywall"/> </member> <member> <roleSpec> <topicRef xlink:href="#language"/> </roleSpec> <topicRef xlink:href="#perl"/> </member> </association> Usando la conversione standard fornita dai plugin e non utilizzando alcun driver si ottiene una traduzione semanticamente corretta, ma non ottimizzata, in quanto ogni occorrenza e associazione XTM viene tradotta secondo il criterio generale presentato nei paragrafi 3.3.3 e 3.3.4. In particolare: <!-- Classes --> <rdf:Description rdf:ID="person"> 7.2 Il convertitore <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="comment"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="ass-homepage"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="birthplace"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="ass-creator-of"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="birthday"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="image"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="language"> <rdf:type 193 194 Capitolo 7. Manuale di utilizzo dei tool sviluppati rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <rdf:Description rdf:ID="homepage"> <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/> </rdf:Description> <!-- The Perl Language --> <rdf:Description rdf:ID="perl"> <s:name rdf:resource="#perl-name"/> <rdf:type rdf:resource="#language"/> <rdfs:seeAlso rdf:resource="#perl-comment"/> </rdf:Description> <rdf:Description rdf:ID="perl-name"> <s:scope rdf:resource="#display"/> <rdfs:label>The Perl Language</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="perl-comment"> <rdf:type rdf:resource="#comment"/> <rdfs:label> Perl: Practical Extraction and Report Language </rdfs:label> </rdf:Description> <!-- Larry Wall --> <rdf:Description rdf:about="http://www.larrywall.com"> <rdf:type rdf:resource="#person"/> <s:name rdf:resource="#larrywall-name"/> <rdfs:seeAlso rdf:resource="#larrywall-birthday"/> <rdfs:seeAlso rdf:resource="#larrywall-birthplace"/> <rdfs:seeAlso rdf:resource="#larrywall-image"/> 7.2 Il convertitore 195 <rdfs:seeAlso rdf:resource="#larrywall-comment"/> </rdf:Description> <rdf:Description rdf:ID="larrywall-name"> <s:scope rdf:resource="#display"/> <rdfs:label>Larry Wall</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="larrywall-birthday"> <rdf:type rdf:resource="#birthday"/> <rdfs:label>21 Jan 1956</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="larrywall-birthplace"> <rdf:type rdf:resource="#birthplace"/> <rdfs:label>Boulder, Colorado</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="larrywall-image"> <rdf:type rdf:resource="#image"/> <rdfs:isDefinedBy rdf:resource="http://www.photos.com/wall_l.gif"/> </rdf:Description> <rdf:Description rdf:ID="larrywall-comment"> <rdf:type rdf:resource="#comment"/> <rdfs:label>The creator of Perl</rdfs:label> </rdf:Description> <!-- Home Page --> <rdf:Description rdf:about="http://wall.org/~larry/"> <s:name rdf:resource="#wall-name"/> <rdf:type rdf:resource="#homepage"/> <rdfs:seeAlso rdf:resource="#wall-comment"/> </rdf:Description> 196 Capitolo 7. Manuale di utilizzo dei tool sviluppati <rdf:Description rdf:ID="wall-name"> <s:scope rdf:resource="#display"/> <rdfs:label>Larry Wall's Home Page</rdfs:label> </rdf:Description> <rdf:Description rdf:ID="wall-comment"> <rdf:type rdf:resource="#comment"/> <rdfs:label> Official site which includes photographs, links, his geek code block and transcripts of his speeches. </rdfs:label> </rdf:Description> <!-- Association creator-of --> <rdf:Description rdf:ID="generic-ass-creator-of"> <s:association rdf:resource="#members_generic-ass-creator-of"/> <rdf:type rdf:resource="#ass-creator-of"/> </rdf:Description> <rdf:Description rdf:ID="members_generic-ass-creator-of"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#member1_generic-ass-creator-of"/> <rdf:_2 rdf:resource="#member2_generic-ass-creator-of"/> </rdf:Description> <rdf:Description rdf:ID="member1_generic-ass-creator-of"> <rdf:type rdf:resource="#person"/> <rdfs:isDefinedBy rdf:resource="http://www.larrywall.com"/> </rdf:Description> <rdf:Description rdf:ID="member2_generic-ass-creator-of"> <rdf:type rdf:resource="#language"/> <rdfs:isDefinedBy rdf:resource="#perl"/> </rdf:Description> 7.2 Il convertitore 197 <!-- Association homepage --> <rdf:Description rdf:ID="generic-ass-homepage"> <s:association rdf:resource="#members_generic-ass-homepage"/> <rdf:type rdf:resource="#ass-homepage"/> </rdf:Description> <rdf:Description rdf:ID="members_generic-ass-homepage"> <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag"/> <rdf:_1 rdf:resource="#member1_generic-ass-homepage"/> <rdf:_2 rdf:resource="#member2_generic-ass-homepage"/> </rdf:Description> <rdf:Description rdf:ID="member1_generic-ass-homepage"> <rdf:type rdf:resource="#person"/> <rdfs:isDefinedBy rdf:resource="http://www.larrywall.com"/> </rdf:Description> <rdf:Description rdf:ID="member2_generic-ass-homepage"> <rdf:type rdf:resource="#homepage"/> <rdfs:isDefinedBy rdf:resource="http://wall.org/~larry/"/> </rdf:Description> <!-- Other Resources --> <rdf:Description rdf:ID="display"/> Per ottenere una traduzione più accurata è necessario utilizzare il cosiddetto driver di traduzione, cosı̀ fatto: <xtm2rdf> <property_associations> <li id="ass-homepage"> <domain_role id="person"/> <range_role id="homepage"/> 198 Capitolo 7. Manuale di utilizzo dei tool sviluppati </li> <li id="ass-creator-of"> <domain_role id="person"/> <range_role id="language"/> </li> </property_associations> <property_occurrences> <li id="comment"/> <li id="image"/> <li id="birthplace"/> <li id="birthday"/> </property_occurrences> </xtm2rdf> In pratica si afferma che: • si vuole tradurre l’associazione XTM ass-homepage come una property RDF, il cui dominio e codominio sono, rispettivamente, di tipo person e homepage. • si vuole tradurre l’associazione XTM ass-creator-of come una property RDF, il cui dominio e codominio sono, rispettivamente, di tipo person e homepage. • si vogliono tradurre le occorrenze comment, image, birthplace e birthday come property RDF. Ritraducendo si ottiene pertanto un documento RDF di cui viene qui mostrata la traduzione delle associazioni e occorrenze XTM: <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:NS0="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" xmlns:s="http://cs.unibo.it/meta/tmschema.rdf#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > 7.2 Il convertitore <!-- Associations --> <rdf:Description rdf:ID="ass-creator-of"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <rdf:Description rdf:ID="ass-homepage"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <!-- Occurrences --> <rdf:Description rdf:ID="comment"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <rdf:Description rdf:ID="birthday"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <rdf:Description rdf:ID="birthplace"> <rdf:type rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/> </rdf:Description> <!-- Instances --> <rdf:Description rdf:about="http://www.larrywall.com"> <s:name rdf:resource="#larrywall-name"/> <rdf:type rdf:resource="#person"/> <NS0:image rdf:resource="http://www.photos.com/wall_l.gif"/> 199 200 Capitolo 7. Manuale di utilizzo dei tool sviluppati <NS0:birthplace>Boulder, Colorado</NS0:birthplace> <NS0:birthday>21 Jan 1956</NS0:birthday> <NS0:comment>The creator of Perl</NS0:comment> <NS0:ass-homepage rdf:resource="http://wall.org/~larry/"/> <NS0:ass-creator-of rdf:resource="#perl"/> </rdf:Description> <rdf:Description rdf:ID="perl"> <s:name rdf:resource="#perl-name"/> <rdf:type rdf:resource="#language"/> <NS0:comment> Perl: Practical Extraction and Report Language </NS0:comment> </rdf:Description> <rdf:Description rdf:about="http://wall.org/~larry/ "> <s:name rdf:resource="#wall-name"/> <rdf:type rdf:resource="#homepage"/> <NS0:comment> Official site which includes photographs, links, his geek code block and transcripts of his speeches. </NS0:comment> </rdf:Description> ... </rdf:RDF> 7.2.2 Le risorse RDF di traduzione Come si può notare dalle traduzioni precedenti, sono state definite vari predicati RDF allo scopo di catturare la semantica dei costrutti XTM più avanzati, difficilmente mappabili direttamente in elementi di sintassi RDF o RDFS. In particolare: baseName Indica la risorsa astratta che contiente le informazioni sulla 7.2 Il convertitore 201 denominazione del soggetto. variant Indica la risorsa astratta che contiente le informazioni sulle denominazioni alternative del soggetto. parameter Indica la risorsa astratta che contiente le informazioni sul contesto di validità della denominazione alternativa del soggetto. variantName Indica la risorsa astratta che contiente la denominazione alternativa del soggetto. association Indica la risorsa astratta di tipo rdf:Bag che contiene i riferimenti ai membri di un’associazione. scope Indica una risorsa astratta che serve a contestualizzare il soggetto. 7.2.3 Conversione da RDF a XTM Per questo esempio si utilizzerà il documento XTM contenuto nel file UltimateGoogle2.rdf della directory tests/conversion/rdf2xtm della distribuzione. In questo file è stata definita la stessa ontologia usata nell’esempio precedente: sono state create le classi person, homepage e language, con le relative istanze, e i predicati ass-homepage, ass-creator-of, birthday, birthplace e image. <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" > <rdfs:Class rdf:ID="homepage"/> <rdfs:Class rdf:ID="person"/> <rdfs:Class rdf:ID="language"/> <rdf:Property rdf:ID="ass-homepage"/> <rdf:Property rdf:ID="ass-creator-of"/> <rdf:Property rdf:ID="birthday"/> 202 Capitolo 7. Manuale di utilizzo dei tool sviluppati <rdf:Property rdf:ID="birthplace"/> <rdf:Property rdf:ID="image"/> <rdf:Description rdf:about="http://www.larrywall.com"> <rdfs:label>Larry Wall</rdfs:label> <rdf:type rdf:resource="#person"/> <image rdf:resource="http://www.photos.com/wall_l.gif"/> <birthday>21 Jan 1956</birthday> <rdfs:comment>The creator of Perl</rdfs:comment> <ass-homepage rdf:resource="http://wall.org/~larry/"/> <ass-creator-of rdf:resource="#perl"/> </rdf:Description> <rdf:Description rdf:ID="perl"> <rdfs:label>Perl</rdfs:label> <rdf:type rdf:resource="#language"/> <rdfs:comment> Perl: Practical Extraction and Report Language </rdfs:comment> </rdf:Description> <rdf:Description rdf:about="http://wall.org/~larry/"> <rdfs:label>The Perl Language</rdfs:label> <rdf:type rdf:resource="#homepage"/> <rdfs:comment> Official site which includes photographs, links, his geek code block and transcripts of his speeches. </rdfs:comment> </rdf:Description> </rdf:RDF> Se si esegue la traduzione di questo documento usando le funzionalità standard offerte dai plugin si può notare come la traduzione relativa alle proprietà definite comporti la generazione di alcuni topic tipizzati sia come association che come occurrence. Questo avviene perché sono stati definiti 7.2 Il convertitore 203 come rdf:Property e sono stati utilizzati come predicati il cui codominio è un letterale. <topic id="tt-class"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#class"/> </subjectIdentity> </topic> <topic id="tt-assoc"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#association"/> </subjectIdentity> </topic> <topic id="tt-occ"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#occurrence"/> </subjectIdentity> </topic> <!-- Person --> <topic id="person"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> </topic> <topic id="larrywall"> <instanceOf> <topicRef xlink:href="#person"/> </instanceOf> 204 Capitolo 7. Manuale di utilizzo dei tool sviluppati <subjectIdentity> <resourceRef xlink:href="http://www.larrywall.com"/> </subjectIdentity> <baseName> <baseNameString>Larry Wall</baseNameString> </baseName> <occurrence> <resourceData>The creator of Perl</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#birthday"/> </instanceOf> <resourceData>21 Jan 1956</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#birthplace"/> </instanceOf> <resourceData>Boulder, Colorado</resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#image"/> </instanceOf> <resourceRef xlink:href="#larryimg"/> </occurrence> </topic> <!-- Language --> <topic id="language"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> </topic> 7.2 Il convertitore <topic id="perl"> <instanceOf> <topicRef xlink:href="#language"/> </instanceOf> <baseName> <baseNameString>Perl</baseNameString> </baseName> <occurrence> <resourceData> Perl: Practical Extraction and Report Language </resourceData> </occurrence> </topic> <!-- Home page --> <topic id="homepage"> <instanceOf> <topicRef xlink:href="#tt-class"/> </instanceOf> </topic> <topic id="larryhome"> <instanceOf> <topicRef xlink:href="#homepage"/> </instanceOf> <subjectIdentity> <resourceRef xlink:href="http://wall.org/~larry/"/> </subjectIdentity> <baseName> <baseNameString>The Perl Language</baseNameString> </baseName> <occurrence> <resourceData> Official site which includes photographs, links, 205 206 Capitolo 7. Manuale di utilizzo dei tool sviluppati his geek code block and transcripts of his speeches. </resourceData> </occurrence> </topic> <!-- Associations and Occurrences --> <topic id="ass-creator-of"> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> </topic> <association> <instanceOf> <topicRef xlink:href="#ass-creator-of"/> </instanceOf> <member> <topicRef xlink:href="#larrywall"/> </member> <member> <topicRef xlink:href="#perl"/> </member> </association> <topic id="ass-homepage"> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> </topic> <association> <instanceOf> <topicRef xlink:href="#ass-homepage"/> </instanceOf> <member> 7.2 Il convertitore <topicRef xlink:href="#larrywall"/> </member> <member> <topicRef xlink:href="#larryhome"/> </member> </association> <topic id="image"> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> </topic> <topic id="larryimg"> <subjectIdentity> <resourceRef xlink:href="http://www.photos.com/wall_l.gif"/> </subjectIdentity> </topic> <topic id="birthday"> <instanceOf> <topicRef xlink:href="#tt-occ"/> </instanceOf> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> </topic> <topic id="birthplace"> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> <instanceOf> <topicRef xlink:href="#tt-assoc"/> </instanceOf> </topic> 207 208 Capitolo 7. Manuale di utilizzo dei tool sviluppati Benchè la traduzione presentata sia corretta può non essere ciò che si desidera. Per ottenere un documento XTM in cui ogni proprietà RDF sia trattata come un elemento association o un elemento occurrence si possono percorrere due strade: • Si arricchisce la definizione di ogni proprietà, applicandovi i predicati rdf:domain e rdf:range opportunamente valorizzati. <rdf:Property rdf:ID="ass-homepage"> <rdfs:domain rdf:resource="#person"/> <rdfs:range rdf:resource="#homepage"/> </rdf:Property> <rdf:Property rdf:ID="ass-creator-of"> <rdfs:domain rdf:resource="#person"/> <rdfs:range rdf:resource="#language"/> </rdf:Property> <rdf:Property rdf:ID="birthday"> <rdfs:domain rdf:resource="#person"/> <rdfs:range rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal"/> </rdf:Property> <rdf:Property rdf:ID="birthplace"> <rdfs:domain rdf:resource="#person"/> <rdfs:range rdf:resource= "http://www.w3.org/1999/02/22-rdf-syntax-ns#Literal"/> </rdf:Property> • Si utilizza il seguente driver di traduzione, in cui si afferma che – Si vuole tradurre in associazioni i predicati ass-homepage e ass-creator-of. – Si vuole tradurre in occorrenze i predicati birthday e birthplace. 7.2 Il convertitore 209 <rdf2xtm> <association_predicates> <predicate nameSpace="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" predicateId="ass-homepage"/> <predicate nameSpace="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" predicateId="ass-creator-of"/> </association_predicates> <occurrence_predicates> <predicate nameSpace="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" predicateId="image"/> <predicate nameSpace="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" predicateId="birthday"/> <predicate nameSpace="http://cs.unibo.it/meta/UltimateGoogle2.rdf#" predicateId="birthplace"/> </occurrence_predicates> </rdf2xtm> In questo modo si può ottenere la traduzione desiderata, di cui qui vengono mostrate le differenze rispetto alla precedente. <topic id="image"> <instanceOf> <topicRef xlink:href="#tt-occ"/> </instanceOf> </topic> <topic id="birthday"> <instanceOf> <topicRef xlink:href="#tt-occ"/> </instanceOf> 210 Capitolo 7. Manuale di utilizzo dei tool sviluppati </topic> <topic id="birthplace"> <instanceOf> <topicRef xlink:href="#tt-occ"/> </instanceOf> </topic> 7.3 L’editor L’idea alla base dello strumento di editazione è quella di sfruttare le informazioni semantiche, rappresentate dalle ontologie e dai vincoli definiti in appositi documenti di schema, per guidare l’utente alla creazione di documenti validi e significativi, in maniera del tutto trasparente. In particolare, l’idea è quella di consentire la creazione di risorse descrittive tipizzabili sulla base delle classi definite nello schema, e quindi, in base al tipo specificato, consentire l’inserimento solo degli attributi e delle relazioni con le altre risorse previste dallo schema stesso. 7.3.1 Lo schema per XTM Si vuole modellare un insieme di linguaggi. Si definisce pertanto il tipo Language, e i tipi che corrispondono ai linguaggi prescelti, sottoclassi di Language. Vengono utilizzati gli PSI per tipizzare questi topic e relazioni. In questo modo si afferma che tali elementi “servono” per definire degli oggetti di schema. In particolare: • http://www.iso.org/iso13250/tmcl.xtm#topic-type: definizione di un topic di tipo “classe”, che verrà utilizzato per tipizzare altri topic istanze. • http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass: definizione di un’associazione di tipo superclasse-sottoclasse. • http://www.topicmaps.org/xtm/1.0/core.xtm#superclass: identifica il ruolo di superclasse di un membro di un’associazione. 7.3 L’editor • http://www.topicmaps.org/xtm/1.0/core.xtm#subclass: ruolo di sottoclasse di un membro di un’associazione. 211 identifica il <topic id="language"> <baseName> <baseNameString>Language</baseNameString> </baseName> <instanceOf> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#topic-type"/> </instanceOf> </topic> <topic id="functional"> <baseName> <baseNameString>Functional Language</baseNameString> </baseName> <instanceOf> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#topic-type"/> </instanceOf> </topic> <association> <instanceOf> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass-subclass"/> </instanceOf> <member> <roleSpec> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#superclass"/> </roleSpec> <topicRef xlink:href="#language"/> </member> <member> 212 Capitolo 7. Manuale di utilizzo dei tool sviluppati <roleSpec> <subjectIndicatorRef xlink:href= "http://www.topicmaps.org/xtm/1.0/core.xtm#subclass"/> </roleSpec> <topicRef xlink:href="#functional"/> </member> </association> Si definisce quindi il tipo Person, insieme ad alcuni attributi supplementari, corrispondenti a occorrenze di XTM. Si noti come le occorrenze siano tipizzate con dei topic occurrence role type. Anche in questo caso sono stati utilizzati appositi PSI: • http://www.iso.org/iso13250/tmcl.xtm#template: applicato ad un elemento scope di un’occorrenza, permette di trattare tale occorrenza come facente parte di uno schema. • http://www.iso.org/iso13250/tmcl.xtm#occurrence-type: tipizza un topic occurrence role type che verrà utilizzato per tipizzare un’occorrenza. Questi topic permettono di assegnare un nome all’attributo corrispondente all’occorrenza. • http://www.cs.unibo.it/meta/psi-navigator.xtm#image: questo PSI non fa parte di quelli standard, definiti nella specifica di XTM, ma è un’estensione proprietaria, di cui se ne avvantaggerà il navigatore al momento di visualizzare l’attributo cosı̀ tipizzato. Per un elenco esaustivo degli PSI proprietari si rimanda al paragrafo 7.4.2. <topic id="person"> <baseName> <baseNameString>Person</baseNameString> </baseName> <instanceOf> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#topic-type"/> </instanceOf> <occurrence> 7.3 L’editor 213 <instanceOf> <topicRef xlink:href="#ort-birthday"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <resourceData></resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#ort-birthplace"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <resourceData></resourceData> </occurrence> <occurrence> <instanceOf> <topicRef xlink:href="#occ-image"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> <resourceRef xlink:href=""/> </occurrence> </topic> <topic id="ort-birthday"> <instanceOf> <subjectIndicatorRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#occurrence-type"/> </instanceOf> 214 Capitolo 7. Manuale di utilizzo dei tool sviluppati <baseName> <baseNameString>Data di nascita</baseNameString> </baseName> </topic> <topic id="ort-birthplace"> <instanceOf> <subjectIndicatorRef xlink:href= "http://www.iso.org/iso13250/tmcl.xtm#occurrence-type"/> </instanceOf> <baseName> <baseNameString>Luogo di nascita</baseNameString> </baseName> </topic> <topic id="occ-image"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.cs.unibo.it/meta/psi-navigator.xtm#image"/> </subjectIdentity> <baseName> <baseNameString>Image URL</baseNameString> </baseName> </topic> Si vuole infine modellare il concetto secondo cui una persona ha creato un certo linguaggio. Avendo definito prima le classi Person e Language, è sufficiente creare l’associazione fra elementi di questi tipi. <association> <instanceOf> <topicRef xlink:href="#ass-creator-of"/> </instanceOf> <scope> <subjectIndicatorRef xlink:href="http://www.iso.org/iso13250/tmcl.xtm#template"/> </scope> 7.3 L’editor 215 <member> <roleSpec> <topicRef xlink:href="#person"/> </roleSpec> <topicRef xlink:href="#person"/> </member> <member> <roleSpec> <topicRef xlink:href="#language"/> </roleSpec> <topicRef xlink:href="#language"/> </member> </association> 7.3.2 Lo schema per RDF Anche per RDF vengono espressi gli stessi concetti dei topic definiti nel paragrafo precedente. Pertanto si crea innanzitutto una gerarchia di tipo classe-sottoclasse fra la risorsa Language e Functional Language. Si noti che l’entità “&ns;” corrisponde al namespace relativo allo schema che si sta definendo. <rdfs:Class rdf:about="&ns;language"> <rdfs:label>Language</rdfs:label> </rdfs:Class> <rdfs:Class rdf:about="&ns;functional"> <rdfs:label>Functional Language</rdfs:label> <rdfs:subClassOf rdf:resource="&ns;language"/> </rdfs:Class> Viene creta poi la risorsa che modella il concetto di persona, insieme agli stessi attributi definiti nel paragrafo precedente. Alle proprietà birthday e birthplace, in quanto attributi, viene associato il predicato rdfs:range con valore rdfs:Literal. La proprietà image, invece, è stata definita con il namespace “media”, contenente la definizione di risorse proprietarie usate dal 216 Capitolo 7. Manuale di utilizzo dei tool sviluppati navigatore al momento di visualizzare l’attributo. Per un elenco esaustivo delle risorse ivi definite si rimanda al paragrafo 7.4.2. L’URL del namespace è http://cs.unibo.it/meta/rdfmediaschema#. <rdfs:Class rdf:about="&ns;person"> <rdfs:label>Person</rdfs:label> </rdfs:Class> <rdf:Property rdf:about="&ns;birthday"> <rdfs:label>Data di nascita</rdfs:label> <rdfs:domain rdf:resource="&ns;person"/> <rdfs:range rdf:resource="&rdfs;Literal"/> </rdf:Property> <rdf:Property rdf:about="&ns;birthplace"> <rdfs:label>Luogo di nascita</rdfs:label> <rdfs:domain rdf:resource="&ns;person"/> <rdfs:range rdf:resource="&rdfs;Literal"/> </rdf:Property> <rdf:Property rdf:about="&media;image"> <rdfs:label>Image URL</rdfs:label> <rdfs:domain rdf:resource="&ns;person"/> <rdfs:range rdf:resource="&rdfs;Resource"/> </rdf:Property> Infine si crea l’associazione fra la classe person e language come segue: <rdf:Property rdf:about="&ns;creator-of"> <rdfs:label>Creator of</rdfs:label> <rdfs:domain rdf:resource="&ns;person"/> <rdfs:range rdf:resource="&ns;language"/> </rdf:Property> 7.3.3 Editazione di documenti Una volta installati gli schemi cosı̀ definiti, questi compariranno fra quelli disponibili all’editor. A questo punto sarà sufficiente inserire un nome per il 7.3 L’editor 217 documento di istanze che si vuole creare, associarvi una descrizione (opzionale) ed infine selezionare lo schema prescelto. Figura 7.1: Caricamento e creazione di documenti RDF o XTM A questo punto verrà avviato l’editor, che mostrerà un documento vuoto. Sarà necessario cliccare sull’icona “New Item” della toolbar. Verrà cosı̀ creato un template per guidare alla creazione di un nuovo elemento di metainformazioni. Figura 7.2: La toolbar dell’editor La prima sezione del template permette di inserire le informazioni comuni ad ogni tipo di elemento: i nomi, il commento, il tipo. 218 Capitolo 7. Manuale di utilizzo dei tool sviluppati Le informazioni inseribili nel campo relativo al tipo vengono inserite in un SELECT di HTML, il cui contenuto coincide con le Class o i topic type definiti nello schema selezionato. I valori inseriti nei campi per i nomi ed i tipi vengono serializzati negli elementi definiti nella sintassi di RDF e XTM. Ciò che viene inserito nel campo del commento viene serializzato invece come segue: • Nel caso di XTM diventa un’occorrenza dell’elemento corrente, tipizzata con un topic il cui soggetto è rappresentato da un altro PSI proprietario: http://www.cs.unibo.it/meta/psi-edit.xtm#comment. <topic id="topic-with-comment"> ... <occurrence> <instanceOf> <topicRef xlink:href="#comment"/> </instanceOf> <resourceData>The comment is here!</resourceData> </occurrence> </topic> <topic id="comment"> <subjectIdentity> <subjectIndicatorRef xlink:href= "http://www.cs.unibo.it/meta/psi-edit.xtm#comment"/> </subjectIdentity> </topic> • Nel caso di RDF si sfrutta invece il predicato rdfs:comment. <rdf:Description rdf:ID="resource-with-comment"> ... <rdfs:comment>The comment is here!</rdfs:comment> </rdf:Description> La seconda sezione contiene l’elenco delle relazioni definite nello schema che sono compatibili con il tipo selezionato nella prima sezione. Mediante 7.4 Il navigatore 219 il bottone “Add Relation” è possibile aggiungere un numero arbitrario di relazioni. Una volta selezionata una specifica relazione verranno visualizzati i membri che possono far parte dell’associazione, cioè tutti gli elementi istanza il cui tipo è compatibile con ciò che è stato selezionato. La terza sezione, infine, contiene tutti gli attributi compatibili col tipo associato all’elemento corrente. Oltre agli elementi occurrence di XTM e alle proprietà con codominio Literal di RDF che vengono definiti nello schema, è sempre presente l’attributo “Subject URL”, il cui scopo è quello di contenere l’url che rappresenta il soggetto dell’elemento corrente. Una volta inserite tutte le informazioni volute, sarà sufficiente cliccare sul bottone “Save Element” per salvare localmente le modifiche apportate al documento delle istanze. Per salvare definitivamente il documento sarà sufficiente cliccare sull’icona “Save” della toolbar. In questo modo il documento locale verrà inviato al server, che si occuperà di salvarlo permanentemente. 7.3.4 Differenze di editazione fra RDF e XTM L’editor è stato creato con l’intento, fra gli altri, di rendere trasparente all’utente la modifica e la creazione di documenti sia in formato RDF che in XTM. Pertanto le differenze nell’editazione sono minime. In particolare, XTM permette associazioni con un numero arbitrario di membri. Quindi per ogni relazione selezionata durante l’editazione, sarà possibile visualizzare un qualunque numero di membri nel caso in cui si stiano editando documenti in formato XTM. Nel caso di documenti RDF, invece, verrà sempre visualizzato solo un altro membro. 7.4 Il navigatore L’obiettivo principale che ci si è posti per il navigatore è stato quello di offrire la possibilità di navigare all’interno di un insieme di documenti di metainformazioni in maniera il più possibile uniforme per entrambi gli standard, rendendo del tutto trasparente all’utente la struttura interna delle metainformazioni, cercando cioè di rendere possibile un’efficiente ricerca dei 220 Capitolo 7. Manuale di utilizzo dei tool sviluppati contenuti senza costringere l’utente a conoscere i concetti alla base delle tecnologie utilizzate per la specifica di metainformazioni. Sulla base delle similarità dei due paradigmi, su cui si è indagato nei precedenti capitoli, si è cercato pertanto di offrire all’utente un’interfaccia univoca per la navigazione di documenti, rendendo quanto più possibile trasparente anche il linguaggio di specifica dei dati esposti. 7.4.1 Navigazione di documenti La navigazione di metainformazioni inizia con la visualizzazione dell’elenco dei documenti disponibili da cui iniziare (figura 7.3). Figura 7.3: Elenco dei file su cui navigare Una volta selezionato un documento viene mostrata una pagina HTML contenente una struttura gerarchica delle metainformazioni contenute nel file prescelto (figura 7.4). Questa pagina è composta da due aree principali: Categories L’elenco delle categorie disponibili, organizzate gerarchicamente. Available instances L’elenco degli elementi disponibili, suddivisi per categoria. Un click su un elemento contenuto nell’area delle categorie permette una navigazione fra la gerarchia dei tipi definita nello schema associato al 7.4 Il navigatore 221 Figura 7.4: Categorie ed istanze 222 Capitolo 7. Manuale di utilizzo dei tool sviluppati documento. In questo modo si ottiene una nuova pagina HTML, simile alla precedente (figura 7.5), in cui sono presenti le seguenti sezioni: Categories Percorso di navigazione delle categorie disponibili. Sub Categories Elenco delle sottocategorie definite per la categoria selezionata. Available instances L’elenco degli elementi disponibili per categoria selezionata. Figura 7.5: Sotto-categorie e istanze Se si seleziona un elemento fra quelli contenuti nell’area delle istanze, viene mostrata un’ulteriore pagina HTML contenente i dettagli relativi all’elemento 7.4 Il navigatore 223 scelto (figura 7.6). Si possono distinguere, oltre al nome ed al tipo dell’istanza scelta, le seguenti sezioni: Other names Elenco dei nomi associati all’elemento corrente. Relations Elenco delle relazioni a cui l’elemento partecipa. In questa sezione sono anche presenti i nomi degli altri membri coinvolti nelle relazioni. Ogni nome è un link verso i dettagli dell’elemento membro. Attributes Elenco degli attributi. Questi possono essere delle semplici stringhe di testo o dei link a risorse esterne. Comment Eventuale commento associato all’elemento. Multimedia contents Elenco di collegamenti a risorse multimediali esterne messe in relazione con l’elemento. Quest’area fa uso delle risorse RDF e dei PSI proprietari che verranno definiti nel paragrafo 7.4.2. Jump to Area di navigazione che permette di tornare agli argomenti visualizzati in precedenza. 7.4.2 Le risorse e gli PSI proprietari Come anticipato nei paragrafi precedenti, è possibile utilizzare, durante la fase di editing, delle risorse RDF e dei PSI proprietari al fine di visualizzare in modo diverso particolari attributi da essi tipizzati. In questo paragrafo ne verrà fornito un elenco esaustivo. Nel caso di RDF sono state definite le seguenti risorse: • http://cs.unibo.it/meta/rdfmediaschema#image: rappresenta un’immagine in un qualunque formato visualizzabile dal browser. • http://cs.unibo.it/meta/rdfmediaschema#audio: rappresenta un contributo audio, come un file wave o mp3. • http://cs.unibo.it/meta/rdfmediaschema#video: rappresenta un filmato video, come un file Real Video, AVI, Quick Time, DivX, etc.. 224 Capitolo 7. Manuale di utilizzo dei tool sviluppati Figura 7.6: Visualizzazione di un’istanza di Person 7.4 Il navigatore 225 • http://cs.unibo.it/meta/rdfmediaschema#flash: rappresenta un filmato multimediale in formato Flash di Macromedia. Nel caso di XTM sono stati creati i seguenti PSI: • http://www.cs.unibo.it/meta/psi-navigator.xtm#image: rappresenta un’immagine in un qualunque formato visualizzabile dal browser. • http://www.cs.unibo.it/meta/psi-navigator.xtm#audio: rappresenta un contributo audio, come un file wave o mp3. • http://www.cs.unibo.it/meta/psi-navigator.xtm#video: rappresenta un filmato video, come un file Real Video, AVI, Quick Time, DivX, etc.. • http://www.cs.unibo.it/meta/psi-navigator.xtm#flash: rappresenta un filmato multimediale in formato Flash di Macromedia. • http://www.cs.unibo.it/meta/psi-edit.xtm#comment: poiché in XTM non esiste un elemento di sintassi che rappresenti un commento, si è creato tale PSI. 226 Capitolo 7. Manuale di utilizzo dei tool sviluppati Capitolo 8 Conclusioni In questa dissertazione si è visto come siano strutturate le tecnologie che consentono l’estensione semantica del Web e che sono alla base delle tecniche di Knowledge Representation. L’utilizzo esteso di ontologie per la condivisione delle definizioni riguardanti le diverse aree del sapere comune, e le reti di associazioni semantiche tra risorsce che si possono creare con queste tecnolgie, possono portare innumerevoli benefici al mondo dell’informazione digitale, tanto più in considerazione dell’esplosione della quantità di informazioni, e quindi di conoscenza, che viene resa disponibile sul Web. La gestione automatizzata dei documenti in base ai reali contenuti rende non più necessario l’intervento umano relativo all’interpretazione del testo, ed elimina il problema dell’ambiguità proprio al linguaggio naturale. Attraverso la progressiva standardizzazione di ontologie rispetto a cui riferire i concetti espressi o rappresentati dai documenti, e mediante le eventuali relazioni di equivalenza esprimibili tra le definizioni di diverse ontologie, si potrà uniformare la visione delle “cose”. I contesti applicativi in cui infrastrutture di metainformazioni possono trovare applicazione sono numerosi, ma allo stato attuale non è ancora chiara quale sia la migliore tecnologia da utilizzare, né è stato determinato il modo migliore per applicarla. Allo stato attuale servono strumenti e casi d’uso che aprano la strada ad ulteriori estensioni e che aiutino a discernere la natura delle problematiche che si pongono nell’ottica di un utilizzo ampio e diffuso delle metainformazioni. Sia per RDF e le sue estensioni semantiche, che per Topic 228 Capitolo 8. Conclusioni Maps, non è stata accumulata un’esperienza in termini di utilizzo sufficiente a introdurre regole o specifiche, standard o convenzionali, che possano rendere interoperabili su vasta scala le applicazioni. Il tool di conversione tra formati sviluppato, pur nei limiti inerentemente imposti dalla diversa filosofia di disegno dei due standard, permette di ottenere una traduzione semantica dei modelli. Il tipo di traduzione è ragionevolmente coerente nel caso generico, e permette una conversione pilotata per traduzione contestuali. L’editor dimostra come l’utilizzo di schemi semantici possa facilitare la creazione e la modifica dei documenti e renderla semplice anche per utenti inesperti. Inoltre, mostra come rinunciando ad alcune caratteristiche proprie unicamente a ciascuno dei due modelli si riesca ad ottenere completa trasparenza di formato. Il navigatore di metainforamzioni implementa una delle funzionalità più interessanti introdotte dai layer semantici rappresentati dalle metainformazioni, offrendo la possibilità di navigare concetti e risorse seguendo collegamenti per cui è reso esplicito il significato. Bibliografia [AAB+ 01] Kal Ahmed, Danny Ayers, Mark Birbeckand, Jay Cousinsand, David Doddsand, Joshua Lubelland, Miloslav Nicand, Daniel Rivers-Mooreand, Andrew Wattand, Rob Worden, and Ann Wrightson. Professional XML Meta Data. Wrox, 2001. [Alt01] Anitta Altenburger. Topic Maps Tutorial, 2001. http://topicmaps.bond.edu.au/tutorial1. [ant02] Apache Ant, 2002. http://jakarta.apache.org/ant. [Bec02] Dave Beckett. RDF/XML Syntax Specification (Revised), 2002. http://www.w3.org/TR/2002/WD-rdf-syntax-grammar-20020325. [BG00] Dan Brickly and R. V. Guha. Resource Description Framework (RDF) Schema Specification 1.0, 2000. http://www.w3.org/TR/2000/CR-rdf-schema-20000327. [BL00] Tim Berners-Lee. Semantic Web - XML2000, 2000. http://www.w3.org/2000/Talks/1206-xml2k-tbl. [BLFIM98] T. Berners-Lee, R. Fielding, U.C. Irvine, and L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax, 1998. http://www.ietf.org/rfc/rfc2396.txt. [BLHL01] Tim Berners-Lee, James Hendler, and Ora Lassila. The Semantic Web, 2001. http://www.scientificamerican.com/2001/0501issue/0501berners-lee.html. 229 230 BIBLIOGRAFIA [BPSMM] Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, and Eve Maler. Extensible Markup Language (XML) 1.0. http://www.w3.org/TR/REC-xml. [CD99] James Clark and Steve DeRose. XML Path Language (XPath) Version 1.0, 1999. http://www.w3.org/TR/1999/REC-xpath-19991116. [css99] Cascading Style Sheets, level 1, 1999. http://www.w3.org/TR/REC-CSS1.html. [dam02] The DARPA Agent Markup Language Homepage, 2002. http://www.daml.org/. [dc01] Dublin Core, 2001. http://purl.org/dc/elements/1.1/. [Dum] Edd Dumbill. XML Anti-Awards. http://www.xml.com/lpt/a/2002/01/02/taglines.html. [Fre00] E. Freese. Using Topic Maps for the representation, management and discovery of knowledge. In Proceedings of XML Europe 2000 Conference, 2000. [fS00] International Organization for Standardization. ISO/IEC 13250:2000 Document description and processing languages. In Topic Maps, Ginevra, CH, 2000. [GHJV95] Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides. Design Patterns, Elements of Reusable Object-Oriented Software. Addison Wesley, 1995. [goo02a] Google Directory, 2002. http://www.google.com/dirhp?hl=en. [goo02b] Google Directory: Computers - Programming, 2002. http://directory.google.com/Top/Computers/Programming/. BIBLIOGRAFIA 231 [Han01] Hans Holger Rath and Lars Marius Garshol. TMQL requirements (1.0.0), 2001. http://www.y12.doe.gov/sgml/sc34/document/0249.htm. [Hay01] Patrick Hayes. RDF Model Theory, 2001. http://www.w3.org/TR/2002/WD-rdf-mt-20020214. [htm02] HTML Tidy Library Project, 2002. http://tidy.sourceforge.net/. [htt02] HTTPClient Library, 2002. http://www.innovation.ch/java/HTTPClient. [jav02a] JavaTM 2 Platform, Standard http://java.sun.com/j2se/1.4. [jav02b] JavaTM 2 Platform, Standard Edition, v 1.4.0 API Specification, 2002. http://java.sun.com/j2se/1.4/docs/api/index.html. [jav02c] JavaTM Servlet Technology, 2002. http://java.sun.com/products/servlet/index.html. [jav02d] JSR-000053 JavaTM Servlet 2.3 and JavaServer PagesTM 1.2 Specifications, 2002. http://jcp.org/aboutJava/communityprocess/first/jsr053/index.html. [jen02] HPL Semantic Web activity: Jena Toolkit, http://www.hpl.hp.com/semweb/jena-top.html. [Koi01] Marja-Riitta Koivunen. W3C Semantic Web Activity, 2001. http://www.w3.org/Talks/2001/1102-semweb-fin. [Ksi00] R. Ksiezyk. Answer is just a question [of matching Topic Maps]. In Proceedings of XML Europe 2000 Conference, 2000. [LD01] Martin Lacher and Stefan Decker. On the integration of Topic Map data and RDF data. In Extreme Markup Languages 2001, 2001. Edition, v 1.4.0, 2002. 2002. 232 BIBLIOGRAFIA [liv02] LiveConnect Technology, 2002. http://developer.netscape.com/docs/manuals/communicator/jsguide4/livecon.htm. [log02] Log4j Project, 2002. http://jakarta.apache.org/log4j. [LS99] Ora Lassila and Ralph Swick. Resource Description Framework (RDF) Model and Syntax Specification, 1999. http://www.w3.org/TR/1999/REC-rdf-syntax-19990222. [Mil01] Eric Miller. Semantic Web Activity Statement, 2001. http://www.w3.org/2001/sw/Activity. [Moo01] Graham Moore. An Exercise in Convergence. In XML Europe 2001, 2001. [msd02a] MSDN: HTML and DHTML Reference, 2002. http://msdn.microsoft.com/workshop/author/dhtml/reference/dhtml reference entry.asp. [msd02b] MSDN: HTML Applications (HTA), 2002. http://msdn.microsoft.com/workshop/author/hta/hta node entry.asp. [msd02c] MSDN: Internet Explorer, 2002. http://msdn.microsoft.com/nhp/default.asp?contentid=28000441. [NB00] S. Newcomb and M. Biezunski. Topic Maps go XML. Proceedings of XML Europe 2000 Conference, 2000. [NB01] Steven R. Newcomb and Michel Biezunski. Topicmap.net’s Processing Model for XTM 1.0, version 1.0.2, 2001. http://www.topicmaps.net/pmtm4.htm. [nir02] Norme In Rete, 2002. http://www.normeinrete.it. In BIBLIOGRAFIA 233 [oCS01] FORTH Institute of Coumputer Science. The RDF Query Language (RQL) Documentation, 2001. http://139.91.183.30:9090/RDF/RQL/Design.html. [Ogi01] Nikita Ogievetsky. XML Topic Maps through RDF glasses. In Extreme Markup Languages 2001, 2001. [oil02] The OIL Page, 2002. http://www.ontoknowledge.org/oil/oilhome.shtml. [Ont] Ontopia Schema Language Web Site. http://www.ontopia.net/omnigator/docs/schema/tutorial.html. [oro02] Jakarta Oro, 2002. http://jakarta.apache.org/oro. [Pep00] S. Pepper. The TAO of Topic Maps, finding the way in the age of infoglut. XML Europe 2000, 2000. [PM01] Steve Pepper and Graham Moore. XML Topic Maps (XTM) 1.0, 2001. http://www.topicmaps.org/xtm/1.0. [Rat00a] H. H. Rath. Making topic maps more colourful. In Extreme Markup 2000, 2000. [Rat00b] H. H. Rath. Topic maps self-control. In Extreme Markup 2000, 2000. [rdq02] HPL Semantic Web activity: Jena Toolkit, RDQL, 2002. http://www.hpl.hp.com/semweb/jena-top.html. [ses02] Sesame, the RDF and RDF Schema Storage and Querying service, 2002. http://www.aidministrator.nl. [sig02] How to Sign Applets Using RSA-Signed Certificates, 2002. http://java.sun.com/j2se/1.4/docs/guide/plugin/developer guide/rsa signing.html. [sta01] Stanford RDF API, 2001. http://www-db.stanford.edu/~melnik/rdf. 234 BIBLIOGRAFIA [Ste01] Steve Pepper. Draft requirements, examples, and a low bar proposal for Topic Map Constraint Language, 2001. http://www.y12.doe.gov/sgml/sc34/document/0226.htm. [Swi01] Ralph Swick. Metadata Activity Statement, 2001. http://www.w3.org/Metadata/Activity.html. [tm402] Project TM4J: Topic Maps for Java, 2002. http://tm4j.sourceforge.net. [tol] Ontopia Schema Language Web Site. pia.net/omnigator/docs/query.html. [tom02] Apache Tomcat, 2002. http://jakarta.apache.org/tomcat. [wge02] GNU Wget, 2002. http://www.gnu.org/software/wget. [xal02] Xalan, 2002. http://xml.apache.org/xalan-j. [xer02] Xercer Java Parser, 2002. http://xml.apache.org/xerces-j. http://www.onto- Elenco delle figure 2.1 2.2 2.3 2.4 2.5 2.6 2.7 Grafo Grafo Grafo Grafo Grafo Grafo Grafo corrispondente corrispondente corrispondente corrispondente corrispondente corrispondente corrispondente alla frase dell’esempio 2.1 alla frase dell’esempio 2.2 alla frase dell’esempio 2.8 alla frase dell’esempio 2.9 al documento dell’esempio al documento dell’esempio al documento dell’esempio . . . . . . . . . . . . . . 8 9 14 16 32 34 39 4.1 4.2 4.3 4.4 4.5 Il class diagram concettuale del covertitore . . . . . . . . . . Il class diagram per la traduzione da Topic Maps verso RDF Il class diagram per la traduzione da RDF verso Topic Maps Il class diagram per il serializzatore RDF . . . . . . . . . . . Fase di bootstrap del convertitore . . . . . . . . . . . . . . . . . . . . 119 120 121 122 123 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 La composizione in layer dell’editor . . . . . . . . . . . . . L’use case dell’editor; i servizi forniti . . . . . . . . . . . . Risposta del servlet alla richiesta dei documenti disponibili La GUI dell’editor: visualizzazione di un elemento . . . . . Il class diagram dell’editor . . . . . . . . . . . . . . . . . . Il class diagram per l’applet XTMAppletEngine . . . . . . Caricamento di un documento . . . . . . . . . . . . . . . . Creazione di un nuovo elemento . . . . . . . . . . . . . . . Aggiunta delle relazioni . . . . . . . . . . . . . . . . . . . . Aggiunta degli attributi . . . . . . . . . . . . . . . . . . . Modifica di un elemento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 144 145 147 148 150 151 152 153 154 155 235 . . . . . . . . . . . . 2.14 2.15 2.17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 ELENCO DELLE FIGURE 5.12 Lo state diagram dell’editor . . . . . . . . . . . . . . . . . . . 5.13 I componenti principali dell’editor . . . . . . . . . . . . . . . . 5.14 La richiesta di esecuzione dell’applet firmato . . . . . . . . . . 156 157 159 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 La scelta dei file su cui iniziare la navigazione . La prima schermata di navigazione: categorie ed Visualizzazione di un’istanza di Person . . . . . La composizione in layer del navigatore . . . . . L’use case del navigatore: i servizi forniti . . . . Categorie, sotto-categorie e istanze . . . . . . . Il class diagram del navigatore . . . . . . . . . . Il class diagram per la class XTMModel . . . . . Interazione fra i componenti dell’editor . . . . . I componenti principali del navigatore . . . . . . 7.1 7.2 7.3 7.4 7.5 7.6 Caricamento e creazione di documenti RDF o XTM La toolbar dell’editor . . . . . . . . . . . . . . . . . Elenco dei file su cui navigare . . . . . . . . . . . . Categorie ed istanze . . . . . . . . . . . . . . . . . Sotto-categorie e istanze . . . . . . . . . . . . . . . Visualizzazione di un’istanza di Person . . . . . . . . . . . . istanze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 171 172 173 174 176 178 180 181 182 . . . . . . . . . . . . . . . . . . 217 217 220 221 222 224