RSS
det ældste af de to XML-formater, et feed skrives i
Hvad det er
RSS er et XML-format til at udgive et feed: ét channel-element, der beskriver
et site og rummer en liste af item-elementer, hvert et indlæg med et link, en
dato og noget tekst, på en adresse, som feedlæsere henter med faste mellemrum.
Specifikationen skriver navnet ud som Really Simple Syndication, mange siger
»RSS-feed« om et feed i et hvilket som helst format, og RSS 1.0, »RDF Site
Summary«, er et selvstændigt format bygget på RDF og ikke en tidligere version
af det, der bruges i dag.
Formatet begyndte hos Netscape, som udgav RSS 0.90 i marts 1999 og 0.91 i juli samme år. UserLand udgav sin egen 0.91 i juni 2000, derefter 0.92 og i august 2002 RSS 2.0. Berkman Klein Center ved Harvard Law School udgav 2.0.1, skrevet af Dave Winer, i juli 2003, og siden har RSS Advisory Board passet teksten under en Creative Commons-licens. Udvalgets køreplan siger, at formatet i al praktisk forstand er frosset ved 2.0.1. Udvalget har udgivet reviderede udgaver af dokumentet siden, den gældende i marts 2009, men nye behov dækkes af udvidelser i deres egne XML-navnerum og ikke af nye versioner af RSS.
Et dokument er lille. Roden er et rss-element, hvis version-attribut skal
være 2.0, og som rummer en enkelt channel. Kanalen skal have en title, et
link og en description. Alle elementer i et indlæg er valgfrie, så længe
indlægget har mindst en titel eller en beskrivelse. Alt andet, fra pubDate og
guid til kanalens image og ttl, er der, når udgiveren vil have det:
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Eksempelnoter</title>
<link>https://example.com/</link>
<description>Korte noter om at drive servere.</description>
<item>
<title>Databasen flytter</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>Hvorfor flytningen tog én aften.</description>
</item>
</channel>
</rss>
Hvorfor det betyder noget
RSS er løst, og løsheden er det, en udgiver skal forstå. Et indlægs
description kan rumme ren tekst eller HTML, der er escapet ind i elementet, og
intet i filen siger hvilket, så læseren afgør det. guid er valgfri, så uden
den må en læser selv regne ud, om et indlæg er nyt. Datoer følger RFC 822, en
e-mailstandard fra 1982, som strenge som Sat, 17 Oct 2026 09:00:00 GMT med
engelske navne på dage og måneder, og specifikationen tillader stadig et
tocifret årstal. Og formatet har ingen måde at erklære en basis-URL på, så et
relativt link inde i et indlæg har intet pålideligt at blive opløst imod.
Udvalgets svar er RSS Best Practices Profile, udgivet i oktober 2007:
anbefalinger til dokumenter, der virker på tværs af den brede vifte af software,
der læser dem. Profilen beder om en guid på hvert indlæg og om absolutte
URL’er i links og beskrivelser. Den fortæller, at de eneste datoformer, som alle
de testede aggregatorer håndterede, var i Universal Time og endte på GMT,
+0000 eller -0000. Den beskriver også et atom:link med rel="self", der
angiver feedets egen adresse. Et feed, der er skrevet efter profilen, lader sine
læsere gætte langt mindre.
To udvidelser bærer det meste af det, et moderne feed lægger til. atom:link
låner elementet fra Atom. content:encoded, fra et modul, der oprindelig blev
skrevet til RSS 1.0, rummer et indlægs fulde HTML. Profilen beskriver at bruge
begge sammen, den fulde tekst i content:encoded og et kortere resumé i
description, og fandt, at når et indlæg havde begge, viste seks af de otte
testede aggregatorer content:encoded og så bort fra resuméet.
enclosure-elementet hæfter en mediefil til et indlæg med tre krævede
attributter: filens url, dens length i bytes og dens MIME-type.
Frosset er også en styrke. Et format, der har stået stille siden 2003, er et fast mål, og et feed, der skrives efter det i dag, læses af software, der blev skrevet efter samme tekst for mange år siden. Atom lukker de fleste af hullerne ovenfor i selve specifikationen, så argumentet for også at udgive RSS handler om læserne og ikke om stringens: nogle tager kun RSS, og en RSS-adresse, der blev delt ud for år tilbage, bliver stadig hentet.
Sådan ser det ud i praksis
Dette site udgiver RSS 2.0 på /da/index.xml ved siden af et Atom-feed og et
JSON Feed. Kolofonen forklarer, hvorfor der er to XML-feeds:
alle tre har den fulde tekst, og der er to XML-feeds og ikke ét, fordi nogle
læsere kun tager det ene af de to, og det er ikke til at forudsige hvilket.
Samme side linker RSS-feedet til W3C’s feed-validator ved siden af Atom-feedet,
så enhver kan køre tjekket selv uden at tage sitets ord for noget.
Siden om at læse sitet fra en terminal behandler feedsene som data.
Den siger, at porteføljen udgives i tre formater, som hver har den fulde tekst
af hvert punkt og ikke bare en smagsprøve, og henter RSS-feedet med intet andet
end curl:
curl -s https://engineer.company/da/index.xml
Hvor det går galt
Kanalens billede mangler, og validatoren protesterer. En læser viser intet
billede ved feedets navn, og W3C’s tjeneste advarer om billedformatet. RSS'
image-element er det strengeste billedelement i de tre feedformater: kun GIF,
JPEG eller PNG, højst 144 pixel bredt og 400 højt. Et delingskort til sociale
medier i WebP er den forkerte fil til det. Dette sites RSS-skabelon peger i
stedet image på sitets PNG-ikon på 144 pixel, og kommentaren ved siden af
noterer, at WebP-kortet havde udløst en ImageUrlFormat-advarsel, som blev
fanget ved at validere igen efter ændringen.
Indlæg står i forkert rækkefølge, og intet melder det. En læser placerer nye
indlæg under gamle eller viser dem med forkert dato. RSS-datoer er strenge, så
en dato i ISO 8601, et layout med en stavefejl eller et dagnavn på et andet
sprog giver stadig velformet XML, og kun læserens datoparser opdager det. I Hugo
skriver en skabelons Format-metode på en dato engelske navne, mens funktionen
time.Format lokaliserer dem, og en pubDate med danske dag- og månedsnavne er
ikke en RFC 822-dato. Dette site formaterer hver pubDate med metoden ud fra et
layout, der ligger i én partial-skabelon sammen med Atoms, og kommentaren dér
siger, at en tastefejl i et af dem ikke er en buildfejl, men et feed, der parses
og sorteres forkert i en andens læser.
Ikoner i et indlæg tegner ingenting, og validatoren lister fejl. Den fulde
tekst i content:encoded forlader sin side, så alt, der afhænger af siden,
forsvinder. Et SVG-ikon, der peger ind i en sprite, som er defineret et andet
sted på siden, tegner ingenting i en læser, og W3C’s tjeneste markerer selve
svg-elementet. Dette sites feeds får deres overskrifter uden brandets tandhjul
som skillelinje af den grund; kommentaren i den skabelon noterer, at validatoren
havde rapporteret tolv Non-html tag: svg-meddelelser og seks klager over en
role-attribut.
Links inde i et indlæg fører ingen steder hen. En abonnent følger et link i
et indlæg og lander på en side, der mangler, eller på ingenting. Et rodrelativt
link som /da/notes/ virker på websiden, fordi browseren kender sidens adresse,
men et RSS-dokument kan ikke erklære en basis-URL. Profilen siger, at en
beskrivelse ikke bør indeholde relative URL’er, og at en aggregator kan forsøge
at opløse en imod kanalens link; en læser, der lader være, efterlader linket i
stykker. Skriv hvert link i et feeds HTML som en absolut URL.
To kategorier med samme ord ligner én. Et indlæg, der er mærket i to
vokabularer, viser et begreb to gange, eller en læser slår to begreber sammen,
der betyder noget forskelligt. RSS’ category-element har en valgfri
domain-attribut, der navngiver det vokabular, et begreb kommer fra. Dette
sites RSS-skabelon skriver den på hver kategori, fordi de to vokabularers
overlappende begreber ellers ville ligne dubletter, som kommentaren siger.
Læs mere
- RSS 2.0 Specification — RSS Advisory Boards tekst til formatet, element for element, med køreplanen, der erklærer det frosset.
- RSS Best Practices Profile — udvalgets anbefalinger og det, det fandt, da det testede rigtige aggregatorer.
- RSS History — hver version fra Netscapes 0.90 til den gældende tekst, med datoer og udgivere.
- RDF Site Summary (RSS) 1.0 — det selvstændige RDF-baserede format, der deler navnet.
- RFC 822 — e-mailstandarden fra 1982, hvis syntaks for dato og klokkeslæt RSS stadig bruger.