Cos'è ed a cosa serve il Web Semantico

Cominciamo dalle cose ovvie

Internet è un insieme di testi, un insieme molto vasto di documenti che descrivono dei contenuti. Per la verità questa non è una grossa novità, vasti corpi di testi sono esistiti fin dall'antichità (biblioteche). La novità di Internet sta nel fatto che questi testi possono richiamarsi l'uno con l'altro, in modo molto rapido. Il link è l'elemento nuovo che l' HTML ha saputo proporre.

Ai suoi esordi Internet era costituito unicamente di testi e indici ipertestuali di testi. Col tempo le cose si sono evolute. Sono arrivati i motori di ricerca, che tentano di accedere direttamente al contenuto dei testi, e le strutture dei siti sono state differite su più livelli (database, script cgi, fogli di stile). Per un utente comunque questo rimane quasi del tutto nascosto.

L'utente si orienta nel web grazie a due cose: la sua esperienza di navigazione e la capacità di evocazione che possono avere parole o espressioni chiave. L'esperienza è un aspetto molto importante di cui tutti ci serviamo, impariamo che determinati contenuti si possono reperire sotto determinati portali, impariamo che l'aspetto di un sito può dirci qualche cosa sul genere (formale o informale) delle informazioni. L'esperienza tuttavia è una cosa che viene spontaneamente da sé ma non è molto legata ad aspetti tecnici, al codice e alle applicazioni che costituiscono un sito. L'altro aspetto, quello delle parole chiave, è più legato al codice.

Legami semantici

La capacità espressiva di un collegamento automatico dipende dalla applicazione che lo gestisce. Cercando in un motore di ricerca un utente inserisce una certa espressione nella convinzione che quella espressione saprà individuare nel modo più efficace possibile il contenuto cercato. Scegliendo tra le voci di una barra di navigazione, di nuovo l'utente dovrà stabilire quale espressione si adatti meglio a individuare, come titolo generico, un contenuto. Nel primo caso l'efficacia dell'operazione dipende dagli algoritmi che il motore di ricerca utilizza per estrarre contenuti. Nel secondo caso l'efficacia dipende da chi ha pensato i contenuti del sito e se quei contenuti si prestano ad essere indicizzati secondo una gerarchia ad albero. In entrambe le situazioni l'utente si affida ad una espressione unica che ha un rapporto molto generico col contenuto effettivamente ricercato.

Nel caso del motore di ricerca qualsiasi query attivata è sempre soggetta al rischio della ambiguità. Cercando la parola "albero" potrei trovare contenuti legati all'informatica alla botanica alla nautica. Nel caso di una barra di navigazione la genericità è data dal tipico meccanismo dell'indice, che sotto un unico titolo deve raccogliere un gruppo spesso vario di contenuti. Insomma la morale che ne vorremmo trarre è che Internet è un insieme di testi collegati tra loro ma questi collegamenti sono deboli, nel senso che sono troppo generici e vaghi. I collegamenti che intendiamo non sono quelli sintattici, cioè legati al funzionamento di un qualche codice di programmazione (questi sono piuttosto solidi, un link localizza infatti una risorsa attraverso un URL univoco, anche se si pone comunque il problema dell'aggiornamento degli URL) quanto piuttosto quelli legati alla capacità di descrivere il significato di un collegamento. Oltre a portare in un determinato luogo un collegamento dovrebbe descrivere il luogo verso cui porta. La parola giusta per parlare di questa funzione è capacità semantica. Semantico è un meccanismo che sa predire, il valore della sua azione.

Attivare i collegami semantici

Ma come è possibile scrivere del codice in grado di compiere operazioni semantiche? In fin dei conti un codice è una serie regole sintattiche, il codice non ha altra capacità che seguire i passi di una regola descritta dal programmatore. Se ci si pensa bene però, si usano abitualmente strutture con un valore semantico, anche se minimo.

Se metto online un archivio bibliografico posso facilmente organizzare un DB nel quale inserire in tre tabelle diverse autori, articoli e libri. A questo punto posso permettere all'utente di cercare tra gli autori o solo quelli che hanno pubblicato articoli, oppure solo quelli che hanno pubblicato libri. In questo modo l'utente non cerca informazioni utilizzando come chiave un unico concetto (autore) e nemmeno due concetti affiancati (es autore + libro), cadendo così nelle imprecisioni del motore di ricerca. L'utente può formulare una precisa relazione esistente tra un autore e il tipo della sua pubblicazione. Questo per un motivo molto semplice: chi ha inserito informazione nel sito ha stabilito una struttura per organizzarla. Da una parte ha inserito gli autori, da una parte le loro opere, dividendole in due categorie, i libri e gli articoli. Nel contesto di quella applicazione succede perciò che un autore possa essere individuato esprimendo il vincolo che abbia o meno pubblicato articoli. Si sa inoltre che se non ha pubblicato articoli allora ha pubblicato libri.

Tutto questo dipende dallo schema che si è deciso di utilizzare per archiviare quelle informazioni. Lo schema (si pensi ad uno schema XML) è un insieme di regole che stabiliscono come debbano essere organizzati i dati. Siccome uno schema definisce anche relazioni fra i dati ecco che è in grado di esprimere vincoli che legano o oppongono due classi di dati.

L'idea del web semantico nasce quindi semplicemente estendendo l'idea di utilizzare schemi per descrivere domini di informazione. Un dominio deve essere descritto da un particolare schema. Dei metadati devono mappare i dati rispetto a classi, o concetti, di questo schema di dominio. In questo modo posso disporre di strutture in grado di descrivere e automatizzare i collegamenti esistenti fra i dati. Riassumendo un'ultima volta il web semantico deve comporsi di tre livelli fondamentali. Al livello più basso abbiamo i dati, i metadati riportano questi dati ai concetti di uno schema, nello schema (spesso chiamato ontologia) si esprimono le relazioni fra concetti, che diventano classi di dati.

La proposta del web semantico

Quando si parla di web semantico si intende proporre un web che possieda delle strutture di collegamenti più espressive di quelle attuali. Il termine Semantic Web è stato proposto per la prima volta nel 2001 da Tim Berners Lee. Da allora il termine è stato associato all'idea di un web nel quale agiscano agenti intelligenti: applicazioni in grado di comprendere il significato dei testi presenti sulla rete e perciò in grado di guidare l'utente direttamente verso l'informazione ricercata, oppure di sostituirsi a lui nello svolgimento di alcune operazioni. Un agente intelligente dovrebbe essere una applicazione in grado di svolgere operazioni come la prenotazione di un aereo per Parigi con arrivo in centro città prima delle 13.00. Il tutto spulciando informazioni da siti che definiscono l'aeroporto di Parigi in modo diverso (Paris, Charles de Gaule, Orly) e deducendo, senza che sia specificato nella query, che un arrivo per le 13.00 in centro implichi un arrivo in aeroporto diverso a seconda dell'aeroporto effettivamente selezionato.

Questa proposta ha affascinato molto la comunità informatica. Il W3C ha attivato immediatamente un gruppo di lavoro. Le università hanno aperto numerosi programmi di ricerca legati a questi temi. Si sono imposti subito degli standard, il più famoso dei quali è certamente RDFs, un linguaggio in sintassi XML per definire e esprimere ontologie. Tuttavia è facile esprimere una critica alla effettiva validità di questo progetto.

Quanto tempo servirebbe per mappare tutto il web su delle ontologie? In più, qualora anche questo fosse fatto, come far comunicare fra loro ontologie diverse? Evidente è infatti che una ontologia avrà validità solo per il dominio per la quale è stata progettata.

A che punto si è arrivati veramente

Insomma è lecito chiedersi fino a che punto il progetto sia effettivamente valido e applicabile, soprattutto per iniziative di piccola o media dimensione. Diamo quindi uno sguardo a quanto realizzato fino ad ora. Per fare questo converrà farsi effettivamente un giro sulla rete.

Il prof Hendler ha messo in rete quella che ha definito la prima pagina appartenente al web semantico. All'indirizzo http://ra.crema.unimi.it/navigator/ potete interrogare un prototipo di navigatore semantico (avverto che è un prototipo ed ha pochissimi dati inseriti!) realizzato dall'università di Milano e dall'ISUFI di Lecce.

In questi due esempi le ontologie sono utilizzate per definire dei metadati che descrivano dei testi. L'utilizzo delle ontologie permette di recuperare documenti esprimendo query complesse. Si parte da concetti semplici, ma si può raffinare la ricerca esprimendo vere e proprie asserzioni composte da un soggetto un predicato ed un oggetto. Si può insomma fare una richiesta del tipo: aziende (soggetto) che hanno come servizio (predicato) la fornitura di scarpe (oggetto). Questo è radicalmente diverso dalla interrogazione che si potrebbe fare ad un motore di ricerca. In questo caso si potrebbero proporre tutti e tre i concetti di azienda di servizio e di scarpe, ma non potremo mai esprimere il legame fra di essi. Da qui derivano le imprecisioni del motore di ricerca.

L'uso di ontologie nella navigazione di basi di dati è certamente interessante ma sarebbe molto riduttivo pensare a questo come al loro ruolo chiave. Le ontologie sono innanzi tutto degli schemi e come tali hanno lo scopo di organizzare un dominio. Questo può essere molto utile nei processi produttivi di una comunità ristretta. Una informazione solitamente non ha valore solo in una fase del processo produttivo, la stessa informazione può essere utile in situazioni diverse. Più spesso non è l'intera unità informativa ad essere recuperabile ma una parte di essa. Questo richiede uno schema di organizzazione dei dati in grado di suddividere il dominio in tutte le classi di oggetti che hanno un ruolo nei suoi processi. Qui si sta entrando nel campo del Knowledge Management. Le ontologie diventeranno probabilmente lo strumento più potente a disposizione delle politiche di Knowledge Management. E se queste politiche intendono servirsi dei Internet come infrastruttura i linguaggi del web semantico diventano una risorsa applicativa indispensabile.

Come esempio di quanto detto si può portare il campo dell'e-learning. Almeno un paio di grosse applicazioni sono state sviluppate secondo una struttura ontologica: si veda http://edutella.jxta.org e http://www.merlot.org.In questo campo organizzare una piattaforma secondo strutture ontologie diventa estremamente produttivo. Un corso di meccanica può contenere una parte relativa alla meccanica dei fluidi che può essere ripresa, e poi ampliata, in un corso di idraulica. Se i vari materiali didattici sono organizzati in unità (learning objects) ogni singola unità può essere collegata alle altre e ricomposta in un nuovo corso.

Pensare al web come ad una infrastruttura regolata nel suo complesso da una struttura semantica significa disegnare una prospettiva incerta, quantomeno nel medio periodo. Diverso è il discorso se parliamo dell'uso di schemi semantici all'interno di architetture legate ad un dominio ben definito, quindi a servizio di comunità ristrette di utenti, orientati ad uno scopo preciso. Qui le prospettive immediate sono visibili più chiaramente. Per un sguardo generale sulle possibili applicazioni si può cliccare questo collegamento http://www.netcrucible.com/semantic.html. Per approfondire con una lettura il tema proponiamo invece questo volume: Maedche, Alexander, Ontology learning for the semantic Web, Kluwer Academic Publishers, 2002.


Costruiamo le ontologie per il Web Semantico

Uno schema ontologico

Il primo passo per costruire un accesso semantico ai dati è quello di costruire uno schema ontologico. Ma come la costruiamo?

L'ontologia servirà a delineare le strade che collegano gli oggetti del dominio, e permetterà di sapere meglio come fare a muoversi tra questi oggetti. Questa immagine è di certo una descrizione riduttiva, che lascia il lettore con molte domande in testa, prego però di rimandare un momento le domande e di tenere bene a mente questa immagine: pian piano la renderemo qualche cosa di più concreto.

Innanzi tutto ho parlato di acceso semantico, usando un termine generico. Voglio fermarmi un attimo a sottolineare questa cosa. Uno schema ontologico può essere utile in molti casi. Non bisogna pensare solamente alla navigazione di documenti da parte di utenti. In qualsiasi caso io debba indicare come si collegano due oggetti lo schema diventa indispensabile. In alternativa si è condannati a costruire applicazioni non estensibili, troppo dipendenti dalla situazione. Ad esempio per descrivere le funzioni delle classi che compongono un sistema, bisogna utilizzare uno schema (oggi si ricorre allo xml). Quando non necessitiamo di fornire con lo schema un accesso diretto ai dati e dobbiamo modellare relazioni complesse, i linguaggi ontologici (come RDFs) sono delle ottime soluzioni. Per una migliore comprensione del valore dell'ontologia rimandiamo all'articolo su cos'è e a cosa serve il Web Semantico.

Abbiamo oggetti ma non sappiamo come si collegano

Ritorniamo alla nostra immagine. L'ontologia è la mappa dei percorsi che portano da un oggetto all'altro. Spesso noi abbiamo degli oggetti, dei documenti, dei pezzi di codice, che sono collegati tra loro, ma non abbiamo modo di descrivere questa cosa da nessuna parte. L'ontologia ha come primo scopo quello di descrivere questi collegamenti.

La prima cosa che dobbiamo perciò chiederci quando modelliamo un ontologia è questa: cosa dobbiamo dire, cosa dobbiamo farne dei nostri oggetti, come li chiamiamo in causa. In alcuni casi potremmo voler descrivere documenti che trattano di quegli oggetti. In altri casi possiamo aver bisogno di tenere traccia di un processo produttivo. In altri ancora tenere traccia delle scelte e delle attività operate da un utente.

Il processo nella quale dovrà essere inserito lo schema, diventa il punto focale della modellazione. Se siamo in grado di metterlo in luce con chiarezza sapremo quali oggetti descrivere.

Solitamente si chiamano ontologie di scopo (task ontology) quelle che rappresentano la struttura dei processi. Le ontologie che forniscono gli oggetti specifici della nostra applicazione vengono invece dette di dominio (domain ontology).

Ontologie di scopo

Riprenderemo l'esempio fatto in un precedente articolo. Eravamo partiti con l'intenzione di sviluppare un'ontologia in supporto ad una operazione molto semplice: archiviare dei corsi di elearning, con la possibilità di mettere bene in luce gli argomenti trattati. Per fare questo dobbiamo costruire una struttura di concetti che descriva l'archiviazione.

Un concetto può essere proprio quello di Archiviazione. Questo concetto potrebbe avere come attributi: contenuto, data e locazione. Volendo si potrebbe pensare di aggiungere attributi come "archiviatore", la persona che ha archiviato il corso. Questi concetti possono essere semplici stringhe, come ad esempio data, ed allora riporteranno solo un valore, oppure possono puntare ad altre classi. Il contenuto punterà ad un corso o simili, la locazione ad un path ecc.

Un altro concetto che potrebbe essere utile al processo può essere quello di Erogazione. A quanti utenti, oppure a che categoria di utenti, è stato erogato il corso?

Qui voglio prevenire una facile obiezione. Per fare queste cose serve proprio un ontologia? Non si potrebbe tranquillamente utilizzare un database?

Certamente il database è in grado di gestire questo genere di collegamenti fra dati. Ma il database serve ad archiviare dati. Le ontologie sono file xml. Il loro scopo è descrivere una struttura e dare delle preinformazioni sugli oggetti. Dire che tipo di dati accettano, dire con quali altri oggetti si collegano.

Ontologie di Dominio

Una volta che abbiamo a disposizione i concetti di scopo possiamo pensare agli oggetti che compongono il nostro dominio. Teniamo ben presente alcune cose. La modellazione delle ontologie è una modellazione per classi. Il meccanismo dell'ereditarietà consente di definire una unica volta gli attributi che classi ad uno stesso livello ereditano da un padre. La possibilità di definire come valore di un attributo un'altra classe consente di stabilire qualsiasi tipo di relazione fra classi. Queste sono relazione nel senso che si dice che si potrà esprimere il valore di quell'attributo solo servendosi di istanze della classe a cui punta.

Non sempre è però immediato capire cosa dobbiamo definire come attributo, cosa come classe, cosa come attributo che richiami una classe. In questa sessione mostreremo varie possibilità di modellare le classi nel tentativo di fornire alcune soluzioni tramite esempi pratici.

Innanzi tutto possiamo dare alcune regole generali che possono aiutare a ottenere una buona modellazione. Generalmente può essere buona norma non dare alle classi nomi a volte al plurale a volte al singolare. Si può essere portati a utilizzare il plurale per classi che dovranno contenere più individui, il singolare per classi che indicano realtà generiche o astratte. La classe rappresenta solo una categoria, uno schema. Spesso si mettono i nomi al plurale pensando alla classe come ad un contenitore. Ma questa è una cattiva interpretazione della funzione della classe nell'ontologia. Scegliere un unico modo di comportarsi, nominare sempre al plurale o sempre al singolare, aiuta a non cadere in questa confusione.

Un'altra cosa da tenere in considerazione è il fatto che l'albero dell'ontologia deve essere bilanciato nella granularità. Se una classe A di livello 5 (perché ha su un ramo un padre 2, un padre 3, e un padre 4) ha su un altro ramo come padre una classe B di livello 2. Significa che probabilmente non ho approfondito sufficientemente la granularità del ramo del concetto B. In pratica verrei a trovarmi con concetti collegati fra loro ma uno su un ramo molto più profondo dell'altro. Questo indica come un buco nella definizione dei concetti e suggerisce che si debba colmare questa discrepanza inserendo nuovi concetti.

Una osservazione simile si può fare nel caso in cui ci si trovasse con una classe A con un numero molto alto di figli. Questa situazione, se non è chiaramente giustificata, è indice di un deficit di definizione. Quello che bisogna fare è quindi ricercare proprietà in comune fra le varie classi figlie di A in modo da raggrupparle con l'aggiunta di nuove classi. All'opposto modellare una classe con un unico figlio è una scelta strana e deprecabile. Suddividere una classe significa stabilire che alcune proprietà e caratteristiche devono riferirsi ad oggetti diversi. Suddividere con una unica classe pare perciò ingiustificato.

Modellando il dominio ci si può trovare di fronte ad alcune situazioni tipiche. Mostreremo ora attraverso degli esempi come è possibile comportarsi. Riprendiamo il nostro scenario dei corsi di elearning.

Potremmo iniziare a costruire le classi partendo dall'elemento centrale del nostro dominio: la lezione. Avrò certamente una classe Lezione. Questa classe sarà composta da vari attributi: argomento, ore, materiale... Ore potrebbe essere una classe semplice, che accetta dati di tipo stringa. Argomento e materiale sono attributi complessi, composti a loro volta da più elementi, per questo gli attributi punteranno ad un'altra classe.

Argomento e materiale vanno perciò definite come classi. Argomento potrebbe avere come attributi titolo ed un livello di specializzazione. Materiale potrebbe avere come attributo chiamato url. Siccome i documenti che compongono il materiale della lezione possono essere diversi questo attributo dovrà poter essere ripreso più volte, e avere quindi una cardinalità da uno a molti. Più lezioni formano un corso. Potremmo quindi definire una classe corso con l'attributo ha-lezione che punta alla classe Lezione. Il corso potrebbe avere questo attributo riempito con un numero indefinito di istanze di Lezione.

Agganciare oggetti e scopo

Ma il dominio non si è pensato genericamente, non si è voluto descriverlo solo con lo scopo di descriverlo. Avevamo in mente una precisa operazione che doveva svolgersi nel dominio. Per questo abbiamo bisogno di descrivere i soggetti protagonisti di queste operazioni. Osservando con attenzione ci accorgiamo che i soggetti che entrano in gioco non possono essere definiti riferendosi semplicemente al concetto di persona. Intanto potremmo voler indicare come soggetto attore una organizzazione. Esempio nel caso che si voglia indicare il fornitore di alcuni tipi di materiale o l'organizzazione alla quale appartiene un determinato individuo. Inoltre una persona intesa come individuo non coincide con il ruolo che quell'individuo assume. Una persona può in effetti assumere più ruoli, alcuni ruoli sono poi temporanei (es. studente).

Modelleremo perciò il dominio inserendo una classe Agente con sottoclasse Persona e Organizzazione. Tra i vari attributi di Persona avremo ha-ruolo che punterà ad una classe. Definiremo quindi una classe Ruolo che nel nostro caso avrà come sottoclassi Docente, Tutor, Utente.

Definiti gli attori possiamo pensare ad alcune classi in grado di collegare soggetti, oggetti e scopi. Gli esempi variano moltissimo dalla applicazione che si ha in mente. Facciamo qui un esempio fra tanti possibili.

Alla classe Lezione potremmo pensare di aggiungere una proprietà che si chiama Livello_di_Specializzazione. Questa proprietà ha il compito di tener traccia del livello di specializzazione col quale è stato preparata la lezione. La proprietà punta inoltre alla classe Specializzazione. Nella classe Specializzazione abbiamo a sua volta due attributi. Uno indica il tipo di utenti, e punta ad un classe Utente, uno indica la preparazione di questi utenti, e potrebbe essere benissimo una stringa.

Questo piccolo esempio mostra le capacità espressive di uno schema ontologico. Ogni lezione può avere un livello di specializzazione che dipende dal tipo di utenti a cui si rivolge e dalla preparazione che si presume questi abbiano. La proprietà in pratica ha un grado, con una sorta di restrizione a seconda della tipologia di utente a cui si attribuisce.