Hopp til innhold

RSS

det eldste av de to XML-formatene en feed skrives i

Hva det er

RSS er et XML-format for å publisere en feed: ett channel-element som beskriver et nettsted og holder en liste med item-elementer, hvert av dem et innlegg med en lenke, en dato og litt tekst, på en adresse som feedlesere henter med jevne mellomrom. Spesifikasjonen skriver navnet ut som Really Simple Syndication, mange kaller enhver feed en RSS-feed uansett format, og RSS 1.0, RDF Site Summary, er et eget format bygd på RDF og ikke en tidligere versjon av det som brukes i dag.

Formatet begynte hos Netscape, som publiserte RSS 0.90 i mars 1999 og 0.91 i juli samme år. UserLand Software publiserte sin egen 0.91 i juni 2000, deretter 0.92 og, i august 2002, RSS 2.0. Berkman Klein Center ved Harvard Law School publiserte 2.0.1, skrevet av Dave Winer, i juli 2003, og RSS Advisory Board har forvaltet teksten siden, under en Creative Commons-lisens. Veikartet (roadmap) til styret sier at formatet for alle praktiske formål er frosset ved 2.0.1. Styret har publisert revisjoner av selve dokumentet siden, den gjeldende i mars 2009, men nye behov dekkes av utvidelser i egne XML-navnerom og ikke av nye versjoner av RSS.

Et dokument er lite. Roten er et rss-element med et version-attributt som må være 2.0, og det holder én enkelt channel. Kanalen må ha title, link og description. Hvert element i en oppføring er valgfritt, så lenge oppføringen har minst en tittel eller en beskrivelse. Alt annet, fra pubDate og guid til kanalens image og ttl, er der når en utgiver vil 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>

Hvorfor det er viktig

RSS er løst, og det er løsheten en utgiver må forstå. Elementet description i en oppføring kan holde ren tekst eller HTML som er escapet inn i elementet, og filen sier ikke hvilket av dem, så feedleseren avgjør. guid er valgfritt, så uten den må en feedleser selv finne ut om en oppføring er ny. Datoer følger RFC 822, en standard for e-post fra 1982, som strenger som Sat, 17 Oct 2026 09:00:00 GMT med engelske navn på dager og måneder, og spesifikasjonen tillater fortsatt et årstall med to sifre. Formatet har heller ikke noen måte å oppgi en base-URL på, så en relativ lenke inne i en oppføring har ikke noe pålitelig å bli løst opp mot.

Svaret fra styret er RSS Best Practices Profile, publisert i oktober 2007: anbefalinger for dokumenter som virker på tvers av det brede utvalget av programvare som leser dem. Profilen ber om en guid på hver oppføring og om absolutte URL-er i lenker og beskrivelser. Den melder at de eneste datoformene hver aggregator den testet, håndterte, var i Universal Time, med GMT, +0000 eller -0000 på slutten. Den dokumenterer også en atom:link med rel="self" som navngir feedens egen adresse. En feed skrevet etter profilen overlater langt mindre til gjetning hos leserne sine.

To utvidelser bærer det meste av det en moderne feed legger til. atom:link låner det elementet fra Atom. content:encoded, fra en modul som først ble skrevet for RSS 1.0, holder hele HTML-en til en oppføring. Profilen beskriver å bruke begge sammen, hele teksten i content:encoded og et kortere sammendrag i description, og fant at når en oppføring hadde begge, viste seks av de åtte aggregatorene den testet content:encoded og overså sammendraget. Elementet enclosure knytter en mediefil til en oppføring med tre påkrevde attributter: adressen i url, lengden i bytes i length og MIME-typen i type.

At formatet er frosset, er også en styrke. Et format som ikke har endret seg siden 2003, er et fast mål, og en feed skrevet etter det i dag blir lest av programvare skrevet mot den samme teksten for mange år siden. Atom tetter de fleste hullene over i selve spesifikasjonen, så argumentet for å publisere RSS i tillegg handler om leserne og ikke om stringens: noen feedlesere tar bare imot RSS, og en RSS-adresse som ble delt ut for mange år siden, blir fortsatt hentet.

Slik ser det ut i praksis

Dette nettstedet publiserer RSS 2.0 på /index.xml, og den norske utgaven på /nb/index.xml, ved siden av en Atom-feed og en JSON Feed. Kolofonen forklarer hvorfor det finnes to XML-feeder: alle tre har hele teksten, og det er to XML-feeder i stedet for én fordi noen feedlesere bare tar imot ett av de to formatene, og det er ikke til å stole på hvilket. Den samme siden lenker RSS-feeden til W3C Feed Validator, ved siden av Atom-feeden, slik at hvem som helst kan kjøre sjekken selv i stedet for å ta nettstedet på ordet.

