# Web Ontology Language

Il Web Ontology Language (OWL) è un linguaggio di markup per rappresentare esplicitamente significato e semantica di termini con vocabolari e relazioni tra gli stessi. Esistono varie versioni del linguaggio, che differiscono molto tra di loro.
Lo scopo di OWL è descrivere delle basi di conoscenze, effettuare delle deduzioni su di esse e integrarle con i contenuti delle pagine Web. OWL intende rendere possibile, ad esempio:
* ricerche nel Web che superino i problemi di omonimia e ambiguità presenti nelle normali ricerche testuali;
* applicazioni che effettuino delle deduzioni sui dati.
La rappresentazione dei termini e delle relative relazioni è chiamata ontologia.
Insieme a RDF, di cui è un'estensione, OWL fa parte del progetto del web semantico.

## Semantica

Il linguaggio OWL è costituito da una semantica formale costruita dal consorzio W3C sulla base dello standard XML chiamato RDF. I due maggiori rilasci di specifiche di tale semantica sono chiamate OWL (detto anche OWL1, 2004) e OWL2 (2009). OWL2 è completamente compatibile con OWL1.

## Decidibilità

Uno dei problemi maggiori delle ontologie è la scelta della potenza espressiva. La logica del primo ordine è infatti molto potente ma non è decidibile, ossia non è possibile costruire un algoritmo che, dati uno o più assiomi, dica in tempo finito se un'affermazione segue o non segue logicamente da tali assiomi. Ovviamente questo è sconveniente dal punto di vista dell'utilizzo pratico, perché si vorrebbe avere una base di conoscenza che risponda in maniera prevedibile alle richieste, e non dia informazioni in base alle deduzioni fatte fino a quel momento. Gli approcci al problema sono dunque:
* selezionare una logica meno potente della logica del primo ordine che abbia meno poter espressivo ma sia decidibile;
* rinunciare alla decidibilità operando in un contesto di affidabilità parziale della base di dati.
Alcune versioni di OWL, quelle più usate, sono basate sul primo approccio.

### Logiche

Per scegliere un sottoinsieme della logica del prim'ordine che sia decidibile si è utilizzata la logica proposizionale aumentandone la potenza aggiungendo delle logiche rappresentate per convenzione con delle sigle:
| Lettera o sigla della logica | Descrizione |
| ${\mathcal {AL}}$ | Inclusione e equivalenza tra classi, definizione di classi atomiche, classe universo, intersezione tra classi, definizioni di classi formate da elementi che prendono parte a relazioni o hanno una relazione di un certo tipo solo con elementi di una certa classe, operatore di congruenza tra individui e appartenenza di un individuo a una classe |
| ${\mathcal {ALC}}$ | aggiunge ad AL la classe vuota, le classi complemento, l'unione di classi e le classi di elementi che sono in una certa relazione con elementi di una certa classe |
| ${\mathcal {S}}$ | Aggiunge ad ALC la definizione della transitività di una relazione |
| ${\mathcal {H}}$ | Inclusione e equivalenza tra relazioni |
| ${\mathcal {R}}$ | disgiunzione di proprietà, riflessività, asimmetria, irriflessività, relazioni composte da altre relazioni, definizione di non-relazione tra due individui |
| ${\mathcal {O}}$ (One of) | creazione di classi tramite elenco di tutti e soli gli individui contenuti |
| ${\mathcal {I}}$ (Inverse) | definizione di proprietà inversa |
| ${\mathcal {F}}$ (Functionality) | definizione di proprietà funzionali |
| ${\mathcal {N}}$ (Number) | restrizione di cardinalità: numero di elementi che partecipano a una certa relazione minore, maggiore o uguale di un valore n |
| ${\mathcal {Q}}$ (Qualified) | come N, ma la relazione può essere qualificata |
| ${\mathcal {D}}_{n}$ (Numerable Domain) | definizione di domini (tipi di dato) a cui può portare una relazione (es. "Mario ha n anni") |

## Versioni

Esistono diverse versioni di OWL, molto diverse tra di loro.

### OWL DL

Utilizza SHOIN(D$_n$), è decidibile e ha procedure di deduzione con complessità ben conosciute.

### OWL Lite

Utilizza SHIF(D$_n$), è semplice da implementare ma ha basso potere espressivo

### OWL Full

Utilizza la logica del primo ordine, addirittura espandendola con altri predicati. È quindi molto espressivo ma indecidibile.

### OWL 2

Raccomandato dal W3C dal 2009, è basato su SROIQ(D$_n$)

## Sintassi

La famiglia di linguaggi OWL supporta una varietà di sintassi. È utile distinguere sintassi di alto livello finalizzate alla specifica da sintassi di scambio più adatte all'uso generale.

### Alto livello

Questi sono vicini alla struttura ontologica dei linguaggi nella famiglia OWL.

#### Sintassi astratta OWL

La sintassi di alto livello viene utilizzata per specificare la struttura e la semantica dell'ontologia OWL.
La sintassi astratta OWL presenta un'ontologia come una sequenza di annotazioni, assiomi e fatti. Le annotazioni contengono metadati orientati alla macchina e all'uomo. Le informazioni sulle classi, proprietà e individui che compongono l'ontologia sono contenute solo in assiomi e fatti. Ogni classe, proprietà e individuo è anonimo o identificato da un riferimento URI. I fatti indicano dati su un individuo o su una coppia di identificatori individuali (che gli oggetti identificati sono distinti o uguali). Gli assiomi specificano le caratteristiche delle classi e delle proprietà. Questo stile è simile ai linguaggi dei frame e abbastanza dissimile dalle ben note sintassi per DL e Resource Description Framework (RDF).
Sean Bechhofer, et al. sostengono che sebbene questa sintassi sia difficile da analizzare, è abbastanza concreta. Concludono che la sintassi astratta del nome può essere fuorviante.

