Lo standard RSS

Short link

La prima versione di RSS fu creata da Netscape sul finire degli anni ’90 (RSS 0.9) ed era pensata, al tempo della guerra dei browser, per funzionare esclusivamente sull’allora Netscape Navigator (la versione 4 di Netscape cessò di esistere nel 1998). Tuttavia, Netscape ritirò il supporto a RSS dai suoi siti nell’aprile 2001. Il discorso di Netscape fu portato avanti da altri, e fra alterne vicende si giunse infine alla stesura di RSS 2.0, che è l’attuale versione in uso di RSS e le cui specifiche sono rintracciabili all’indirizzo http://cyber.law.harvard.edu/rss/rss.html.

Nel corso di questi ultimi dieci anni, il formato RSS è cresciuto parallelamente al supporto da parte delle applicazioni Web a XML. Se all’inizio pochi browser riuscivano a interpretare correttamente XML, con il passare del tempo il loro numero è aumentato, fino a giungere, nel 2007, al supporto nativo da parte di Internet Explorer 7 del formato RSS. C’è di più: in questi anni RSS è stato sospinto con forza dal fenomeno montante dei blog prima e dei social network poi. Se nel 2001 era ancora possibile per gli utenti seguire i contenuti del proprio blog preferito collegandovisi ogni volta per controllare se erano stati aggiunti nuovi post, con il perfezionarsi delle piattaforme di blogging, dei CMS e degli strumenti di editing è aumentata in modo esponenziale la quantità di contenuti che è possibile pubblicare in un giorno.

Da ciò è conseguita la necessità per gli autori e gli utenti di uno strumento che permettesse loro di far conoscere i propri contenuti ai lettori senza costringerli a navigare nel sito alla ricerca di nuovi inserimenti. Gli autori hanno così cominciato, grazie ad RSS, a dedicarsi esclusivamente alla pubblicazione dei contenuti, senza più doversi preoccupare della loro diffusione e promozione. In tal senso il biennio 2004-2005 segna una svolta decisiva nella storia di RSS: l’ascesa iperbolica del browser Firefox sul mercato contribuisce ad imporre il formato RSS sul Web, grazie al fatto che questo browser dispone di un lettore di feed RSS integrato.

Il rapporto tra RSS e il Web

Cominciamo con una descrizione di RSS tratta dall’Internet Draft che ne definisce il formato:

RSS è un formato di documento basato su XML per la promozione dei contenuti web, tali che essi possano essere ripubblicati su altri siti o scaricati periodicamente e presentati agli utenti.

L’acronimo RSS, infatti, sta a significare Really Simple Syndication e, secondo Wikipedia, denota un tipo di feed web che tengono aggiornati gli utenti sui nuovi contenuti inseriti in un sito e, più in generale, sui suoi periodici aggiornamenti.

In altre parole: un documento RSS (chiamato feed RSS) è un documento XML collegato alle nostre pagine web che permette ai nostri visitatori di restare sempre al corrente nostri aggiornamenti e sui nuovi contenuti che andiamo ad inserire (articoli, post, video, ecc.), senza dovere ogni volta collegarsi direttamente al sito. Ma come avviene tutto questo?

Quando un browser carica un documento web, scarica tutti i documenti secondari collegati al documento principale (come per esempio gli script e i fogli di stile inseriti tramite gli elementi script e link). Un feed RSS, come vedremo, viene collegato al documento tramite l’elemento link. Una volta individuatolo ed eseguito il parsing del suo contenuto, il browser presenta in genere un icona nella barra degli indirizzi (Internet Explorer 7 e 8 la inseriscono nella barra sottostante).

A questo punto se l’utente clicca sull’icona, o se noi abbiamo anche inserito un link nella pagina che punta al documento RSS, il browser visualizza nella sua interfaccia i contenuti del feed RSS e chiede se ci si vuole abbonare o se si vuole sottoscrivere al feed. Se l’utente acconsente, il browser memorizza i contenuti del feed, che saranno poi consultabili dall’utente in genere tramite un menu a tendina o una nuova finestra dedicata. C’è di più: l’utente può decidere anche di ricaricare il feed nel browser se non vuole aspettare che il browser lo faccia in automatico alla prossima sessione di navigazione. In questo modo, l’utente è sempre aggiornato sui nuovi contenuti pubblicati sul sito.

