html.pages.de
die f�nfte ausgabe von html.pages handelt..
|
Berlin, 2004-06-13 Im Prinzip liefern XMLsucks Wiki und XMLsucks.org schon die vielen Gr�nde weswegen XML, das vereinfachte Kind von SGML, noch lange nicht einfach genug ist. Zuviel Text, zu schlecht zu parsen, semantisch uneinheitlich (verwende ich jetzt Attribute oder Children?) und �ber seine Aufgabe der Datenaustauschsyntax �bersch�tzt und pl�tzlich als Allheilmittel betrachtet f�r Datenspeicherung und, ganz schlimm, Netzwerkprotokolle.Aus letzterer Abteilung stammt der Fall, der unsere besondere Aufmerksamkeit weckt: Der Psi Client f�r Jabber versendet nach Eingabe von "Du kannst das <HEAD> weglassen" folgenden XML Code (Ausschnitt): � <body>Du kannst das <HEAD> weglassen</body> �Okay, denkt man sich, der ist kaputt. Das >-Zeichen nach HEAD h�tte zu einem > gewandelt werden m�ssen. Aber es geht weiter. Der Jabber Server akzeptiert die Syntax, und man kann schon froh sein, wenn er sie nicht unver�ndert weiterverteilt (die neue Version tut das). Hoffentlich ist diese Kodierung nicht erlaubt, und beide Programme fehlerhaft. Die XMPP-Spezifikation verbietet sie, verweist dabei auf �4.6 der XML-Spezifikation zur Festlegung der predefined entities. Somit ist XMPP nicht ganz bl�d:
� character data or attribute values containing unescaped characters that map to the predefined entities (Section 4.6 therein); such characters MUST be escaped �Wie kommt es dann, dass mehrere Programme in dieser Hinsicht fehlerhaft sind? Das liegt vermutlich daran, dass sie mehr oder weniger standardisierte XML-Implementationen verwenden, welche diese Einschr�nkungen nicht beachten, und -jetzt kommts- gem�� XML-Spezifikation ist oben genanntes Beispiel n�mlich g�ltiges XML! Man kann sich beim Parsen von XML also nicht einmal auf die Abwesenheit von >-Zeichen im character data Bereich verlassen! Da heisst es n�mlich: � The right angle bracket (>) MAY be represented using the string ">", and MUST, for compatibility, be escaped using either ">" or a character reference when it appears in the string "]]>" in content, when that string is not marking the end of a CDATA section. �Wie gn�dig, man darf es escapen. Was folgern wir aus dieser Erfahrung? Schreibe NIEMALS einen eigenen XML-Parser. Wenn Du XML nicht vermeiden kannst, verwende eine etablierte Implementation die alle Absurdit�ten beherrscht. Denn so machbar es zun�chst auch erscheint, Dein XML-Parser wird Dich mehr Zeit kosten, als die Applikation die Du damit ausstatten wolltest. Allerdings, wenn Du damit Jabber-Protokoll implementieren willst, dann wird sich Deine Applikation ebenfalls im Bruch mit XMPP befinden, aber damit ist sie ja dann in bester Gesellschaft. W�rdest Du Dich tats�chlich an XMPP halten, w�ren alle Psi-Anwender ausgeschlossen.
|