RSS
det äldre av de två XML-format som ett webbflöde skrivs i
Vad det är
RSS är ett XML-format för att publicera ett webbflöde: ett element channel som beskriver en
webbplats och rymmer en lista med element item, där var och en är en post med en länk, ett datum
och lite text, på en adress som flödesläsare hämtar med jämna mellanrum. Specifikationen skriver ut
namnet som Really Simple Syndication, många säger ”RSS-flöde” om ett flöde i vilket format som
helst, och RSS 1.0, ”RDF Site Summary”, är ett separat format byggt på RDF snarare än en tidigare
version av det som används i dag.
Formatet började hos Netscape, som publicerade RSS 0.90 i mars 1999 och 0.91 i juli samma år. UserLand Software publicerade en egen 0.91 i juni 2000, sedan 0.92 och, i augusti 2002, RSS 2.0. Berkman Klein Center vid Harvard Law School publicerade 2.0.1, skriven av Dave Winer, i juli 2003, och RSS Advisory Board har förvaltat texten sedan dess, under en Creative Commons-licens. Rådets färdplan säger att formatet i alla praktiska avseenden är fryst vid 2.0.1. Rådet har sedan dess publicerat revisioner av dokumentet, den aktuella i mars 2009, men nya behov möts av tillägg i egna XML-namnrymder snarare än av nya versioner av RSS.
Ett dokument är litet. Roten är ett element rss vars attribut version måste vara 2.0, och det
rymmer en enda channel. Kanalen behöver en title, en link och en description. Varje element
i en post är valfritt, så länge posten har åtminstone en titel eller en beskrivning. Allt annat,
från pubDate och guid till kanalens image och ttl, finns där när en utgivare vill ha det:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Example Notes</title>
<link>https://example.com/</link>
<description>Short notes on running servers.</description>
<item>
<title>Moving the database</title>
<link>https://example.com/notes/db-move/</link>
<guid isPermaLink="true">https://example.com/notes/db-move/</guid>
<pubDate>Sat, 17 Oct 2026 09:00:00 GMT</pubDate>
<description>Why the move took one evening.</description>
</item>
</channel>
</rss>
Varför det spelar roll
RSS är löst specificerat, och det är just lösheten som en utgivare behöver förstå. En posts
description kan innehålla ren text eller HTML som har escapats in i elementet, och ingenting i
filen säger vilket, så det är läsaren som avgör. Elementet guid är valfritt, så utan det får en
läsare själv räkna ut om en post är ny. Datum följer RFC 822, en standard för e-post från 1982, som
strängar som Sat, 17 Oct 2026 09:00:00 GMT med engelska namn på dagar och månader, och
specifikationen tillåter fortfarande ett tvåsiffrigt årtal. Dessutom saknar formatet ett sätt att
ange en bas-URL, så en relativ länk inne i en post har inget pålitligt att lösas upp mot.
Rådets svar är RSS Best Practices Profile, publicerad i oktober 2007: rekommendationer för dokument
som fungerar i det breda utbud av programvara som läser dem. Profilen ber om en guid på varje post
och om absoluta URL:er i länkar och beskrivningar. Den rapporterar att de enda datumformer som varje
testad aggregator klarade var angivna i universell tid, med GMT, +0000 eller -0000 på slutet.
Den dokumenterar också en atom:link med rel="self" som anger flödets egen adress. Ett flöde som
följer profilen lämnar mycket mindre åt läsarna att gissa.
Två tillägg står för det mesta som ett modernt flöde lägger till. atom:link lånar det elementet
från Atom. content:encoded, från en modul som först skrevs för RSS 1.0, rymmer en posts
fullständiga HTML. Profilen beskriver hur de två används tillsammans, med hela texten i
content:encoded och en kortare sammanfattning i description, och fann att sex av de åtta
aggregatorer som testades visade content:encoded och struntade i sammanfattningen när en post bar
båda. Elementet enclosure bifogar en mediefil till en post med tre obligatoriska attribut: filens
url, dess length i byte och dess MIME-type.
Att formatet är fryst är också en styrka. Ett format som inte har ändrats sedan 2003 är ett fast mål, och ett flöde som skrivs mot det i dag läses av programvara som skrevs mot samma text för flera år sedan. Atom täpper till de flesta av luckorna ovan genom sin specifikation, så skälet att också publicera RSS handlar om läsarna snarare än om stringens: vissa tar bara emot RSS, och en RSS-adress som delades ut för flera år sedan hämtas fortfarande.
Så ser det ut i praktiken
Den här webbplatsen publicerar RSS 2.0 på /index.xml, bredvid ett Atom-flöde och ett flöde i
formatet JSON Feed. Kolofonen förklarar varför det finns två XML-flöden: alla tre
bär hela texten, och det finns två XML-flöden i stället för ett eftersom vissa läsare bara tar emot
det ena av de två och man ”inte kan lita på att det är ett visst av dem”. Samma sida länkar
RSS-flödet till W3C Feed Validator, bredvid Atom-flödet, så att
vem som helst kan köra kontrollen utan att behöva ta webbplatsens ord för något.
Sidan om att läsa webbplatsen från en terminal behandlar flödena som data. Den säger att
portföljen publiceras i tre format, vart och ett med hela texten för varje post i stället för en
försmak, och hämtar RSS-flödet med bara curl:
curl -s https://engineer.company/index.xml
Var det går fel
Kanalens bild saknas, och validatorn invänder. En läsare visar ingen bild bredvid flödets namn,
och W3C:s tjänst varnar för bildformatet. RSS-elementet image är det striktaste bildelementet av
de tre flödesformaten: bara GIF, JPEG eller PNG, högst 144 pixlar brett och 400 högt. Ett
delningskort för sociala medier i WebP är fel fil för det. Den här webbplatsens RSS-mall låter i
stället image peka på webbplatsens ikon i PNG på 144 pixlar, och kommentaren bredvid noterar att
WebP-kortet hade gett varningen ImageUrlFormat, något som upptäcktes genom att validera igen efter
ändringen.
Poster sorteras i fel ordning, och ingenting rapporterar det. En läsare listar nya poster under
gamla, eller visar dem med fel datum. Datum i RSS är strängar, så ett datum i ISO 8601, en felstavad
layout eller ett dagnamn på ett annat språk ger fortfarande välformad XML, och bara läsarens
datumtolk märker något. I en Hugo-mall skriver metoden Format på ett datum ut engelska namn, medan
funktionen time.Format lokaliserar dem, och ett pubDate på svenska eller danska är inte ett
datum enligt RFC 822. Den här webbplatsen formaterar varje pubDate med metoden, utifrån en layout
som hålls i en enda partiell mall tillsammans med Atoms, och kommentaren där säger att ett stavfel i
någon av dem inte är ett byggfel utan ett flöde som tolkas och sorteras fel i någon annans läsare.
Ikoner i ett inlägg visas inte, och validatorn listar fel. Hela texten i content:encoded
lämnar sin sida, så allt som är beroende av sidan försvinner. En SVG-ikon som pekar in i en sprite
som definieras någon annanstans på sidan visar ingenting i en läsare, och W3C:s tjänst flaggar
själva svg. Därför får den här webbplatsens flöden sina rubriker utan varumärkets avdelare med
kugghjulet. Kommentaren i den mallen noterar att validatorn hade rapporterat tolv meddelanden om
Non-html tag: svg och sex klagomål på ett attribut role.
Länkar i ett inlägg leder ingenstans. En prenumerant följer en länk i en post och hamnar på en
sida som saknas, eller ingenstans alls. En rotrelativ länk som /notes/ fungerar på webbsidan
eftersom webbläsaren känner till sidans adress, men ett RSS-dokument kan inte ange en bas-URL.
Profilen säger att en beskrivning inte bör innehålla relativa URL:er och att en aggregator kan
försöka lösa upp en sådan mot kanalens link. En läsare som inte försöker lämnar länken trasig.
Skriv varje länk i ett flödes HTML som en absolut URL.
Två kategorier med samma ord ser ut som en. En post som har taggats i två vokabulärer visar en
term två gånger, eller så slår en läsare ihop två termer som betyder olika saker. RSS-elementet
category tar ett valfritt attribut domain som anger vilken vokabulär en term kommer från. Den
här webbplatsens RSS-mall skriver ut det på varje kategori, eftersom de två vokabulärernas
överlappande termer annars skulle läsas som dubbletter, som mallens kommentar säger.
Läs mer
- RSS 2.0 Specification — RSS Advisory Boards text för formatet, element för element, med färdplanen som förklarar det fryst.
- RSS Best Practices Profile — rådets rekommendationer och vad det fann när det testade verkliga aggregatorer.
- RSS History — varje version från Netscapes 0.90 till den aktuella texten, med datum och utgivare.
- RDF Site Summary (RSS) 1.0 — det separata, RDF-baserade formatet som delar namnet.
- RFC 822 — standarden för e-post från 1982 vars syntax för datum och tid RSS fortfarande använder.