depp: XML/RSS/RDF-Parser

moin

hab mir nun nen parser gebastelt, der bei http://www.phpclasses.org/browse.html/latest/latest.xml bestens funktioniert.
auch mit dem ergebnis des rss tutorials auf http://www.mnot.net/rss/tutorial/ klappts einwandfrei.

ABER z.b. mit http://www.tagesschau.de/newsticker.rdf kommt gar kein ergebnis zustande.

könnt Ihr mir sagen, was der unterschied zwischen denen ist??
oder sind euch möglich fehlerquellen bekannt?

vielen dank für eure hilfe...

  1. Hallo »Depp«,

    könnt Ihr mir sagen, was der unterschied zwischen denen ist??
    oder sind euch möglich fehlerquellen bekannt?

    Es gibt lauter verschiedene Formate, die sich dummerweise alle gleich
    RSS nennen. Am besten erklärt man das, wenn man die Geschichte von RSS
    nacherzählt:

    Es begann mit der Firma Netscape. Diese entwickelte für ihr Portal MyNetscape
    so ziemlich das erste RSS, ein XML-Format, mit dem man Neuigkeitenschnipsel
    aus den unterschiedlichsten auf einer zentralen Seite zusammenfassen konnte.

    Diese RSS-Version ist RSS 0.9. Technisch basierte das auf dem damals in
    Entwicklung befindlichen RDF-Standard, dementsprechend steht RSS für diese
    Version für »RDF Site Summary«. Das ist das Format von Tagesschau.de
    Erkennbar ist das an dem Namensraum, der oben im Rootelement definiert wird
    und als eindeutige URL die Netscape-URL nimmt:

    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
               xmlns="http://my.netscape.com/rdf/simple/0.9/">

    Auftritt der Firma Userland von Dave Winer. Userland hatte ein ähnliches
    Format für einen ähnlichen Zweck in der Mache, dann sind sie auf RSS
    umgeschwenkt. Und damit geriet die Weiterentwicklung in die Hände der Firma
    Userland, Netscape gerät hiermit auf dem Blickfeld. Dave Winer entwickelte
    nun nacheinander die RSS-Standards RSS 0.91, 0.92, 0.93, 0.94; die beiden
    letzteren waren aber nur experimentelle Versionen, trotzdem werden sie
    benutzt.

    Diese sind nicht mit RSS 0.9 kompatibel. Der Grund liegt darin, daß hier
    auf das kompliziertere RDF-Modell verzichtet wurde, das Ziel lag mehr
    darin, ein ziemlich einfaches XML-Format definieren, daß man leicht
    erlernen kann, wenn man sich einfach nur den Quellcode anguckt, ähnlich,
    wie viele Leute HTML gelernt haben. Das KISS-Prinzip. Manche sagen, es
    wurde zu wenig spezifiziert. Wie auch immer. Konsequenterweise steht hier
    RSS für »Rich Site Summary«. Diese RSS-Versionen erkennt man auf die
    Schnelle an diesem Rootelement und dessen Versionsattribut:

    <rss version="0.91">

    Auftritt einer neuen Gruppe irgendwo zwischen Privatleuten, dem W3C und
    des Computerbuchverlages O&#39;Reilly. Diese fand Dave Winers Version zu
    unterspezifiziert, fanden das RDF-Modell besser und schöner und hatten ein
    Bedürfnis nach mehr. Diese entwickelten dann einen neuen RSS-Dialekt, den
    sie RSS 1.0 nannten und empfanden diesen als legitime Weiterentwicklung
    des alten RSS 1.0. Die wichtigste Neuerung sind hier die sogenannten
    Namensräume, das heißt, man hat wie in XML üblich hier die Möglichkeit
    neue Elemente einzubinden, wenn man denn meint, daß man sie braucht. RSS 1.0
    ist sehr schlank ausgelegt, alles andere spielt sich in Namensräumen ab.
    Für mehr siehe hier: http://web.resource.org/rss/1.0/

    Hier steht RSS konsequenterweise wieder für »RDF Site Summary«. Die RSS-Feeds,
    die Du parsen kannst, gehören dieser Kategorie an, man erkennt sie auf dem
    ersten Blick an der URL http://purl.org/rss/1.0/ in der Namensraumdeklaration:

    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
               xmlns="http://purl.org/rss/1.0/"
               xmlns:dc="http://purl.org/dc/elements/1.1/">

    (Mit dem Namensraum dc werden hier Elemente aus dem Dublin Core Metadaten
    Standard eingebunden)

    Nun kommt wieder Dave Winer ins Spiel. Zu dem Zeitpunkt gab es zwei konkurrierende
    RSS-Formate, RSS 0.9x und RSS 1.0. Wegen der manchmal etwas schwierigen
    Art von Dave, war er nicht an der Entwicklung von RSS 1.0 beteiligt. In
    etwa sah er ein Format, das zwar sehr viel mehr bot als das »simple« RSS 0.9x,
    aber auch wegen des RDF-Modells schwieriger zu erlernen war. Aber trotzdem
    wechselten viele auf RSS 1.0, eine »1.0« klingt halt sympatischer als eine
    »0.9x«. Sein nächster Standard war dann RSS 2.0, in etwa ein etwas erweitertes
    RSS 0.9x, in dem nun auch Namensräume erlaubt waren. Also in etwa das gleiche.
    Tja. Die Verwirrung war groß. Schon allein, weil RSS hier für »Really
    Simple Syndication« steht. Auf dem ersten Blick erkennt man RSS 2.0 wieder
    am Rootelement:

    <rss version="2.0">

    Die »Spezifikation« dafür liegt hier: http://blogs.law.harvard.edu/tech/rss

    Ich schreibe Spezifikation in Anführungsstrichen, weil es dann doch etwas
    unterspezifiziert ist. Es gibt Doppeldeutigkeiten, Dinge, die nicht bis
    ins letzte i-Tüpfelchen spezifiziert sind, all sowas eben. Die meiste
    Zeit und für die meisten Zwecke bemerkt man es nicht mal. Aber manchmal
    stolpert man doch etwas darüber. Und es sind einige darüber gestolpert.
    Weswegen hier eine neue Gruppe ins Spiel kommt, eine Menge von unzufriedenen
    Entwicklern, die sich daran setzten, einen neues Format zu spezifizieren,
    diesmal so wasserdicht und ausgeklügelt wie möglich. Das ist jetzt bald
    anderthalb Jahre her und sie sind immer noch dabei. Gerechterweise muß
    man sagen, daß sie einen härteren und langsamen Weg gewählt haben, sie
    wollen ihren Standard durch die IETF standardisieren lassen. Die IETF ist
    so in etwa das Standardisierungsgremium des Internets, Mail, News, SSH
    und vieles anderes wurde dort spezifiziert. In etwa wird das dann etwas
    mehr »offizieller« als nur ein im Web rumfliegendes Dokument.

    Gottseidank haben sie - um sich von dem ganzen Durcheinander abzusetzen -
    einen neuen Namen gewählt: Atom. Und nein, diesmal steht das für nix,
    Akronyme sind out. ;o) Auch wenn sich das ganze immer noch im Prozess der
    Standardisierung befindet - Atom wird bereits benutzt. Der vorläufige
    Standard dafür liegt hier: http://www.atomenabled.org/developers/syndication/atom-format-spec.php

    Um es zusammenzufassen: Wenn man einen Parser für RSS und ähnliche Formate
    schreiben will, muß man sich mit lauter unterschiedlichen, untereinander
    nicht kompatiblen Spezifikationen befassen, wenn man es noch viel richtiger
    machen will, muß man sich durch viele Diskussionen in vielen unterschiedlichen
    Weblogeinträgen quälen, auf der Suche nach versteckten Hinweisen und man
    darf sich von dem ganzen Durcheinander nicht panisch machen lassen. ;)

    (Für mehr Auflistung von Inkompabilitäten siehe http://diveintomark.org/archives/2004/02/04/incompatible-rss

    Und es gibt viele, die das schon getan haben. Ein Beispiel für einen
    universellen Parser ist der »Universal Feed Parser« von Mark Pilgrim,
    programmiert in Python. Mark Pilgrim ist einer der Korinthenkacker, der
    RSS immer kritisch begleitet haben, der sich sehr häßliche Gefechte mit
    Dave Winer geliefert hat und dann Atom mit ins Leben gerufen hat. Aufgrund
    viele kleiner korinthenkackenden Einträge in seinem Weblog, kann man mit
    sehr großer Sicherheit davon ausgehen, daß er weiß, was er macht und ziemlich
    viel beachtet hat. Sein Parser parst RSS von 0.9 bis 2.0 und Atom in den
    unterschiedlichsten Textkodierungen, unter den unterschiedlichsten Umständen
    aus dem Web gefischt: http://feedparser.org/

    Aber es gibt auch andere solche Projekte, einfach mal bei PEAR oder CPAN
    gucken. Das letzte Projekt, das mir aufgefallen ist, ist ein bei Sun
    entwickelter Feed Parser in Java: https://rome.dev.java.net/

    Oder Du machst Dir ganz viel Arbeit und schreibst etwas eigenes. ;o)

    Tim

    1. Hallo Tim,

      möchte nur mal kurz sagen: vielen Dank für den tollen Text!

      Gruß,
      _Dirk

      P.S.: damit hast du die Erwartungen an einen Feature-Artikel zu diesem Thema allerdings weiter verstärkt, das weißt du? :-)