Text oder HTML als Inhalt von title und description

(Auszug aus "Newsfeeds mit RSS und Atom" von Heinz Wittenbrink, erschienen bei Galileo Press, 2005)

Mit den beiden Elementen title und description ist eines der Grundprobleme des RSS 2.0-Formats verbunden: Die Spezifikation regelt nicht eindeutig, ob und wie Markup als Inhalt dieser Elemente verwendet werden kann. Dieses Problem zu lösen, wurde später zu einem der Motive für die Formulierung von Atom.

Die Frage, wie HTML-Markup innerhalb eines RSS-Dokuments zu behandeln ist, stellt sich, weil RSS von einem Syndikationsformat zu einem Publikationsformat geworden ist. In den ersten Jahren von RSS kam innerhalb der Elemente nur reiner Text vor. Bald bürgerte es sich aber ein, für die Titel und Beschreibungen von item-Elementen Text mit HTML-Markup zu verwenden. (In manchen Fällen wurde dieses Markup nicht, wie bei XML unbedingt erforderlich, durch Entity-Referenzen geschützt.) Nur so wird es möglich, den kompletten Inhalt eines HTML-Fragments in einen RSS-Feed aufzunehmen. Aggregatoren und Feedreader können die Informationen dann wieder zu HTML dekodieren und mit den von Browsern bekannten Techniken interpretieren. Dave Winer beschränkt in der Spezifikation von RSS 2.0 nicht eindeutig, welche Art von Daten den Inhalt dieser Elemente bilden soll. Es wird lediglich ausdrücklich erlaubt, "Entity-kodiertes HTML" innerhalb von description zu benutzen.

HTML als Inhalt von RSS ist illegal

Eine Technik, RSS mit HTML-Markup zu verwenden, ist in jedem Fall inkompatibel mit den Gesetzen von XML: HTML darf nie einfach in die RSS-Elemente eingefügt werden. Standardkonformes HTML ist kein wohlgeformtes XML – es sei denn, es handelt sich um XHTML. XML-Elemente müssen im Gegensatz zu HTML-Elementen mit einem Endtag geschlossen werden. Die Groß- und Kleinschreibung von Bezeichnern ist relevant. Die bei HTML hier und da gängige "verkürzte" Schreibweise von Attributen unter Weglassung des Attributwertes ist verboten, und der Attributwert hat in Anführungszeichen zu stehen. HTML-Markup widerspricht diesen – und anderen – XML-Regeln. Wenn ein XML-Prozessor korrekt arbeitet, reagiert er auf ein Dokument, das solches Markup enthält, mit einer Fehlermeldung und bricht die Verarbeitung ab.

Maskieren von Markup

Markup, das den XML-Regeln nicht entspricht, muss "geschützt" oder "escaped" werden. Dann interpretiert ein XML-Parser die Zeichen, die normalerweise Markup begrenzen (englisch: markup delimiters), als normalen Textinhalt. Man kann diesen Effekt mit zwei Techniken erreichen:

  1. Es ist möglich, einen ganzen Textabschnitt zu einem CDATA-Abschnitt zu erklären. Die Zeichen <, >, & und ;, die sonst Markup begrenzen, werden dann einfach als "Character Data" (dafür steht CDATA) verstanden: Im Infoset, den der Parser dem XML-Dokument entnimmt, finden sich also nur Informationen über Zeichen. Eine CDATA-Section beginnt mit der Zeichenfolge <![CDATA[ und endet mit der Zeichenfolge ]]>.
  2. Man kann einzelne Zeichen durch Entity-Referenzen maskieren. Eine Entity-Referenz ist ein Verweis auf eine Abkürzung, die ein Zeichen vertritt. So wird das Zeichen < durch die Entity-Referenz &lt; wiedergegeben, das Zeichen & durch &amp;.

Die beiden folgenden Beispiele zeigen, wie man mit diesen Techniken HTML-Markup in ein RSS-Dokument einfügt. Im ersten Fall wird eine CDATA-Section benutzt, im zweiten Fall Entity-Referenzen für einzelne Zeichen.

<item>
...
   <description><![CDATA[Kostenpflichtige Online-Inhalte werden immer besser angenommen: <blockquote>Die Zeit der Kostenlos-Kultur geht zu Ende, gleichzeitig steigt die Qualität der Angebote</blockquote>, sagt Bernhard Rohleder, Hauptgeschäftsführer von Bitkom...]]></description>
