html.pages.de



die f�nfte ausgabe von html.pages handelt..
vom frommen wunsch nach strukturierten daten
mittels XML

und warum das format mehr als t�ckisch ist.

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 &lt;HEAD> weglassen</body> �
Okay, denkt man sich, der ist kaputt. Das >-Zeichen nach HEAD h�tte zu einem &gt; 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 "&gt;", and MUST, for compatibility, be escaped using either "&gt;" 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.