Sunday, May 30, 2010

Automatische Formaterkennung

Warum werden trotzdem alle Formate "durchprobiert" (durchblättern oben rechts bei "Format: xxxxxx" ), auch wenn das Format aufgrund der Dateiendung bereits Rückschluss auf das konkrete Format liefern würde?
Diese Frage wurde gerade im Forum gestellt und ich glaube, daß die Antwort auch andere Nutzer interessiert.
Sei beim Lesen von Daten möglichst lax und beim Schreiben möglichst strikt.
so lautet stark verkürzt ein Informatikprinzip, um Programme robust zu implementieren. Daraus folgt, daß sich der Programmcode beim Lesen der Daten auf die Dateiendung sowieso nicht verlassen dürfte und stur versucht die internen Strukturen mit den gelesenen Daten zu füllen. Stattdessen rechnet guter Programmcode immer damit, kaputte oder falsche Daten vorgesetzt zu bekommen. Diese Robustheit sieht der Nutzer nicht direkt, sie kostet aber viel Aufwand bei der Programmierung.

Also habe ich da aus der Not eine Tugend, d.h. ein Feature, gemacht: RouteConverter erkennt ohne Zutun des Benutzers das Dateiformat und liest die Datei ein.

Dafür kommen alle Formate an die Reihe und dürfen versuchen, die Daten zu lesen. Zu "vorsichtige" Formate lehnen Dateien ab, die eigentlich für sie bestimmt wären - bei den XML-basierten Formaten wie dem Google Earth (*.kml) Format passiert das häufiger. Zu "gierige" Formate interpretieren auch Daten, die sie gar nicht verstehen können, und liefern dann Müll zurück - Garmins POI DB (*.xcsv) ist ein Kandidat dafür.

Treten solche Fehler auf, dann bekomme ich die ziemlich schnell von Nutzern berichtet und behebe sie so schnell es geht. Denn nach etwa 250000 Downloads und mit zehntausenden regelmäßigen Nutzern muß ich aufpassen, daß ich in Supportanfragen nicht untergehe.

Friday, May 7, 2010

XML

Ich werde häufiger danach gefragt und habe deshalb mal eine Kurzdefinition gewagt:

XML ist eine Art, Daten zu beschreiben. Ganz vereinfacht Namen in Klammern um Werte.
<Name1 Name2="Wert1">Wert2</Name1>
Erst eine DTD oder ein Schema erklärt, welche Namen und Werte möglich sind. Details finden sich in den verlinkten Wikipedia-Seiten.

Im RouteConverter Forum hatte ich ausführlicher dazu geschrieben:
Vielleicht kann ich Deine Frage zur Struktur von XML-Dateien beantworten:
  • Elemente werden durch spitze Klammern notiert: <a> wird durch </a> geschlossen
  • Attribute stehen innerhalb des Startelements: <a attribut1="wert" attribut2="wert">
  • Leerzeichen/Leerzeilen/Tabs zwischen Elementen <a></a>HIER<a></a> werden ignoriert
  • Mehr als ein Leerzeichen/Leerzeilen/Tabs zwischen Attributen <a HIERattribut2="wert" HIER attribut2="wert2"/> wird ignoriert
  • Leerzeichen/Leerzeilen/Tabs innerhalb von Elementen <a>HIER</a> oder Attributen <a attribut1="wertHIER"/> können relevant sein - das hängt von der Anwendung ab
Die obigen Ausführungen gelten für fehlerfrei und vorbildlich arbeitende XML-Parser und XML-Schreiber. Leider gibt es damit ab und an Probleme:
  • bis auf GPX, KML und TCX verwendet kein Format XML-Schemata o.ä. um das Format zu spezifizieren
  • ViaMichelin verwendet noch DTDs, verträgt keine optionalen Whitespaces und muß in ISO 8859-1 kodiert werden
  • GoPal-Routen und MN7-Freshroutes müssen in ISO 8859-1 kodiert sein, ganz gleich was in der Prämbel steht
  • Magic Maps nummeriert Elemente über ihre Namen, so daß sich gar kein XML-Schema angeben läßt
  • ITNConv schreibt ISO 8859-1 in die Präambel aber verwendet UTF-8 als Kodierung

Saturday, May 1, 2010

RouteConverter 1.33 is ready

The latest release 1.33 from 1. May '10
Datenschutz