# Resource Description Framework

Il Resource Description Framework (RDF) è lo strumento base proposto da W3C per la codifica, lo scambio e il riutilizzo di metadati strutturati e consente l'interoperabilità semantica tra applicazioni che condividono le informazioni sul Web. È costituito da due componenti:
* RDF Model and Syntax: espone la struttura del modello RDF, e descrive una possibile sintassi.
* RDF Schema: espone la sintassi per definire schemi e vocabolari per i metadati.
L'RDF Data Model si basa su tre principi chiave:
* Qualunque cosa può essere identificata da un Uniform Resource Identifier (URI).
* The least power: utilizzare il linguaggio meno espressivo per definire qualunque cosa.
* Qualunque cosa può dire qualunque cosa su qualunque cosa.

## Principi e modello dei dati

Qualunque cosa descritta da RDF è detta risorsa. Principalmente una risorsa è reperibile sul web, ma RDF può descrivere anche risorse che non si trovano direttamente sul web. Ogni risorsa è identificata da un URI, Uniform Resource Identifier.
Il modello di dati RDF è formato da risorse, proprietà e valori. Le proprietà sono delle relazioni che legano tra loro risorse e valori, e sono anch'esse identificate da URI. Un valore, invece, è un tipo di dato primitivo, che può essere una stringa contenente l'URI di una risorsa.
L'unità base per rappresentare un'informazione in RDF è lo statement. Uno statement è una tripla del tipo Soggetto – Predicato – Oggetto, dove il soggetto è una risorsa, il predicato è una proprietà e l'oggetto è un valore (e quindi anche un URI che punta ad un'altra risorsa).
Il data model RDF permette di definire un modello semplice per descrivere le relazioni tra le risorse, in termini di proprietà identificate da un nome e relativi valori. Tuttavia, RDF data model non fornisce nessun meccanismo per dichiarare queste proprietà, né per definire le relazioni tra queste proprietà ed altre risorse. Tale compito è definito da RDF Schema.

## RDF Container

RDF quando deve far riferimento a più di una risorsa, per esempio per descrivere il fatto che la risorsa è associata a più proprietà, definisce dei contenitori (container), ossia liste di risorse. Tre sono i tipi di contenitori:
* Bag, è una lista non ordinata di risorse o costanti. Viene utilizzato per dichiarare che una proprietà ha valori multipli. Per esempio i componenti di un convegno.
* Sequence, differisce da Bag per il fatto che l'ordine delle risorse è significativo. Per esempio si vuole mantenere l'ordine alfabetico di un insieme di nomi, gli autori di un sito.
* Alternative, è una lista di risorse che definiscono un'alternativa per il valore singolo di una proprietà. Per esempio per fornire titoli alternativi in varie lingue.

## Rappresentazione fisica del modello

Un modello RDF è rappresentabile da un grafo orientato sui cui nodi ci sono risorse o tipi primitivi e i cui archi rappresentano le proprietà. Un grafo RDF è rappresentato fisicamente mediante una serializzazione.
Le principali serializzazioni adottabili per un grafo RDF sono:
* RDF/XML: documento RDF è serializzato in un file XML.
* N-Triples: serializzazione del grafo come un insieme di triple soggetto - predicato - oggetto.
* Notation3: serializzazione del grafo descrivendo, una per volta, una risorsa e tutte le sue proprietà.
In particolare la serializzazione in XML può avvenire secondo due metodi, quello classico e quello abbreviato, più leggibile per l'uomo.

## Esempio

Si supponga di voler serializzare la frase "Mario_Rossi" "è_autore_di" "Rosso_di_sera_bel_tempo_si_spera": il risultato in RDF/XML sarà:

## RDF Schema

In RDF Schema (RDFS) ogni predicato è in relazione con altri predicati e permette di dichiarare l'esistenza di proprietà di un concetto, che permettano di esprimere con metodo sistematico affermazioni simili su risorse simili. RDF Schema permette di definire nuovi tipi di classe. Inoltre specificando il concetto di classe e sottoclasse, consente di definire gerarchie di classi. In RDF si possono rappresentare le risorse come istanze di classi e definire sottoclassi e tipi.

### Classi RDF

Ogni risorsa descritta in RDF è istanza della classe rdfs:Resource.
Le sottoclassi di rdfs:Resource sono: rdfs:Literal Rappresenta un letterale, una stringa di testo. rdfs:Property Rappresenta le proprietà. rdf:Class Una classe dei linguaggi object-oriented.

### Proprietà RDF

rdf:type Indica che una risorsa è del tipo della classe che viene specificata. rdfs:subClassOf Indica la relazione classe/sottoclasse fra due classi.
L'ereditarietà può essere multipla. rdfs:subPropertyOf Indica che una proprietà è specializzazione di un'altra. rdfs:seeAlso Specifica che la risorsa è anche descritta in altre parti. rdfs:isDefinedBy Indica la risorsa "soggetto dell'asserzione" ovvero chi ha fatto l'asserzione.

### Vincoli RDF

rdfs:range (codominio) È utilizzato come proprietà di una risorsa; indica le classi che faranno parte di una asserzione con la proprietà.
rdfs:domain (dominio) Indica la classe a cui può essere applicata la proprietà.

## Esempi RDFS: Classi e Proprietà
### Esempio 1

La classe gatto viene dichiarata sottoclasse della classe animale.

### Esempio 2

La proprietà matrice viene dichiarata come specializzazione della proprietà madre.