# RSS

RSS (sigla di RDF Site Summary, spesso riportato come Really Simple Syndication o Rich Site Summary) è uno dei più popolari formati per la distribuzione di contenuti Web; è basato su XML, da cui ha ereditato la semplicità, l'estensibilità e la flessibilità. L'applicazione principale per cui è noto sono i flussi che permettono di essere aggiornati su nuovi articoli o commenti pubblicati nei siti di interesse senza doverli visitare manualmente a uno a uno.
RSS definisce una struttura adatta a contenere un insieme di notizie, ciascuna delle quali sarà composta da vari campi (nome autore, titolo, testo, riassunto, ...). Quando si pubblicano delle notizie in formato RSS, la struttura viene aggiornata con i nuovi dati; visto che il formato è predefinito, un qualunque lettore RSS potrà presentare in una maniera omogenea notizie provenienti dalle fonti più diverse.

## Sviluppo

Fu lanciato per la prima volta da Netscape Communications. Si trattava di un formato derivato da RDF (un linguaggio generico per rappresentare informazioni su Web) per la gestione dei contenuti del portale web My Netscape Network Archiviato il 28 agosto 2019 in Internet Archive.: il formato permetteva la visualizzazione sul portale di headline e link relativi a notizie pubblicate su altri siti e rese disponibili attenendosi a specifiche ben precise. Fu subito un grande successo: in breve, centinaia di fornitori di contenuti aderirono all'iniziativa e il portale My Netscape poté beneficiare di una vasta raccolta di notizie a disposizione dei propri utenti registrati.
Nel frattempo, lo stesso formato (e le sue variazioni successive) fu adottato progressivamente dalla comunità dei blogger: i post di un blog potevano essere facilmente esportati in RSS, in modo da essere resi disponibili a servizi di raccolta di contenuti. La popolarità dei blog è forse una delle ragioni principali del successo di RSS: migliaia di weblog iniziarono a produrre contenuti in RSS e iniziarono a proliferare siti che raccoglievano una selezione di post dai blog più seguiti (i cosiddetti blog aggregator) e programmi per fruire i contenuti di un blog direttamente sul proprio desktop o su altri dispositivi (lettori RSS).
Attualmente RSS è lo standard de facto per l'esportazione di contenuti Web. I principali siti di informazione, i quotidiani online, i fornitori di contenuti, i blog più popolari: tutti sembrano aver adottato il formato RSS. Gli utenti possono oggi accedere a migliaia di flussi RSS: alcuni siti (directory) raccolgono i riferimenti agli innumerevoli flussi RSS disponibili sul Web.
L'utente finale infatti sfrutta la tecnologia RSS attraverso due macro-tipologie di software. L'una, quella dei lettori di Feed RSS, l'altra quella degli aggregatori, che - appunto - aggregano attraverso algoritmi specifici le notizie provenienti dalle più disparate fonti RSS.

## Un formato, tanti "dialetti"

