Vorlagen (X-Dateiformat, Textcodierung)

Vorlagen definieren, wie der Datenstrom interpretiert wird – die Daten werden durch die Vorlagendefinition moduliert. In diesem Abschnitt werden die folgenden Aspekte einer Vorlage erläutert und eine Beispielvorlage bereitgestellt.

Es gibt eine spezielle Vorlage - die Headervorlage. Es wird empfohlen, dass jede Anwendung eine Headervorlage definiert und sie zum Definieren anwendungsspezifischer Informationen wie Versionsinformationen verwendet. Falls vorhanden, wird dieser Header von der X-Dateiformat-API gelesen. Wenn ein Flags-Member verfügbar ist, wird es verwendet, um zu bestimmen, wie die folgenden Daten interpretiert werden. Das Flags-Element sollte, sofern definiert, ein DWORD sein. Derzeit ist ein Bit definiert – Bit 0. Wenn dieses Bit klar ist, sind die folgenden Daten in der Datei binär. Wenn festgelegt, sind die folgenden Daten Text. Sie können mehrere Headerdatenobjekte verwenden, um innerhalb der Datei zwischen Binär- und Text zu wechseln.

Vorlagenformular, Name und UUID

Eine Vorlage weist das folgende Formular auf.

template <template-name> {
<UUID>
    <member 1>;
...
    <member n>;
[restrictions]
}

Der Vorlagenname ist ein alphanumerischer Name, der den Unterstrich (_) enthalten kann. Sie darf nicht mit einer Ziffer beginnen. Die UUID ist ein universell eindeutiger Bezeichner, der nach dem Distributed Computing Environment-Standard der Open Software Foundation formatiert und in winkeligen Klammern (<>) eingeschlossen ist. Beispiel: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Vorlagenmber

Vorlagenmember bestehen aus einem benannten Datentyp gefolgt von einem optionalen Namen oder einem Array eines benannten Datentyps. Gültige primitive Datentypen werden in der folgenden Tabelle definiert.

type Size
WORD 16 Bit
DWORD 32 Bit
GLEITKOMMAZAHL IEEE Float
Double 64 Bit
CHAR 8 Bit
UCHAR 8 Bit
BYTE 8 Bit
STRING NULL-beendete Zeichenfolge
CSTRING Formatierte C-Zeichenfolge (nicht unterstützt)
UNICODE Unicode-Zeichenfolge (nicht unterstützt)

 

Zusätzliche Datentypen, die durch Vorlagen definiert wurden, die zuvor im Datenstrom gefunden wurden, können auch innerhalb einer Vorlagendefinition referenziert werden. Es sind keine Vorwärtsverweise zulässig.

Jeder gültige Datentyp kann als Array in der Vorlagendefinition ausgedrückt werden. Die grundlegende Syntax wird im folgenden Beispiel gezeigt.

array <data-type> <name>[<dimension-size>];

<Dimensionsgröße> kann entweder eine ganze Zahl oder ein benannter Verweis auf ein anderes Vorlagenmember sein, dessen Wert dann ersetzt wird. Arrays können n-dimensional sein, wobei n durch die Anzahl der paarigen eckigen Klammern bestimmt wird, die der Anweisung folgen, wie im folgenden Beispiel gezeigt.

array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];

Vorlageneinschränkungen

Vorlagen können geöffnet, geschlossen oder eingeschränkt sein. Diese Einschränkungen bestimmen, welche Datentypen in der unmittelbaren Hierarchie eines von der Vorlage definierten Datenobjekts angezeigt werden können. Eine offene Vorlage hat keine Einschränkungen, eine geschlossene Vorlage lehnt alle Datentypen ab, und eine eingeschränkte Vorlage ermöglicht eine benannte Liste von Datentypen.

Die Syntax zum Angeben einer offenen Vorlage besteht aus drei Punkten, die von eckigen Klammern eingeschlossen sind.

[ ... ]

Eine durch Trennzeichen getrennte Liste benannter Datentypen, optional gefolgt von ihren UUIDs, die in eckigen Klammern eingeschlossen sind, weist auf eine eingeschränkte Vorlage hin.

[ { data-type [ UUID ] , } ... ]

Das Fehlen einer der oben genannten Vorlagen weist auf eine geschlossene Vorlage hin.

Vorlagenbeispiel

Im Folgenden sehen Sie eine Beispielvorlage.

template Mesh {
<3D82AB44-62DA-11cf-AB39-0020AF71E433>
DWORD nVertices;
array Vector vertices[nVertices];
DWORD nFaces;
array MeshFace faces[nFaces];
 [ ... ]                // An open template
}
template Vector {
<3D82AB5E-62DA-11cf-AB39-0020AF71E433>
FLOAT x;
FLOAT y;
FLOAT z;
}                        // A closed template
template FileSystem {
<UUID>
STRING name;
[ Directory <UUID>, File <UUID> ]    // A restricted template
}

Textcodierung