</item>
<item>
...
   <description>Kostenpflichtige Online-Inhalte werden immer besser angenommen: &lt;blockquote&gt;Die Zeit der Kostenlos-Kultur geht zu Ende, gleichzeitig steigt die Qualität der Angebote&lt;/blockquote&gt;, sagt Bernhard Rohleder, Hauptgeschäftsführer von Bitkom...</description>
</item> 

Der folgende Screenshot zeigt, wie diese Beispiele in dem Newsreader NetNewsWire wiedergegeben werden:

Wiedergabe von maskiertem HTML-Markup innerhalb des Elementes description

Abbildung: Wiedergabe von maskiertem HTML-Markup innerhalb des Elements "description"

Alle gängigen Newsreader und Aggregatoren unterstützen dieses Verfahren, um HTML-Markup in ein title- oder description-Element einzubetten. Sie müssen dabei nicht angeben, welche Version von HTML bzw. XHTML Sie verwenden! Da RSS durch Namensräume erweiterbar ist, müsste es möglich sein, XHTML mit dem richtigen Namensraum-Identifizierer innerhalb eines Elements description zu verwenden. Newsreader und Validierer unterstützen dieses Verfahren aber nicht. (Die RSS-Spezifikation erlaubt in ihrem Text nur Entity-kodiertes HTML-Markup, lässt in den beigefügten Beispielen aber auch CDATA-Abschnitte zu. Diese Unterscheidung ist hinfällig, wenn man von den Regeln für die korrekte Verarbeitung von XML ausgeht, die das W3C-Konsortium aufgestellt hat. Der Parser entnimmt einem wohlgeformten Dokument das Infoset, und zum Infoset gehört die Information darüber, an welcher Stelle der Inhalte der Elemente sich welche Zeichen befinden. Ob diese Information durch CDATA-Abschnitte oder durch Entity-Referenzen zustande kommt, ist irrelevant, die verarbeitenden Software "merkt es nicht".)

"Escaped Markup Considered Harmful" (Norman Walsh)

Wenn man geschütztes Markup verwendet, damit es von der Software, die den Feed verarbeitet, als HTML wiedergegeben wird, produziert man syntaktisch korrektes XML, hält sich aber dennoch nicht an die Richtlinien für dieses Format. Man erwartet ja, dass die Zeichenkette mit den maskierten Markup-Begrenzern nicht als Zeichenkette, sondern als HTML-Markup interpretiert wird. Es handelt sich bei diesem Verfahren um einen "Hack", der Entwickler dazu ermutigt, Software zu programmieren, die gegen die Grundregeln zur Verarbeitung von XML verstößt.

Diese Praxis ist zu Recht immer wieder kritisiert worden, am deutlichsten von Norman Walsh: Würden die schlechten Beispiele Schule machen, könne man sich die Mühe sparen, mit XML einen Standard für Markup-Sprachen zu schaffen, der überall im Web verwendet werden kann.

Wenn innerhalb des HTML-Inhalts Markup zitiert wird, es also im "dekodierten" HTML-Inhalt bereits maskiert ist, gibt es für die verarbeitende Software keine Regel dafür, wie sie mit den entsprechenden Passagen verfahren soll. Praktisch wird dieses Problem durch doppelte Maskierung gelöst. Wenn der Inhalt von description "Beschreibung des Elements <br/>" ist, wird das wie folgt angegeben:

<description>Beschreibung des Elements &amp;lt;br/&amp;gt;</description> 

Wenn innerhalb eines description-Elements eine Spitzklammer zitiert wird, gibt es überhaupt keine Regel, nach der ein Prozessor vorgehen kann. Bei dem folgenden Element-Inhalt muss der Prozessor "wissen", dass kein Markup gemeint ist:

<description>URIs werden in wissenschaftlichen Quellenangaben in Spitzklammern gestellt, z. B. so: &lt;http:www.example.com&gt;.</description> 

Atom definiert im Gegensatz zu RSS 2.0 detailliert ein Verfahren dafür, HTML und XHTML in Newsfeeds einzubetten. (Auch Atom kann dabei aber nicht ganz auf die Praxis verzichten, mit maskiertem Markup zu arbeiten.)

   

<< zurück vor >>

 

 

 

Tipp der data2type-Redaktion:
Zum Thema Newsfeeds mit RSS und Atom bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: