Zum Inhalt springen

Structured Data Exchange Format

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 18. Juni 2005 um 18:01 Uhr durch Lukian~dewiki (Diskussion | Beiträge) (+en:). Sie kann sich erheblich von der aktuellen Version unterscheiden.

"Structured Data eXchange Format" (kurz SDXF) ist ein hierarchisch strukturiertes Datenformat.

Zweck dieses Formats: Es sollen (fast) beliebig strukturierte Daten zwecks Austauschs aufgenommen werden können. Dieses Format ist gleichermassen geeignet als Dateiformat als auch als Networking-Message-Format.

SDXF läßt eine Strukturierung in beliebiger Tiefe zu, die einzelnen Datenelemente sind selbstbeschreibend. Das Format ist bewußt einfach gehalten, trotzdem soll es transparent sein, d.h. die Programme greifen über Grundfunktionen und Tools auf die Datenelemente zu, der Anwender (Programmierer) braucht sich um den genauen Aufbau der Datenstruktur nicht zu kümmern.

SDXF unterstützt auch den Datenaustausch über verschiedene Rechnerarchitekturen hinweg durch eine transparente Umsetzung der Daten.

SDXF ist verbindlich als Internet RFC3072 veröffentlicht (RFC=Request for Comment, siehe auch; RFC), oder strukturiert: RFC3072(Zvon)).

Was sind nun strukturierte Daten? Es ist zunächst nicht so einfach, ein Beispiel für nicht-strukturierte Daten zu finden: Auch ein normaler Text z.B. ist ja in Zeilen, Absätze usw. "strukturiert". Gemeint sind hier aber Strukturen, die von den beteiligten Programmen als solche erkannt und verarbeitet werden. Hier ein Beispiel aus dem kaufmännischen Bereich: Zwei Firmen, die in einer geschäftlichen Beziehung stehen, beschliessen ihre Rechnungsstellung elektronisch abzuwickeln. Eine "Rechnung" ist dann ein elektronisches Dokument mit folgender hierarchisch verschachtelter Struktur:

RECHNUNG  
 │
 ├─ RECHNUNGS_NR  
 ├─ DATUM
 ├─ ANSCHRIFT_SENDER
 │    ├─ NAME
 │    ├─ NAME
 │    ├─ STRASSE
 │    ├─ PLZ
 │    ├─ ORT
 │    └─ LAND
 ├─ ANSCHRIFT_EMPFÄNGER
 │    ├─ NAME
 │    ├─ NAME
 │    ├─ STRASSE
 │    ├─ PLZ
 │    ├─ ORT
 │    └─ LAND
 ├─ RECHNUNGS_SUMME
 ├─ EINZELPOSTEN_ALLE 
 │    ├─ EINZELPOSTEN
 │    │    ├─ ANZAHL
 │    │    ├─ ARTIKELNUMMER
 │    │    ├─ ARTIKELTEXT
 │    │    ├─ PREIS
 │    │    └─ SUMME
 │    └─ ...           
 ├─ KONDITIONEN
 ...

usw.

Ähnliche und komplexere Strukturen gilt es in SDXF abzudecken. Das grundlegende Konstruktionselement ist das "Chunk" (Abschnitt): Die gesamte SDXF-Struktur ist ein Chunk und ein Chunk kann aus mehreren Chunks bestehen.

Ein Chunk wiederum ist sehr einfach aufgebaut: Er besteht aus einem Vorspann (Header) von 6 Bytes, gefolgt von den eigentlichen Daten. Im Header ist eine Bezeichnung des Chunks als eine 2-Byte Binärzahl (Chunk-ID) untergebracht, ausserdem die Länge der nachfolgenden Daten und eine Kennzeichnung über den Typ der Daten und eventuelle zusätzliche Informationen (Komprimierung, Verschlüsselung und andere).

Der Daten-Typ informiert uns ob die Daten aus Text bestehen, ob sie eine Binärzahl darstellen (Ganzahl oder Gleitkomma) oder ob die Daten sich aus einer Reihe von weiteren Chunks zusammensetzen (strukturierter Chunk).

Gerade die Existenz der strukturierten Chunks ermöglicht es auf einfache Art und Weise hierarchische Konstruktionen wie obige RECHNUNG in eine SDXF-Struktur zu packen: Zunächst muss jedem der genannten Begriffe (RECHNUNG, RECHNUNGS_NR, DATUM, ANSCHRIFT_SENDER, etc) eine eindeutige Nummer (Chunk-ID) aus dem Zahlenbreich 1 bis 65535 zugeordnet werden. Dann ist als erster Chunk der strukturierte Chunk RECHNUNG (Stufe 1) zu konstruieren, welcher aus einer Reihe weitere Chunks der Stufe 2 bestehen: RECHNUNGS_NR, DATUM, ANSCHRIFT_SENDER, ANSCHRIFT_EMPFÄNGER, RECHNUNGS_SUMME, EINZELPOSTEN_ALLE, KONDITIONEN. Manche dieser Chunks der 2. Stufe sind wiederum strukturiert: die beiden ANSCHRIFTen und EINZELPOSTEN_ALLE. Beim Datum hat man die Möglichkeit dieses in Textformat anzugeben, z.B. in der form JJJJ-MM-TT (ISO-Norm) oder auch als Struktur, bestehend aus den 3 numerischen Chunks JAHR, MONAT, TAG. Für die genaue Beschreibung eines Chunks sei nochmals auf den RFC hingewiesen (Seite 2) oder in deutsch: [[1]].

