9. SDEF – Structured Data Editable Format

Dieses Format ist der kleine Bruder des SDXF (Structured Data Exchange Format)

SDEF ist als Übergangs-Format gedacht: Eine SDXF-Struktur (oder eine Sequenz von SDXF Strukturen) kann nach SDEF "entladen" werden, als solches von einem Text-orientiertem System (z.B. REXX oder BASIC) interpretiert oder manipuliert oder manuell mit einem Text-Editor editiert werden. Danach kann diese Struktur wieder in SDXF zurückgeladen werden, um sie dann in eine andere Umgebung zu transportieren.

Die Unterschiede sind:

(+)       SDEF is editierbar und von Menschen lesbar
(-)        SDEF is nicht Plattform unabhängig
(-)        keine transparente Kompression ¹)
(-)        keine transparente Verschlüsselung  ¹)

¹) natürlich kann die SDEF-Datei als ganzes mit entsprechenden Programmen komprimiert und verschlüsselt werden. Dies ist aber SDEF nicht bekannt (daher nicht transparent wie in SDXF)

SDEF ist ein Text-orientiertes Datei-Format: Die Daten sind in Textzeilen organisiert. Die genaue Definition von "Textdatei" ist allerdings System-abhängig:
UNIX benutzt das Zeilenvorschubzeichen (linefeed) um Textzeilen zu trennen,  MSDOS / Windows die Wagenrücklauf-Zeilenvorschub-Sequenz (carriage return, linefeed) und auf dem Mainframe (IBM, Siemens) ist die Datei in Sätzen variabler Länge organisiert (Das Satzformat fester Länge ist für SDEF nicht erlaubt).

Jedes elementare SDXF-Chunk wird als Text-Zeile dargestellt. Die ChunkID und der Datentyp wird in einem festen Kopfteil jeder Zeile untergebracht, der Rest der Zeile wird mit den Chunk-Daten gefüllt. Die Chunk-Länge ist implizit durch die Zeilenlänge gegeben.

Hier die Beschreibung eines elementaren Chunks:

field position length Remark
chunkID 1 5 Dezimalzahl mit führenden Nullen
type 6 1 Datentyp des Chunks (Typzeichen, s.u.)
data 7 var  

oder:

iiiiitddddd...dd
^ ^^

Ein strukturierter Chunk wird durch ein Paar von SDEF-Zeilen ohne Daten und mit den Typzeichen "(" = Beginn der Struktur und ")" = Ende der Struktur definiert. Diese beiden Zeilen umgeben die SDEF-Zeilen welche die Struktur ausmachen. Die Struktur-ChunkID wird bei beiden Zeilen angegeben.

Ein Array (Folge von Werten mit gleicher Länge und gleichem Typ) wird durch ein Paar von SDEF-Zeilen mit den Typzeichen "<" = Beginn des Array und ">" = Ende des Array definiert. Diese beiden Zeilen tragen die ChunkID des Array-Chunks. Der Datenteil der "<"-Zeile enthält die Anzahl der Array-Elemente als ganze Dezimalzahl. Der Datenteil der ">"-Zeile bleibt leer.
Die Zeilen zwischen der Beginn- und Ende-Zeile haben den gleichen Datentyp (die des Array-Chunks). Als Typ sind nur die numerischen Typen "#" (ganze Zahlen) und "!" (Gleitkommazahlen) erlaubt.
Die ChunkIDs der Array-Zeilen bestehen aus der speziellen ("fiktiven") ChunkID '99999' (Echte ChunkIDs haben einen Maximalwert von 65535).
In einer Array-Zeile können mehrere Datenwerte - durch Leerzeichen getrennt - angegeben werden, soviel wie es sinnvoll erscheint. Als Obergrenze sind 250 Zeichen als Zeilenlänge zu empfehlen, dies hängt natürlich auch davon ab wie die SDEF-Sätze verarbeitet werden.
Die einzelnen Array-Elemente haben beim Übergang zu SDXF eine feste Länge: "#" wird zu einem 4-Byte binary (in C: long) und "!" wird ein 8-Byte Gleitkomma IEEE 754-1985 (in C: double).

Hier die Liste der Typzeichen:

type description
# numerische Ganzzahl (integer)
! Gleitkommazahl, z.B. 3.141592 or -31.41596E-1 (float) mit Dezimal-PUNKT!
x Daten mit hexadezimalen Ziffern dargestellt (Leerzeichen zum Trennen erlaubt)
' Text (characters) in der Darstellung des jeweiligen Rechners
/ Text in UTF-8 Notation
< Beginn eines Array
> Ende des Array
( Beginn einer Struktur
) Ende einer Struktur

Es gibt ein Konvertierungsprogramm, welches eine SDXF-Datei nach SDEF und umgekehrt transformiert. Aufruf:

SDXconvert from <eingabedatei> to <ausgabedatei> as <format> <kompressionstyp> <chiffrierschlüssel> NEPL=<anzahl array elemente pro Zeile>

<format> kann sein: SDXF oder SDEF
<compression type> kann sein (nur für die Konvertierung zu SDXF): RL1, DEF (deflate: ZIP Format)
Bei der Angabe eines <kompressionstyp>s bzw. <chiffrierschlüssel>s wird jeweils der Chunk auf höchstem Strukturlevel komprimiert, bzw. verschlüsselt.
Die Parameter <kompressionstyp>, <chiffrierschlüssel> und NEPL sind wahlfrei.