Se il browser dell’utente non supporta nativamente RSS (come Internet Explorer 6), è sempre possibile far ricorso ad applicazioni di terze parti che svolgono in modo analogo le funzioni del browser poc’anzi citate. Anzi, spesso tali applicazioni (dette feed reader) dispongono di funzionalità molto più avanzate rispetto a quelle normalmente messe a disposizione da un browser tradizionale.

Definizione

Alla luce di quanto abbiamo visto in precedenza, possiamo definire RSS come segue: RSS (Really Simple Syndication) è un formato standard basato su XML che ha come scopo quello di facilitare la diffusione e la promozione dei contenuti di un sito web, nonché lo scambio e l’inclusione di tali contenuti da un sito all’altro. L’ultimo aspetto è facilitato enormemente dal fatto che, come vedremo con maggiori dettagli in seguito, RSS è di fatto XML, e dato che XML è un formato universale per lo scambio di dati, qualsiasi piattaforma o applicazione che comprende XML è in grado di comprendere RSS.

Uso di RSS sul web

Abbiamo già visto in parte alcuni degli usi possibili di RSS sul web. Vale la pena a questo punto fare delle ulteriori precisazioni e aggiunte:

  • RSS è XML

    Ciò significa che se si conosce già XML o anche (X)HTML, non ci saranno problemi ad usare in modo effettivo questo standard.

  • RSS come formato universale per la promozione dei contenuti

    RSS abbatte le barriere esistenti tra piattaforma e piattaforma, tra applicazione ed applicazione. RSS può essere utilizzzato su computer fissi, palmari, cellulari e più in generale su qualsiasi dispositivo che comprenda XML.

  • RSS come colonna del web semantico

    RSS è un formato di documento strutturato. Esattamente come XML, esso serve alla descrizione di dati (nello specifico dei contenuti dei nostri siti). Ciascun elemento di un documento RSS descrive una risorsa presente sul nostro sito (un link, un titolo, un articolo, ecc.) e la descrive in modo tale da renderla trovabile e facilmente identificabile sul web. Ciò significa che le nostre risorse possono essere più facilmente scambiabili con altri in un modo che sia gli esseri umani che le macchine riescono a comprendere.

Sempre nel 2005 assistiamo all’esplosione dei vari CMS destinati al blogging, come WordPress e Textpattern, che creano e aggiornano automaticamente i feed RSS e li gestiscono con estrema semplicità. L’esempio di questi CMS viene seguito a ruota da tutti gli applicativi Web che verranno, contribuendo enormemente all’affermazione di RSS sul Web. Da ultimo, anche i più recenti social network hanno destinato parte della loro implementazione alla creazione e gestione di documenti RSS, confermando quanto ormai questo standard sia divenuto parte integrante del Web che navighiamo tutti i giorni.

RSS è XML!

Cosa significa questo? Significa che i browser applicheranno tutte le regole sintattiche di XML durante la lettura e il rendering di un documento RSS. In pratica, a differenza del classico HTML:

  1. Il documento deve essere ben formato. Lasciare un tag aperto o non annidare correttamente i tag genererà un errore fatale nel parsing XML. Inoltre:
    • Le entità devono essere opportunamente codificate
    • Dato che la codifica predefinita di un documento XML è UTF-8, se si crea un feed RSS a partire da una fonte esterna (database, pagina Web, ecc.) bisognerà codificare i caratteri speciali presenti nella fonte esterna in UTF-8. Qualora ciò non dovesse essere fatto o qualora il browser non riconoscesse alcuni caratteri, verrà restituito un errore fatale XML.

Vediamo in dettaglio queste differenze.

Documento ben formato

Un documento XML ben formato deve avere obbligatoriamente almeno queste due parti:

  1. un prologo XML (< ?xml version="1.0" encoding="utf-8"?> ad esempio)
  2. un elemento radice

Ovviamente un documento RSS non sarà mai composto soltanto da queste due parti. Occorre quindi che tutti gli elementi siano opportunamente annidati. Per esempio, quello che segue è un frammento XML che genererà un errore fatale:

<elemento>
    <figlio>
</elemento>
    </figlio>

Invece, questa è la soluzione corretta:

<elemento>
    <figlio> </figlio>
</elemento>

Qualora fosse necessario inserire un elemento vuoto, lo si può fare nella forma abbreviata . Se non si inserisce lo slash finale prima della chiusura del tag di apertura, verrà generato un errore fatale nel parsing XML.