Die Definition des SDXF Konzepts sieht auch vor, dass ein Programmierer mit einem genau definierten Satz von Bearbeitungsfunktionen mit den SDXF-Strukturen arbeitet.

Man kommt dabei mit sehr wenigen Grund-Funktionen aus:

Um Chunks auzulesen, sind die folgenden Funktionen zu benutzen:
init Initialisieren Parameterstruktur und Verknüpfen mit einem vorhandenem Chunks zwecks Analyse.
enter Eintritt in ein strukturiertes Chunk, das 1. Chunk der Struktur wird zur Verfügung gestellt (Cursor).
leave Verlassen der aktuellen Struktur, der Cursor zeigt auf dieses Struktur-Chunk.
next Stellt das nächste Chunk zur Verfügung, der Cursor wird weitergeschaltet.
extract Daten aus dem durch den Cursor positionierten Chunk in einen Benutzerbereich übertragen.
select Stellt das nächste Chunk mit dem angegebenen Namen innerhalb der Struktur zur Verfügung.
Um Chunks zu konstruieren, sind die folgenden Funktionen zu benutzen:
init Initialisieren Parameterstruktur und Verknüpfen eines leeren Ausgabepuffers zum Erzeugen einer neuen Chunkstruktur.
create Erzeugen eines neuen Chunks und anhängen an die bestehende Struktur (falls vorhanden).
append Anhängen eines vollständigen Chunks an eine SDXF-Struktur.
leave Verlassen der aktuellen Struktur, der Cursor zeigt auf dieses Struktur-Chunk.

Beim obigen Rechnungs-Beispiel könnte ein Erstellungsprogramm in etwa so aussehen:

 init (sdx, buffersize=1000);   // initialisieren der SDXF Parameterstruktur sdx
 create (sdx, ID=RECHNUNG, datatype=STRUCTURED); // beginn der Hauptstruktur
 create (sdx, ID=RECHNUNGS_NR, datatype=NUMERIC, value=123456); // elementares Chunk
 create (sdx, ID=DATUM, datatype=CHAR, value="2005-06-17"); // elementares Chunk   
 create (sdx, ID=ANSCHRIFT_SENDER, datatype=STRUCTURED); // Unterstruktur
 create (sdx, ID=NAME, datatype=CHAR, value="Karl Napp"); // Unterstruktur
 ...
 create (sdx, ID=LAND, datatype=CHAR, value="Schweiz"); // Unterstruktur
 leave; // abschliessen der Unterstruktur ANSCHRIFT_SENDER
 ...
 leave; // abschliessen der Hauptstruktur RECHNUNG

Die Syntax ist hier der Einfachheit halber fiktiv, ein vollständiges Beispiel in C findet sich [hier].

Das Auslesen folgt der vorgegebenen Struktur:

 init (sdx, container=Adr. SDXF-Struktur);   // initialisieren der SDXF Parameterstruktur sdx
 enter (sdx); // "Einstieg" in die RECHNUNGs-Struktur
 do while (sdx.rc == SDX_RC_ok)
 {
     switch (sdx.Chunk_ID)
    {
        case RECHNUNGS_NR:
          extract (sdx);    
          rechnr = sdx.value;  // ganzzahlige numerische Werte weden in value abgelegt
          break;
        case DATUM:
          extract (sdx);    
          strcpy (rechdate, sdx.data); // data ist ein Zeiger auf die extrahierte Zeichenkette
          break;
        case ANSCHRIFT_SENDER:
          enter (sdx);  // da die ANSCHRIFT eine Struktur ist    
          do while (sdx.rc == SDX_RC_ok)
           ...
          break;
       ...
    }  
 }

Wie zu sehen ist, werden die einzelnen SDXF Elemente (Chunks) Stück für Stück erstellt. Das mag zunächst umständlich erscheinen, aber:

  1. Spiegelt dies genau die Wirklichkeit des Programmieralltags wieder: Die einzelnen Elemente liegen in verschiedenen Programmvariablen oder Datenbankfeldern vor, bzw. müssen in diese eingelesen werden.
  2. Ist nur so gewährleistet, dass bei einer Struktur mit gemischten Datentypen, diese so aufbereitet (normiert) wird, dass diese ohne Anpassung von einem Rechner auf den anderen (via Dateiübertragung oder Netzwerk) übertragen werden kann. Und zwar unabhängig von der Rechnerarchitektur. Die Problematik der unterschiedlichen Darstellung von Daten wird [hier (Zeichendarstellung)] und [dort (Byte Swapping)] dargestellt. Diese Problematik wird dem Anwendungsprogrammierer von den vorgestellten SDXF-Funktionen vollständig abgenommen.
  3. Verschlüsselung (u.a. nach AES ) und Komprimierung (zip) werden ebenso von den SDXF-Funktionen übernommen (so können auch einzelne Teile komprimiert und/oder verschlüsselt werden.) Beim Auslesen wird automatisch entkomprimiert und entschlüsselt (Passwort muss natürlich stimmen).

Soll die gesamte Struktur doch als editierbare Textdatei bearbeitet werden können, so sei hier noch auf das [SDEF] Format verwiesen (bislang nur auf englisch).

Diese Seite wurde vom Autor vollständig überarbeitet. Bitte um eine neue Beurteilung.