#### Sintassi funzionale OWL2

Questa sintassi segue da vicino la struttura di un'ontologia OWL2. Viene utilizzato da OWL2 per specificare semantiche, mappature per scambiare sintassi e profili.

### Sintassi di Exchange
#### Sintassi RDF

Le mappature sintattiche in RDF sono specificate per i linguaggi nella famiglia OWL. Sono stati ideati diversi formati di serializzazione RDF. Ciascuno porta a una sintassi per le lingue della famiglia OWL attraverso questa mappatura. RDF/XML è normativo.

#### Sintassi XML OWL2

OWL2 specifica una serializzazione XML che modella da vicino la struttura di un'ontologia OWL2.

#### Sintassi di Manchester

La sintassi di Manchester è una sintassi compatta e leggibile dall'uomo con uno stile vicino ai linguaggi dei frame. Sono disponibili variazioni per OWL e OWL2. Non tutte le ontologie OWL e OWL2 possono essere espresse in questa sintassi.

### Esempi

Il W3C OWL 2 Web Ontology Language fornisce esempi di sintassi.

#### Ontologia del tè

Si consideri un'ontologia per il tè basata su una classe di tè. Innanzitutto, è necessario un identificatore di ontologia. Ogni ontologia OWL deve essere identificata da un URI (http://www.example.org/tea.owl per esempio). Questo esempio fornisce un senso della sintassi.

##### Sintassi funzionale OWL2

    Ontology(<http://example.org/tea.owl> Declaration( Class( :Tea ) ) )

##### Sintassi XML OWL2

    <Ontology ontologyIRI="http://example.org/tea.owl" ...> <Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/> <Declaration> <Class IRI="Tea"/> </Declaration> </Ontology>

##### Sintassi di Manchester

    Ontology: <http://example.org/tea.owl> Class: Tea

##### Sintassi RDF / XML

    <rdf:RDF ...> <owl:Ontology rdf:about=""/> <owl:Class rdf:about="#Tea"/> </rdf:RDF>

##### RDF/Turtle

    <http://example.org/tea.owl> rdf:type owl:Ontology . :Tea rdf:type owl:Class .

## Terminologia

I linguaggi della famiglia OWL sono in grado di creare classi, proprietà, definire istanze e le sue operazioni.

### Istanze

Un esempio è un oggetto. Corrisponde ad una descrizione logica individuale.

### Classi

Una classe è una raccolta di oggetti. Una classe può contenere individui, istanze della classe. Una classe può avere un numero qualsiasi di istanze. Un'istanza può appartenere a nessuno, a una o più classi.
Una classe può essere una sottoclasse di un'altra, ereditando le caratteristiche dalla sua superclasse genitrice. Ciò corrisponde alla sussunzione logica e all'inclusione del concetto DL annotata.
Tutte le classi sono sottoclassi di owl:Thing (DL Top type notato $\top$), la classe radice.
La classe e i suoi membri possono essere definiti in OWL sia per estensione che per intensione. A un individuo può essere esplicitamente assegnata una classe da un'asserzione di Classe, ad esempio possiamo aggiungere un'affermazione La Regina Elisabetta è una (un'istanza di) umana, o da un'espressione di classe con dichiarazioni ClassExpression ogni istanza della classe umana che ha un valore femminile alla proprietà del sesso è un'istanza della classe delle donne.

#### Esempio

Chiamiamo umano la classe di tutti gli umani nel mondo è una sottoclasse di owl:Thing. La classe di tutte le donne (quindi donna) nel mondo è una sottoclasse di umani. Quindi abbiamo:
${\textsf {owl:Nothing}}\sqsubseteq {\textsf {Donna}}\sqsubseteq {\textsf {Umano}}\sqsubseteq {\textsf {owl:Thing}}$
Si può notare l'appartenenza di qualche individuo a una classe
e inclusione di classe
Il primo significa "George Washington è un umano" e il secondo "ogni donna è umana".

### Proprietà

Una proprietà è una caratteristica di una classe: una relazione binaria diretta che specifica un attributo vero per le istanze di quella classe. Le proprietà a volte agiscono come valori di dati o collegamenti ad altre istanze. Le proprietà possono mostrare caratteristiche logiche, ad esempio, essendo transitive, simmetriche, inverse e funzionali. Le proprietà possono anche avere domini e intervalli.

#### Proprietà del tipo di dati

Le proprietà dei tipi di dati sono relazioni tra istanze di classi e valori letterali RDF o tipi di dati dello schema XML. Ad esempio, modelName (di tipo stringa) è la proprietà della classe Manufacturer. Sono formulati usando il carattere owl:DatatypeProperty.

#### Proprietà degli oggetti

Le proprietà degli oggetti sono relazioni tra istanze di due classi. Ad esempio, OwnedBy può essere una proprietà del tipo di oggetto della classe Vehicle e può avere un intervallo che è la classe Person. Sono formulati usando owl:ObjectProperty.

### Operatori

Le lingue nella famiglia OWL supportano varie operazioni su classi come unione, intersezione e complemento. Consentono inoltre l'enumerazione delle classi, la cardinalità, la disgiunzione e l'equivalenza.

### Metaclassi

Le metaclassi sono classi di classi. Sono consentiti in OWL completo o con una funzionalità chiamata giochi di parole di classe / istanza.