Neues Dateiformat: Was ist zu beachten?

Neben einer guten Datenstruktur sind beim Entwurf eines neuen Dateiformats auch das Umfeld der Applikation und die Zeitachse nicht zu vergessen. Vorkehrungen für die Abgrenzung zu anderen Applikationen und die gute Behandelbarkeit von Versionswechseln müssen am Anfang getroffen werden.

Die Fokussierung auf die konkrete Applikation und die zu realisierende erste Version lässt den Applikationsentwickler bei der Definition eines Dateiformats allzu schnell das Umfeld der Applikation sowie die Zeitachse vergessen. Aber auch die wichtigste Applikation ist nicht alleine auf der Welt. Und auch von der unscheinbarsten Applikation werden mit grosser Wahrscheinlichkeit weitere Versionen erstellt.

Der Grundstein für eine gute Ausnahmen- und Fehlerbehandlung wird bei der Definition des Dateiformats gelegt. Mit ein paar zusätzlichen Vorkehrungen ist man auch für das noch Unerwartete gerüstet. Empfehlen möchte ich folgende Punkte:

  • an erster Stelle in der Datei: die Dateiformat-Kennung
  • an zweiter Stelle in der Datei: die Dateiformat-Version
  • eine spezifische Dateinamenerweiterung definieren (auch bei XML-Dateien)
  • die Datei validierbar machen

Nachfolgend die Erklärungen zu den vier Empfehlungen:

An erster Stelle: die Dateiformat-Kennung

Da der Dateiname und damit die Dateinamenerweiterung von jedem Benutzer einfach geändert werden kann, ist die Dateiendung zur Identifikation des Dateiformats nicht ausreichend. Das Öffnen von Dateien, welche zwar die gleiche Dateinamenerweiterung haben, aber nicht zur dieser Applikation gehören, soll nicht zum Absturz der Applikation führen, sondern zu einem definierten Verhalten mit einer sinnvollen Fehlermeldung im Sinne von „Die Datei … kann nicht geöffnet werden …“. Und ganz wichtig: fälschlicherweise mit dieser Applikation geöffnete Dateien müssen unverändert bleiben!

Um zur Applikation zugehörige Dateien erkennen zu können, ist am Anfang der Datei eine Kennung vorzusehen, welche das Format kennzeichnet. Wieso am Anfang? Die Formatierung der nachfolgenden Daten hängt vom Dateiformat und dessen Version ab. Der Applikation wird somit beim sequentiellen Einlesen der Datei ermöglicht, bei Abwesenheit der richtigen Kennung am Anfang der Datei die weitere Verarbeitung abzubrechen.

Bei XML-Dateien übernimmt sinnvollerweise das Wurzelelement die Rolle der Kennung. Es ist  - gleich nach der XML-Deklaration - das erste Element in der Datei. Kennungen wie „data“ oder „config“ sind als Wurzelelement zu allgemein. Zu verwenden ist besser eine Kennung, welche einen Rückschluss auf die enthaltenen Daten und das zugeordnete Programm erlaubt.

Bei Binärformaten ist zu empfehlen, die Kennung als absolut erstes Element zu verwenden. Zusammen mit der gleich danach folgenden Dateiformat-Version definiert die Kennung, wie die danach folgenden Daten formatiert sind. Dies ermöglicht, später die Formatierung der darauf folgenden Daten zu ändern, ohne dass der Benutzer davon Kenntnis haben muss.

An zweiter Stelle: die Dateiformat-Version

Um sich Änderungen an der internen Struktur der Datei vorbehalten zu können ohne dabei jeweils die Versionskompatibilität brechen zu müssen, ist direkt nach der Dateiformat-Kennung eine Dateiformat-Version vorzusehen. Diese Versionsangabe erlaubt es der lesenden Applikation, die nachfolgenden Daten selektiv zu behandeln, je nach deklarierter Dateiformat-Version.

Die Dateiformat-Version ermöglicht es …

  • die Daten richtig zu interpretieren
  • für die nachfolgenden Daten das richtige Validierungsschema zu verwenden
  • eine sinnvolle Fehlermeldung anzuzeigen, wenn das Format nicht korrekt behandelt werden kann
  • die Daten in das neue Dateiformat zu konvertieren

Spezifische Dateinamenerweiterung

Die Datei, deren Dateiformat definiert wird, soll der entsprechenden Applikation zugeordnet werden können. Die Dateiendung „.xml“ ist zu allgemein und daher wenig sinnvoll, auch wenn es sich um eine XML-Datei handelt.

Die gewählte Dateinamenerweiterung sollte sinnvollerweise noch unbenutzt sein. Ein Normierungsgremium für Dateinamenerweiterungen existiert nicht. Eine gute Möglichkeit, zu checken, ob die favorisierte Dateinamenerweiterung bereits verwendet wird, ist die Liste von Wikipedia: http://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen

Übrigens: Aktuelle Betriebssysteme sind nicht auf Dateinamenerweiterungen mit drei Buchstaben beschränkt. Eine Dateiendung mit vier Buchstaben erhöht die Wahrscheinlichkeit, einer eindeutigen Zuordnung.

Wenn der Installer der Applikation entsprechend konfiguriert ist, wird die Dateinamenerweiterung bei der Installation der Applikation beim Betriebssystem registriert und ein Doppelklick auf die Datei öffnet die Datei mit der zugehörigen Applikation.

Datei validierbar machen

Bei der Validierung werden Datenstrukturen und -inhalte anhand einer Strukturbeschreibung auf Gültigkeit geprüft. Elemente, welche zum Dateiformat nicht konform sind, werden zuverlässig erkannt, was eine gute Fehlerbehandlung ermöglicht. Bei einem XML-Dateiformat kann die Dateistruktur mit einem gängigen Validationsschema, z.B. XML-Schema, beschrieben werden.

Neben dem Erkennen von korrupten Dateien im Echtbetrieb besteht ein weiterer Vorteil der Validierung darin, dass bei der Entwicklung der Applikation mit Hilfe eines validierenden XML-Editors, z.B. jEdit mit XML-Plugin, auch von Hand einfach und schnell gültige Test-Dateien erstellt werden können.

Zwei Gründe, wieso es ratsam ist, das Schema vor oder parallel zur Definition des Dateiformats zu definieren und nicht im Nachhinein zu ergänzen:

  • Die Erstellung des Schemas fördert die Reflexion der beabsichtigten Struktur der Datei. Nicht optimale Strukturen werden schneller sichtbar.
  • Bereits existierende Dateiformate lassen sich nachträglich unter Umständen nicht vollständig validierbar im Schema abbilden. Die Definition des Schemas gleich zu Beginn ermöglicht es, die Einschränkungen des jeweiligen Schema-Typs zu berücksichtigen.

Übrigens: Auch im Schema sollte eine Version deklariert sein - am Anfang der Datei. Geeignet dafür ist das Annotation-Element.

 

Ergänzungen? Widerspruch? Teilen Sie Ihre Anregungen über das Kontaktformular mit.