Holger Maaß hat geschrieben:Auch hier kann XML überzeugen. Wenn ich z.B. ein Feld "Kategorie" habe, gebe ich die Werte als "enumeration" vor. Damit ist die Bedeutung des Wertes denke ich auf beiden Seiten (Objektautor vs. Datenauswerter) klar - vorausgesetzt, die Kategorien sind auch selbstredend
Das ginge aber über Freitext-Tags weit hinaus und näherte sich der klassischen Modellierung - und würde, eine XML-Implementation hier annehmend, recht folgenschwere Implikationen für die bestehenden Strukturen bedeuten, zweites, fremdes Modell innerhalb des ersten. Macht man eigentlich nicht.
Erneut weiter ausholend:
In der modellgetriebenen Architektur (Model Driven Architecture, MDA) unterscheiden wir zwischen plattformunabhängigem Modell (Platform Independent Model, PIM) und (Platform Specific Model, PSM). Ich wollte in meinen Beispielen nur den plattformunabhängigen Teil betrachten.
Wie man das Modell nachher implementiert, dass sollte man später entscheiden dürfen. Code-Generatoren gibt es für fast alles, ob XML, JSON, relationale Datenbanktabellen, IDL verschiedener Couleur oder auch schlichte C#-POCOs.
Bleiben wir also plattformunabhängig, abstrakt.
Im echten Tag-Ansatz definieren wir keine domänen-spezifischen Typen. (Domäne: die Zusi-Welt). Wir führen nur eine lineare Liste mit Freitext-Einträgen oder ein Schlüssel/Wert-Wörterbuch, ebenfalls Freitext/Freitext, bar jeder Semantik.
Diese Liste oder das Wörterbuch soll hier vom menschlichen Benutzer gefüllt werden. Der kann da reinschreiben, was immer er möchte. Der eine schreibt „Epoche=spätes 19. Jahrhundert“, der andere „Baujahr=1898“. So lief das bei OSM. Allerdings hatten sie bei OSM die Mittel, das mit viel Gehirnschmalz und Algorithmen der künstlicher Intelligenz im Nachhinein einigermaßen zusammenzuführen und zu vereinheitlichen. Diese Mittel haben wir bei Zusi wahrscheinlich nicht.
Ich würde übrigens die Metadaten in jedem Fall vom eigentlichen Objekt entkoppeln. Warum soll die Laufzeitumgebung von Zusi sich den Ballast aufbürden, das Meta jedes mal mit zu verarbeiten? Interessiert zur Laufzeit nicht. Es besteht doch nur eine Abhängigkeit Meta vom Objekt, nicht umgekehrt. Gerade, wenn man mit Datenmodellen für Meta experimentieren will, wird man sinnvollerweise die originären Zusi-Datenstrukturen damit nicht belasten. (Siehe auch das Konzept der Extension-Methods in C#, mächtig nur dank der Entkopplung). Der eigentliche Datenbestand darf bei externer Meta-Pflege unangetastet bleiben, read-only, ungefährdet.