Il formato inizialmente adottato da Netscape era una semplificazione del primo draft proposto dal W3C. Netscape denominò la versione 0.9: mentre la proposta del W3C era del tutto conforme a RDF, la versione di Netscape ne eliminava gli aspetti più complessi, ed era totalmente slegato da esso.
Nel 2000 il W3C ha pubblicato la prima versione ufficiale di RSS (versione 1.0): la versione era conforme a RDF, integrava la possibilità di estendere il formato con nuovi moduli e il supporto ai namespace XML. Quasi contemporaneamente, Dave Winer (CEO di Userland Software, società produttrice del popolare blog publisherRadio Userland), ha distribuito una versione di RSS, figlia del formato utilizzato da Netscape, denominata 0.91. A causa della popolarità del formato adottato da Netscape prima, e da Userland poi, il formato 0.91 ha iniziato a convivere accanto a quello proposto dal W3C. I due formati sono incompatibili (sebbene i principali feed reader siano in grado di interpretarli entrambi correttamente).
Il formato 0.91 si è evoluto perdendo alcune limitazioni nella versione 0.92 ed è stato ulteriormente perfezionato nella versione 2.0 (distribuito da Userland nel 2002). Di fatto, abbiamo a che fare con almeno tre differenti "dialetti":
* RSS 0.91: il più vecchio tra gli standard oggi in uso, diretta evoluzione del formato usato originariamente da Netscape. In alcuni casi si è preferito usare il successivo RSS 0.92;
* RSS 2.0: distribuito da Userland nel 2002, è l'evoluzione del formato 0.92, di cui eredita la semplicità, ma a cui aggiunge il supporto per moduli aggiuntivi;
* RSS 1.0: è il formato ufficiale del W3C, conforme ad RDF, estensibile e modulare.
Chi produce contenuti da distribuire in formato RSS è così costretto a scegliere quale versione utilizzare o, come avviene nella maggior parte dei casi, a esportare i propri contenuti in tutti i formati disponibili.
Nonostante le differenti implementazioni delle diverse versioni, i documenti RSS condividono tutti la stessa struttura di base, che prevede:
* un elemento <channel>, che contiene le informazioni sulla fonte dei contenuti (nel caso di un quotidiano online potrebbe contenere il nome della testata, la data di pubblicazione, informazioni sul copyright, ecc.)
* una serie di elementi <item>, ognuno dei quali corrisponde ad un singolo elemento di contenuto (ad es. l'articolo di un giornale) e ne presenta tutte le informazioni (titolo, testo completo, nome dell'autore, ecc.)

### RSS 0.92

RSS 0.92 è stato sviluppato da Dave Winer (di Userland Software) nel 2000. Si tratta di un'espansione del formato originale RSS 0.91 che aggiunge alcuni elementi addizionali e rimuove alcuni limiti per gli elementi imposti nella versione precedente.
Gli elementi addizionali permettono l'implementazione di funzionalità che consentono l'iscrizione al feed (per ricevere notifiche automatiche quando il feed viene aggiornato).

### RSS 2.0

RSS 2.0 è un'evoluzione del formato 0.92 (e, a detta dell'autore Dave Winer, non subirà ulteriori variazioni future). In particolare sono presenti alcuni utili elementi aggiuntivi (<comments>, <author>, <ttl>, <guid>) ed è pienamente supportata la modularizzazione (e la conseguente espandibilità) attraverso namespace XML.
Ogni documento RSS 0.92 è anche un documento RSS 2.0 valido.

### RSS 1.0

La versione 1.0 di RSS, sviluppata dal World Wide Web Consortium, è basata sul formato RDF, un metalinguaggio - a sua volta derivato da XML - utilizzato per la descrizione e la distribuzione di contenuti generici.
RSS 1.0 è progettato per essere estensibile attraverso i namespace XML: è infatti possibile estendere RSS 1.0 attraverso l'uso di moduli senza dover modificare il “cuore” del formato. È questa la differenza fondamentale con gli altri “dialetti” di RSS.

### Storia di RSS e della sua compatibilità

