title: Web Ontology Language
text: # 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 |
  | - | - |
  | 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 |
  | 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 |
  | S | Aggiunge ad ALC la definizione della transitività di una relazione |
  | H | Inclusione e equivalenza tra relazioni |
  | R | disgiunzione di proprietà, riflessività, asimmetria, irriflessività, relazioni composte da altre relazioni, definizione di non-relazione tra due individui |
  | O (One of) | creazione di classi tramite elenco di tutti e soli gli individui contenuti |
  | I (Inverse) | definizione di proprietà inversa |
  | F (Functionality) | definizione di proprietà funzionali |
  | N (Number) | restrizione di cardinalità: numero di elementi che partecipano a una certa relazione minore, maggiore o uguale di un valore n |
  | Q (Qualified) | come N, ma la relazione può essere qualificata |
  | $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.
  
  **Ontologia del tè**
  
  **Sintassi funzionale OWL2**
  
  
      Ontology(<http://example.org/tea.owl> Declaration( Class( :Tea ) ) )
  
  **Ontologia del tè**
  
  **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>
  
  **Ontologia del tè**
  
  **Sintassi di Manchester**
  
  
      Ontology: <http://example.org/tea.owl> Class: Tea
  
  **Ontologia del tè**
  
  **Sintassi RDF / XML**
  
  
      <rdf:RDF ...> <owl:Ontology rdf:about=""/> <owl:Class rdf:about="#Tea"/> </rdf:RDF>
  
  **Ontologia del tè**
  
  **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.
  
  