Codice:
Un po’ di background
Il web semantico non esiste ancora, ma ci si sta lavorando. L’ispirazione viene da una [visione] di Wiki:TimBernersLee.
Al momento il web è una massa di informazioni eterogenee e catalogate in tanti modi diversi. Il [Web semantico] sarà un’infrastruttura per avere una rete di metadati (dati che descrivono altri dati a loro volta) che permetterà ai computer di utilizzare queste informazioni in maniera utile.
Cerchiamo di fare un esempio: al momento sul web ci sono svariati milioni (miliardi?) di pagine HTML. Ora, per me, Antonio Cavedoni, è facile andare su una qualunque di queste pagine web, leggere la stringa di caratteri «Federica Benedetti�?� e riconoscere il fatto che sia il nome di una persona di sesso femminile e probabilmente di nazionalità italiana. Allo stesso modo, posso inserire che la stringa 20030415 sia una data, e si riferisca alla giornata di oggi (mentre scrivo).
Per noi questo tipo di inferenze sono automatiche, ma è possibile renderle accessibili anche ad una macchina? È questo lo scopo del web semantico. Una volta completato, sarà possibile «interrogare» il web su quello che «sa» riguardo certe risorse, non facendo una query su un singolo database o su una directory, ma ricercando nell’intero web semantico, che dovrebbe fare da collante per tutte le basi di dati locali, un po’ come fa l’attuale web, ma aggiungendo significato alle semplici stringhe di caratteri (Unicode!).
Come funziona?
Alla base del web semantico ci sono due strumenti principali, gli URI e RDF. Con gli URI identifichiamo le risorse, con RDF stabiliamo relazioni tra una risorsa e l'altra, come in un grafico. Anzi, pensate a RDF proprio come ad un grafico con frecce che collegano URI e proprietà. Ad esempio:
Antonio Cavedoni -> ha -> 24 anni
Perch�?� RDF e non XML?
Come dicevo prima, col web semantico aggiungeremo significato a delle semplici stringhe di caratteri. Ma è la stessa cosa che fa XML!, vi sento mormorare. Certo, ma cosa sa un documento XML del suo contenuto? Cosa ci dice <cane>Fufi</cane>?
<cane>Fufi</cane> ci dice che la stringa formata dai caratteri "F", "u", "f", "i" � di tipo "cane". All'occhio umano è ovvio che Fufi sia il nome di un cane (attenzione anche al problema del NomeDelleCose rispetto alle cose stesse), ma per il computer non lo è per niente. Con XMLSchema possiamo dire che il contenuto di <cane> dovrà essere una stringa di caratteri, e non una serie di numeri o altri nodi XML, ma non possiamo definire cosa sia un cane.
Ci vuole un ulteriore passo avanti, quello che RDF ci permette di fare. Con RDF possiamo dire alle macchine qualcosa del tipo "esiste un animale di tipo cane con nome Fufi". Ogni cosa che è sul web viene definita una risorsa; "animale" e "cane" sono classi di risorse, di cui Fufi è un’istanza.
In RDF (Notation3), prima creo la classe "Animale", poi creo una sottoclasse "Cane" (@@ controllare questo codice: è scritto a mente, potrebbe essere bogus). Supponiamo di creare un documento all�URI http://example.org/test, con questi contenuti:
@prefix : <#>
# definisco la classe "Cane", come sottoclasse di "Animale"
:Animale rdf:type rdfs:Class .
:Cane rdf:subClassOf :Animale .
# spiego alla macchina che cos'e' il mio Fufi, associandolo alla classe "Cane"
:Fufi rdf:type rdfs:Class .
:Fufi rdf:type :Cane .
:nome rdf:type rdf:Property .
:Fufi :nome "Fufi" .
Con @prefix : <#> dico che tutto quello che comincia con i due punti è una risorsa, che si trova all’URI del documento in cui sto scrivendo. :Animale, :Cane e :Fufi quindi sono degli URI mentre "Fufi" � una stringa (in linguaggio tecnico, literal). Una volta che la macchina ha "letto" queste informazioni, � in grado di fornire informazioni su ci� che si trova all'URI http://example.org/test#Fufi .
rdf:type è un QName.
@@more on :URIs, namespaces, schemas, logic (DAML+OIL, OWL) and web of trust later.
@@fare riferimento anche a RDF/XML, che al momento è molto più utilizzata di N3.
In RDF ci sono tre "tipi" primari: Resources, Literal e BNodes. I Literal sono stringhe di testo, le risorse sono URI e i BNodes sono Blank Nodes, ovvero identificatori di porzioni all’interno dello stesso documento (credo). @@ controllare
Risorse
* [The Semantic Web: An Introduction]
* [The Semantic Web in Breadth]
* [The Semantic Web: 1-2-3]
Altro
Al [Semantic Web Tour] di Roma [abbiamo fatto una specie di trascrizione istantanea delle presentazioni]. Con questa e le [slide fornite dai relatori] dovreste riuscire a ricostruire la conferenza abbastanza bene.
Sul wiki del W3C c’è una sezione dedicata allo sviluppo del web semantico qui in Italia, ESW:SemWebItaly