Tim Tepaße: Minimale Anzahl von <item>s in einem RSS 1.0 Feed

Beitrag lesen

Hallo,

Jetzt frage ich mich gerade, was so ein Feed minimal enthalten muss, um von gängigen Readern akzeptiert zu werden. Reicht es einfach, die Items wegzulassen, den Header und Footer aber mitzugeben? Ich schreibe übrigens über die RSS 1.0

Schwierig. Ich würde im Prinzip behaupten, dass die meisten der Feedreader damit zurecht kommen würden. Allerdings verstoßen die meisten der Feedreader auch gegen die RSS 1.0 Spezifikation, weil sie das items-Inhaltsverzeichnis nicht beachten und direkt item-Elemente im Graphen nutzen.

Die Spezifikation dagegen setzt für alle Elemente bzw. Inhaltsmodelle der Core Syntax tatsächliche Angaben zum Vorkommen, z.B. ob ein Element optional, required ist. Daran könnte man sich orientieren. Nur dürfte Dir das nicht gefallen.

Das Inhaltsmodell für rdf:RDF sagt: „(channel, image?, item+, textinput?)“. Das heisst übersetzt in normale Sprache, dass das channel-Element erforderlich ist, das image-Element optional, ebenso das textinput-Element, es jedoch mindestens ein item-Element geben sollte. Das Plus bedeutet „one or more“. Ebenso gilt dieses für das Inhaltsmodell des item-Elementes, fluffigerweise steht dort „Requirement: >= 1“.

Das heisst, streng nach der RSS 1.0 Spezifikation hat ein RSS 1.0 Feed immer mindestens einen Eintrag.

Was könntest Du nun tun, um Dein Ziel zu erfüllen und der Spezifikation zu genügen? Wenig. Du könntest ein leeres RDF-Dokument (rdf:RDF</rdf:RDF>) ausliefern, in dem noch kein Feed (erkennbar durch das channel- und ein oder mehrere item-Elemente) drin steckt, schließlich ist ein RSS 1.0 Feed nur eine Information, die –eventuell mit mit anderen Statements zusammen – in einem generellen RDF-Dokument drin steckt. Feedreader dürften dies als „kaputtes Dokument“ werten, zudem fehlen Dir dann schöne Feed-Informationen wie die ID des Feeds (den Wert des rdf:about-Attributes am channel-Element), ein Titel, ein tatsächlicher link, eine description. Denn für all diese Informationen brauchst Du ein channel-Element, bringst Du ein channel-Element ein, verstößt Du gegen die RSS 1.0 Spezifikation, die dazu noch mindestens ein item-Element verlangt. Ein Teufelskreis, wenn man es richtig machen will. ;)

Du könntest natürlich darauf setzen, dass so gut wie die Gesamtheit der Feedreader sich nicht um solche Feinheiten kümmert und einfach das channel-Element mit entsprechenden Kind-Elementen und einer leeren items/rdf:Seq-Liste einfügen. Kümmert eh keinen, Feedreader parsen meist nur XML und interessieren sich nicht für die Feinheiten von RDF. Mal ganz abgesehen davon, dass prinzipiell gesehen die Erfordernis nicht validierbar ist, das normative RDF Schema ist nur minimal, es gibt keine OWL nutzendes Schema, das Kardinalitäten ausdrücken kann. Und irgendwann kommt dann ein Feedreader, in den irgendein Wahnsinniger die tatsächlichen Erfordernisse aus der Spezifikation umgesetzt hat. Tscha.

Eine andere Möglichkeit wäre es, nicht auf RSS 1.0 sondern auf einen der beiden Konkurrenten, Atom 1.0 und RSS 2.0 zu setzen.

Das in RFC 4287 standardisierte Atom legt keine Restriktionen auf die Kardinalität von Einträgen im Feed:

„The "atom:feed" element is the document (i.e., top-level) element of
  an Atom Feed Document, acting as a container for metadata and data
  associated with the feed. Its element children consist of metadata
  elements followed by zero or more atom:entry child elements.“

Ebenso wenig tut dies die Spezifikation von RSS 2.0:

„A channel may contain any number of <item>s.“

Ich an Deiner Stelle würde auf RSS 1.0 verzichten und zu Atom greifen; dies, weil mir Atom wegen der besseren Spezifikation sympathischer ist als das wacklig beschriebene RSS 2.0.

Tim