Umwandlung in Token

Text zu parsen, kann eine sehr aufwändige Angelegenheit sein. Das gilt insbesondere im Fall von XML, das für seine geringe Informationsdichte bekannt ist. Unter der Annahme, dass die in XML abgefassten Ereignismeldungen mehrfach gelesen werden, kann die Umwandlung einzelner Elemente dieser Sprache in maschinell einfacher zu verarbeitende Symbole beträchtliche Rechenzeit einsparen und auch den Platzbedarf zur Speicherung der Daten herabsetzen.

Ich beginne mit einem Beispiel. Die folgende textuelle XML-Sequenz soll in Token umgewandelt werden:

<EventID>1234</EventID>

  1. Die erste spitze Klammer, sie öffnet das Start-Tag des Elements, wird zu einem #OpenStartElementTag# Token.
  2. Die Zeichenkette "EventID" soll der Einfachheit halber unverändert bleiben (tatsächlich würde sie in ein Anwendungs-Token, umgewandelt, so dass sich die Zeichenkette nach ihrer Identifizierung mit dem Token mehrfach wiederverwenden ließe).
  3. Die nächste spitze Klammer schließt das Start-Tag; sie wird deshalb zu einem #CloseStartElementTag# Token.
  4. Dann folgt der Inhalt des Elements. Wäre dies eine XML-Sequenz, so würde sie wiederum in Token umgewandelt.
  5. Schließlich folgt das Ende-Tag des Containers. Es wird zu einem #EndElementTag# Token. Beachten Sie bitte, dass der Name des Tags sich bereits aus der Abfolge von #OpenStartElementTag# Token ergibt und deshalb hier nicht mehr wiederholt wird.

Während die bislang verwendeten Token Elemente beschreiben, markieren andere den Beginn und das Ende des XML-Datenstroms, definieren Attribute und ihre Werte oder dienen als Platzhalter für variable Daten. Hier ist eine Auflistung aller dieser System-Token:

System-Token
WertBedeutungBeispiel
0x00EndOfBXmlStream
0x01OpenStartElementTag< name >
0x02CloseStartElementTag< name >
0x03CloseEmptyElementTag< name />
0x04EndElementTag</ name >
0x05Valueattribut = "wert"
0x06Attributeattribut = "wert"
0x0cTemplateInstance
0x0dNormalSubstitution
0x0eOptionalSubstitution
0x0fStartOfBXmlStream

Die in Token umgewandelte XML-Sequenz sieht schließlich also so aus (der Name des Elements und die eingeschlossenen Daten bleiben wiederum unberücksichtigt): 0x0f 0x01 EventID 0x02 1234 0x04 0x00

Das höherwertigere Halbbyte enthält Flags. Bislang habe ich nur den Wert 0x40 finden können, der anzeigt, dass einem Tag mindestens ein Attribut folgt. Das Flag ist besonders häufig in Verbindung mit OpenStartElementTag zu beobachten: 0x41.

Es fällt auf, dass in der Tabelle einige Werte fehlen. Höchstwahrscheinlich sind sie einigen anderen Sprachelementen von XML zugeordnet, zum Beispiel Zeichendaten (CDATA), Entitäten und Steueranweisungen (PI). Allerdings konnte ich diese bislang in Protokolldateien nicht finden.

Archiv

Impressum

Dieses Blog ist ein Projekt von:
Andreas Schuster
Im Äuelchen 45
D-53177 Bonn
impressum@forensikblog.de

Copyright © 2005-2012 by
Andreas Schuster
Alle Rechte vorbehalten.
Powered by Movable Type 5.12