Inoltre tutti i valori degli attributi dovranno essere racchiusi tra virgolette. Così il seguente esempio è errato:

<elemento attributo=valore/>

mentre questo è corretto:

<elemento attributo="valore"/>

Codificare le entità

Altra caratteristica di un documento XML ben formato è il fatto che tutte le entità XML debbano essere necessariamente codificate. Tali entità hanno la stessa forma e sintassi delle tradizionali entità HTML. In XML, inoltre, i caratteri < , >, & devono sempre essere trasformati nelle entità &lt;, &gt;, &amp;. In caso contrario, verrà restituito un errore fatale.

Per quanto riguarda gli altri caratteri, è sempre opportuno trasformarli nelle corrispettive entità. Nel caso della lingua italiana, i caratteri accentati andrebbero trasformati in entità, anche se i browser di solito riconoscono tali caratteri senza restituire errori, fermo restando il fatto che ciò avviene quando vi è uniformità nella codifica del documento RSS e della fonte (vedi sotto).

Codifica e problemi annessi

La codifica di default di un documento RSS è UTF-8, anche se tale codifica può essere modificata in fase di pubblicazione. Come regola generale, la fonte da cui vengono tratti i contenuti del nostro feed dovrebbe avere sempre la stessa codifica del feed stesso. Infatti se nella fonte sono presenti dei caratteri codificati in modo diverso, all’atto della creazione del feed i browser potrebbero non essere in grado di riconoscere tali caratteri e quindi restituire un errore XML (carattere non valido). Occorre quindi sincronizzare la codifica della fonte dei contenuti (database, pagine Web) con la codifica del documento RSS, oppure convertire i caratteri nella codifica di destinazione all’atto della creazione del feed. Nell’Appendice vedremo un esempio concreto di tale conversione usando PHP. Come ulteriore approfondimento sulla codifica in generale, visitate il sito di Alan Wood all’indirizzo www.alanwood.net/unicode.

Definire la versione e i namespace più utilizzati

Definire la versione di RSS è semplicissimo. È infatti sufficiente aggiungere all’attributo version dell’elemento radice rss il valore desiderato, in questo modo:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

</rss>

Per quanto riguarda i namespace, un feed RSS non appartiene di default a nessun namespace identificato da un URI (appartiene quindi a quello che si dice un namespace vuoto). Tuttavia, gli elementi all’interno del feed possono appartenere ad altri namespace. Tecnicamente, possiamo avere per RSS due possibilità: 1) estensione modulare dei namespace e 2) inclusione.

Fin dal 2002, con l’avvento di XHTML, è stato possibile estendere RSS in modo modulare tramite il namespace XHTML, ossia http://www.w3.org/1999/xhtml. Un altro modo per ottenere lo stesso risultato è l’utilizzo del namespace Dublin Core (http://purl.org/dc/elements/1.1/).

Il validatore RSS accetta questi namespace, a patto che si mantenga una coerenza interna con tutti gli elementi del feed. Tuttavia, un feed RSS è perfettamente valido anche senza namespace, il che conferma il fatto che usarlo o meno resta una decisione puramente soggettiva.

Gli elementi di un documento RSS

Abbiamo già parlato dell’elemento radice rss. Passiamo ora agli altri elementi di un documento RSS, soffermandoci su quelli fondamentali per l’uso di un feed.

L’elemento channel

L’elemento channel definisce i nostri contenuti con maggiore precisione. Questo elemento ospita sia informazioni sul nostro sito che i contenuti veri e propri suddivisi per voci (in inglese, “item”). Riprendiamo quindi il codice già visto e aggiungiamo l’elemento in questione:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

<!-- Informazioni e contenuti qui -->

</channel>

</rss>

Ovviamente se carichiamo il documento in un browser vedremo solo una pagina bianca. Infatti non abbiamo specificato nessuna informazione per questo elemento, e quindi il browser mostrerà solo quello che c’è. Vediamo quindi di aggiungere informazioni al nostro feed.

L’elemento title

Ogni feed RSS deve avere un titolo. L’elemento title serve appunto a questo scopo all’interno di un elemento channel:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>

</channel>

</rss>

Ora il browser mostrerà il titolo del nostro feed. Ma non basta: occorre anche specificare l’indirizzo della nostra risorsa. Ecco come.

L’elemento link