Nel maggio del 1999 la Netscape commercializzò RSS 0.90. RSS 0.90 appare così:
Esempio 1. RSS 0.90
Nel giugno 1999, Netscape commercializzò RSS 0.91. RSS 0.91 fu intenzionalmente incompatibile con RSS 0.90. Netscape eliminò la sintassi RDF compatibile e riprogettò RSS per essere puro XML. Aggiunsero anche un DTD che definiva diverse entità permesse.
RSS 0.91 di Netscape appare così: Esempio 2. Netscape RSS 0.91
Nel giugno del 2000, Userland prese la specifica RSS di Netscape, rimosse le dichiarazioni di copyright della Netscape inserendone di proprie, fece dei cambiamenti incompatibili, chiamò questa RSS 0.91, sostenendo che fosse compatibile con l'RSS 0.90 di Netscape.
l'RSS 0.91 di Userland appare così: Esempio 3. RSS 0.91 di Userland
RSS 0.91 di Userland è incompatibile con quello di Netscape per diverse cose (in questo elenco sarà sottinteso "RSS 0.91", indicando le 2 diverse specifiche con l'azienda che le ha prodotte):
* Netscape dice che <hour>, dentro <skipHours> va da 0 a 23. Userland invece va da 1 a 24.
* Netscape contiene l'elemento "textinput". Userland contiene invece l'elemento "textInput". Essendo XML case-sensitive, questi sono elementi nettamente diversi.
* Netscape usa un DTD che permette di usare 96 entità: &nbsp;, ¡, ¢, £, ¤, ¥, ¦, §, ¨, ©, ª, «, ¬, -, ®, ¯, °, ±, ², ³, ´, µ, ¶, ·, ¸, ¹, º, », ¼, ½, ¾, ¿, À, Á, Â, Ã, Ä, Å, Æ, Ç, È, É, Ê, Ë, Ì, Í, Î, Ï, Ð, Ñ, Ò, Ó, Ô, Õ, Ö, ×, Ø, Ù, Ú, Û, Ü, Ý, Þ, ß, à, á, â, ã, ä, å, æ, ç, è, é, ê, ë, ì, í, î, ï, ð, ñ, ò, ó, ô, õ, ö, ÷, ø, ù, ú, û, ü, ý, þ, e ÿ. Userland elimina questo DTD, così da rendere invalide queste entità e non permettere il loro uso.
Nel dicembre 2000, il RSS-DEV Working Group, gruppo del W3C, commercializzò la specifica 1.0, dichiarando la compatibilità con RSS 0.90. Di fatto era completamente incompatibile e non condivideva alcun elemento con RSS 0.90, usando un XML namespace completamente diverso. RSS 1.0 fu intenzionalmente incompatibile con RSS 0.91 (sia quello di Netscape che quello di Userland) per via della sua sintassi RDF, che faceva parte del progetto originale dell'RSS prima delle modifiche di Netscape.
RSS 1.0 appare così: Esempio 4. RSS 1.0
Più tardi, nello stesso dicembre del 2000, Userland commercializzò RSS 0.92, dichiarandolo compatibile con la loro versione 0.91.
Esempio 5. RSS 0.92
RSS 0.92 è incompatibile con RSS 0.91 di Netscape per gli stessi motivi per cui lo era la versione 0.91. Ma questa è anche incompatibile con la stessa 0.91 di Userland per via del formato del contenuto del tag <description> che cambia da plain text a HTML. L'esempio di RSS 0.92 (esempio 5) sembra uguale all'esempio di RSS 0.91 di Userland (l'esempio 3) tranne la versione, ma il significato della descrizione è diverso, per avere semanticamente lo stesso risultato bisogna convertire il testo così:
Esempio 6. RSS 0.92, propriamente convertito
Nell'aprile del 2001, Userland commercializzò una "bozza" (un draft) di RSS 0.93, in cui era dichiarata la compatibilità sia con la versione 0.92 che con la loro versione 0.91. Nonostante non sia stata mai distribuita per uso pubblico la versione RSS 0.93 è attualmente usata da aziende del calibro di Disney. RSS 0.93 mantiene la stessa struttura di RSS 0.92, e per questo è incompatibile con le versioni precedenti alla 0.92. Aggiunse infine l'elemento opzionale <expirationDate>.
RSS 0.93 appare così:
Esempio 7. RSS 0.93
Nell'agosto del 2002, Userland commercializzò una bozza di RSS 0.94 (e la 0.93 che fine fece?), dichiaratamente compatibile RSS 0.93, RSS 0.92, la loro versione 0.91. Anche se non fu mai distribuita per uso pubblico, la versione RSS 0.94 è usata da diversi siti e aggregatori.
RSS 0.94 è incompatibile con tutte le versioni precedenti RSS per questi motivi:
* con RSS 0.93 per l'eliminazione dell'elemento <expirationDate>, elemento introdotto proprio nella versione 0.93.
* RSS 0.94 introduce un cambiamento significativo al formato: all'elemento <description> è stato aggiunto l'attributo "type", col quale indicare il tipo MIME della descrizione. Il tipo di default è “text/html”, ciò significa che se non specificato, RSS 0.94 si comporta come RSS 0.92, ed è quindi incompatibile con le versioni a questa precedente. Se invece è specificato, i client compatibili 0.93 non riconoscendo il nuovo attributo interpreteranno male il contenuto della descrizione, considerandolo HTML.
Per circostanze storiche, non esistono copie ufficiali della specifica RSS 0.94. La specifica sopra citata si riferisce alla versione 2.0, di cui parleremo sotto.
RSS 0.94 appare così: Esempio 8. RSS 0.94
Nel settembre del 2002, Userland commercializzò RSS 2.0 (partendo dalla bozza della 0.94), dichiarando retrocompatibilità con RSS 0.94, RSS 0.93, RSS 0.92, e la loro versione di RSS 0.91. RSS 2.0 è in realtà incompatibile con tutte le versioni precedenti per questo:
* RSS 2.0 elimina l'elemento <rating>, permesso invece in RSS 0.91 di Netscape e di Userland, RSS 0.92, RSS 0.93, and RSS 0.94.
* RSS 2.0 elimina l'attributo "type" introdotto RSS 0.94, perché considerato un errore che creava confusione. La specifica RSS 2.0 dice che <description> "può contenere o meno" HTML, ma non c'è modo per l'utente di distinguere con un'applicazione l'HTML dal testo puro (specialmente in testi che citano html). Di fatto, l'eliminazione di questo attributo crea infinitamente più confusione per un programma di quanto facesse la versione 0.94.
RSS 2.0 appare così: Esempio 9. RSS 2.0
Nel novembre 2002, Userland commercializzò RSS 2.01, compatibile, secondo loro, con RSS 2.0, RSS 0.94, RSS 0.93, RSS 0.92, e la loro versione di RSS 0.91. RSS 2.01 cambiò la semantica dell'elemento <skipHours>. In RSS 0.94, RSS 0.93, RSS 0.92, e RSS 0.91 di Userland, le ore andavano da 1 a 24. In RSS 2.01, come nelle versioni di Netscape le ore andavano da 0 a 23. RSS 2.01 condivide il modello interno di RSS 2.0, il che vuol dire che è incompatibile con RSS 0.94 e tutte le versioni di RSS prima della 0.92.
RSS 2.01 appare così: Esempio 10. RSS 2.0, post-11/11/2002 (RSS 2.01)
La specifica RSS 2.01 è stata pubblicata al posto della 2.0; non esistono copie ufficiali della specifica 2.0. Come puoi vedere dall'esempio 10, RSS 2.01 usa lo stesso "2.0" come numero della versione, come RSS 2.0, rendendo impossibile la distinzione da parte di un programma. Tutti i flussi RSS 2.0 sono da considerarsi feed RSS 2.01, nonostante l'incompatibilità tra RSS 2.01 e RSS 2.0. Questo significa che, pubblicando un feed RSS 2.0 valido il 10 novembre contenente <hour>24</hour>, potresti svegliarti l'11 e scoprire che il tuo flusso è diventato invalido mentre dormivi.
Nel gennaio 2003, Userland cambiò la specifica, già pubblicata, RSS 2.01, per riaggiungere l'elemento <rating>. Il formato restò invariato, il che vuol dire che RSS 2.01 è ancora incompatibile con RSS 0.94 e tutte le versioni RSS prima della 0.92.
RSS 2.01 appare così: Esempio 11. RSS 2.0, post-1/21/2003 (RSS 2.01 rev 2)
Ancora una volta, la nuova specifica 2.01 fu pubblicata al posto della vecchia, senza nessuna copia ufficiale della versione precedente. Né la versione di revisione ("2.01″) né la versione del formato ("2.0″) cambiarono, rendendo impossibile ancora una volta distinguere tra i due formati. Questo vuol dire che se un flusso contiene l'elemento <rating> e si dichiara come RSS 2.0, è impossibile sapere se è valido senza sapere quando è stato creato.
Ci sono in tutto 9 versioni di RSS, tutte incompatibili per qualche motivo con una parte delle altre. RSS 0.90 è incompatibile con RSS 0.91 di Netscape, RSS 0.91 di Netscape è incompatibile con RSS 0.91 di Userland, RSS 0.91 di Netscape è incompatibile con RSS 1.0, quella del W3C, RSS 0.91 di Userland è incompatibile con la loro stessa 0.92, RSS 0.92 è incompatibile con la 0.93, 0.93 con la 0.94, 0.94 con la 2.0, e la 2.0 è incompatibile con sé stessa.