Vorlagen (X-Dateiformat, Textcodierung)
Vorlagen definieren, wie der Datenstrom interpretiert wird – die Daten werden anhand der Vorlagendefinition moduliert. In diesem Abschnitt werden die folgenden Aspekte einer Vorlage erläutert und eine Beispielvorlage bereitgestellt.
Es gibt eine spezielle Vorlage – die Kopfzeilenvorlage. Es wird empfohlen, dass jede Anwendung eine Headervorlage definiert und zum Definieren anwendungsspezifischer Informationen verwendet, z. B. Versionsinformationen. Wenn vorhanden, wird dieser Header von der X-Dateiformat-API gelesen. Wenn ein Flags-Element verfügbar ist, wird es verwendet, um zu bestimmen, wie die folgenden Daten interpretiert werden. Das Flags-Element sollte, falls definiert, ein DWORD sein. Ein Bit ist derzeit 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 zwischen binär und Text in der Datei 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 das Unterstrichzeichen (_) enthalten kann. Sie darf nicht mit einer Ziffer beginnen. Die UUID ist ein universal eindeutiger Bezeichner, der in den Standard "Distributed Computing Environment" von Open Software Foundation formatiert ist und durch winkelige Klammern (<>) eingeschlossen ist. Beispiel: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.
Template-Elemente
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.
Art | Größe |
---|---|
WORT | 16 Bits |
DWORD | 32 Bits |
SCHWEBEN | IEEE float |
DOPPELT | 64 Bits |
VERKOHLEN | 8 Bits |
UCHAR | 8 Bits |
BYTE | 8 Bits |
SCHNUR | BEENDETe NULL-Zeichenfolge |
CSTRING | Formatierte C-Zeichenfolge (nicht unterstützt) |
UNICODE | Unicode-Zeichenfolge (nicht unterstützt) |
Auf zusätzliche Datentypen, die von Vorlagen definiert wurden, die weiter oben im Datenstrom aufgetreten sind, kann auch innerhalb einer Vorlagendefinition verwiesen werden. Es sind keine Vorwärtsverweise zulässig.
Ein beliebiger gültiger Datentyp kann als Array in der Vorlagendefinition ausgedrückt werden. Die grundlegende Syntax wird im folgenden Beispiel gezeigt.
array <data-type> <name>[<dimension-size>];
<Bemaßungsgröße> kann entweder eine ganze Zahl oder ein benannter Verweis auf ein anderes Vorlagenelement sein, dessen Wert dann ersetzt wird. Arrays können ndimensional 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 werden. Diese Einschränkungen bestimmen, welche Datentypen in der unmittelbaren Hierarchie eines durch die Vorlage definierten Datenobjekts angezeigt werden können. Eine geöffnete 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 für die Angabe einer geöffneten Vorlage ist drei Punkte, die durch eckige Klammern eingeschlossen sind.
[ ... ]
Eine durch Trennzeichen getrennte Liste benannter Datentypen, gefolgt optional von ihren UUIDs, die in eckige Klammern eingeschlossen sind, gibt eine eingeschränkte Vorlage an.
[ { data-type [ UUID ] , } ... ]
Das Fehlen einer der oben genannten Elemente gibt eine geschlossene Vorlage an.
Vorlagenbeispiel
Im Folgenden finden 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
}
Verwandte Themen