Den andre siden, om å lese nettstedet fra en terminal, behandler feedene som data. Den sier at porteføljen publiseres i tre formater, hvert med hele teksten i hvert punkt og ikke bare en smakebit, og henter RSS-feeden med ikke mer enn curl:

curl -s https://engineer.company/index.xml

Den norske utgaven av den siden henter /nb/index.xml på samme måte, ved siden av Atom-feeden og JSON Feed.

Hvor det går galt

Bildet til kanalen mangler, og validatoren protesterer. En feedleser viser ikke noe bilde ved siden av navnet på feeden, og W3C-tjenesten advarer om bildeformatet. Elementet image i RSS er det strengeste bildeelementet i de tre feedformatene: bare GIF, JPEG eller PNG, høyst 144 piksler bredt og 400 høyt. Et delingskort for sosiale medier i WebP er feil fil for det. RSS-malen på dette nettstedet lar i stedet image peke på PNG-ikonet på 144 piksler, og kommentaren ved siden av noterer at WebP-kortet hadde gitt en ImageUrlFormat-advarsel, som ble fanget opp da feeden ble sjekket på nytt med validatoren etter endringen.

Oppføringer sorteres i feil rekkefølge, og ingenting melder fra. En feedleser lister nye oppføringer under gamle, eller viser dem med feil dato. Datoer i RSS er strenger, så en ISO 8601-dato, et feilstavet datomønster eller et dagsnavn på et annet språk gir fortsatt velformet XML, og bare datoparseren i feedleseren merker det. I Hugo skriver malmetoden Format på en dato engelske navn, mens funksjonen time.Format lokaliserer dem; en pubDate på dansk er ikke en RFC 822-dato. Dette nettstedet formaterer hver pubDate med metoden, etter et datomønster som ligger i én delmal (partial) sammen med mønsteret til Atom, og kommentaren der sier at en skrivefeil i ett av dem ikke gir et feilet bygg, men en feed som parses og sorteres feil i feedleseren til en helt annen.

Ikonene i et innlegg blir borte, og validatoren lister feil. Hele teksten i content:encoded forlater siden sin, så alt som er avhengig av siden, mangler. Et SVG-ikon som peker inn i en sprite definert et annet sted på siden, tegner ikke noe i en feedleser, og W3C-tjenesten flagger selve svg. Av den grunn får feedene på dette nettstedet overskriftene sine uten skillelinjen med tannhjulet fra merkevaren; kommentaren i den malen noterer at validatoren hadde rapportert tolv Non-html tag: svg-meldinger og seks klager på et role-attributt.

Lenker inne i et innlegg fører ingen steder. En abonnent følger en lenke i en oppføring og havner på en side som ikke finnes, eller ikke noe sted i det hele tatt. En rotrelativ lenke som /notes/ virker på nettsiden fordi nettleseren kjenner adressen til siden, men et RSS-dokument kan ikke oppgi en base-URL. Profilen sier at en beskrivelse ikke bør inneholde relative URL-er, og at en aggregator kan prøve å løse en slik opp mot kanalens link; en feedleser som ikke prøver, lar lenken være brutt. Skriv hver lenke i HTML-en til en feed som en absolutt URL.

To kategorier med samme ord ser ut som én. En oppføring merket i to vokabularer viser et begrep to ganger, eller en feedleser slår sammen to begreper som betyr forskjellige ting. Elementet category i RSS tar et valgfritt domain-attributt som navngir vokabularet et begrep kommer fra. RSS-malen på dette nettstedet skriver det på hver kategori, fordi, som kommentaren sier, de overlappende begrepene i de to vokabularene ellers ville sett ut som duplikater.

Les mer

  • RSS 2.0 Specification — teksten til RSS Advisory Board, element for element, med veikartet som erklærer formatet frosset.
  • RSS Best Practices Profile — anbefalingene fra styret, og hva det fant da det testet ekte aggregatorer.
  • RSS History — hver versjon fra 0.90 hos Netscape til den gjeldende teksten, med datoer og utgivere.
  • RDF Site Summary (RSS) 1.0 — det separate, RDF-baserte formatet som deler navnet.
  • RFC 822 — standarden for e-post fra 1982, med syntaksen for dato og tid som RSS fortsatt bruker.

Ordliste