Hoppa till innehållet

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.

Ordlista