FOAF

Icon for the FOAF (Friend of a Friend) project...
Image via Wikipedia

FOAF – Friend Of A Friend – è un progetto che fornisce dei meccanismi per la creazione decentralizzata di una rete di individui in formato machine-readable, che esprima le relazioni che esistono tra le persone e le loro informazioni personali. Per fare ciò, FOAF si appoggia sul modello RDF ed introduce un vocabolario che definisce le proprietà RDF per esprimere le entità e le loro relazioni in FOAF; FOAF può essere vista come una ontologia per il Semantic Web. Il vocabolario FOAF è una fusione di un vocabolario ad-hoc creato appositamente per il progetto e di altri vocabolari già esistenti, come Dublin Core; questa caratteristica è possibile grazie al modello RDF. FOAF utilizza RDF perchè ne acquisisce l’estendibilità e dà la possibilità di combinare le relazioni definite con FOAF con altre definite utilizzando un qualsiasi vocabolario RDF, permettendo al vocabolario FOAF di base di non dover trattare al suo interno ogni possibile aspetto riguardo le persone, che come possiamo immaginare sono molteplici e appartenenti a dominii differenti, sfruttando invece la riusabilità.RDF fornisce anche un insieme di proprietà (oggetti e relativi attributi) che FOAF può sfruttare

La FOAF Vocabulary specification definisce le classi e le proprietà RDF che devono essere utilizzate per creare i documenti FOAF in modo che applicazioni semantiche – o semantic-aware – possano effettuarvi delle elaborazioni; per questo motivo i documenti FOAF devono essere documenti RDF\XML validi.

Analizziamo un esempio di documento FOAF per comprendere la sintassi. Il seguente blocco di codice è stato generato tramite FOAF-a-Matic, un’applicazione JavaScript che genera un FOAF dalle informazioni personali inseriti nei campi di testo dell’apposita scheda.

<rdf:RDF

xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#&#8221;

xmlns:rdfs=”http://www.w3.org/2000/01/rdf-schema#&#8221;

xmlns:foaf=”http://xmlns.com/foaf/0.1/

xmlns:admin=”http://webns.net/mvcb/”&gt;

Dopo la definizione del documento RDF troviamo le namespace declarations per definire gli URIs dei vocabolari dai quali vengono utilizzati i termini che seguono i prefissi rdf:, rdfs:, foaf: ed admin:.

Come possiamo notare troviamo il vocabolario per RDF, RDFS, il vocabolario FOAF ed uno per il prefisso admin:.

Il vocabolario FOAF è identificato dall’URI http://xmlns.com/foaf/0.1/, questo non viene modificato con l’evolversi del vocabolario, quindi presenta ancora la versione 0.1, ma non deve far pensare che il vocabolario si trovi ancora in una versione non-stabile. In questo vocabolario inoltre il concetto di stabilità è definito a livello di termine, per ognuno di questi viene mostrato lo stato (unstable, testing, stable).

<foaf:PersonalProfileDocument rdf:about=””>

<foaf:maker rdf:resource=”#me”/>

<foaf:primaryTopic rdf:resource=”#me”/>

<admin:generatorAgent rdf:resource=”http://www.ldodds.com/foaf/foaf-a-matic”/&gt;

<admin:errorReportsTo rdf:resource=”mailto:leigh@ldodds.com”/>

</foaf:PersonalProfileDocument>

La definizione della persona a cui la descrizione FOAF appartiene è rappresentata con la classe PersonalProfileDocument, con la quale è possibile dire chi ha generato questo codice (foaf:maker) e definire questa persona come primaryTopic della descrizione. In questo caso però vediamo che vengono utilizzati due vocabolari per rappresentare la risorsa, infatti vediamo altre due proprietà con il prefisso admin:, quindi che fanno riferimento ad un altro vocabolario, all’interno della classe PersonalProfileDocument. Queste due proprietà servono per definire l’URI del software con cui il proprietario del documento FOAF ha generato questo codice (generatorAgent) e per definire a qule indirizzo devono essere comunicati eventuali errori del documento (errorReportsTo).Questo è un esempio di estendibilità del modello RDF, che FOAF eredita basandovici.

In questo modo abbiamo detto che la persona cui si riferisce il FOAF ne è il creatore ed ha utilizzato il software specificato all’URL http://www.ldodds.com/foaf/foaf-a-matic per generarlo.

<foaf:Person rdf:ID=”me”>

<foaf:name>Simone Dezaiacomo</foaf:name>

<foaf:title>Sig.</foaf:title>

<foaf:givenname>Simone</foaf:givenname>

<foaf:family_name>Dezaiacomo</foaf:family_name>

<foaf:nick>deza</foaf:nick>

