RSS Syntax (xml)

Ronald Nickel

Legendäres Mitglied
Hallo

ich habe einen RSS Feed geschrieben welches allerdings von sämtlichen Validatoren bemängelt wird. Anscheinend reichen meine XML-kenntnisse nicht um eine richtige Deklarartion hinzubekommen.

Die Datei http://www.aerobel.ch/rss.xmlwird im IE7 erst gar nicht angezeigt.

Kann mir jemand sagen warum?

Gruß Ronny
 
QUOTE (Ronald Nickel @ So 16.12.2007, 17:52)ich habe einen RSS Feed geschrieben welches allerdings von sämtlichen Validatoren bemängelt wird.

Da haben die Validatoren auch recht.
biggrin.gif


Mit der einleitenden Xml-Declaration


CODE <?xml version='1.0' encoding='UTF-8'?>


sagst Du, daß es sich bei dem folgenden Dokument um ein Xml-Dokument der Version 1.0 handeln solle.

Durch die Version wird aber unter anderem festgelegt, welche Zeichen als WhiteSpace behandelt werden. Die Xml-Version 1.1 vom Februar 2004 erlaubt - im Gegensatz zur Version 1.0 - einige zusätzliche Zeichen als WhiteSpace, weil sich die Menge der Unicode-Zeichen seit 1998 - dem Zeitpunkt der Version 1.0 - erweitert hat.

Folglich dürfen in der Datei vor der Deklaration keine WhiteSpace notiert sein - das machst Du aber, weil ein Return als erstes dasteht.

Sprich: Das Meckern der Validatoren ist sehr tiefliegend begründet - die Xml-Declaration muß immer am Dateibeginn stehen.

PS: Ein manchmal lästiges Problem ist, daß als 'Fehler' das erste Zeichen nach dem Fehler markiert wird. Und dieses muß ja selbst nicht mehr unbedingt 'falsch' sein.

PPS: Einen grundlegenden Fehler gibt es noch:


CODE <?xml version="1.0" encoding="UTF-8"?>
- <rss version="2.0">
- <channel>
<title>aerobel - exkusive Flugzeugmodelle</title>
<link>http://www.aerobel.ch</link>
<description>aerobel - exkusive Flugzeugmodelle</description>
<language>de-ch</language>
<generator>cold Fusion Studio 5</generator>

...

</channel>
</rss>

Nach der Xml-Declaration folgen entweder WhiteSpace oder sofort das eindeutige Wurzelelement (hier rss). Der '-' davor ist fehlerhaft im Sinne der Regeln wohlgeformter Xml-Dokumente. Die '-' danach sind zwar in diesem schwachen Sinn korrekt, dürften aber den (schärferen) Regeln für RSS-Dokumente widersprechen.
 
QUOTE (Ronald Nickel @ So 16.12.2007, 19:42)Dennoch meckert der Validom Rss validator.

Weil Du nun, da es sich um ein RSS handelt, auch dessen schärfere Regeln beachten mußt (die ich nicht auswendig kenne, weil ich die DTD dazu nicht en detail im Kopf habe).

Aktuell ist die Fehlermeldung bei mir


CODE Das Element rss darf nur Elemente enthalten, jedoch keinen Text.


Das '-' direkt nach <rss ...> dürfte fehlerhaft sein, das rss-Element darf wohl nur Unterelemente, jedoch kein #PCDATA (parsed character data - Text mit Entities) enthalten.

Also:


CODE <?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>mein Titel</title>
<link>www.aerobel.ch</link>
<description>Blindtext</description>
<language>de-de</language>
<copyright>Ronny</copyright>
<webMaster>r.suter@aerobel.ch</webMaster>
<generator>mirabyte Feed Writer</generator>
<pubDate>Fri, 16 Mar 2007 16:14:14 GMT</pubDate>
</channel>
</rss>


PS: Nach der Declaration können WhiteSpace stehen - denn dann sind Documenttype und Version ja bekannt. Nur eben nicht davor.

Die '-' werden bloß von den Browsern immer angezeigt, um so ein Auf- und Zuklappen zu ermöglichen. Das ist aber bloß eine Art der Darstellung, die nix mit Xml zu tun hat.
 
QUOTE (Peter Schneider @ So 16.12.2007, 20:19) Wenn ich den Feed direkt aufrufe:
http://wwww.aerobel.ch/rss.xml

Kommt ne Passwort-Abfrage...
Wie soll dann ein Validator funktionieren?

Da gibt es nichts zu validieren und auch keine Fehler zu diskutieren.

Da ist nur ein w zuviel.

w^4 = wwww
laugh.gif
 
Und die Probleme gehen weiter. im Tag "Title" ist der Umlaut "ä" enthalten den ich dann in "& a u m l ; " umschreiben lasse. Der RSS Validator meckert aber:"Verweis auf eine nicht definierte Entität 'auml'." Seltsamerweise verwende ich die gleiche Schreibweise aber im Tag "Description" - wird aber nicht angemahnt. Wie müssen denn Umlaut XML gerecht verwurstet werden damit ich endlich ruhe habe vor den bösen Validatoren.

Gruß Ronny
P.S. Deklarartion ist: <?xml version="1.0" encoding="UTF-8" ?><rss version="2.0">
 
ä ist soweit ich weiß xhtml-spezifisch. Bei der Angabe encoding='UTF-8' kannst du die Umlaute aber auch direkt einfügen, also z.B. einfach als "ä" - das verwendete Charset muss halt passen (hier UTF-8)
 
Das ist kein Problem, sondern eines der wesentlichen Features von Xml.