Questo elemento accetta come valore un URL assoluto che definisce l’indirizzo web del nostro feed:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>
  <link>http://www.acme.com/news</link>

</channel>

</rss>

Non tutti i browser mostreranno a video l’indirizzo del nostro feed, ma in ogni caso si tratta di un elemento fondamentale per la struttura di un documento RSS.

L’elemento description

Questo elemento serve a far visualizzare una breve descrizione del nostro documento. Eccone l’uso:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>
  <link>http://www.acme.com/news</link>
  <description>Ultime news da ACME</description>

</channel>

</rss>

L’elemento language

Con questo elemento specifichiamo la lingua del nostro documento RSS:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>
  <link>http://www.acme.com/news</link>
  <description>Ultime news da ACME</description>
  <language>it</language>

</channel>

</rss>

Possiamo usare i medesimi valori usati per l’attributo lang (o xml:lang) in (X)HTML.

Gli element pubDate e lastBuildDate

Questi elementi indicano, rispettivamente, la data di pubblicazione e di ultima modifica del nostro feed. Sono fondamentali (ma non obbligatori) per l’aggiornamento dei contenuti da parte delle applicazioni che gestiscono i feed RSS:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>
  <link>http://www.acme.com/news</link>
  <description>Ultime news da ACME</description>
  <language>it</language>
  <pubDate>Sun, 7 Feb 2010 20:00:00 GMT</pubDate>
  <lastBuildDate>Sun, 7 Feb 2010 20:00:00 GMT</lastBuildDate>

</channel>

</rss>

Il formato della data deve essere quello indicato nell’esempio, compreso di fuso orario. Alcuni linguaggi (come PHP) dispongono già di funzioni in grado di generare le date nel formato RSS.

A questo punto abbiamo definito solo le caratteristiche generali del nostro documento RSS. Passiamo quindi ad analizzare l’elemento che di fatto andrà a contenere le risorse che vogliamo condividere con il nostro feed. Si tratta dell’elemento item e dei suoi discendenti.

L’elemento item

Possiamo avere più di un elemento item all’interno di un elemento channel. A sua volta, un elemento item può contenere gli stessi elementi visti per l’elemento channel. Per esempio:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">

<channel>

  <title>ACME News</title>
  <link>http://www.acme.com/news</link>
  <description>Ultime news da ACME</description>
  <language>it</language>
  <pubDate>Sun, 7 Feb 2010 20:00:00 GMT</pubDate>
  <lastBuildDate>Sun, 7 Feb 2010 20:00:00 GMT</lastBuildDate>

  <item>
    <title>Lorem ipsum</title>
    <link>http://www.acme.com/news/07/02/2010/lorem-ipsum</link>
    <description>Lorem quondam scripsit articulum de originibus librorum et ivit via sicut eius est mos, sed
     nescit quod meditavit nugarum totus in illis.
     </description>
     <pubDate>Sun, 7 Feb 2010 20:00:00 GMT</pubDate>
   </item>

</channel>

</rss>

Come si può notare, questo elemento condivide molti degli elementi già visti per channel. I browser useranno il link ed il titolo presenti per generare un’intestazione cliccabile che porterà l’utente direttamente sulla risorsa specificata. La descrizione e la data di pubblicazione aggiungeranno ulteriori informazioni. Anche se in teoria il numero di elementi item potrebbe continuare all’infinito, si consiglia di limitare tale numero a non più di 30. Per siti di grandi dimensioni, inoltre, è bene suddividere i feed per ciascuna sezione del sito, in modo da evitare un sovradimensionamento del feed stesso.

Semantica degli elementi RSS

title

Lo scopo di questo elemento è quello di assegnare un titolo alla risorsa specificata. Il titolo dovrebbe essere possibilmente descrittivo. In genere a questo elemento viene assegnato lo stesso valore del titolo della fonte del feed.

link

Questo elemento racchiude un URL assoluto che serve a rintracciare in modo univoco la risorsa linkata. I browser in genere lo associano all’elemento title per creare delle intestazioni cliccabili usate come rimando alla risorsa originale.

description

In questo elemento viene inserita una descrizione della risorsa collegata. In genere una prassi consolidata vuole che per l’elemento description all’interno di un elemento item si usi un estratto testuale della risorsa collegata. In realtà nulla vieta di creare una descrizione ad hoc da inserire nel feed.

language

La lingua usata nel feed viene definita da questo elemento. I valori dei codici linguistici sono i medesimi di quelli usati nei documenti HTML.