<foaf:mbox_sha1sum>0c4fb8c1cc504e824daff59fc8aa113183a3075d</foaf:mbox_sha1sum>

<foaf:homepage rdf:resource=”semanticweb30.wordpress.com”/>

<foaf:depiction rdf:resource=”http://www.flickr.com/photos/34369927@N05/3199121418/”/&gt;

<foaf:phone rdf:resource=”tel:+39-333-4*******”/>

<foaf:schoolHomepage rdf:resource=”www.internet.unibo.it”/>

Prima parte della definizione delle informazioni riguardante la persona cui il FOAF si riferisce; queste sono rappresentate tutte come proprietà all’interno della clase Person che, come ci si può immaginare, identifica una persona. La chiarezza dei nomi delle proprietà permette di non dilungarsi sul loro significato, notiamo che il valore di queste è espresso nell’attributo rdf:resource= se si tratta di URI, mentre per proprietà come name e givenname vengono inseriti come contenuto dell’elemento.

L’indirizzo email è stato codificato con SHA1 per proteggerlo, viene quindi riportata la stringa corrispondente alla codifica invece che l’indirizzo email completo in alternativa sarebbe stato possibile rappresentarlo “in chiaro”:

<foaf:mbox rdf:resource=”
mailto:dezamail@gmail.com”/>

Con questo blocco di codice abbiamo detto che la persona identificata dall’indirizzo email dezamail@gmail.com ha come nome Simone, cognome Dezaiacomo, la sua homepage è all’indirizzo semanticweb30.wordpress.com, etc…

<foaf:knows>

<foaf:Person>

<foaf:name>Elena M</foaf:name>

<foaf:mbox_sha1sum>1206dcfb6be843b295fff6148c90757e89f1f40d</foaf:mbox_sha1sum>

</foaf:Person>

</foaf:knows>

Questo blocco di codice rappresenta un amico della persona descritta nel FOAF, il cuore delle possibilità che FOAF introduce.

Tramite la proprietà knows, viene specificata una persona che ha una relazione di qualche tipo – non necessariamente amicizia, ma una conoscenza in generale – con la persona descritta nel blocco di codice precedente. Il conoscente viene descrito utilizzando le stesse classi e proprietà della persona “soggetto” del FOAF e nel caso in cui l’amico possedesse un profilo FOAF, è bene inserirlo come proprietà seeAlso indicando l’URL al quale si trova

<rdfs:seeAlso rdf:resource=”www.sito-del-conoscente.com/foaf.rdf”/>

per permettere la creazione di una rete di FOAF. Possono essere chiaramente descritti più conoscenti per la stessa persona all’interno dello stesso documento FOAF.

</foaf:Person>

</rdf:RDF>

Una volta creato il codice e salvato il file (ad esempio foaf.rdf), è necessario caricarlo sul proprio spazio web in modo che possa essere riconosciuto dai crawler,per facilitare questa operazione è consigliato inserire nella HEAD della propria homepage la seguente riga di codice:

<link rel=”meta” type=”application/rdf+xml” title=”FOAF” href=”foaf.rdf” />

che punta al file rdf inserito.

Le possibilità di utilizzo di FOAF sono diverse, anche grazie all’estendibilità permessa da RDF; nell’esempio appena visto sono state utilizzate solo alcune delle proprietà disponibili. Il vantaggio dell’utilizzo del modello RDF si nota soprattutto in termini di aggregazione ed elaborazione delle descrizioni FOAF ed in questo sta la differenza sostanziale tra un profilo generato con FOAF ed i profili personali creati sui vari social network, ai quali è comunque possibile fare riferimento all’interno della descrizione FOAF utilizzando la proprietà holdsAccount e descrivendoli con la classe OnlineAccount. In questo modo un accesso alla risorsa rdf fornisce informazioni dettagliate sui diversi aspetti dell’utente cui si riferisce.

Come abbiamo detto FOAF nasce per creare informazioni “machine-readable” sugli individui ma è comunque utile poter visualizzare queste informazioni, quindi sono stati sviluppati alcuni strumenti che permettono una visualizzazione e gestione “human-oriented” del profilo FOAF, un esempio sono i FoaF Tools creati da Morten Frederiksen.

E’ inoltre possibile inserire il proprio FOAF all’interno di pagine XHTML utilizzando RDFa, in questo modo non è necessario il file .rdf associato ed i browser potranno rilevare la presenza del profilo FOAF direttamente dalla pagina, ad esempio se si utilizza il plug-in Semantic Radar per Firefox.

Reblog this post [with Zemanta]
Annunci

One Response to FOAF

  1. […] FoaF Explorer è un tool che permette di visualizzare in forma human-readable la struttura di una rete FOAF. […]

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger hanno fatto clic su Mi Piace per questo: