Premessa: altro post tecnico…

Il primo passo e’ passare tutte le info disponibili in forma RDF in modo da poterle caricare nel localstore…

Per fare questo sono partito dall’idea di potenziare l’RSS1 del blog inserendovi anche il modulo che gestisce le tassonomie, cioe’ in pratica i miei tags…

Quindi

tags as taxonomies in a folksonomy

Prendendo spunto chiaramente dal post sui tags ho pensato ad un ID univoco associato ad ogni tag, leggermente diverso da quello discusso:

urn:tag:dagoneye.it/[encodingbase64]

Questo ovviamente perche’ nel mio caso il dominio e’ univoco…

Usando questi URN come Resources dei miei nodi RDF sono in grado di usare il modello RDF stesso per gestire direttamente i tags, creando qualcosa di veramente mantenibile

Qualcosa che vada oltre la lingua in cui e’ scritto il tag, ma che come svantaggio renderebbe l’URL stesso del tag meno leggibile…

Dubbi

Il fatto e’ questo: una volta che io creo questi URN non legati esplicitamente alla lingua posso aggiungere o meno informazioni su di essi usando il modello RDF che e’ aperto.. e questo e’ un vantaggio, ma ho maggiore overhead e il link diretto non e’ leggibile…

Prendiamo un esempio pratico…

Avendo un sito vorrei gestire i contenuti generali oltre che con il solito menu, anche in modo trasversale inserendo in ogni sezione il livello dei tags…

I tags che devo gestire in modo univoco perche’ dovrei anche unire i miei tags presenti in del.icio.us, che non sono pochi e che sono per lo piu’ in INGLESE.

Ho quindi bisogno di un sistema che in qualche modo riesca ad unire senza perdere dati tags equivalenti semanticamente ma espressi in due lingue diverse…

Ho due alternative, a mio avviso:

  • trattare i tag con un ID del tipo http://dagoneye.it/tags/tag1 e poi definirne la proprieta’ lang al di sopra…
  • usare il metodo che accennavo sopra, cioe’ urn:tag:dagoneye.it/[encodingbase64]

E poi inserire delle triple del genere nel localstore:

urn:tag:dagoneye.it/44984943859034u5034u rdf:Type Tag . urn:tag:dagoneye.it/44984943859034u5034u dc:title SemWeb@eng .

Senza contare che ci sarebbe un altro punto da discutere e da tenere a mente: se vado sul link del tag cosa voglio vedere?

Be’ idealmente una schermata che mi faccia vedere in modo chiaro tutti i contenuti legati a quel tag rispetto al mio network: quindi una query RDF sul mio localstore.

Decisioni finali

Ora pero’ mi e’ piu’ chiaro il punto di vista dell’overhead di questo approccio: e sono del parere di semplificarlo.

In effetti basta che ogni tag abbia un identificativo univoco, quale puo’ essere l’URL stessa… usando quella poi possiamo in ogni caso aggiungere proprieta’ ( quella ad esempio di tag uguali ma di lingua differente ) in modo del tutto naturale…

Cosi tra l’altro non si perde la leggibilita’ stessa del tag…

E’ ovvio che nella progettazione di Piggybank invece, essendo un modello a lato client non c’era questa univocita’ ( non si poteva appoggiare agli URL ) e l’approccio usato poteva avere un senso.. in questo contesto cerchiamo di non complicare la cosa inutilmente…

Quindi ho scelto la prima alternativa che accennavo sopra…

Come modificare RSS1 con il modulo taxo

Partiamo dal file RSS1 corrente: ha una struttura del genere attualmente:

`

  • dichiarazione xml
  • rdf- namespaces
  • channel
  • items - lista dei permalink dei posts
  • per ogni item ( c’e anche altro )
    • dc:subject - che contiene la categoria o il tag a seconda
    • dc:description - che contiene prorio il testo del post

`

La versione invece con il modulo taxo e’ questa:

`
< ?xml version=”1.0”?>

<rdf:RDF
xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#
xmlns:taxo=”http://purl.org/rss/1.0/modules/taxonomy/
xmlns:dc=”http://purl.org/dc/elements/1.1/
xmlns=”http://purl.org/rss/1.0/
>

<channel rdf:about=”http://meerkat.oreillynet.com/?_fl=rss1.0">
<title>Meerkat
<link>http://meerkat.oreillynet.com
<description>Meerkat: An Open Wire Service

</channel>

<item rdf:about=”http://c.moreover.com/click/here.pl?r123“ position=”1”>
<title>XML: A Disruptive Technology</title>
<link>http://c.moreover.com/click/here.pl?r123</link&#62;
<description>
XML is placing increasingly heavy loads on the existing technical
infrastructure of the Internet.
</description>
<taxo:topics>
<rdf:Bag>
<rdf:li resource=”http://meerkat.oreillynet.com/?c=cat23"&#62;
<rdf:li resource=”http://meerkat.oreillynet.com/?c=47"&#62;
<rdf:li resource=”http://dmoz.org/Computers/Data_Formats/Markup_Languages/XML/"&#62;
</rdf:Bag>
</taxo:topics>

</item>

<taxo:topic rdf:about=”http://meerkat.oreillynet.com/?c=cat23"&#62;
<taxo:link>http://meerkat.oreillynet.com/?c=cat23</taxo:link&#62;
<dc:title>Data: XML</taxo:title>
<dc:description>A Meerkat channel</dc:description>
</taxo:topic>

<taxo:topic rdf:about=”http://dmoz.org/Computers/Data_Formats/Markup_Languages/XML/"&#62;
<taxo:link>http://dmoz.org/Computers/Data_Formats/Markup_Languages/XML/</taxo:link&#62;
<dc:title>XML</taxo:title>
<dc:subject>XML</dc:subject>
<dc:description>DMOZ category</dc:description>
<taxo:topics>
<rdf:Bag>
<rdf:li resource=”http://meerkat.oreillynet.com/?c=cat23"&#62;
<rdf:li resource=”http://dmoz.org/Computers/Data_Formats/Markup_Languages/SGML/"&#62;
<rdf:li resource=”http://dmoz.org/Computers/Programming/Internet/"&#62;
</rdf:Bag>
</taxo:topics>
</taxo:topic>

</rdf:RDF>
`

In pratica allora cosa cambia?

Allora per ogni item del canale ( quindi nel nostro caso per ogni post del blog ) sono associati una lista di tags, detti in questo contesto taxo:topics

Ognuno e’ identificato da un URI, in modo poi da potergli associare altre proprieta’, seguendo il principio base di RDF…
Infatti poi abbiamo una lista taxo:topic che comunica le proprieta’ di ogni tag o topic… usando le famose DC property, ovviamente…

Questioni aperte

Quindi la situazione finale e’ questa:

  • i taxo:topics del blog sono sia le categorie che i tags, identificati da un unico URI ognuno…
  • occorre unire sia i tags locali presenti attualmente nel blog sia i tags usati negli altri servizi ( del.icio.us e flickr )

I tags locali del sito saranno quindi di questa forma:

http://dagoneye.it/tags/brevetti
mentre le triple inserite nel localstore simili a queste:

`
http://dagoneye.it/tags/brevetti dc:title brevetti .

http://dagoneye.it/tags/brevetti rdf:Type Tag .

http://dagoneye.it/tags/brevetti rdf:SeeAlso <http://del.icio.us/tags/brevetti&#62; .

`
Verra’ fatta una redirezione in modo da poterli gestire da uno script in PHP che interroghi il datastore RDF e gestisca l’output…

TODO

Per inserire poi tutti i posts del blog nel datastore bastera’ modificare lo script di Wordpress che genera l’RSS1 in modo da scorrere TUTTI i post, oltre che a gestire il modulo taxo ovviamente…

Quindi servono tre script:

  • delicious2rdf : traduca il file di backup in RDF trasformando i tags come voglio
  • script interno che traduca i tags locali in RDF e in triple
  • modificare lo script di WP per la gestione di RSS1+TAXO
  • duplicare tale script per gestire tutti i post del blog

A breve per le modifiche..

Riferimenti:

-> RSS 1.0 Modules: Taxonomy
-> LOM Classification
-> XMLNews-Story
-> Building a Semantic Web Site
-> RSS_LOM
-> clarification of semantics of taxo:topics element in taxo:topic