Frank Brauer: Texte in RSS 2.0 formatieren

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.

Die Lösung sollte möglichst einfach sein, da ich kein ausgebildeter Programmierer bin.

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.

Ist das soweit korrekt oder würde dies nicht funktionen, da ein Newsreader selbst erstellte Erweiterungen nicht darstellen könnte?

Bestehen solche Erweiterungen, stehen solche zur freien Verfügung und wo kann ich diese finden?

Wenn nicht vorhanden, welche Dateien konkret wären für eine wie beschriebene Erweiterung zu erstellen?

  1. 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

    1. Hallo

      Prima, vielen Dank erstmal. Das konnte ich schnell umsetzen.

      Vielleicht füge ich kurz an, dass entweder die eine Variante, Ersetzen von kritischen Zeichen, oder das Einfügen von CDATA anzuwenden ist. (Habe beides probiert.) Das ist doch soweit richtig, oder?

      Hierzu noch eine Frage: Welche Variante ist denn hinsichtlich der Kompabilität von Newsreader und auch Content Syndication, also der möglichen Integration des Feeds durch Dritte in eigene Webseiten, zu bevorzugen? Sind beide Varianten gleichwertig bzw. bezüglich der Lesbarkeit identisch?

      Ausserdem würde mich doch nochmal die Frage interessieren wieso ein Newsreader ggf. einen erweiterten, selbst definierten Namespace nicht erkennen sollte. Ist dies eine RSS spezifische Frage oder gilt dies allgemein für XML? Und wieso nicht über eine DTD Datei? In einer solchen sind doch z.B. die Befehle für z.B. WML oder XHTML festgeschrieben. Die Möglichkeit individueller Erweiterungen, dachte ich, sei ein XML spezifisches Merkmal und ein besonderer Vorteil gegenüber HTML. Oder bräuchte man zum Auslesen individuell erweiterter XML Dateien einen speziellen XML Reader?

      1. hi,

        Vielleicht füge ich kurz an, dass entweder die eine Variante, Ersetzen von kritischen Zeichen, oder das Einfügen von CDATA anzuwenden ist. (Habe beides probiert.) Das ist doch soweit richtig, oder?

        Hierzu noch eine Frage: Welche Variante ist denn hinsichtlich der Kompabilität von Newsreader und auch Content Syndication, also der möglichen Integration des Feeds durch Dritte in eigene Webseiten, zu bevorzugen? Sind beide Varianten gleichwertig bzw. bezüglich der Lesbarkeit identisch?

        Wenn ein Programm XML "kann", kann es auch beide Varianten verstehen - sind absolut gleichwertig.

        Wenn es sie nicht verstehen würde - dann würde es kein XML verstehen, sollte sich dann auch nicht Feedreader nennen, weil Feeds nun mal Anwendungen von XML sind.

        Ausserdem würde mich doch nochmal die Frage interessieren wieso ein Newsreader ggf. einen erweiterten, selbst definierten Namespace nicht erkennen sollte. Ist dies eine RSS spezifische Frage oder gilt dies allgemein für XML?

        Auch hier wieder: Wenn er XML versteht, versteht er auch Namensräume - aber er weiss nicht, was er damit anfangen soll.

        Ist schön und gut, wenn du ein Element frank:mittagessen aus dem angegebenen Namensraum frank einbaust, um darin bei jedem Eintrag zu hinterlegen, was du zum Mittag hattest. Nur woher soll der Feedreader wissen, dass das Element diese Bedeutung haben soll, dass sein Inhalt eben diese Information vermitteln soll?
        Weiss er nicht.

        Und wieso nicht über eine DTD Datei? In einer solchen sind doch z.B. die Befehle für z.B. WML oder XHTML festgeschrieben. Die Möglichkeit individueller Erweiterungen, dachte ich, sei ein XML spezifisches Merkmal und ein besonderer Vorteil gegenüber HTML.

        Wie gesagt, kannst du gerne machen -

        Oder bräuchte man zum Auslesen individuell erweiterter XML Dateien einen speziellen XML Reader?

        • erwarte nur nicht, von Programm die für definierte Formate wie RSS oder ATOM ausgelegt sind, "verstanden" zu werden.
          Die Information, dass frank:mittagessen mitteilen soll, was du zum Mittag hattest, hätte der Programmierer dem Reader einpflanzen müssen, damit dieser wüsste, wie und als was er diese Information verwerten sollte.
          Der Programmierer wusste aber von dieser deiner Absicht, das mitzuteilen, nichts - und sein Programm deshalb auch nicht.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }