Ich habe mal ein wenig mit einer XML-Datei von einem embedded Ger�t 
rumgespielt, d.h. ich habe hier ein Cisco 7960 IP Phone auf dem Tisch, und 
habe mal ein typisches Eingabeformular genommen:

-rw-r--r--   1 kk       members      711 Oct  1 10:16 eins.xml

[EMAIL PROTECTED] /var/tmp $ cat eins.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<CiscoIPPhoneInput>
<Title>XAL-Telefonbuch</Title>
<Prompt>Namen eingeben:</Prompt>
<URL>http://192.168.254.12:80/ciscoxml/tb.php4</URL>
<InputItem>
  <DisplayName>Nachname</DisplayName>
  <QueryStringParam>nachname</QueryStringParam>
  <InputFlags>A</InputFlags>
  <DefaultValue></DefaultValue>
</InputItem>
<InputItem>
  <DisplayName>Vorname</DisplayName>
  <QueryStringParam>vorname</QueryStringParam>
  <InputFlags>A</InputFlags>
  <DefaultValue></DefaultValue>
</InputItem>
<InputItem>
  <DisplayName>Firma</DisplayName>
  <QueryStringParam>firma</QueryStringParam>
  <InputFlags>A</InputFlags>
  <DefaultValue></DefaultValue>
</InputItem>
</CiscoIPPhoneInput>

Wie man sieht, ist das vollkommen haneb�chenes XML. Jeder vern�nftige Mensch 
h�tte das "CiscoIPPhone" aus allen betreffenden Tags weggelassen und dann 
ggf. mit Namespaces qualifiziert.

Ich habe das mal als Nicht-XML in LISP-Syntax geschrieben und aus den Tagnamen 
die Cisco-Werbung weggemacht:

-rw-r--r--   1 kk       members      401 Oct  1 10:19 zwei.xml

[EMAIL PROTECTED] /var/tmp $ cat zwei.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
(input (title XAL-Telefonbuch)(prompt Namen eingeben:) (url
http://192.168.254.12:80/ciscoxml/tb.php4)
(item (displayname Nachname) (querystringparam nachname) (inputflags
A)(defaultvalue))
(item (displayname Vorname) (querystringparam vorname)(inputflags
A)(defaultvalue))
(item (displayname Firma)(querystringparam firma)(inputflags
A)(Defaultvalue))
)

Das sind nur noch 56% der Gr��e.

Nehmen wir mal an, wir k�nnten a la Postscript Funktionsnamen kurz definieren:

-rw-r--r--   1 kk       members      348 Oct  1 10:21 drei.xml
[EMAIL PROTECTED] /var/tmp $ cat drei.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
(def input j prompt p url u item i displayname d querystringparam q
 inputflags f defaultvalue v title t)
(j (t XAL-Telefonbuch)(p Namen eingeben:) (u 
http://192.168.254.12:80/ciscoxml/tb.php4)
(i (d Nachname) (q nachname) (i A)(v))
(i (d Vorname) (q vorname)(i A)(v))
(i (d Firma)(q firma)(i A)(v))
)

Das sind nur noch 48% der Ausgangsgr��e.

Nehmen wir weiter an, das XML-Banner da oben und die Kurzcodierungen sind 
implizit klar.

-rw-r--r--   1 kk       members      189 Oct  1 10:22 vier.xml
[EMAIL PROTECTED] /var/tmp $ cat vier.xml
(j (t XAL-Telefonbuch)(p Namen eingeben:)(u 
http://192.168.254.12:80/ciscoxml/tb.php4)(i (d Nachname)(q nachname)(i 
A)(v))(i (d Vorname)(q vorname)(i A)(v))(i (d Firma)(q firma)(i A)(v)))

Das sind nur noch 26% der Ausgangsgr��e.

Es ist immer noch ein manuell kontrollierbares, mit einem telnet testbares 
Protokoll, in dem die Felddefinitionen immer noch variabel sind.

�bergang auf ein statisches ASCII-Format, hier CSV:

-rw-r--r--   1 kk       members      153 Oct  1 10:30 fuenf.csv
[EMAIL PROTECTED] /var/tmp $ cat fuenf.csv
"XAL-Telefonbuch","Namen 
eingeben:",,"http://192.168.254.12:80/ciscoxml/tb.php4";
"Nachname","nachname",A,""
"Vorname","vorname,A,""
"Firma","firma",A,""

Das sind 21% der Ausgangsgr��e.


Alles mal gzip'ed:

[EMAIL PROTECTED] /var/tmp $ ls -l eins.xml.gz zwei.xml.gz drei.xml.gz vier.xml.gz 
fuenf.csv.gz
-rw-r--r--   1 kk       members      270 Oct  1 10:21 drei.xml.gz (37%)
-rw-r--r--   1 kk       members      296 Oct  1 10:16 eins.xml.gz (41%)
-rw-r--r--   1 kk       members      148 Oct  1 10:30 fuenf.csv.gz (20%)
-rw-r--r--   1 kk       members      159 Oct  1 10:22 vier.xml.gz (22%)
-rw-r--r--   1 kk       members      250 Oct  1 10:19 zwei.xml.gz (35%)

Beachte, da� Fall fuenf durch die Kompression nur noch um ganze 5 Bytes 
schrumpft. Das Ganze lohnt also nur noch f�r gr��ere Dokumente, nicht f�r so 
kleine Dateien.

In diesem speziellen Fall w�rde ASN.1 eher wenig bringen, da hier keine 
Integers oder andere Zahlen sind, die man statt als "4711" (4 Byte) als 00 00 
12 67 codieren w�rde (auch 4 Byte). Die Feldnamen und Texte lassen sich hier 
kaum k�rzer darstellen. Und die OIDs sind unter Umst�nden sogar l�nger als 
die Feldbezeichner in drei.xml.

Auch ein anderes bin�res Codierungsformat w�rde kaum noch was wegziehen.

Es ist aber auch zu erkennen, da� XML in der Tat zu gew�tzig ist.

Kristian

Antwort per Email an