Hallo zusammen,
bei uns ist eine Diskussion aufgekommen, wie man bestimmte Informationen speichern sollte. Grundsätzlich handelt es sich bei diesen Informationen um Definitionen von Kommandos für ein Bussystem, zählt man die typspezifischen und herstellerspezifischen mit, kommt man dabei auf zurzeit an die 500, um mal eine Zahl zu nennen. Hierbei sind wir zurzeit für die Standardpflege zuständig, letztendlich soll das Ergebnis eine leicht erweiterbare vollständige Dokumentation des Bussystems sein, die sich gegebenenfalls auch firmenintern erweitern lässt (zum Beispiel mit den besagten herstellerspezifischen Kommandos). Die Definitionen bestehen dabei unter anderem aus Name, Nummer, Beschreibung, einigen Informationen über den Versand und Definitionen über ihre Zusammensetzung (welches Byte wird wie zusammengesetzt). Außerdem haben wir (letztendlich in einer weiteren Tabelle) die Information, welches Gerät welche Standardkommandos und gegebenenfalls welche zusätzlichen Kommandos implementiert.
In der Vergangenheit habe ich ein Programm implementiert, das diese Kommandos mitliest und anzeigen kann, einschließlich vielen Details, die sich unter anderem aus den Definitionen ergeben. Zu diesem Zweck habe ich damals die Kommandos als
XML definiert - Kommandogruppen enthalten Kommandos, eine relativ flache Hierarchie. Im Zuge dieser vollständigen Dokumentation wäre mein Ansatz daher grundsätzlich, es bei diesem
XML zu belassen - weitere Zusammenhänge kann man bei Bedarf relativ einfach mit XSLT darstellen. Wirkliche Nachteile gegenüber einer rein relationellen Darstellung sehe ich daher zurzeit nicht.
Ein Kollege ist nun aber der Meinung,
XML sei nicht nur viel zu aufgeblasen und daher bei manueller Bearbeitung sehr ungünstig, sondern auch insgesamt viel zu unflexibel und arbeitet daher nun an einer Domain Specific Language (DSL), also einer Sprache, die diese Probleme beseitigen soll. Implementiert mit Ruby, so definiert man quasi die Befehle in einem Skript mit nur minimalen syntaktischen Eigenheiten. Das sieht auch nicht schlecht aus, aber ehrlich gesagt finde ich nicht, dass es einfacher als
XML zu schreiben ist. Man muss sich immerhin trotzdem an gewisse syntaktische Vorgaben halten, die in meinen Augen sogar weniger intuitiv sind als die von
XML. Außerdem hat man als Ergebnis ein Skript, aus dem man dann zwar wieder mit entsprechenden Mitteln andere Formate einschließlich
XML generieren kann (indem man ein entsprechendes Skript schreibt) - aber den Vorteil sehe ich immer noch nicht, zumal man mit
XML erstens ebenfalls beliebige Textformate generieren kann und zweitens sehr einfach einen grafischen Editor entwickeln kann, wodurch der vermeintliche Nachteil des schlechteren manuellen Bearbeitens wegfällt.
Außerdem kann man das Skript schlecht in anderen Programmen verwenden und benötigt immer eine Laufzeitumgebung,
XML hingegen lässt sich fast überall problemlos bearbeiten und es lässt sich einfach ein Programm schreiben, das die Transformationen durchführt (ironischerweise zum Beispiel mit einem Ruby-Skript).
Nun hat sich unser Projektmanager letztendlich dazu entschieden, mittelfristig auf
XML als primäre Datenquelle umzustellen, was ich sehr begrüße, meinem DSL-Kollegen jedoch eher Kopfschmerzen bereitet, weil er fürchtet, bestimmte Probleme ließen sich letztendlich mit
XML nur mit größten Verrenkungen umsetzen. Seine
XML-Erfahrung und insbesondere die in erweiterten Dingen wie XPath und XSLT ist natürlich auch beschränkt, ähnlich wie meine bezüglich Ruby und DSL.
Ergänzung:
Ich vergaß noch zu erwähnen, welchem Zweck diese Daten dienen. Aus den Definitionen soll sich eine (Text-)Dokumentation generieren lassen, sie sollen für zukünftige Programme verwendet werden können, man soll Header-Dateien für die Embedded-Abteilung generieren können, aber auch für die PC-Software-Abteilung, soll die Definitionen gegebenenfalls direkt in Programmen verwenden können, und sowohl wir PC-Software-Leute als auch die Embedded-Leute sollen die Definitionen ergänzen können.
Mich würde aber nun einmal interessieren, ob ihr irgendwann auch einmal vor einem derartigen Problem standet und wie euer Ergebnis war, oder wie ihr dieses Problem eben angehen würdet. Hat jemand Erfahrung mit DSLs, positive oder negative? Alles, was euch hierzu einfällt, interessiert mich.