RSS - Nachrichtendienste für Jedermann

Transcription

RSS - Nachrichtendienste für Jedermann
RSS - Nachrichtendienste für Jedermann
Seminararbeit im Seminar
Neue Technologien in Internet und WWW
Wintersemester 2003/04
Universität Jena
vorgelegt von
Christoph Langguth
chr [email protected]
Januar 2004
Abstract
RSS (Rich Site Summary) wurde ursprünglich als Datenaustauschformat entwickelt, das es ermöglicht, auf einfache Weise Teile einer Webseite (z.B. Schlagzeilen) in andere Webseiten einzubinden. Durch Weiterentwicklungen wurden
die Anwendungsmöglichkeiten ausgedehnt und das Format flexibler gestaltet,
so daß RSS heute als leichtgewichtiges Format zur Verbreitung verschiedenster
Informationen bei einer immer weiter wachsenden Nutzergemeinde Verwendung
findet – angefangen bei Nachrichtenschlagzeilen, über Zusammenfassungen von
Weblog-Einträgen und Verfolgung der Änderungen in diesen, bis hin zur Überwachung der Funktionstüchtigkeit von Servern.
Die vorliegende Arbeit beschreibt die Ursprünge und die Entwicklung von RSS.
Dabei werden die Spezifikationen der verschiedenen Versionen von RSS dargestellt und diskutiert. Anschließend folgt ein Überblick über die Verwendung
von RSS aus Nutzersicht und die verwendeten Mechanismen, die Publish &
Subscribe – d.h. das Abonnieren“ von Informationen – ermöglichen.
”
Inhaltsverzeichnis
1 Einleitung
1
2 Allgemeines zu RSS
1
2.1
RSS: ein XML-basiertes Datenformat . . . . . . . . . . . . . . . .
2
2.2
Übertragung von RSS-Dateien . . . . . . . . . . . . . . . . . . .
3
2.3
Wichtige Begriffe . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.4
Entwicklung von RSS . . . . . . . . . . . . . . . . . . . . . . . .
4
3 RSS 0.9
3.1
Struktur von RSS 0.9
4 RSS 0.91
5
. . . . . . . . . . . . . . . . . . . . . . . .
7
10
4.1
Struktur von RSS 0.91 . . . . . . . . . . . . . . . . . . . . . . . . 10
4.2
Neue Elemente in RSS 0.91 . . . . . . . . . . . . . . . . . . . . . 10
5 RSS 0.92
13
5.1
Struktur von RSS 0.92 . . . . . . . . . . . . . . . . . . . . . . . . 14
5.2
Neue Elemente in RSS 0.92 . . . . . . . . . . . . . . . . . . . . . 14
5.3
Weitere Änderungen in RSS 0.92 . . . . . . . . . . . . . . . . . . 16
6 RSS 1.0
17
6.1
Struktur von RSS 1.0
6.2
Module in RSS 1.0 . . . . . . . . . . . . . . . . . . . . . . . . . . 18
7 RSS 2.0
. . . . . . . . . . . . . . . . . . . . . . . . 17
21
7.1
Struktur von RSS 2.0
7.2
Änderungen in RSS 2.0 . . . . . . . . . . . . . . . . . . . . . . . 22
8 Clients für RSS
. . . . . . . . . . . . . . . . . . . . . . . . 21
22
8.1
Aggregatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
8.2
Desktop-Clients . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
9 Publish & Subscribe
25
9.1
Publish & Subscribe mit RSS 0.92 und 2.0 . . . . . . . . . . . . . 25
9.2
Publish & Subscribe mit RSS 1.0 . . . . . . . . . . . . . . . . . . 26
9.3
Bemerkungen zu Publish & Subscribe . . . . . . . . . . . . . . . 26
10 Zusammenfassung
27
A Glossar
28
B Wichtige Internetadressen
29
C Abkürzungen und Akronyme
29
Literaturverzeichnis
30
Index
31
1
Einleitung
Das Internet hat sich zu einer der wichtigsten Informationsquellen entwickelt
– nahezu zu jedem beliebigen Thema gibt es jetzt schon eine Fülle von Informationen im WWW. Gleichzeitig wächst das Netz der Netze“ unaufhaltsam,
”
täglich entstehen mehrere Millionen neue Webseiten. Es ist unmöglich, zu einem gesuchten Thema tatsächlich alle vorhandenen Informationen zu finden,
geschweige denn sie alle zu verarbeiten.
Doch selbst wenn man viele relevante Informationsquellen schon gefunden hat,
ist es quasi unmöglich, diese alle im Auge zu behalten, speziell wenn es sich um
sich schnell ändernde Daten, wie z.B. Nachrichten, handelt: zu viel Zeit würde
mit dem Aufrufen der verschiedenen Seiten und der Suche nach Änderungen
(also z.B. neuen Nachrichten) vergeudet, zu wenig Zeit bliebe, um sich mit dem
eigentlichen Inhalt zu befassen.
Dieses Problem wurde 1999 zum ersten Mal von Netscape adressiert: indem die
Firma auf ihrem Kundenportal My Netscape Network“ personalisierbare Sei”
ten einführte, die vom Nutzer angegebene Inhalte von anderen Webseiten anzeigen konnten, gab sie dem Nutzer die Möglichkeit, an einer zentralen Anlaufstelle
viele Informationen verschiedener Anbieter zusammenzufassen. Natürlich mußten sich die Fremdanbieter“ an ein bestimmtes, von Netscape vorgegebenes
”
Datenformat halten, um die Einbindung ihrer angebotenen Informationen in
das Portal zu ermöglichen. Dieses Format wurde von Netscape RSS (Rich Site
Summary) genannt und trug in seiner urprünglichen Form die Versionsnummer
0.9.
Kapitel 2 gibt zunächst einen Überblick über RSS und erläutert die zugrundeliegenden Protokolle und Datenformate sowie die geschichtliche Entwicklung
von RSS. Die Kapitel 3 bis 7 beschäftigen sich dann genauer mit den verschiedenen veröffentlichten Versionsspezifikationen. In Kapitel 8 wird näher auf
die Benutzung von RSS als Anwender bzw. Programmierer eingegangen, bevor in Kapitel 9 auf die Schwierigkeiten eingegangen wird, die entstehen, wenn
bestmögliche Aktualität bei gleichzeitig geringem Netzverkehr gefordert wird.
Kapitel 10 schließlich gibt eine kurze Zusammenfassung und zeigt aktuelle Entwicklungen auf.
2
Allgemeines zu RSS
In diesem Kapitel werden einige allgemeine Eigenschaften des Datenformats
beschrieben, die für alle Versionen von RSS gelten. Es wird auf das Datenformat
selbst, auf dessen Ursprünge und auf die Übertragung der Daten eingegangen.
Desweiteren werden die unterschiedlichen Philosophien der Entwickler von RSS
aufgezeigt, die zu Inkompatibilitäten zwischen den verschiedenen Versionen und
zu verschiedenen Auslegungen des Akronyms“ RSS geführt haben.
”
1
2.1
RSS: ein XML-basiertes Datenformat
Die ursprüngliche Version von RSS wurde 1999 entwickelt, mit dem Ziel, strukturierte Daten zwischen verschiedenen Computern – die unter Umständen auf
verschiedenen Betriebssystemen liefen – austauschen zu können. Zu diesem Zeitpunkt existierte bereits ein Datenformat, mit dem sich äußerst detaillierte Informationen über Dokumente darstellen lassen: RDF (Resource Description Framework). Das hehre Ziel der RDF-Entwickler ist das Semantic Web, in dem
das komplette Netz semantisch erfaßt wäre, so daß tatsächlich der Sinn eines
jeden verfügbaren Dokuments aus dessen Beschreibung abzulesen wäre. RDF
selbst ging 1997 aus dem seit 1995 von Ramanathan V. Guha entwickelten
MCF (Meta Content Framework) hervor; zu diesem Zeitpunkt wurde MCF als
eines der ersten Datenformate überhaupt als XML-Anwendung implementiert
(XML: Extensible Markup Language).
XML ist eine Art Meta-Beschreibungssprache; es lassen sich prinzipiell fast
beliebig komplexe auf XML basierende Datenformate definieren. Im folgenden
werden einige Punkte aufgezählt, die XML heute so beliebt machen (und die
auch damals wohl den Ausschlag dafür gaben, RDF als XML-Applikation zu
implementieren):
• XML definiert keine starre Menge von verwendbaren Elementen, vielmehr
kann diese Menge beliebig definiert werden
• mit XML lassen sich auch sehr komplexe Datenstrukturen darstellen, da
ein XML-Dokument einen Baum darstellt
• XML ist plattformunabhängig, d.h. XML-Dokumente können auf den verschiedensten Betriebssystemen verarbeitet werden
• um XML verarbeiten zu können, benötigt man im Prinzip nur einen XMLParser1 und Informationen über den logischen Aufbau des zu verarbeitenden Dokuments
• XML-Dokumente sind sowohl für Maschinen als auch (relativ problemlos)
für Menschen lesbar
Dadurch, daß die erste Version von RSS an RDF angelehnt war, wurde das
Format also quasi automatisch“ als XML-Anwendung spezifiziert. Damit ein”
her gehen für Entwickler, die mit RSS arbeiten wollen, alle Annehmlichkeiten, die mit XML verbunden sind: man kann Programme, die RSS erzeugen
(Server) bzw. verarbeiten (Clients) praktisch in jeder beliebigen Programmmiersprache ohne großen Aufwand erstellen, da mittlerweile für alle Sprachen
XML-Werkzeuge existieren.
Natürlich genügt es nicht, RSS nur verarbeiten zu können – da es sich hier per
definitionem um Daten handelt, die zwischen verschiedenen Maschinen über ein
1
ein XML-Parser ist eine Software, die die Struktur eines XML-Dokuments verarbeiten
kann. Solche Software gibt es mittlerweile für alle wichtigen Programmiersprachen und Betriebssysteme.
2
Netzwerk fließen, müssen die Programme auch das Versenden bzw. Empfangen
der Daten bewerkstelligen. Auch hier haben sich die Entwickler entschieden, auf
einfach zu verwendende (und bewährte) Übertragungswege zurückzugreifen.
2.2
Übertragung von RSS-Dateien
Der ursprünglich einzige Einsatzzweck von RSS war es, (Teile von) Informationen einer Webseite anderen Seiten zur Verfügung zu stellen. Da alle Seiten
im WWW von Webservern zur Verfügung gestellt werden und diese beliebige
Daten mittels HTTP an die Clients senden können, bot es sich an, auch für das
Bereitstellen von RSS-Dokumenten auf die bewährten Techniken zurückzugreifen – zumal ja XML-Dokumente auch nur Textdokumente sind. RSS-Dateien
werden also ganz normal“ vom Anbieter auf einem Webserver bereitgestellt.
”
Um dem Empfänger mitzuteilen, um welchen Dokumenttyp es sich bei dem
zurückgelieferten Dokument handelt, senden Webserver einen sogenannten Content-Type im Header2 mit. Der empfohlene Content-Type für RSS ist application/xml+rdf. Es wird außerdem empfohlen, als Dateiendung für RSSDateien .xml oder .rdf zu verwenden. Diese Vorgaben sind allerdings nur als
Empfehlung zu werten, da keines der aktuellen Client-Programme ein Problem
mit einem anderen Content-Type (etwa text/xml) oder Endungen (wie .pl
oder .php, welche auf serverseitige Skripte hinweisen) haben dürfte.
2.3
Wichtige Begriffe
Der vom Anbieter im RSS-Format bereitgestellte Inhalt wird als (RSS-)Feed
bezeichnet. Zu unterschiedlichen Zeitpunkten können unter der Adresse, unter der der Feed zu finden ist, durchaus verschiedene Dokumente bereitgestellt
werden (da sich ja der Inhalt der Dokumente ändern kann), trotzdem werden
die Begriffe RSS-Feed und RSS-Dokument weitgehend synonym verwendet, da
aus dem Kontext meist ersichtlich ist, ob es sich um das Konzept oder um eine
konkrete Ausprägung handelt.
Ein RSS-Feed enthält genau einen Channel – analog zum Fernsehen, in dem
auf jeder Frequenz auch nur ein Sender ausgestrahlt wird.
Ein Item stellt eine logische Einheit dar, die konzeptuell zum Channel gehört3 .
Jedes Item enthält Informationen zu einer Ressource (bei Nachrichten-Feeds
etwa zu einem bestimmten Artikel, bei Weblogs4 zu einem Eintrag etc.).
Eine Ressource ist ein abstraktes Konzept für Irgendetwas, das eindeutig iden”
tifiziert werden kann“. Die Identifizierung erfolgt dabei über URI’s (URI: Uniform Resource Identifier). In den meisten Fällen ist ein URI ein URL (Uniform
2
Ein Header (deutsch etwa: Nachrichtenkopf) enthält Daten, die vom Server vor den eigentlichen Nutzdaten gesendet werden und die Informationen über die Nutzdaten enthalten,
wie etwa die Dokumentlänge, das Verfallsdatum“ oder eben den Dokumenttyp.
”
3
Diese konzeptuelle Zugehörigkeit ist nicht in allen Versionen aus der Struktur des RSSDokuments ersichtlich, insbesondere nicht in der Version 0.9 (siehe Kapitel 3).
4
Ein Weblog ist eine Art Internet-Tagebuch“.
”
3
Resource Locator), d.h. eine Internet-Adresse“, unter der das entsprechende
”
Objekt (Dokument, Bild, Webseite) gefunden werden kann5 .
2.4
Entwicklung von RSS
Obwohl RSS ein noch relativ junges Dokumentformat ist, hat es eine recht
bewegte Geschichte hinter sich: im Laufe der Entwicklung von RSS entstanden mehrere zueinander inkompatible Versionen, und auch die Bedeutung der
Abkürzung“ RSS wurde mehrfach umdefiniert. Auslöser für diese Entwicklung
”
waren Meinungsverschiedenheiten der Entwickler: auf der einen Seite stand Dave Winer, der einen möglichst einfachen Standard präferierte, auf der anderen
Seite die Entwickler der rss-dev-Mailingliste, die die Möglichkeiten von RDF
ausschöpfen wollten. Im folgenden werden die verschiedenen Standards in chronologischer Reihenfolge ihrer Veröffentlichung dargestellt:
• RSS 0.9 (1999): die erste Version von RSS, entwickelt von Netscape.
Diese Version war ursprünglich komplett RDF-basiert; da einige Entwickler jedoch glaubten, daß das komplette RDF-Datenmodell für den Endbenutzer zu kompliziert wäre, wurden Teile davon gestrichen – mit dem
Resultat, daß die dadurch entstandene Kompromißlösung weder so einfach war, wie sie es hätte sein können, noch gültiges RDF. Diese Version
wurde ursprünglich Rich Site Summary genannt.
• RSS 0.91 (Juni 2000): Weiterentwicklung von Userland (Dave Winer).
In Version 0.91 wurde die RDF-Funktionalität komplett entfernt. Dadurch
wurde der Aufbau der Datei intern logischer gestaltet und Inkompatibilitäten zu richtigem“ RDF vermieden. Allerdings waren Dateien dieser
”
Version nicht mehr mit der Version 0.9 abwärtskompatibel. In dieser Version wurde die Abkürzung RSS umgedeutet als Really Simple Syndication.
• RSS 1.0 (Dezember 2000): Entwicklung der rss-dev-Mailingliste.
Diese Version unterstützte Module, XML-Namespaces und implementierte ein komplettes RDF-Datenmodell. Damit ist diese Version näher an der
ursprünglichen Version 0.9 anzusiedeln, behob aber deren Fehler“, indem
”
das Datenformat tatsächlich RDF-konform war. Die Version 1.0 war somit auch inkompatibel zu Version 0.91, RSS wurde hier als Abkürzung
von RDF Site Summary verstanden.
• RSS 0.92 (Dezember 2000): Weiterentwicklung von Version 0.91.
Version 0.91 fügte ihrer Vorgängerversion 0.91 zahlreiche Elemente hinzu
und hob einige von deren Beschränkungen auf. Die Spezifikation sah jedoch (nach wie vor) weder ein RDF-Datenmodell noch die in Version 1.0
verwendeten Module oder Namespaces vor. Sie wurde gewissermaßen als
RDF-freie Alternative zu RSS 1.0 angeboten.
5
Ein URI muß nicht unbedingt ein gültiger URL sein, es kann auch z.B. eine Mail-Adresse
(als Konzept für eine Person) oder eine beliebige Zeichenkette sein, die das Objekt eineindeutig
identifiziert.
4
Version
0.9
0.91
1.0
0.92
2.0
Erscheinungsdatum
1999
06/2000
12/2000
12/2000
08/2002
RDF-basiert?
ja
nein
ja
nein
nein
RDF-kompatibel?
nein
nein
ja
nein
nein
Module?
nein
nein
ja
nein
ja
Tabelle 1: Überblick über die verschiedenen RSS-Versionen
• RSS 0.93 (Mitte 2002): auf RSS 0.92 basierende Weiterentwicklung.
Diese von Dave Winer entwickelte Version hat nie offiziell das Licht der
Welt erblickt, sämtliche in ihr enthaltenen Änderungen gegenüber der
Vorgängerversion wurden in Version 0.94 übernommen.
• RSS 0.94/2.0 (August 2002): Weiterentwicklung von RSS 0.92.
In dieser auf RSS 0.92 basierenden Version wurde die 0.92-Spezifikation
erneut um neue Elemente erweitert; gleichzeitig wurde die Unterstützung
von XML-Namespace und Modulen (die allerdings inkompatibel zu den
in Version 1.0 verwendeten Modulen sind) eingeführt. Die ursprüngliche
Versionsnummer 0.94 wurde bald in 2.0 geändert und die Entwicklung als
frozen“ (eingefroren) deklariert – auf diesem Entwicklungszweig von RSS
”
sind also keine weiteren Neuerungen zu erwarten. RSS 2.0 ist wie seine
Vorgängerversionen (0.9x) nicht RDF-kompatibel.
Diese doch relativ konfuse Entwicklungsgeschichte von RSS wird in zwei recht
amüsanten Aussagen von an der Entwicklung beteiligten scherzhaft aufgegriffen.
In der Spezifikation von RSS 0.91 findet sich folgender Satz von Dave Winer:
There is no consensus on what RSS stands for, so it’s not an
”
acronym, it’s a name. Later versions of this spec may say it’s an
acronym, and hopefully this won’t break too many applications.“
Der Streit um das richtige“ Format fand seine Krönung in einem Beitrag in der
”
rss-dev-Mailingliste, in dem vorgeschlagen wurde, die RSS 4.0-Spezifikation
durch Ausdruckstanz zu definieren6 [Ham03].
Tabelle 1 zeigt eine Zusammenfassung der verschiedenen Versionen von RSS.
3
RSS 0.9
Die erste Spezifikation von RSS, veröffentlicht im Jahre 1999 von der Firma
Netscape, hatte einen einzigen Verwendungszweck: Teile des Inhalts einer Webseite in einem RSS-Feed zur Verfügung zu stellen, so daß diese auf einer anderen Webseite – namentlich: auf Netscapes Portalseite My Netscape Network“,
”
6
Eventuelle Informationen über RSS 3.0 und 4.0 sind also als Scherze aufzufassen.
5
damals zu erreichen unter http://my.netscape.com – angezeigt werden konnten. Jeder Nutzer, der bei diesem Portal angemeldet war, konnte die für ihn
angezeigten Seiten personalisieren, indem er (mehrere) Channel unterschiedlicher Anbieter abonnierte. Netscape zeigte die Informationen aus den gewählten
Feeds dann auf der Benutzerseite in einem einheitlichen Design an, indem die
Inhalte der RSS-Feeds in HTML konvertiert und in die Netscape-Seite eingebunden wurden.
Der Grund für diese Entwicklung war, daß sich Netscape dadurch längere Verweilzeiten auf seinen Seiten erhoffte. Aber nicht nur Netscape konnte von einem
Einbinden von Fremdinhalten auf ihren Webseiten profitieren, vielmehr bot diese Strategie Vorteile für alle Beteiligten:
• Endanwender: profitiert von der Verfügbarkeit verschiedenster Informationen aus unterschiedlichen Quellen an einem einzigen Anlaufpunkt.
• Netscape: profitiert unmittelbar dadurch, daß ihre Seite im Wert für den
Benutzer durch die zusätzlichen Informationen steigt; daraus folgt eine
längere Verweildauer auf der Seite und somit höhere Einnahmen durch
Werbung von Dritten.
• Feed-Anbieter: profitiert von der größeren Verbreitung seiner Informationen und kann dadurch möglicherweise mehr Besucher auf seiner eigenen
Webpräsenz verzeichnen.
Um einen Besucher darauf hinzuweisen, daß seine Webseite einen Feed bereitstellte, der im Netscape-Portal nutzbar war, konnte der Drittanbieter auf seinen
Seiten eine kleine Grafik einbinden, die es dem Nutzer ermöglichte, bei einem
Klick darauf den Channel automatisch zu abonnieren. Abbildung 1 zeigt diese
Grafik und beispielhaft das Aussehen eines Feeds im Browser des Anwenders
(Quelle: [RSS09]).
Abbildung 1: Add to My Netscape“-Grafik, Beispiel-Feed
”
6
rdf:RDF
channel
textinput
image
item
title
title
title
title
description
description
url
link
link
name
link
link
Abbildung 2: Struktur von RSS 0.9
3.1
Struktur von RSS 0.9
Ein Dokument im RSS-0.9-Format ist relativ einfach aufgebaut. Abb. 2 zeigt,
wie ein solches Dokument strukturiert ist. Das Wurzelelement ist, angelehnt an
die RDF-Spezifikation, ein rdf:RDF-Element7 .
Das Wurzelelement rdf:RDF kann vier verschiedene Elementtypen beinhalten:
channel, image, textinput und item.
• channel (obligatorisch, 1)
In jedem RSS-0.9-Dokument muß genau ein Channel definiert werden
– dies geschieht über das Element channel. Weitere Eigenschaften des
Channels werden in dessen Kindelementen festgelegt:
– title (obligatorisch, 1)
Dieses Element definiert den Titel bzw. Namen des Channels. Der
Titel darf aus maximal 40 Zeichen bestehen. Dieser Titel wird dem
Anwender als Überschrift“ des Channels angezeigt.
”
– description (obligatorisch, 1)
Das description-Element sollte eine etwas ausführlichere Beschreibung des Channels enthalten. Diese Beschreibung darf maximal 500
Zeichen lang sein.
– link (obligatorisch, 1)
In diesem Element findet sich ein URL, der auf die Webseite des FeedAnbieters verweist. Die maximale Länge des URL ist 500 Zeichen.
• image (optional, höchstens 1)
Dieses Element weist darauf hin, daß zu dem Feed ein Bild bereitgestellt
wurde, welches dem Anwender (z.B. neben dem Channel-Titel oder statt7
Damit diese Benennung sinnvoll ist, muß der Namespace rdf in der Datei mit Verweis auf
die RDF-DTD eingebunden werden (siehe dazu Abb. 3).
7
dessen) angezeigt werden kann. Das image-Element hat folgende Kindelemente:
– title (obligatorisch, 1)
Dieses Element wurde in der Spezifikation verwendet, um das altAttribut des img-Tags in HTML festzulegen (also den Text, den der
Anwender zu sehen bekam, wenn sein Browser keine Bilder anzeigte).
Die maximale Länge des Inhalts wurde auf 40 Zeichen festgelegt.
– url (obligatorisch, 1)
URL zum darzustellenden Bild. Das Bild muß 88x31 Pixel groß sein
(Breite x Höhe). Die maximale Länge des URL ist 500 Zeichen.
– link (obligatorisch, 1)
Auch in diesem Feld muß ein URL stehen, der auf die Webseite des
Feed-Anbieters verweist. Der URL darf höchstens 500 Zeichen lang
sein.
• textinput (optional, höchstens 1)
Der Sinn des textinput-Element ist nicht völlig klar definiert, es wurden
allenfalls Aussagen gemacht, wofür es verwendet werden kann. Wenn ein
solches Element im Feed existiert, dann soll dem Nutzer ein Eingabefeld
zur Verfügung gestellt werden, in das er Text eingeben und diesen Text
dann an einen URL senden kann. Sinnvolle Möglichkeiten für den Einsatz
dieses Elements würden zum Beispiel Suchfunktionen auf der Seite des
Feed-Anbieters oder Feedback zu diesem darstellen. Für dieses Element
sind folgende Kindelemente definiert:
– title (obligatorisch, 1)
Der Titel des textinput-Elements, z.B. Feedback senden“. Dieser
”
wurde vermutlich als Text für den Button, der zum Absenden des
Formulars diente, verwendet und durfte maximal 40 Zeichen lang
sein.
– description (obligatorisch, 1)
Die Beschreibung des Textfeldes, das zur Eingabe dient (maximal
100 Zeichen).
– link (obligatorisch, 1)
Dieses Element enthält den URL, an den die vom Benutzer eingegebenen Daten gesendet werden. Von Netscape wurde nur die GETMethode zur Übergabe von Daten unterstützt8 . Der URL darf maximal 500 Zeichen lang sein.
– name (obligatorisch, 1)
Hier wird der Name des Elements definiert, unter dem die Daten vom
Nutzer an den im link-Element angegebenen URL gesendet werden.
Der Name darf höchstens 500 Zeichen lang sein.
8
Es gibt zwei Methoden, um vom Nutzer eingegebene Daten an einen Webserver zu senden:
GET und POST. Einzelheiten dazu finden sich in der HTTP-Spezifikation.
8
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://my.netscape.com/rdf/simple/0.9/">
<channel>
<title>Mozilla Dot Org</title>
<link>http://www.mozilla.org</link>
<description>the Mozilla Organization web site</description>
</channel>
<image>
<title>Mozilla</title>
<url>http://www.mozilla.org/images/moz.gif</url>
<link>http://www.mozilla.org</link>
</image>
<item>
<title>New Status Updates</title>
<link>http://www.mozilla.org/status/</link>
</item>
<item>
<title>Bugzilla Reorganized</title>
<link>http://www.mozilla.org/bugs/</link>
</item>
<item>
<title>Mozilla Party, 2.0!</title>
<link>http://www.mozilla.org/party/1999/</link>
</item>
<item>
<title>Unix Platform Parity</title>
<link>http://www.mozilla.org/build/unix.html</link>
</item>
<item>
<title>NPL 1.0M published</title>
<link>http://www.mozilla.org/NPL/NPL-1.0M.html</link>
</item>
</rdf:RDF>
Abbildung 3: Beispieldokument RSS 0.9
• item (obligatorisch, 1 bis 15)
Ein Channel muß mindestens ein Item enthalten, maximal sind 15 Items
erlaubt. Jedes Item stellt dabei eine bestimmte Information – im allgemeinen eine Schlagzeile – dar und hat zwei Kindelemente:
– title (obligatorisch, 1)
Der Titel (die Überschrift) des Items. Dieser Text wird dem Anwender angezeigt und darf bis zu 100 Zeichen lang sein.
– link (obligatorisch, 1)
Hier wird der URL eingetragen, auf den das Item verlinkt wird und
zu dem der Nutzer gelangt, wenn er das Item auswählt. Der URL
darf maximal 500 Zeichen enthalten.
Abb. 3 zeigt ein einfaches Beispiel für RSS 0.9 (Quelle: [RSS09]).
Diese erste Version von RSS war auf ihren ganz speziellen Einsatzzweck maßgeschneidert. Dadurch ergab sich ein sehr einfaches Dateiformat, welches jedoch
9
einige Beschränkungen (z.B. hinsichtlich der Länge und Anzahl der Elemente)
aufwies. Da sich die Möglichkeiten von RSS auch wesentlich vielseitiger nutzen
lassen, z.B. auch mit eigenen Programmen, die Nachrichten-Feeds verarbeiten
können, erwiesen sich diese Beschränkungen bald als ärgerlich. Die Nachfolgerversion, RSS 0.91, sollte RSS in vieler Hinsicht verbessern.
4
RSS 0.91
RSS 0.91, in das Ideen von RSS 0.9 und aus dem von Dave Winer entwickelten Format namens ScriptingNews 2.0b1 einflossen, wurde der Öffentlichkeit
im Juni 2000 präsentiert. Es sollte einerseits einige Beschränkungen von RSS
0.9 aufheben und dieses andererseits um neue Funktionalitäten erweitern. Insbesondere werden mehrere neue Elemente definiert, die Informationen über den
Feed enthalten, sogenannte Metadaten.
RSS 0.91 verzichtet komplett auf ein RDF-Datenmodell. Diese Entscheidung
fiel deshalb, weil RSS 0.9 zwar auf RDF basierte, die Dateien jedoch keine
korrekten RDF-Dateien waren9 . Der Verzicht auf RDF brachte eine Umstrukturierung des Aufbaus der Datei mit sich– dadurch war das neue Format nicht
abwärtskompatibel10 .
4.1
Struktur von RSS 0.91
Abbildung 4 zeigt den Aufbau eines RSS-0.91-Dokuments. Änderungen bzw.
Neuerungen gegenüber RSS 0.9 sind farblich markiert. Abbildung 5 zeigt ein
Beispieldokument (Quelle: [Ham03], leicht modifiziert).
In Version 0.91 wurde das Wurzelelement rdf:RDF durch das Element rss (welches das Attribut version mit dem Inhalt 0.91 haben muß) ersetzt, und alle anderen Elemente wurden zu Kindelementen von channel – dadurch spiegelt sich
in der Struktur des Dokuments besser wider, daß die Items logisch zum Channel gehören. Weiterhin wurde der in Version 0.9 noch vorhandene (Standard-)
XML-Namespace für RSS entfernt.
4.2
Neue Elemente in RSS 0.91
In der Version 0.91 wurden RSS mehrere neue Elemente hinzugefügt.
• channel: dem channel-Element wurden folgende neuen Elemente hinzugefügt, die Metadaten über den Channel enthalten:
– language (obligatorisch, 1):
die Sprache, in der die Items des Feeds verfaßt sind, z.B. en oder de.
9
Es wurde argumentiert, daß lieber gar kein RDF-Datenmodell verwendet werden sollte
als ein inkorrektes.
10
Für die Implementierung von RSS-Anwendungen stellt diese Inkompatibilität jedoch kein
großes Problem dar.
10
rss
version=0.91
channel
title
textinput
image
item
description
title
title
title
link
description
url
link
language
name
link
description
copyright
link
width
rating
height
docs
description
webMaster
skipDays
day
pubDate
managingEditor
skipHours
lastBuildDate
hour
Abbildung 4: Struktur von RSS 0.91
– copyright (optional, höchstens 1):
ein Copyright-Hinweis zum Inhalt des Channels (max. 100 Zeichen).
– managingEditor (optional, höchstens 1):
die Email-Adresse des Verantwortlichen für den Inhalt des Channels
(höchstens 100 Zeichen). Das empfohlene Format ist
[email protected] (Vorname Nachname).
– webMaster (optional, höchstens 1):
die Email-Adresse des für den Feed verantwortlichen Webmasters
(maximal 100 Zeichen).
– rating (optional, höchstens 1):
die PICS-Bewertung des Feeds.
– pubDate (optional, höchstens 1):
das Veröffentlichungsdatum des Inhalts des Channels. Das Datum
muß in dem im RFC 822 definierten Format vorliegen. [. . . ] the
”
New York Times publishes on a daily basis, the publication date
flips once every 24 hours. That’s when the pubDate of the channel
changes.“ [RSS091]
– lastBuildDate (optional, höchstens 1):
das Datum, an dem sich der Inhalt des Channels zum letzten Mal
geändert hat, im im RFC 822 definierten Format.
– docs (optional, höchstens 1):
URL zu einer Seite, die das Format der Datei erklärt (maximal 500
Zeichen). Dort sollte sich die Spezifikation von RSS 0.91 befinden.
– skipDays (optional, max. 7) und skipHours (optional, max. 24):
diese Elemente sollen den Zugriff auf den Feed reglementieren, d.h.
Zeiträume anzugeben, in denen der Feed nicht abgerufen werden
11
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="0.91">
<channel>
<title>RSS0.91 Example</title>
<link>http://www.exampleurl.com/example/index.html</link>
<description>This is an example RSS0.91 feed</description>
<language>en-gb</language>
<copyright>Copyright 2002, Oreilly and Associates.</copyright>
<managingEditor>[email protected]</managingEditor>
<webMaster>[email protected]</webMaster>
<rating></rating>
<pubDate>03 Apr 02 1500 GMT</pubDate>
<lastBuildDate>03 Apr 02 1500 GMT</lastBuildDate>
<docs>http://backend.userland.com/rss091</docs>
<skipDays>
<day>Monday</day>
</skipDays>
<skipHours>
<hour>20</hour>
</skipHours>
<image>
<title>RSS0.91 Example</title>
<url>http://www.exampleurl.com/example/images/logo.gif</url>
<link>http://www.exampleurl.com/example/index.html</link>
<width>88</width>
<height>31</height>
<description>Computer Books, Conferences, Online Publishing</description>
</image>
<textInput>
<title>Search</title>
<description>Search our website</description>
<name>searchstring</name>
<link>http://www.exampleurl.com/example/search.pl</link>
</textInput>
<item>
<title>The First Item</title>
<link>http://www.exampleurl.com/example/001.html</link>
<description>This is the first item.</description>
</item>
<item>
<title>The Second Item</title>
<link>http://www.exampleurl.com/example/002.html</link>
<description>This is the second item.</description>
</item>
<item>
<title>The Third Item</title>
<link>http://www.exampleurl.com/example/003.html</link>
<description>This is the third item.</description>
</item>
</channel>
</rss>
Abbildung 5: Beispieldokument RSS 0.91
12
soll. Das skipDays-Element kann bis zu sieben day-Kindelemente enthalten, die einen der Werte (Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday, Sunday) haben. Das skipHoursElement kann bis zu 24 hour-Kindelemente enthalten, die jeweils
einen Wert zwischen 1 und 24 enthalten und eine Uhrzeit (Stunde) repräsentieren. Ein Client darf zu einem Zeitraum, der einem
der Wochentage bzw. Stundenzeiträume (in Greenwich Mean Time
(GMT)) entspricht, den Feed nicht abrufen – die allermeisten Clients
ignorieren diese Angaben allerdings.
• image: dieses Element erhielt drei neue Kindelemente, die RSS flexibler
für neue Anwendungen machen.
– width (optional, maximal 1) und height (optional, maximal 1):
diese Elemente enthalten die Breite bzw. Höhe des zum Channel
gehörenden Bilds. Damit wurde die Beschränkung auf ein einziges
Bildformat – 88 x 31 Pixel in RSS 0.9 – aufgehoben. Allerdings sind
auch hier noch Beschränkungen vorhanden: width darf maximal den
Wert 144 annehmen, height darf höchstens 400 betragen. Sind eines
oder beide Elemente nicht vorhanden, so wird als Standardwert 88
bzw. 31 verwendet.
– description (optional, maximal 1):
enthält eine Zeichenkette, die bei der Umwandlung in HTML für das
title-Attribut der img-Tags verwendet werden kann.
• item: eine der interessantesten Neuerungen in RSS 0.91 war das Hinzufügen des description-Elements als (optionales) Kindelement zum
item-Element. Das neue Element kann bis zu 500 Zeichen enthalten,
die eine kurze Beschreibung der verlinkten Ressource darstellen – bei
Nachrichten-Feeds etwa eine kurze Zusammenfassung des Artikels, zusätzlich zur im title-Element enthaltenen Überschrift.
RSS 0.91 ist nach wie vor die beliebteste Version von RSS, ca. 55% der 2003 angebotenen Feeds benutzten dieses Format [Ham03]. Dies ist wohl darauf zurückzuführen, daß viele der von den Nachfolgerversionen angebotenen Möglichkeiten
von den Anbietern nicht benötigt werden, da mit den angebotenen Funktionalitäten genügend Flexibilität gegeben ist, oder daß die Anwender vor deren
erhöhter Komplexität zurückschrecken.
5
RSS 0.92
Dieses Kapitel beschreibt Version 0.92 von RSS, die zwar chronologisch zwei
Wochen nach der Version 1.0 erschien, aber eine konsequente Weiterentwicklung
von RSS 0.91 ist. Die Version ist als Weiterentwicklung von RSS 0.91, aber auch
als RDF-freier Gegenvorschlag zum vollständig RDF-basierten RSS 1.0 (siehe
Kapitel 6) zu verstehen.
13
rss
version=0.92
channel
title
textinput
image
item
description
title
title
title
link
description
url
link
language
name
link
description
copyright
link
width
source
rating
cloud
height
url
docs
domain
webMaster
port
skipDays
pubDate
path
day
enclosure
managingEd.
protocol
skipHours
url
lastBuildD.
description
registerProcedure
hour
category
domain
length
type
Abbildung 6: Struktur von RSS 0.92
RSS 0.92 zeichnet sich gegenüber Version 0.91 weniger durch die (relativ wenigen) neu hinzugekommenen Elemente aus, sondern vielmehr dadurch, daß viele
Beschränkungen der Vorgängerversion aufgehoben wurden.
5.1
Struktur von RSS 0.92
Abbildung 6 zeigt den Aufbau eines RSS-0.92-Dokuments. Änderungen bzw.
Neuerungen gegenüber RSS 0.91 sind farblich markiert. Abbildung 7 zeigt ein
Beispieldokument (Quelle: [Ham03]).
5.2
Neue Elemente in RSS 0.92
Version 0.92 kennt einige neue Elemente:
• channel: dem channel-Element wurden das neue optionale Element cloud
hinzugefügt, welches Unterstützung für Publish & Subscribe ermöglicht.
Das cloud-Element selbst besitzt besitzt fünf Kindelemente, die alle obligatorisch sind und in der XML-Darstellung des Dokuments Attribute des
cloud-Elements sind11 :
– domain:
der Server, an den Subscribe-Anfragen gesendet werden sollen.
– port:
der Port des Servers, über den die Anfrage gesendet werden soll.
– path:
der volle auf dem Server aufzurufende Pfad für Subscribe-Anfragen.
11
Warum hier von den vorher verwendeten Konventionen Abstand genommen wurde, ist
unklar.
14
<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="0.92">
<channel>
<title>RSS 0.92 Example</title>
<link>http://www.oreilly.com/example/index.html</link>
<description>This is an example RSS0.91 feed</description>
<language>en-gb</language>
<copyright>Copyright 2002, Oreilly and Associates.</copyright>
<managingEditor>[email protected]</managingEditor>
<webMaster>[email protected]</webMaster>
<rating> <!-- See the text --> </rating>
<pubDate>03 Apr 02 1500 GMT</pubDate>
<lastBuildDate>03 Apr 02 1500 GMT</lastBuildDate>
<docs>http://backend.userland.com/rss091</docs>
<skipDays>
<day>Monday</day>
</skipDays>
<skipHours>
<hour>20</hour>
</skipHours>
<cloud domain="http://www.oreilly.com" port="80" path="/RPC2"
registerProcedure="pleaseNotify" protocol="xml-rpc" />
<image>
<title>RSS 0.92 Example</title>
<url>http://www.oreilly.com/example/images/logo.gif</url>
<link>http://www.oreilly.com/example/index.html</link>
<width>88</width>
<height>31</height>
<description>The World’s Leading Technical Publisher</description>
</image>
<textInput>
<title>Search</title>
<description>Search the Archives</description>
<name>query</name>
<link>http://www.oreilly.com/example/search.cgi</link>
</textInput>
<item>
<title>The First Item</title>
<link>http://www.oreilly.com/example/001.html</link>
<description>This is the first item.</description>
<source url="http://www.anothersite.com/index.xml">Another Site</source>
<enclosure url="http://www.oreilly.com/001.mp3" length="54321" type="audio/mpeg"/>
<category domain="http://www.dmoz.org"> Business/Industries/Publishing/Publishers/
Nonfiction/</category>
</item>
<item>
<title>The Second Item</title>
<link>http://www.oreilly.com/example/002.html</link>
<description>This is the second item.</description>
<source url="http://www.anothersite.com/index.xml">Another Site</source>
<enclosure url="http://www.oreilly.com/002.mp3" length="54321" type"audio/mpeg"/>
<category domain="http://www.dmoz.org">
Business/Industries/Publishing/Publishers/Nonfiction/</category>
</item>
</channel>
</rss>
Abbildung 7: Beispieldokument RSS 0.92
15
– protocol:
das für die Anfrage zu verwendende Protokoll. Hier sind die Werte
xml-rpc und soap zulässig – in der Praxis wird aber ausschließlich
XML-RPC verwendet12 .
– registerProcedure:
die für die Anfrage zu verwendende serverseitige Funktion.
Ein Beispiel für ein cloud-Element findet sich in Abb. 7, die Publish &
Subscribe - Mechanismen werden in Kapitel 9 näher erläutert.
• item: dieses Element erhielt drei neue Kindelemente, die weitere Metadaten zur Verfügung stellen und das Einbinden von Multimedia-Inhalten
ermöglichen:
– source (optional, maximal 1):
enthält die ursprüngliche Quelle des Items. Dies ist beispielsweise
nützlich, wenn der empfangene Feed von einem Aggregator stammt,
der selbst wiederum andere RSS-Feeds empfängt, zusammenfaßt, filtert etc.13 Das Element hat ein (obligatorisches) Attribut namens
url, welches einen URL zur Quelle bezeichnet. Der Inhalt des Elements selbst ist der Name der Quelle.
– category (optional, maximal 1):
enthält die Kategorie, in die der Inhalt des Items einzubinden ist. Das
(obligatorische) Attribut domain enthält dabei die Taxonomie, innerhalb der die Kategorisierung stattfindet, z.B. http://www.dmoz.org.
– enclosure (optional, maximal 1):
mit diesem Element ist es möglich, beliebige Inhalte, z.B. MultimediaDaten, mit einem Item zu assoziieren. Das Element hat drei obligatorische Attribute, url (den URL zu einer Datei), length (die Länge
der Datei) und type (den Datentyp) der Datei.
5.3
Weitere Änderungen in RSS 0.92
Obwohl die in RSS 0.92 neu hinzugekommenen Elemente neue Möglichkeiten eröffnen, ist die vielleicht wichtigere Neuerung das Entfernen vieler Einschränkungen der Vorgängerversionen:
• Sämtliche Textlängenbeschränkungen wurden entfernt. Das bedeutet, daß der Inhalt aller Elemente in RSS 0.92 prinzipiell beliebig lang
werden darf.
• Wegfall der Beschränkung auf 15 item-Elemente innerhalb eines
Channels. Ein Channel darf beliebig viele Items enthalten14 .
12
XML-RPC ist ein Protokoll, das den Datenaustausch auch von komplexen Datenstrukturen über ein Netzwerk ermöglicht.
13
Für weitere Informationen zu Aggregatoren siehe Kapitel 8.
14
In der Praxis sind in fast allen Feeds noch immer maximal 15 Items enthalten.
16
• Das language-Kindelement von channel ist optional. Der Grund
dafür ist, daß insbesondere ein aus mehreren anderen Feeds von einem
Aggregator zusammengestellter Feed Items in mehreren verschiedenen
Sprachen enthalten kann und somit nicht eine einzelne Sprache festgelegt werden kann.
• Sämtliche Kindelemente von item sind optional. Den Ausschlag für
diese Entscheidung gab wohl die Affinität des Entwicklers zu Weblogs:
When a RSS file reflects the content of a weblog or “blog” site, the
”
structure required by previous versions of RSS was often impossible to
synthesize. For example, there is no actual limit on the number of links a
weblog item can have.“ [RSS092]
Trotz all dieser Neuerungen ist – dank der Art der Änderungen – RSS 0.92
abwärtskompatibel zu Version 0.91.
6
RSS 1.0
Es besteht kein Zweifel, daß Dave Winer mit seiner Arbeit viel zur Entwicklung
von RSS beigetragen hat. Nichtsdestotrotz gab es innerhalb der Entwicklergemeinde weiterhin Meinungsverschiedenheiten darüber, ob das Format ein
möglichst einfaches, nicht RDF-basiertes Datenmodell verwenden sollte (die
Philosophie hinter den Versionen 0.9x), oder ob nicht doch ein etwas komplexeres, auf RDF basierendes Modell – inklusive dessen mächtigen Möglichkeiten
im Hinblick auf Erweiterungen – vorzuziehen sei. Ein Argument für letzteren
Standpunkt ist im Nachhinein die immer größer werdende Menge an Elementen
in der 0.9x - Linie, die eben durch die starre, nicht erweiterbare Spezifikation
gegeben war: sobald neue Funktionalität benötigt wird, muß das Format erweitert und damit geändert werden. Im Dezember 2000 schufen die Entwickler der
rss-dev-Mailingliste Fakten und veröffentlichten die Spezifikation von RSS 1.0,
eine komplett RDF-kompatible Version von RSS.
6.1
Struktur von RSS 1.0
Abb. 8 zeigt die Struktur eines RSS-1.0 - Dokuments (Änderungen gegenüber
der Version 0.9 sind farblich markiert), Abb. 9 ein einfaches Beispiel (Quelle:
[Ham03]). Auffällig ist die im Gegensatz zu RSS 0.91 geradezu übersichtliche
Struktur, die mit einem Minimum an Erweiterungen im Vergleich zur Version 0.9 auskommt. Dem item-Element wird lediglich ein Kindelement namens
description hinzugefügt, welches die gleiche Bedeutung wie in RSS 0.92 hat.
Die Änderungen im channel-Element sind durch die Struktur eines RDF-Dokuments nötig geworden. In einem RDF-Dokument müssen alle Ressourcen, über
die Aussagen getroffen werden, in der obersten Hierarchie-Ebene des Dokuments
– direkt unter dem Wurzelknoten – liegen. Dies war in der ersten Version von
RSS 0.9 schon der Fall (eben weil diese Version teilweise auf RDF basierte). Version 1.0 fügt nun lediglich innerhalb des channel-Elements Verweise zu diesen
17
rdf:RDF
channel
textinput
image
item
title
title
description
description
url
link
link
name
link
description
textinput
link
title
title
image
items
Abbildung 8: Struktur von RSS 1.0
Ressourcen hinzu; dies wird daran ersichtlich, daß die rdf:resource-Attribute
der Elemente image, textinput und der Liste innerhalb des Elements items15
identisch mit den rdf:about-Attributen der jeweils referenzierten Elemente auf
der obersten Ebene sind.
6.2
Module in RSS 1.0
Auffällig an einem RSS 1.0-Dokument sind (wie im Beispiel, Abb. 9) die vielen
Elemente, die im Dokument vorhanden sind, aber nicht in der RSS-Spezifikation
auftauchen. Dies ist genau der Mechanismus, mit dem Erweiterbarkeit erreicht
wird: Module werden einfach verwendet, indem ihr Namespace im XML-Dokument deklariert wird (im Beispiel direkt im Wurzelelement rdf:RDF) und die
im Modul verfügbaren Elemente in das Dokument eingefügt werden. Welche
Elemente dabei in welchem Zusammenhang (an welcher Stelle im Dokument)
verwendet werden dürfen, wird dabei in der Modulspezifikation festgelegt. Es
folgt eine kurze Beschreibung einiger wichtiger oder interessanter Module16
• mod dublincore, Namespace-Präfix dc
Dieses Modul stellt Unterstützung für die erweiterten Metadaten der Dublin Core Metadata Initiative bereit; es ist wohl das am meisten verwendete Modul und im Zusammenhang mit der Idee des Semantic Web zu sehen: nur wenn so viele Informationen wie möglich über die im Dokument
enthaltenen Daten angegeben werden, wird diese Vision möglicherweise
realisierbar. Dementsprechend erlaubt es dieses Modul, eine Fülle von Informationen über Ressourcen zu definieren, z.B. Urheber, Beschreibung,
Art der Ressource, Kontext und vieles mehr.
• mod syndication, Namespace-Präfix sy
Dieses Modul definiert lediglich drei neue Elemente für das channelElement, die allerdings eine wichtige Funktion erfüllen: sie geben dem
15
Das items-Element stellt einfach eine geordnete Liste mit Verweisen auf Ressourcen dar.
Natürlich gibt es noch eine Vielzahl anderer Module für verschiedenste Anwendungsgebiete.
16
18
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:co="http://purl.org/rss/1.0/modules/company/"
xmlns:ti="http://purl.org/rss/1.0/modules/textinput/"
xmlns="http://purl.org/rss/1.0/">
<channel rdf:about="http://meerkat.oreillynet.com/?_fl=rss1.0">
<title>Meerkat</title>
<link>http://meerkat.oreillynet.com</link>
<description>Meerkat: An Open Wire Service</description>
<dc:publisher>The O’Reilly Network</dc:publisher>
<dc:creator>Rael Dornfest (mailto:[email protected])</dc:creator>
<dc:rights>Copyright &#169; 2000 O’Reilly &amp; Associates, Inc.</dc:rights>
<dc:date>2000-01-01T12:00+00:00</dc:date>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>2</sy:updateFrequency>
<sy:updateBase>2000-01-01T12:00+00:00</sy:updateBase>
<image rdf:resource="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg" />
<textinput rdf:resource="http://meerkat.oreillynet.com" />
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://c.moreover.com/click/here.pl?r123" />
</rdf:Seq>
</items>
</channel>
<image rdf:about="http://meerkat.oreillynet.com/icons/meerkat-powered.jpg">
<title>Meerkat Powered!</title>
<url>http://meerkat.oreillynet.com/icons/meerkat-powered.jpg</url>
<link>http://meerkat.oreillynet.com</link>
</image>
<textinput rdf:about="http://meerkat.oreillynet.com">
<title>Search Meerkat</title>
<description>Search Meerkat’s RSS Database...</description>
<name>s</name>
<link>http://meerkat.oreillynet.com/</link>
<ti:function>search</ti:function>
<ti:inputType>regex</ti:inputType>
</textinput>
<item rdf:about="http://c.moreover.com/click/here.pl?r123">
<title>XML: A Disruptive Technology</title>
<link>http://c.moreover.com/click/here.pl?r123</link>
<dc:description>This the description of the article</dc:description>
<dc:publisher>The O’Reilly Network</dc:publisher>
<dc:creator>Simon St.Laurent (mailto:[email protected])</dc:creator>
<dc:rights>Copyright &#169; 2000 O’Reilly &amp; Associates, Inc.</dc:rights>
<dc:subject>XML</dc:subject>
<co:name>XML.com</co:name>
<co:market>NASDAQ</co:market>
<co:symbol>XML</co:symbol>
</item>
</rdf:RDF>
Abbildung 9: Beispieldokument RSS 1.0
19
<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:ss="http://purl.org/rss/1.0/modules/servicestatus/">
<channel rdf:about="http://my.organisation.com">
<title>An Example</title>
<description>Just an example of system statuses</description>
<link>http://my.organisation.com</link>
<ss:aboutStats>http://my.organisation.com/status.html</ss:aboutStats>
<items>
<rdf:Seq>
<rdf:li resource="http://my.organisation.com/website" />
<rdf:li resource="http://my.organisation.com/database" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://my.organisation.com/website">
<title>Website</title>
<link>http://my.organisation.com/website</link>
<ss:responding>true</ss:responding>
<ss:lastChecked>2002-05-10T19:20:30.45+01:00</ss:lastChecked>
<ss:lastSeen>2002-05-10T19:20:30.45+01:00</ss:lastSeen>
<ss:availability>85</ss:availability>
<ss:averageResponseTime>5.2</ss:averageResponseTime>
</item>
<item rdf:about="http://my.organisation.com/database">
<title>Database server</title>
<link>http://my.organisation.com/database</link>
<ss:responding>false</ss:responding>
<ss:lastChecked>2002-05-10T19:20:30.45+01:00</ss:lastChecked>
<ss:lastSeen>2002-05-09T13:43:56.24+01:00</ss:lastSeen>
<ss:availability>77</ss:availability>
<ss:averageResponseTime>12.2</ss:averageResponseTime>
<ss:statusMessage>Engineers are investigating.</ss:statusMessage>
</item>
</rdf:RDF>
Abbildung 10: Beispieldokument RSS 1.0 mit mod servicestatus
Anwender einen Anhaltspunkt, wie oft sich die Informationen im Channel etwa ändern. Bei großen Nachrichtenseiten kann es durchaus sinnvoll
sein, alle 10 Minuten auf Aktualisierungen zu prüfen, bei anderen Feeds
ist eine Aktualisierung mehr als einmal täglich unwahrscheinlich. Im Beispieldokument etwa wird festgelegt, daß ein sinnvolles Intervall für die
Überprüfung 30 Minuten beträgt (2 Mal pro Stunde).17
• mod servicestatus, Namespace-Präfix ss
Dies ist ein Modul, das wahrscheinlich recht selten verwendet wird, aber
die Flexibilität des modulbasierten, erweiterbaren Ansatzes von RSS 1.0
glänzend demonstriert. Das Modul ermöglicht es, Informationen über die
Erreichbarkeit von Servern in einem RSS-Stream bereitzustellen. Abb. 10
zeigt ein Beispiel für die Verwendung (Quelle: [Ham03]).
17
Auf diese Problematik wird im Kapitel 9 näher eingegangen.
20
rss
version= 2.0
channel
title
description
link
language
copyright
rating
docs
webMaster
pubDate
managingEd.
lastBuildD.
ttl
generator
textinput
title
description
name
link
cloud
domain
port
path
protocol
registerProcedure
image
title
url
link
width
height
description
skipDays
day
skipHours
hour
item
title
link
description
source
url
category
domain
enclosure
url
length
type
author
comments
pubDate
guid
isPermaLink
Abbildung 11: Struktur von RSS 2.0
Die Vorteile der Module liegen auf der Hand: die Basisspezifikation von RSS
bleibt schlank, ist aber trotzdem nahezu für beliebige Einsatzzwecke erweiterbar. Eine weitere angenehme Eigenschaft ist, daß Anwendungen auch Feeds
verarbeiten können, die Module verwenden, die die Anwendung nicht kennt –
sie ignorieren deren Elemente einfach; die korrekte Grundstruktur des Feeds
bleibt dennoch erhalten. Anwendungen, die die eingesetzten Module kennen,
können die Zusatzinformationen auswerten.
7
RSS 2.0
Ungefähr zwei Jahre, nachdem RSS 1.0 erschien, wurde die Nachfolgerversion
von RSS 0.92 veröffentlicht. Diese Version, die ursprünglich die Nummer 0.94
trug, dann aber in Version 2.0 umgetauft wurde, folgte den Vorgängern ihrer
Entwicklungslinie, indem sie weiter komplett ohne RDF auskam. Allerdings
wurden Teile der Konzepte von RSS 1.0 integriert, wie die Unterstützung von
XML Namespaces und damit Module. Diese waren aber wiederum mit den
Modulen der Version 1.0 nicht kompatibel, wie auch das komplette Datenmodell
verschieden vom RDF-basierten Modell blieb.
7.1
Struktur von RSS 2.0
Abb. 8 zeigt die Struktur eines RSS 2.0-Dokuments. Änderungen im Vergleich
zur Version 0.92 sind farblich markiert.
21
7.2
Änderungen in RSS 2.0
Eine wesentliche Neuerung im Vergleich zu den Versionen 0.9x ist die Möglichkeit der Verwendung von Modulen, die vom Prinzip sehr ähnlich funktioniert
wie in RSS 1.0 (siehe Abschnitt 6.2). Desweiteren sind auch in dieser Version
wieder neue Elemente hinzugefügt worden, die im Folgenden kurz beschrieben
werden.
• channel: dem channel-Element wurden zwei Elemente hinzugefügt:
– ttl (optional, maximal 1):
bezeichnet die Anzahl der Minuten, die das vom Feed erhaltene Dokument im Cache gehalten werden darf, bevor es vom Ursprungsserver neu geladen werden muß.
– generator (optional, maximal 1):
das Programm, mit dem der Feed erzeugt wurde.
• item: dem item-Element wurden mehrere Elemente hinzugefügt, hauptsächlich,
um weitere Metadaten definieren zu können:
– author (optional, maximal 1):
die Email-Adresse des Autors des Items.
– comments (optional, maximal 1):
bezeichnet einen URL mit Kommentaren zu diesem Item.
– pubDate (optional, maximal 1):
der Zeitstempel der Erstellung des Items.
– guid (optional, maximal 1):
(guid: globally unique identifier) – ein eindeutiger Bezeichner für
das Item, konzeptuell ähnlich dem URI (siehe Abschnitt 2.3). Wenn
dieses Element ein Attribut mit dem Namen isPermaLink und dem
Wert true hat, so bedeutet das, daß der Wert des guid ein URL ist.
RSS 2.0 hat den Vorteil der Erweiterungsmöglichkeit durch Module von RSS 1.0
aufgegriffen; allerdings wirkt die Umsetzung weniger elegant als bei Version 1.0,
die durch ein minimalistisches Grundgerüst und Auslagerung sämtlicher anderer Funktionalität in Module überzeugt. Version 2.0 wurde vom Entwickler als
letzte Version dieses Zweigs deklariert, so daß hier keine Weiterentwicklungen
zu erwarten sind.
8
Clients für RSS
Nachdem die Entwicklung der verschiedenen Versionen etwas chaotisch erscheint,
mag der Eindruck entstanden sein, daß es schwierig sein muß, Programme zu
entwickeln, die als RSS-Client – das heißt, als Programm, das RSS-Dateien von
Servern anfordert und verarbeitet – mit jedem der Standards umgehen können.
Zwar unterstützen nur wenige gängige Programme RSS 2.0, die prinzipiellen
Schwierigkeiten einer umfassenden Implementierung sind aber eher gering, da:
22
• für die meisten Anwendungen eine Beschränkung auf die wichtigsten in
RSS 0.9 oder 0.91 definierten Elemente genügt, zumal ein Großteil der
Feeds sich auch auf diese beschränkt
• die Versionen 2.0 und 0.92 voll abwärtskompatibel sind – wenn eine Anwendung z.B. mit RSS 2.0 umgehen kann, versteht sie automatisch alle
Feeds, die in den Versionen 0.91 und 0.92 gesendet werden
• die Version 1.0 zur Version 0.9 abwärtskompatibel ist, wenn man nicht
auf korrektem RDF besteht
• die Unterschiede bei den Kernelementen gering sind (Name des Wurzelelements rdf:RDF oder rss, Elemente als Kinder von rdf:RDF bzw. channel)
• so gut wie jede Programmiersprache XML-Unterstützung bietet.
Diesen Fakten ist es wohl zu verdanken, daß eine Vielzahl von zumeist kostenlosen RSS-Clients existiert. Die Anwendungen lassen sich grundsätzlich in zwei
Kategorien einteilen: sogenannte Aggregatoren und klassische Clients, die auf
dem Rechner des Anwenders laufen.
8.1
Aggregatoren
Unter einem Aggregator versteht man im weitesten Sinne einen Dienst, der andere Dienste zusammenfaßt und dem Nutzer anbietet (Aggregation: Vereinigung
von Molekülen zu Molekülverbindungen).18 Dabei agiert der Dienst selbst als
Client gegenüber den angebotenen Feeds und bietet diese dem Nutzer dann z.B.
in zusammengefaßter oder gefilterter Form an. Ein typisches Beispiel für solch
einen Aggregator ist Meerkat [ORM]). Abb. 12 zeigt eine Ausgabe von Meerkat;
dieser Aggregator unterstützt die Ausgabe der Suchergebnisse in verschiedenen
Formaten, das Beispiel zeigt eine Ausgabe als minimalistisches HTML. Die wohl
interessanteste Möglichkeit dabei ist, die Ausgabe selbst wiederum als RSS anzufordern und mit einem normalen“ Client anzuschauen.
”
8.2
Desktop-Clients
Die andere verbreitete Sorte von RSS-Clients sind Programme, die lokal beim
Benutzer installiert werden. Diese bieten dann unter Umständen fortgeschrittene Optionen wie eine automatische Aktualisierung der abonnierten“ Channels,
”
das Ausblenden schon gelesener Beiträge etc. Abb. 13 zeigt eine Beispielausgabe
von Hotsheet [HSC] mit zwei abonnierten Channels.
18
Manche Leute bezeichnen jedes Programm, das RSS-Feeds irgendwie verarbeitet und dem
Nutzer darbietet, als Aggregator. Hier wird die feinere Unterscheidung verwendet.
23
Abbildung 12: Beispiel RSS-Aggregator Meerkat
Abbildung 13: Beispiel RSS-Client Hotsheet
24
9
Publish & Subscribe
Da RSS auf HTTP aufsetzt, ist eine Implementierung mit gängigen Programmiersprachen relativ einfach. Es stellt sich allerdings ein Problem: HTTP ist
zustandslos – das heißt, ein Client sendet eine Anfrage an den Server, der Server sendet eine Antwort, dann wird die Verbindung getrennt und die Kommunikationspartner sind wieder in einem Zustand, als wären sie nie miteinander
in Verbindung getreten. Der Client hat also keine andere Möglichkeit herauszufinden, ob neue Daten auf dem Server vorliegen, als erneut eine Verbindung
zum Server aufzubauen und die Daten des Feeds herunterzuladen.
Das Problem ist klar: der Client will möglichst aktuelle Informationen, weiß aber
nicht, wann eigentlich neue Informationen vorliegen – er kann nur nachschauen.
Überprüft ein Client zu oft den Server auf neue Daten, so entsteht unnötig
viel Netzverkehr. Prüft er hingegen zu selten, entgehen ihm vielleicht wichtige
Informationen.
Dieses Dilemma läßt sich mit HTTP allein nicht zufriedenstellend lösen. Verschiedene Ansätze, wie z.B. das Modul mod syndication (siehe Absatz 6.2)
erlauben es, dem Client zumindest einen Anhaltspunkt für einen sinnvollen
Zeitabstand zwischen erneuten Anfragen zu geben. Eine wesentlich elegantere Lösung wäre allerdings, wenn der Server den Clients mitteilen würde, wenn
neue Informationen vorliegen. Dieser Ansatz wird Publish & Subscribe (deutsch
etwa: Veröffentlichung und Abonnement) genannt.
Bei diesem Konzept veröffentlicht der Server die Adresse, wo sich Clients für
den gewünschten Feed abonnieren können; bei einer Änderung des Inhalts des
Channels sendet dann der Server allen abonnierten Clients eine Nachricht, so
daß diese quasi nur auf Aufforderung den Feed neu laden.
9.1
Publish & Subscribe mit RSS 0.92 und 2.0
Mit RSS 0.92 wurde das cloud-Element eingeführt. In diesem werden alle für
den Client notwendigen Informationen übermittelt, um ihm ein Abonnieren
des Channels zu ermöglichen. Beim Abonnieren wiederum teilt der Client dem
Server mit, wie dieser ihn erreichen kann. Als Beispiel diene folgendes cloudElement:
<cloud domain="www.rsssite.com" port="80" path="/subscr.pl"
registerProcedure="subscribeToFeeds" protocol="xml-rpc" />
Will ein Client sich bei diesem Server anmelden, so ruft er die angegebene
Funktion auf und übergibt dabei dem Server die Informationen, wohin dieser
im Falle einer Änderung die Nachricht senden soll, zum Beispiel folgendermaßen
(Pseudocode):
25
http://www.rsssite.com:80/subscr.pl!subscribeToFeeds(
"RSSFeedHasChanged", /* lokale Callback-Prozedur */
8889,
/* lokaler Port */
"/XML-RPC/RssWatch", /* lokaler Pfad */
"xml-rpc",
/* Protokoll fuer Callback */
/* Liste der zu ueberwachenden URLS */)
("http://feeds.rsssite.com/feed.php?id=23&ver=0.92")
)
Der Server kennt durch diesen Aufruf die Adresse des Clients, an die die Nachrichten geschickt werden sollen (z.B. my.client.com) – falls also eine Benachrichtigung an den Client gesendet werden soll, so wird diese wie folgt aussehen
(Pseudocode):
http://my.client.com:8889/XML-RPC/RssWatch!RSSFeedHasChanged(
/* veraenderter Feed */)
("http://feeds.rsssite.com/feed.php?id=23&ver=0.92")
)
Daraufhin kann der Client den übergebenen Parameter auswerten und den Feed
beim Server neu anfordern.
9.2
Publish & Subscribe mit RSS 1.0
Für RSS 1.0 steht das Modul mod changedpage bereit, das die gleichen Funktionalitäten bietet wie das cloud-Element in RSS 0.92, allerdings nicht XML-RPC
verwendet, sondern das einfachere HTTP POST. Ein Feed, der diese Funktionalität anbietet, bindet das Modul mod changedpage ein und enthält als Kindelement von channel das Element cp:server, etwa in folgender Form:
<channel>
...
<cp:server rdf:resource="http://www.rsssite.com/subscr1.pl" />
</channel>
Ein Client, der sich abonnieren will, sendet dann folgende HTTP-Anfrage:
POST http://www.rsssite.com/subscr1.pl
target=http://feeds.rsssite.com/feed.php?id=23&ver=1.0
responder=http://my.client.com/RssWatch.php
Wenn sich der Feed ändert, sendet der Server diese Anfrage:
POST http://my.client.com/RssWatch.php
url=http://feeds.rsssite.com/feed.php?id=23&ver=1.0
9.3
Bemerkungen zu Publish & Subscribe
Publish & Subscribe ist ein gutes Prinzip, um den Datenverkehr so niedrig
wie möglich zu halten, trotzdem aber immer die aktuellsten Informationen zu
erhalten. Es gibt allerdings einige Schwierigkeiten, die hier kurz skizziert werden
sollen:
26
• ungültige Abonnenten: um zu vermeiden, daß auf dem Server Listen
mit nicht mehr verfügbaren, aber abonnierten Clients entstehen, werden
Abonnements 24 Stunden nach ihrem Eintrag gelöscht. Das bedeutet, daß
sich Clients regelmäßig neu anmelden müssen.
• Clients müssen erreichbar sein: dies bedeutet, daß der Client sowohl
physisch erreichbar sein muß (interne Rechner in Firmennetzen sind beispielsweise durch die Netzwerkkonfiguration in den seltensten Fällen von
”
außen“ – aus dem Internet – zu erreichen) als auch auf Anfragen von außen warten und reagieren muß, was eventuell Sicherheitslücken öffnet.
• Problem der Verfügbarkeit: es gibt schlichtweg kaum Feed-Anbieter,
die Publish & Subscribe ermöglichen.
Dennoch ist dies eine interessante Technik, die eventuell in Zukunft eine breitere
Benutzerbasis finden könnte.
10
Zusammenfassung
RSS hat sich von Version 0.9, einem simplen Format zur Übertragung von
Schlagzeilen, zu einem leichtgewichtigen und universellen Format zum Austausch fast beliebiger Daten gemausert – und das trotz seiner recht konfusen und
kontroversen Entwicklungsgeschichte. Heutzutage gibt es Millionen von FeedAnbietern und eine ständig wachsende Entwickler- und Benutzergemeinde. Die
Chancen auf eine lange Zukunft von RSS stehen also gut.
Um diese Chancen noch zu verbessern und RSS zum endgültigen Durchbruch
nicht nur bei computerbegeisterten Zeitgenossen zu verhelfen, wurde kürzlich
eine Ausschreibung gestartet, die für RSS einen weniger kryptischen Namen
finden soll – die Vorschläge reichen dabei von 2U über HotLink und WebTicker
bis Yank [RNC]. Man darf also gespannt sein, was die Zukunft für RSS noch
bringt.
27
A
Glossar
Channel: Steht für den konzeptuellen Inhalt eines RSS-Feeds.
Client: Bezeichnet ein Programm, das einen Server kontaktiert und von diesem
Informationen anfordert.
HTTP: Hypertext Transfer Protocol, das Protokoll, das die Kommunikation
von Clients und Servern im WWW regelt. Fordert ein Client ein Dokument vom Server an oder beantwortet der Server eine Anfrage, muß diese
Anfrage den Konventionen des HTTP-Protokolls gehorchen.
Feed: Ein über ein Netzwerk angebotener Datenstrom.
Modul: Eine unabhängige inhaltliche oder funktionale Einheit, die nur bei
Bedarf eingebunden wird.
Namespace: Ein XML-Namespace (Namensraum) ist eine Sammlung von Namen, die durch eine URI-Referenz identifiziert wird. Durch die Zuordnung
von Element- oder Attributnamen zu Namensräumen ist es möglich, Informationseinheiten eindeutig zu identifizieren und Namenskonflikte zu vermeiden. Auf diese Weise können gleichlautende Namen mit unterschiedlicher Bedeutung in verschiedenen Vokabularen verwendet werden.
RDF: Das Resource Description Framework (RDF) ist eine Anwendung von
XML. Es dient der Beschreibung von Informationen einer Webressource
(z. B. einer Webseite oder auch einer ganzen Site). RDF erlaubt die Codierung, den Austausch und die Wiederverwendung von strukturierten
Metadaten (Daten über Daten).
RSS: Rich Site Summary, Really Simple Syndication oder RDF Site Summary.
RSS hat sich als das de-facto Standard-Austausch-Format für Web-Inhalte
etabliert (auch Content Syndication). Basierend auf XML stellt RSS allerdings nicht den gesamten Inhalt zur Verfügung, sondern enthält nur
eine Liste der aktuellen Überschriften, wobei die gesamte Nachricht dann
über einen URL abgerufen werden kann.
Server: Bezeichnet ein Programm, das von Clients kontaktiert wird, um diesen
Informationen zurückzuliefern. Oft wird auch der Rechner, auf dem ein
Server-Programm abläuft, als Server bezeichnet.
XML: Steht für eXtensible Markup Language und ist eine standardisierte Datenbeschreibungssprache, die speziell für den Datenaustausch zwischen
Anwendungen ausgelegt ist. Hierbei handelt es sich um eine herstellerund plattformunabhängige Methode für Softwareprogramme, Daten für
andere Programme in einer verständlichen Weise zu beschreiben.
28
B
Wichtige Internetadressen
Ausgewählte RSS-Feeds:
• SPIEGEL Online:
http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml
• Tagessschau:
http://www.tagesschau.de/xml/tagesschau-meldungen/0,,,00.xml
Weiterführende Links:
• PICS:
http://www.w3.org/PICS/
• Resource Description Framework (RDF):
http://www.w3.org/RDF/
• RFC 822 – Standard for the format of ARPA internet text messages:
http://andrew2.andrew.cmu.edu/rfc/rfc822.html
• RFC 2616 – HTTP 1.1:
http://www.w3.org/Protocols/rfc2616/rfc2616.html
• Extensible Markup Language (XML):
http://www.w3.org/TR/REC-xml
C
Abkürzungen und Akronyme
ARPA
DTD
GMT
HTML
HTTP
MCF
PICS
RDF
RFC
RSS
URI
URL
W3C
WWW
XML
XML-RPC
(heute DARPA) Defense Advanced Research Project Agency
Document Type Definition
Greenwich Mean Time
Hypertext Markup Language
Hypertext Transfer Protocol
Meta Content Framework
Platform for Internet Content Selection
Resource Description Framework
Request For Comments
Rich Site Summary, Really Simple Syndication, RDF Site Summary
Uniform Resource Identifier
Uniform Resource Locator
World Wide Web Commitee
World Wide Web
Extensible Markup Language
XML Remote Procedure Call
29
Literatur
[Ham03]
B. Hammersley: Content Syndication with RSS, O’Reilly
& Associates, Inc., Sebastopol(CA), 2003.
[HSC]
HotSheet RSS Client Software:
http://www.johnmunsch.com/projects/HotSheet/
[ORM]
O’Reilly Meerkat RSS Aggregator:
http://meerkat.oreillynet.com
[RNC]
RSS Naming Contest:
http://blog.contentious.com/contest.html
[RSS09]
RSS 0.9 Spezifikation:
http://www.purplepages.ie/RSS/netscape/rss0.90.html
[RSS091]
RSS 0.91 Spezifikation:
http://backend.userland.com/rss091
[RSS092]
RSS 0.92 Spezifikation:
http://backend.userland.com/rss092
[RSS1]
RSS 1.0 Spezifikation:
http://www.purl.org/rss/1.0/spec
[RSS2]
RSS 2.0 Spezifikation:
http://blogs.law.harvard.edu/tech/rss
30
Index
Aggregator, 16, 17, 23, 24
Userland, 4
Browser, 6, 8
Weblog, 2, 3, 17
Winer, Dave, 4, 5, 10, 17
Channel, 3, 28
Client, 22, 28
Content-Type, 3
XML, 2, 28
XML, Homepage, 29
XML-RPC, 16, 26
Dublin Core, 18
Feed, 3, 28
HotSheet, 23, 24
HTTP, 3, 8, 25, 26, 28
HTTP POST, 26
HTTP, RFC, 29
Item, 3
MCF, 2
Meerkat, 23, 24
Metadaten, 10, 16, 18, 22, 28
Modul, 18, 28
Multimedia, 16
Namespace, 4, 5, 7, 18, 21, 28
Netscape, 1, 4, 5
PICS, 11
PICS, Homepage, 29
POST, 26
Publish & Subscribe, 2, 14, 16, 25
Ramanathan, V. Guha, 2
RDF, 2, 5, 28
RDF, Homepage, 29
Ressource, 3
RSS, 28
rss-dev, 4, 5, 17
ScriptingNews, 10
Semantic Web, 2, 18
Server, 28
Taxonomie, 16
URI, 3
URL, 3
31