Xml unterstützt die verschiedenen Unicode-Transformationsformate (UTF-8, UTF-16) direkt.

Also: Schreibe direkt äöü und liefere die Datei als UTF-8 aus. Letzteres behauptet zwar dein Header, die Datei ist aber noch ANSI. Das gilt für alles außer lt, gt, amp, apos und quot - die sind vordefiniert für <, >, &, ' und ".

Dann können alle Umlaute direkt verwendet werden - und auch alle französischen, spanischen und sonstigen Sonderzeichen einschließlich asiatischer Zeichen.

Die ganzen Html-Umlaute auml, ouml, uuml usw. sind in Xml entsorgt. Html war an dieser Stelle eine elende Quälerei bzw. produzierte bei asiatischen Texten einen unlesbaren Entity-Müll (& # x 5355; ).

In dem anderen Block klappt & ouml;, weil das da in einem CDATA-Block drinsteht. Der ließe sich bei dieser Gelegenheit auch gleich entsorgen, ist eigentlich überflüssig. Man muß bloß beim Auslesen aus einer Datenbank darauf achten, daß die womöglich im Text enhaltenen Spitzklammern / & maskiert werden (also Replace).


Wer lesen will: Unicode statt Ascii - mit Xml beliebige Zeichen verwenden.
 
QUOTE (jAuer @ Fr 28.12.2007, 11:13) Man muß bloß beim Auslesen aus einer Datenbank darauf achten, daß die womöglich im Text enhaltenen Spitzklammern / & maskiert werden (also Replace).

Ja, in PHP z.B. einfach htmlspecialchars() statt htmlentities() verwenden
 
Das (in der aktuellen Fassung - hier mit Leerzeichen, weil sonst die Forensoftware das als 'ä' übersetzt)

QUOTE Baus& # 228; tze


geht zwar und wird auch korrekt angezeigt. Das macht aber den Quelltext unnötig kompliziert.

Und das Problem mit CDATA-Abschnitten sieht man, wenn man die Datei direkt aufruft.


QUOTE <description>
Eines unserer Pilatus PC-21 Modelle ist seit heute mittag im Ladengeschäft von Hope Modellbau in Natura zu besichtigen.
Auf der Homepage von dem Unternehmen Hope findet man auch die Adresse des Hauptgeschäftes in Schöftland, wo das Modell erstmals präsentiert wird.
Hier der Link: <a href="http://www.hopemodell.ch" target="_blank">www.hopemodell.ch</a>
</description>


Da werden die Entities roh angezeigt, weil ein RSS-Leser nichts mehr von Html wissen muss. Im Ernstfall kann das sogar sein, daß der Text unlesbar ist, CDATA löst also das Problem nicht.
 
Hallo
ja- die Daten kommen aus der Datenbank.

Habe ich das richtig verstanden dass ich sobald ich in UTF-8 deklariert habe eigendlich die Umlaute direkt und ihne konvertierung verwenden kann?

Gruß Ronny
 
ja, setzt allerdings voraus, dass die Umlaute und Sonderzeichen UTF-8 kodiert sind.
 
QUOTE (Ronald Nickel @ Fr 28.12.2007, 13:14)Habe ich das richtig verstanden dass ich sobald ich in UTF-8 deklariert habe eigendlich die Umlaute direkt und ihne konvertierung verwenden kann?

Jein.

Die bloße Deklaration in der Datei reicht nicht. Das steht bei dir ja schon drin, funktionieren tut es trotzdem derzeit nicht - weil der Datenstrom nicht UTF-8 ist. Das sind irgendwelche Einstellungen - entweder von Coldfusion oder vom Webserver.

Wenn nix angegeben ist, wird ohnehin UTF-8 als Standard genommen.

Man sieht das, wenn man die Url mit dem Download.exe holt, in Notepad öffnet und 'Speichern unter' wählt. Machst Du das mit einer der Dateien von meinen Domains, dann meldet 'Speichern unter' sofort 'UTF-8' als Codierung. Machst Du das mit deinem RSS, dann ist das ANSI. Da belegt ü bsp. ein Byte, als UTF-8 2 Byte - deshalb klemmt dann die Anzeige oder es ist sogar ein ungültiges Zeichen im Datenstrom.
 
ich muss also bei meinen Hoster mit grimmiger Mine vorbeischauen und ihm vermelden er möge doch bitte die UTF-8 Deklarartion im ColdFusion application-server ermöglichen?

Gruß Ronny
 
QUOTE (Ronald Nickel @ Fr 28.12.2007, 14:11)ich muss also bei meinen Hoster mit grimmiger Mine vorbeischauen und ihm vermelden er möge doch bitte die UTF-8 Deklarartion im ColdFusion application-server ermöglichen?

Wahrscheinlich ja, aber da kann dir nur ein anderer CF-Nutzer weiterhelfen. Keine Ahnung, wo man das einstellt.

Die einen Webdateien (auf sql-und-xml.de) von mir erzeuge ich per Script explizit als UTF-8 und lade sie per FTP hoch. Die anderen (alles auf server-daten.de) werden als .NET - Anwendung ausgeliefert, da ist UTF-8 schon seit Jahren Standard. Dementsprechend habe ich keine Probleme mehr mit Umlauten und nutze auch auml u.ä. schon lange nicht mehr.

PS: Was heißt hier mit grimmiger Miene? Ascii-Auslieferung ist Internet-Steinzeit, das entspricht der Zeit, wo alles noch englisch-dominiert war und Ascii dafür ausgereicht hat. UTF-8 ist spätestens seit Ende der 90-er Standard, die Chinesen und Japaner nutzen das Web ja auch.
 
Zurück
Oben