Re: [FYI] Bin?res XML -
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
kk@boss /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
kk@boss /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
kk@boss /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
kk@boss /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
kk@boss /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:
kk@boss /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
--
To unsubscribe, e-mail: debate-unsubscribe@xxxxxxxxxxxxxx
For additional commands, e-mail: debate-help@xxxxxxxxxxxxxx