La natura delle ontologie
L’OWL, come detto, è una componente delle attività dedicate al Semantic Web. Questi sforzi si pongono l’obiettivo di rendere le risorse presenti sul Web più accessibili e comprensibili per le applicazioni, attraverso l’aggiunta di informazioni supplementari che descrivano i dati sui quali occorre effettuare delle elaborazioni. Poiché il Semantic Web è, per sua natura, una realtà distribuita, l’OWL deve permettere di raccogliere le informazioni tra le più disparate fonti. Questo è in parte realizzato consentendo alle ontologie di collegarsi fra loro, prevedendo meccanismi per l’importazione delle informazioni le une dalle altre. Inoltre il linguaggio non tratta le descrizioni delle risorse come informazioni da confinare in un singolo file o come destinate esclusivamente ad un determinato ambito di validità, ma le considera di valenza globale (open world assumption). Una classe C1, anche se definita originariamente nell’ontologia O1, può essere estesa e/o specializzata in altre ontologie. Questa caratteristica implica che le nuove ontologie non possono ritrattare ciò che è dichiarato in quelle precedenti. Sebbene le nuove informazioni possano essere contraddittorie, i fatti e le implicazioni possono solo essere aggiunti, mai eliminati. L’evenienza di queste contraddizioni è qualcosa che i costruttori di ontologie devono tenere in debita considerazione. Ci si aspetta comunque che saranno tool automatici ad evidenziare queste inconsistenze.
Namespace
Prima di poter utilizzare un insieme di termini, occorre una precisa specifica dei vocabolari che saranno utilizzati. Una prima componente standard di tutte le ontologie include un insieme di dichiarazioni di namespace XML, incluso nel tag di apertura rdf:RDF.
Questa sezione fornisce un metodo per interpretare senza ambiguità gli identificatori e rende il resto dell’ontologia decisamente più leggibile.
Un primo esempio (per la catalogazione dei vini di una cantina), in notazione RDF/XML, è riportato di seguito:
La prima dichiarazione identifica il namespace di default per questa ontologia; dal momento che un qualified name (QName) senza prefisso si riferisce all’ontologia corrente è sempre bene prevedere un’assegnazione di questo tipo. La seconda definisce l’URI base per questo documento che sarà utilizzato per “completare” tutti gli URIref relativi. Il terzo namespace indica che, in questo documento, gli elementi col prefisso owl: devono essere interpretati come riferimenti ai concetti estratti dal namespace associato all’URIref http://www.w3.org/2002/07/owl#. Questa è una dichiarazione convenzionale usata per introdurre il vocabolario OWL. Le restanti dichiarazioni stabiliscono che i prefissi rdf:, rdfs: e xsd: fanno riferimento ai costrutti definiti da RDF e RDF Schema ed ai datatype di XML Schema.
Intestazione e corpo delle ontologie OWL
Una volta definiti i namespace che saranno utilizzati, il secondo passo è includere una collezione di asserzioni che riguardano l’ontologia stessa, raggruppate sotto il tag owl:Ontology (annotation). Queste asserzioni sono definite attraverso tag dedicati e si occupano di specificare commenti, controllo di versione, inclusione di altre ontologie, eccetera.
1 | <owl:Ontology rdf:about=""> |
2 | <rdfs:comment>Un’ontologia OWL di esempio</rdfs:comment> |
5 | <rdfs:label>Ontologia dei Vini</rdfs:label> |
In questa sezione si inseriscono di norma tutti i metadati relativi al documento e spesso sono presenti informazioni non direttamente collegate all’ontologia. Questo accade perché tali documenti non sono sempre utilizzati per descrivere un’ontologia nel significato tradizionale del termine: in alcune applicazioni le ontologie non riguardano gli individual ma solo le classi e le proprietà per descrivere, in generale, il dominio di riferimento. L’attributo rdf:about fornisce un nome o un riferimento per l’ontologia. Quando il valore è una stringa vuota, ossia il caso più comune, il nome dell’ontologia è l’URI base dell’elemento owl:Ontology. Tipicamente questo è l’URI del documento che contiene l’ontologia anche se, con l’uso di xml:base, è possibile sostituire quello predefinito. Specificando il tag owl:imports è possibile importare un’ontologia all’interno di un’altra: questo significa che, per l’ontologia corrente, saranno valide tutte le asserzioni presenti nell’ontologia importata. Per utilizzare al meglio l’ontologia importata è conveniente assegnarle un namespace. È bene precisare che l’importazione può anche fallire, fondamentalmente per la non reperibilità o disponibilità delle risorse, problema molto frequente in un ambiente distribuito come il Web. Si noti che, per utilizzare il vocabolario OWL, non è stato necessario importare il file di ontologia owl.rdf ed anzi questa importazione è sconsigliata. Questa sezione è seguita dalle effettive asserzioni che costituiscono l’ontologia, le quali si concludono col tag di chiusura </rdf:RDF> che segna la fine del documento. Un’ontologia scritta in OWL contiene, essenzialmente, una sequenza di annotazioni, assiomi e fatti. Le annotazioni, alcune delle quali già analizzate in precedenza, sono usate per dare un nome all’ontologia, per registrare informazioni sull’autore e sull’ontologia stessa, per importare altre ontologie, ecc.. La parte centrale invece è composta da assiomi e fatti, che forniscono le informazioni sulle classi, sulle proprietà e sugli individual (istanze di proprietà e classi) ad ognuno dei quali è assegnato un identificatore nella forma di un URIref. Innanzitutto è importante chiarire che le classi denotano insiemi di individual; le proprietà, invece, legano gli individual ad altre informazioni e sono divise in quattro gruppi distinti:
- data-valued, esplicitano i valori delle proprietà degli individual;
- individual-valued, mettono in relazione un individual con gli altri;
- annotation, includono commenti riguardo a individual, classi, proprietà e nomi di ontologie;
- ontology properties, connettono le ontologie tra loro.
In OWL sono previste due classi predefinite, entrambe appartenenti al namespace owl:. La classe con identificatore owl:Thing è la classe di tutti gli individual, la classe owl:Nothing indica, conseguentemente, la classe vuota: entrambe sono parte di OWL Lite. Per quanto riguarda le annotation, ce ne sono molte predefinite in OWL, alcune delle quali mutuate dall’RDF: owl:versionInfo, rdfs:label, rdfs:comment, rdfs:seeAlso, e rdfs:isDefinedBy. Esistono anche proprietà di default per la descrizione dell’ontologia quali owl:imports, owl:priorVersion, owl:backwardCompatibleWith, e owl:incompatibleWith. Per quanto concerne i fatti, essi sono sostanzialmente di due tipologie. La prima tipologia fornisce informazioni riguardo un particolare individual, specificando le classi cui appartiene, le proprietà possedute ed i relativi valori. Ad un individual può essere assegnato un individualID facoltativo (alcuni individual sono anonimi: blank node) che può essere utilizzato per riferirsi ad esso. La seconda tipologia di fatti è utilizzata principalmente per operare sugli identificatori degli individual (renderli identici o distinti). Gli assiomi sono utilizzati per fornire informazioni relativamente a classi e proprietà. In particolare essi sono usati per associare a queste ultime una parziale o completa specifica delle loro caratteristiche. La definizione degli assiomi presenta delle differenze tra OWL Lite e OWL DL. Ogni assioma di classe nella versione Lite contiene una collezione di classi più generali ed una collezione di restrizioni sulle proprietà locali, nella forma di restriction construct. Questi ultimi stabiliscono il range di una proprietà, quanti valori sono permessi, e l’elenco di quelli obbligatori. La classe così specificata è resa equivalente all’intersezione tra le classi e le restrizioni o ad un suo sottoinsieme. In OWL DL un assioma di classe è costituito da un insieme di descrizioni, le quali possono essere classi più generali, restrizioni, set di individual e combinazioni booleane tra queste. Le classi possono inoltre essere specificate tramite enumerazione, rese equivalenti o disgiunte. Le proprietà possono essere equivalenti ad altre o esserne una specializzazione; possono essere rese funzionali, funzionali inverse, simmetriche o transitive, e vi si possono associare domini e range. Tuttavia molte informazioni che riguardano le proprietà sono più agevolmente espresse mediante restrizioni in cui è possibile specificare range validi localmente e cardinalità. In definitiva le ontologie permettono di rappresentare le risorse in maniera più completa di quanto si possa fare con RDF, disponendo di costrutti decisamente più efficaci ed espressivi. È bene ribadire, comunque, che le caratteristiche aggiuntive di cui dispone l’OWL non sono state implementate direttamente in RDF (nonostante queste fossero effettivamente emerse durante la fase di analisi) al fine di soddisfare i requisiti di modularità e stratificazione previsti in sede di progetto.
Caratteristiche di RDF in OWL
Collegate allo Schema RDF, sono incluse le seguenti caratteristiche OWL.
- Class: una classe definisce un gruppo di individui che sono legati tra di loro perché condividono le stesse proprietà. Per esempio, Deborah e Frank appartengono ambedue alla classe Persona. Le classi possono essere organizzate in una gerarchia di specializzazione usando subClassOf. Esiste una classe integrata molto più generale chiamata Thing che è la classe di tutti gli individui ed è una superclasse di tutte le classi OWL. Esiste anche una classe integrata specifica chiamata Nothing che è la classe che non ha istanze ed è una sottoclasse di tutte le classi OWL.
- rdfs:subClassOf: gerarchie di classe possono essere create grazie ad una o più istruzioni secondo cui una classe è una sottoclasse di un’altra classe. Per esempio, si può affermare che la classe Persona è una sottoclasse della classe Mammifero. Un ragionatore può dedurre da ciò che se un individuo è una Persona, allora è anche un Mammifero.
- rdf:Property: le proprietà possono essere usate per stabilire relazioni tra individui oppure da individui a valori di dati. Esempi di proprietà possono essere haFiglioFiglia, haParente, haFratelloSorella, e haEtà. I primi tre esempi possono essere usati per collegare un’istanza di una classe Persona ad un’altra istanza della classe Persona (e pertanto sono occorrenze di ObjectProperty) mentre l’ultimo (haEtà) può essere usato per collegare un’istanza della classe Persona ad un’istanza del tipo di dati NumeroIntero (e pertanto è un’occorrenza di DatatypeProperty). Sia owl:ObjectProperty sia owl:DatatypeProperty sono sottoclassi della classe rdf:Property di RDF.
- rdfs:subPropertyOf: gerarchie di proprietà possono essere create attraverso una o più istruzioni secondo le quali una proprietà è una sottoproprietà di una o più altre proprietà. Per esempio, si può affermare che haFratelloSorella è una sottoproprietà di haParente. Da ciò un ragionatore può dedurre che se un individuo è collegato ad un altro dalla proprietà haFratelloSorella, allora esso è collegato all’altro dalla proprietà haParente.
- rdfs:domain: il dominio di una proprietà limita gli individui a cui si applica la proprietà. Se una proprietà collega un individuo ad un altro individuo e se la proprietà ha una classe per uno dei propri domini, allora l’individuo deve appartenere alla classe. Per esempio, si può affermare che la proprietà haFiglioFiglia ha il dominio Mammifero. Un ragionatore può quindi dedurre che se Frank haFiglioFiglia Anna, allora Frank deve essere un Mammifero. Si osservi che rdfs:domain è chiamata limitazione globale in quanto la limitazione viene affermata in base alla proprietà e non solo in base alla proprietà quando è associata con una particolare classe.
- rdfs:range: la portata (range) di una proprietà limita gli individui che la proprietà può avere come suoi valori. Se la proprietà collega un individuo ad un altro individuo e se la proprietà ha una classe come sua portata, allora l’altro individuo deve appartenere alla classe portata (range). Per esempio, si può dichiarare che la proprietà haFiglioFiglia possiede la portata di Mammifero. Da ciò un ragionatore può dedurre che se Louise è collegata a Deborah attraverso la proprietà haFiglioFiglia (per es., Deborah è la figlia di Louise), allora Deborah è un Mammifero. La portata è anche una limitazione globale tanto quanto il dominio di cui sopra.
Nessun commento:
Posta un commento