<<< Date Index >>>     <<< Thread Index >>>

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