Tim Tepaße: Texte in RSS 2.0 formatieren

Beitrag lesen

Hallo,

Ich suche Hilfe oder Tips zur Formatierung der Texte im "description" Tag von RSS 2.0 Dateien, also einem Newsfeed, zur Darstellung in Newsreadern und nicht auf Webseiten. Konkret sollen die Texte durch Absätze besser strukturiert werden, schön wäre auch die Hervorhebung von Überschriften innerhalb der Texte und ferner das Einfügen von Links.

Du suchst also nach der Nutzung von HTML innerhalb des description-Elementes. Genau das ist von der RSS 2.0 Spezifikation erlaubt, vorausgesetzt man maskiert das HTML. Das kann auf zwei unterschiedliche Weisen geschehen:

• Die drei XML kritischen Zeichen im HTML Quellcode durch ihre Entity-Entsprechungen ersetzen: "<" durch "&lt;", ">" durch "&gt;" und "&" durch "&amp;". Wenn die letztere Zeichenkette trotzdem schon vorhanden ist, macht nix, einfach blind suchen und ersetzen und dann das ganze in das description-Element reinpacken.

• Den HTML Quellcode zwischen "<![CDATA[" und "]]>" setzen, in XML-Lingo ist das ein „Nicht interpretierter Abschnitt“.

Ich schreibe hier im Forum öfter über so etwas, zuletzt an Nikolaus; dort gibt es auch Beispiele.

Du merkst, HTML-in-RSS ist in RSS 2.0 (und im Bruderformat Atom 1.0) schon per default enthalten.

Zum Thema Erweiterung:

Soweit ich das überblicke könnten die bestehenden Möglichkeiten bzw. verfügbaren RSS 2.0 eigenen Tags durch die Programmierung einer XLS Datei und einer eigenen DTD Datei erweitert werden.

Ähm. Nein. XSL(T) hat damit zunächst gar nichts zu tun; dies ist nur eine Möglichkeit der Darstellung von XML – und im RSS-Kontext ist das nicht notwendig, denn der Feedreader übernimmt ja die Darstellung.

Auch eine eigene DTD-Erweiterung ist für RSS unnötig. RSS 2.0 und die meisten Vorgängerformate kennen überhaupt keine DTD, insofern muss man sich darum auch keine Gedanken machen. Erweiterung von RSS geschieht ganz unproblematisch mit XML Namensräumen. Man definiert einfach einen Namensraum und packt seine Elemente da hinein:

~~~xml <rss xmlns:tim="tag:tepasse.org,2007-01-10:selfforum/rss"
       version="2.0">
  <channel>
    <title>Tims lustiger Kanal</title>
    tim:notizIch muss mir mal peppigere Beispiele ausdenken</tim:notiz>
    <link>http://example.org/</link>
    <language>de-DE</language>
    tim:waehrungEUR</tim:waehrung>
    <item>
      ...
    </item>
  </channel>
  </rss>

  
Ich habe hier einfach zwei unnötige Elemente („notiz“ und „waehrung“ eingefügt, aber sie sind in dem durch die URI "tag:tepasse.org,2007-01-10:selfforum/rss" definierten Namensraum, der ich an das Präfix "tim" gebunden habe. Klingt kompliziert, ist es aber nicht. Sprich: Man kann jederzeit beliebige Erweiterungen in RSS einbauen, vorausgesetzt, man stört nicht die Struktur von RSS. Aaaber ...  
  

> ... oder würde dies nicht funktionen, da ein Newsreader selbst erstellte Erweiterungen nicht darstellen könnte?  
  
... die besten Erweiterungen nützen nix, weil, wie Du richtig erkannt hast, ein Feedreader ja auch damigt etwas anfangen muss. Und woher soll er das wissen? Nirgendwoher. Ein Feedreader kennt immer nur eine begrenzte Anzahl von Erweiterungen, diejenigen, die der Programmierer eingebaut hat. Danach sucht er im zu verarbeitenden Feed. Findet er sie, stellt er sie in der vom Programmierer spezifizierten Variante dar, wenn nicht, dann nicht. Erweiterungen, die der Feedreader nicht kennt, ignoriert er.  
  
  

> Bestehen solche Erweiterungen, stehen solche zur freien Verfügung und wo kann ich diese finden?  
  
Dennoch gibt es durchaus viele Erweiterungen für die diversesten Zwecke. Eine gute Anlaufstelle dafür ist [rss-extensions.org](http://rss-extensions.org/wiki/Main_Page).  
  
  

> Wenn nicht vorhanden, welche Dateien konkret wären für eine wie beschriebene Erweiterung zu erstellen?  
  
Für Deinen Wunsch der Formatierung (HTML) braucht es eigentlich keine Erweiterung, wie oben beschrieben. Dennoch gibt es eine dafür, von früher noch, als in RSS noch kein maskiertes HTML erlaubt war. Sie nennt sich [content:encoded](http://web.resource.org/rss/1.0/modules/content/):  
  
  ~~~xml
<rss version="2.0"  
       xmlns:content="http://purl.org/rss/1.0/modules/content/">  
  <channel>  
    ...  
    <item>  
      <title>Ein lustiger Beitrag</title>  
      <link>http://example.org/</link>  
      <description>Einmal in normalen Text ...</description>  
      <content:encoded><![CDATA[<p>Und zum anderen  
          in <abbr title="HTML">HTML</abbr> ...</p>]]></content:encoded>  
    </item>  
  </channel>  
  </rss>

Wieder dasselbe Prinzip, einfach mittels der XML Namensraum Technik einbinden. Dir wird auffallen, dass hier gleichzeitig die Elemente description und content:encoded auftauchen. Das hat zwei Gründe. Zum einen kennt natürlich nicht jeder Feedreader das Element content:encoded, damit der irgendwas anzeigen kann, braucht es natürlich noch description.

Zum anderen hat sich damals unter content:encoded kennenden Feedreadern eine nette Art der Nutzung eingeführt: Der Inhalt von description wird als Zusammenfassung („Excerpt“, „Teaser“) genommen, der Inhalt von content:encoded enthält dann den ganzen Inhalt. Das beherrschen aber nur einige, gute Feedreader. Ist aber ganz nett, da man dadurch die Funktionalität der Elemente <summary> und <content> aus dem Cousinformat Atom 1.0 bekommt, obwohl RSS 2.0 weniger kann als Atom.

Du musst aber nicht content:encoded verwenden; inzwischen verschwindet das langsam in der Vergessenheit.

Wenn Du mit Deinem Feed zufrieden bist, solltest Du nicht vergessen, diesen in einem Feedvalidator auf Richtigkeitkeit überprüfen zu lassen, entweder diesem oder diesem; sie sind beide gut.

Tim