Finalmente mettiamo un po’ le mani in pasta…
Diamoci da fare e proviamo a mettere in pratica quanto visto fin’ora realizzando la nostra prima ontologia!!
Consideriamo un caso alquanto semplice e esplicativo: vogliamo realizzare una base di conoscenza che contenga le informazioni relative a libri e a prodotti multimediali.
Prima di partire ricordiamo una semplice cosa: non esiste un’unica strada corretta per modellare il nostro dominio, ma ci sono sempre vie alternative. La soluzione migliore dipende sempre dal ruolo che l’ontologia dovrà ricoprire e, soprattutto, dalla capacità di anticipare future espansioni. Inoltre il processo di creazione di una ontologia è un processo iterativo, quindi non pretendiamo che tutto sia perfetto alla prima iterazione…
Come procediamo?
Semplicemente procediamo in ordine, seguendo i passi visti nell’articolo sulle Ontologie.
FASE 1: Definizione del dominio e degli scopi dell’ontologia
Iniziamo chiediamoci:
1. Qual è specificamente il dominio della nostra ontologia?
I libri e i prodotti multimediali.
2. Per quali scopi verrà utilizzata l’ontologia?
Per la realizzazione di un portale di e-commerce di una libreria online.
3. Quali nuove informazioni si vogliono dedurre dall’ontologia?
- Quali sono i generi presenti?
- Quanto costa un prodotto?
- A quale categoria appartiene un prodotto?
- Chi è/sono l’/gli autore/i di un libro o di un prodotto multimediale?
- Quali libri o prodotti multimediali possono essere suggeriti ad un utente in base alle sue preferenze?
4. Chi utilizzerà l’ontologia?
L’amministratore del sito e gli utenti che vogliono acquistare.
FASE 2: Cercare e valutare la possibilità di usare una ontologia esistente.
Sicuramente una delle fasi più interessanti e appetibili, ma in questo caso – e solo in questo caso – la saltiamo per permetterci di realizzare in prima persona questa nostra prima ontologia.
Comunque nel nostro caso, forse, si poteva dare un’occhiatina alla DCMI Dublin Core Metadata Initiative – dublincore.org.
FASE 3: Definizione dei concetti
Si inizia elencando tutti i possibili termini relativi al dominio di conoscenza. Una possibile lista di termini potrebbe essere la seguente:
prodotto – libro – musica – film – autore – titolo – sottotitolo – genere – prezzo – editore – cd – dvd – formato – cartaceo – elettronico – giallo – romanzo – economia – psicologia – informatica – racconto – favola – fiaba – pop – rock – rap – leggera – classica – latino-americana – salsa – merengue – thriller – fantasy – avventura – romantico – durata – descrizione – utente – amministratore – cliente
Iniziamo ad estrapolare i concetti e a realizzare una gerarchia. Gli approcci (come sappiamo) possono essere di tipo top-down, bottom-up o ibrido.
Proviamo a procedere con un approccio ibrido, in modo da utilizzare sia il top-down che il bottom-up.
Innanzitutto possiamo individuare come concetto top-level quello di Prodotto:
Poi, partendo dal basso, individuiamo giallo – romanzo – economia – psicologia – informatica – racconto – favola – fiaba come concetti di bottom-level che possono essere accorpati nel concetto Letterario, che a sua volta afferisce al concetto di Genere.
E così via …
FASE 4: Definizione delle proprietà
Andiamo ora ad individuare le proprietà dei nostri concetti. Ricordiamo che abbiamo due categorie di proprietà: intrinseche ed estrinseche.
Proprietà intrinseche del concetto prodotto potrebbero essere:
- titolo
- sottotitolo
- anno
- lingua
- prezzo
Andiamo ad analizzare le proprietà intrinseche del concetto Libro, che potrebbero essere:
- pagine
- dimensioni
Mentre quelle estrinseche potrebbero essere:
- haAutore
- haGenereLetterario
- haFormato
- haEditore
che sono tutte proprietà che mettono in relazione il concetto di libro con altri concetti definiti nell’ontologia.
Antonio consiglia:
Praticamente si può procedere alla modellazione di un dominio sfruttando un diagramma E-R (entità-relazioni): le entità diventano i concetti, le relazioni diventano gli attributi estrinseci (object properties), le cardinalità delle relazioni si trasformano in vincoli di cardinalità e gli attributi, infine, diventano le proprietà intrinseche (datatype properties).
Convenzioni
Soffermiamoci un attimo sulle convenzioni riguardanti la nomenclatura: i Concetti saranno solitamente dei sostantivi scritti con l’iniziale Maiuscola, mentre le proprietà intrinseche saranno scritte in minuscolo. Per quanto riguarda i ruoli (o proprietà estrinseche) si usa la camelNotation, ovvero prima iniziale minuscole e poi Maiuscole le iniziali delle successive parole, rigorosamente tutte unite.
Al lavoro!
Passiamo ora alla pratica e implementiamo la nostra ontologia con uno degli strumenti migliori sulla piazza: OwlEd2.
Vediamo come procedere:
Inoltre, ovviamente, vi posto il file che ho realizzato (salvatelo e apritelo con Owled2 per vedere ciò che ho realizzato e per editarlo) :
Come potete vedere, questo potente strumento (OwlEd2) ci permette di ottenere un codice OWL già perfettamente strutturato e pronto per l’uso. Cosa è OWL? Beh, lo vedremo presto in uno dei prossimi articoli.
Intanto lascio a voi, come esercizio, il caricamento degli individui nella nostra prima ontologia, sempre tramite Owled2.
Ovviamente sono graditissimi commenti, suggerimenti e miglioramenti della nostra ontologia.
Aspetto impaziente le vostre numerose segnalazioni!!!
Antonio Cicirelli
Se il post ti è piaciuto, ti ha incuriosito o se non ha soddisfatto appieno la tua voglia di conoscenza lasciaci un commento, ci sarà d'aiuto per andare avanti e migliorare oppure sottoscrivi i feed e ricevi i prossimi articoli nel tuo RSS reader.
Comments
Ciao, siccome devo prepare una owl per un esame, premetto che non copio la tua, ne stavo creando una sul calcio, ma ho alcuni dubbi su quello che stò realizzando seguendo i tuoi video inseriti su youtube.
Ma il primo che mi viene è una stupidagine…ma da nubbio ti chiedo…devo realizzarmi io un database dove inserisco tutti i giocatori le squadre…e altro che mi serve??
e se si come fare…
grazie mille di un’eventuale aiuto
Ciao Gianluca,
dipende da qual è il tuo obiettivo. Se l’ontologia deve essere utilizzata da ragionatori che operano su OWL ti consiglio di usare il tool che ho usato io (OwlEd for OWL/DL) – o qualche altro editor per ontologie, in fondo si somigliano un po’ tutti – ed usare la sezione Instances per caricare tutti gli individui. L’aggiunta di individui è molto semplice e viene fatta tramite drag & drop come nella definizione delle classi. In questo modo l’intera ontologia (TBox ed ABox, ovvero vocabolario dei termini ed individui) sono definiti tutti all’interno di un unico file .owl .
Ora non conosco le tue esigenze specifiche e quindi non so se devi creare un database per lavorare con un’applicazione che opera con database relazionali, ma mi sembra di aver capito di no, quindi basta OwlEd.
Spero di esserti stato d’aiuto. Se non ho chiarito il tuo dubbio o se hai altri dubbi chiedi pure e cercherò di aiutarti.
P.S.: l’ontologia è liberamente utilizzabile e copiabile da chiunque ne abbia necessità. E’ stata pensata e realizzata solo per questo motivo.
Ciao, sto svolgendo una tesi sul Semantic Web, alla fine della mia ricerca, vorrei creare una ontologia per mostrare le potenzialità del SW, ho letto che la tua ontologia era libera e utilizzabile da tutti e ho pensato di usarla come base, però quando lancio il reasoner risulta inconsistente sulle classi E-book e Libro, te lo volevo semplicemente segnalare, magari se ti fa piacere possiamo restare in contatto, potresti darmi qualche dritta, sto facendo un pò di confunsione, complimenti per il lavoro e soprattutto per la condivisione
Ciao Francesco,
grazie per i complimenti e per la segnalazione. Appena posso darò un’occhiatina. In ogni caso mi potresti dire quale ragionatore stai utilizzando?
Se hai bisogno di altre informazioni puoi tranquillamente contattarmi qui sul blog o via e-mail al mio indirizzo che trovi nella sezione Chi Sono.
A presto!
Ciao,
innanzitutto complimenti per come hai spiegato il tutto!
Anche io devo creare un’ontologia, precisamente sulle Fan Fiction, sulle Fan Art e sui Fan Video!
Devo affiancare questa ontologia alla struttura di un database (che nascerà da questa ontologia) di un sito web che conterrà queste opere.
Quale programma mi consiglieresti? Io ho scaricato Protegè ad esempio, va bene? Ed un’ ulteriore domanda: io sono praticamente una neofita del web semantico, alcune cose non mi sono chiare, tipo: una volta creata la mia ontologia, vorrei ricavarne dei metadati con cui taggare le opere che saranno presenti sul sito, è possibile? Magari la domanda è stupidissima, ma non sono ancora riuscita a capirlo.
Ti ringrazio,
Ilaria
Ciao Ilaria,
per poter rispondere alla tua domanda avrei bisogno di qualche delucidazione su quello che devi fare. Innanzitutto, che tecnologia usi per realizzare questo sito web?
Poi, cosa intendi per database che deve nascere da questa ontologia?
Per la questione dei metadati, di sicuro è possibile taggare le opere con dati presenti in questa ontologia che stai creando.
Per il sito web uso PHP e MySql.
Praticamente quello che mi è stato suggerito di fare dalla mia relatrice (è per una tesi di laurea) è di creare questa ontologia che descriva appunto questo particolare dominio (le opere dei “fan”) e che serva come modello concettuale per la creazione del database relazionale con MySql.
Quindi dovrei fare dei parallelismi tra ontologia-database, facendo per esempio coincidere i concetti dell’ontologia con i nomi delle tabelle del database..
Non so se mi sono spiegata bene e se la cosa ha senso, sono un po’ confusa a riguardo.
Quindi le varie opere presenti nel db saranno taggate con concetti presenti nella tua ontologia, giusto?. Per la creazione dell’ontologia penso che Protege vada bene. Non l’ho mai usato per creare un’ontologia, ma immagino che l’ontologia creata possa essere salvata ad esempio in RDF/XML. A quel punto ci sono diverse librerie di PHP per gestire file RDF. Io ho lavorato con RDF in Java, cmq Google ti sarà sicuramente di aiuto. . Ad esempio ho visto che esiste una libreria chiamata RDF Api for PHP ch e potrebbe fare al caso tuo.
Scusami, mi è venuto un dubbio. Dato che l’ontologia verrà salvata in RDF/XML, posso far interagire PHP con XML, invece che con RDF? Cambia qualcosa nel risultato? Gestire l’XML con PHP mi risulterebbe più semplice!
Grazie!
Si certo, se secondo me faresti prima con qualche libreria specifica, ma se preferisci parsare direttamente XML il risultato finale sarà lo stesso.
Ciao scusami, sono sempre io!
Avrei una curiosità questa volta… una volta creata l’ontologia come la si potrebbe utilizzare concretamente? A me non è chiaro questo punto, so che l’ontologia può essere interrogata tramite linguaggi specifici (tipo SPARQL) solo che non capisco lo scopo di interrogare un’ontologia.. penso mi sfugga qualcosa…
Comunque questo è l’ultimo dubbio che ti chiedo! XD
Ciao Ilaria,
questa volta mi permetto di risponderti io.
Per quanto è stato detto in precedenza, se tu implementi l’ontologia con un database relazionale MySql, ovviamente l’interrogazione avverrà attraverso il linguaggio SQL, e non può essere diversamente.
A questo punto ti chiederai, ma allora a cosa mi serve l’ontologia?
Se hai letto l’articolo sulla rappresentazione della conoscenza, avrai notato che una KB è composta non solo dalla TBox (che è l’ontologia) ma anche dalla ABox (che nel nostro caso è data dai dati memorizzati nel DB) e da un ragionatore. Quest’ultimo è la chiave di volta di tutto.
Per dare “intelligenza” alla tua ontologia devi servirti di un ragionatore, il quale ti permetterà di fare valutazioni sulla tua base di conoscenza.
Uno strumento pratico per interfacciarsi con un ragionatore è l’interfaccia DIG a cui ti consiglio di dare un’occhiatina.
Essenzialmente, in base alle tue necessità, il ragionatore può esserti utile nella fase di costruzione della query al DB, e solo per quello.
Ma allora perché usare i database relazionali e non altre strutture ottimizzate per la gestione di ontologie?
Solo perché ad oggi i DB relazionali sono più performanti e maggiormente diffusi e quindi ti permettono di avere costi contenuti e prestazioni accettabili.
Se ti interessa posso inviarti del materiale un po’ più approfondito via mail, con degli esempi pratici (il codice però è scritto in java).
Fammi sapere. (P.S.: per il rispetto della tua privacy, non è necessario che tu pubblichi il tuo indirizzo e-mail nel commento)
Antonio Cicirelli
Ti ringrazio Antonio per avermi risposto,
accetto di buon grado la tua offerta (immagino che tu possa visualizzare la mia email, giusto?) dato che ignoravo completamente l’aspetto di rendere “intelligente” un’ontologia. Nel frattempo leggerò i diversi articoli che ci sono nel blog, sono sicura che mi torneranno molto utili
Grazie ancora,
Ilaria
Salve, ho letto i vostri articoli e sono molto interessanti. Vi annuncio che sono solo agli inizi e quindi ho ancora molto da imparare.. Avrei una cosa da chiedere, in pratica sto costruendo un’ontologia per allenarmi (sui CV)… quello che mi chiedo è se è possibile successivamente utilizzare un motore di ricerca semantico personale che mi “testi” la mia ontologia… ad esempio vorrei inserire come testo “cerco esperti in linguaggio ASP.NET” e che il motore mi cerchi semanticamente all’interno della mia ontologia per estrapolare coloro che hanno lavorato su un progetto in ASP.NET o che abbiano tra le proprie skill anche conoscenze di ASP.NET.
Spero di essere stato abbastanza chiaro, distinti saluti
Sergio
Ciao Sergio,
nella mia tesi mi sono proprio occupato della realizzazione di un motore di ricerca semantico tra CV. Per quanto riguarda la query testuale di cui parli (“cerco esperti ecc…”), beh per quello bisogna lavorare con l’elaborazione automatica del linguaggio naturale, che non è una cosa banale. Certo è più semplice estrarre dalla query le parole chiave (in questo caso ASP.NET) e ricercarla nel tuo database di CV. Si tratta però di una ricerca sintattica. La semantica entra in gioco se vuoi fare qualcosa di più intelligente. Ad esempio, supponi di voler cercare un esperto di Java e immagina che un candidato A abbia scritto nel suo CV che ha esperienza con il framework Spring o con GWT. Beh in questo caso la ricerca lessicale non ti permetterà di individuare questo candidato. Se invece nella tua ontologia viene esplicitato che la conoscenza di Spring e GWT implica la conoscenza di Java, beh allora si che potresti trovare anche il candidato A tra i tuoi risultati.
Grazie, ho capito alla perfezione quello che intendi, è proprio quello che vorrei fare…. quindi per poter “interrogare” la mia ontologia posso utilizzare un motore di ricerca semantico, ma dove posso trovarlo? nel concreto dovrei poter cercare tramite il motore le informazioni semanticamente solo nella mia ontologia… ho visto che all’interno di Protégé (è l’editor che ho utilizzato per la mia ontologia) c’è un tab per le query, ma ho notato che è legato alla sintassi dei linguaggi di interrogazione.. il fatto è che le informazioni dell’ontologia andrebbero cercate da non esperti in materia, quindi mi servirebbe un vero e proprio motore di ricerca cosi che un non espero possa usufruire dell’ontologia in maniera trasparente… ti ringrazio anticipatamente per l’auito se puoi darmelo
Sergio
Beh guarda, un motore di ricerca del genere non esiste ed è proprio quello che stiamo cercando di realizzare nel mio corso di dottorato di ricerca. La versione americana di Monster utilizza qualcosa del genere, ma ovviamente non è pubblicamente disponibile…
Bel lavoro… mi servirò di te in futuro per l’esame di siw!!!