pubDate

Questo elemento contiene un’indicazione temporale sulla data di pubblicazione di una risorsa. Il formato della data segue la notazione convenzionale inglese. Tuttavia, i browser convertono tale formato nel formato locale all’atto della presentazione del documento all’utente.

lastBuildDate

Esattamente come pubDate, anche questo elemento contiene un’indicazione temporale (nello stesso formato del precedente elemento), ma stavolta riguardo la data dell’ultima modifica apportata alla risorsa. Si rivela molto importante per comunicare eventuali aggiornamenti alle applicazioni che gestiscono i feed (browser compresi).

RSS e HTML

Per definizione, RSS fa uso esclusivamente degli elementi presenti nella DTD dello standard. Una deviazione da questa norma è rappresentata dall’RSS misto, che inserisce anche elementi (X)HTML all’interno degli elementi standard RSS. Questa forma di RSS sfrutta una convenzione che tutti i lettori RSS hanno adottato fin da ora, ossia quella di interpretare una sequenza di caratteri del tipo &lt;elemento&gt;...&lt;/elemento&gt; come un elemento (X)HTML a cui poter successivamente applicare delle regole di formattazione predefinite. Esempio:

<description>
&amp;lt;p&amp;gt;One of the lessons I've learned in 47.4 years:
When someone accuses you of a
&amp;lt;a href=&amp;quot;http://www.dictionary.com/search?q=deceit&amp;quot;&amp;gt;deceit&amp;lt;/a&amp;gt;,
there's a very good chance the accuser practices that form of deceit, and a reasonable chance
that he or she is doing it as they point the finger. &amp;lt;/p&amp;gt;
</description>

In questo caso gli interpreti RSS riconosceranno che all’interno dell’elemento description esistono gli elementi p e a e li rappresenteranno di conseguenza. Ci teniamo a sottolineare che questa è una pura convenzione, perchè le specifiche XML affermano che le due sequenze di caratteri viste sopra devono essere interpretate semplicemente come caratteri, senza nessun trattamento speciale. Inoltre, gli interpreti RSS ignoreranno qualsiasi dichiarazione di stile CSS specificata per elementi (X)HTML inseriti nel modo visto sopra.

Infine, va ricordato che non tutti gli elementi presenti nella tradizionale DTD HTML 4.01 vengono riconosciuti, quindi occorre prestare molta attenzione se si vuole seguire un approccio di questo tipo.

RSS con elementi grafici

Esistono due modi per inserire degli elementi grafici in un documento RSS. Il primo, segue l’approccio “purista” visto nella sezione precedente ed utilizza l’elemento image allo scopo; il secondo, sfrutta il modello “misto” per inserire gli elementi grafici utilizzando la convenzione in uso tra gli interpreti RSS.

Per inserire un elemento grafico seguendo il primo approccio si può utilizzare l’elemento image. All’interno dell’elemento image, gli elementi url, title e link sono obbligatori. Il problema di questa soluzione è che allo stadio attuale pochissimi interpreti RSS visualizzano un elemento grafico inserito in questo modo, ossia il supporto a tale approccio è molto scarso.

Una soluzione alternativa consiste nell’adottare un approccio di tipo misto e usare un elemento img inserito come una sequenza di caratteri:

<description>
&amp;lt;img src=&amp;quot;http://dominio.it/immagine.jpg&amp;quot; alt=&amp;quot;Testo alternativo&amp;quot; /&amp;gt;
</description>

Questa soluzione funziona su tutti gli interpreti RSS, tuttavia ha un grosso inconveniente: non si possono assegnare stili all’immagine inserita in questo modo. Quindi, se volessimo far si che l’immagine compaia su un rigo a parte, dovremmo inserire un elemento br dopo l’immagine, invece che dichiarare display:block in un foglio di stile CSS.

Collegare un documento RSS alle pagine web

Un documento RSS viene collegato alle pagine web tramite l’elemento (X)HTML link:

<head>
<link rel="alternate" href="http://www.acme.com/news/feed" type="application/rss+xml" title="Feed RSS" />
</head>

Anche se il tipo di contenuto di un feed RSS dovrebbe essere application/rss+xml, le applicazioni che gestiscono RSS accettano anche il formato text/xml. Questo si rivela utile se i nostri feed vengono serviti come file statici (per esempio http://www.acme.com/news/feed.xml).