[opengeodb] OpenGeoDB Webinterface
Andreas Hubel
ah at hubel-elektroanlagen.de
Don Nov 2 13:38:23 CET 2006
Hi,
ich hab mich grade durch die ganzen Beiträge der letzen Wochen
durchgeschlagen und will mal versuchen ne Zusammenfassung des ganzen zu
machen:
Um die Sache mit den Gültigkeiten (von-bis) zu vereinfachen, wird das
Projekt OpenGeoDB in zwei Teilprojekte gegliedert.
Teilprojekt 1 bleibt so ungefähr wie es momentan ist, also mit
historischen Daten.
Teilprojekt 2 lässt die historischen Daten zwecks Vereinfachung links
liegen.
Alles weitere bezieht sich nun nur noch auf Teilprojekt 2, auch wenn ich
vergessen sollte das zu erwähnen.
Für Teilprojekt 2 wird ein Webinterface mit Wiki-ähnlichen Funktionen
erstellt. Das heißt möglichst einfaches Bearbeiten durch jeden, Historie
mit allen Änderungen, Übersicht über die letzen Änderungen, Löschen nur
durch Admins und selbst für die kein entgültiges Löschen.
Im Prinzip könnte man sich da gut an Wikipedia / Mediawiki orientieren...
So, ich hoffe das passt soweit alles. Jetzt kommt zwar weiterhin ein
bischen Zusammenfassung, allerdings auch mehr Vorschläge von mir.
Programmiersprache dieses Projektes wird wohl PHP sein, obwohl andere
nicht schlecher wären, allerdings können wohl die meisten hier PHP am
besten. (kA warum ;-))
Zuerst sollte man sich über die Rahmenbedingungen einigen, z.B. ob und
welches Framework und Templatesystem man verwedet.
Parallel dazu sollte jemand mit den entsprechenden Rechten auf dem
OpenGeoDB Server nen SVN Server einrichten. Am besten so, dass das Zeug
beim einchecken ins SVN automatisch auf nem Webserver landet, so dass
immer der aktuelle Stand der Anwendung auch im Web nutzerbar ist. (Ich
hab sowas schonmal mit gemacht, ist also möglich). Für das SVN sollte
man am besten auch gleich noch nen Onlineviewer installieren. Wenn das
steht sollte jeder, der mitarbeiten möchte relativ einfach
Schreibzugriff darauf bekommen, d. h. nicht so geizig mit den Accunts
umgehen. Evtl. wäre auch noch nen Aufgabenmanger nicht schlecht.
Damit haben wir dann ne Basis auf der man aufsetzen kann.
Ich würde dort dann zuerst mal das ganze Anzeige-Zeug, das momentan so
verfügbar, dazu nutzen einen guten Webviewer für die OpenGeoDB mit
ansprechendem Style und striktem XHTML und CSS bauen. Nach und nach kann
man darin dann die Bearbeitungsfunktionen einbauen. Man muss das Ding
einfach Schritt für Schritt wachsen lassen.
Dabei sollten wir auch gleich darauf achten in Schichten zu
programmieren, und das ganze alles zu trennen. Das soll heißen, das im
eigendlichen Fontent sogut wie keine SQL-Queries stehen sollten, die was
an der Datenbank maniplulieren. Ich stelle mir da einzelne Funktionen
vor, die die entsprechenden Parameter übermittelt bekommen. Am besten
wäre natürlich das so Objektorientiert wie möglich zu machen. Dadurch
hätte man auch ne schöne Schnittstelle um Masseneintragungen zu tätigen.
Zur Tabellenstruktur:
Ich würde die Tabellenstruktur so lassen wie sie ist (absehen von den
oben ansgesprochenen Gültigkeitszeiträumen) und weitere Tabellen
hinzufügen, in der dann die alten Einträge gehalten werden. Dabei sollte
jede Änderung zuerst in der Historie Tabelle landen und dann in die
offizielle Tabelle übernommen wird. (Damit liese sich auch ne evtl.
Prüfungsfunktion einfacher umsetzen, aber die sollte erst eingesetzt
werden, wenn es uns mal wie der Wikipedia geht.) Das heißt die Daten die
aktuellen Daten wären immer doppelt in der DB, aber diese Lösung ist
immer noch besser als die Änderungen erst bei der nächsten Änderung in
die Historietabelle zu verschieben (da sprech ich aus Erfahrung)
In dem Bereich könnten wir uns stark an den Verfahren von SVN anlehnen.
Das ganze mal kongret in Tabellen ausgedrückt. Eine Tabelle Revisions
(rev_id, user_id, comment, date) und jeweils ne Kopie der bisherigen
Daten Tabellen, nur mit ner zusätzlichen rev_id. (wobei man sich dann
überlegen sollte, ob man dort nicht noch ne zusätzliche Primär ID
einführt, aber das kann man ja später, während der Entwicklung immer
noch machen).
Die Änderungen werden dann immer Revisionsbezogen gespeichert, deshalb
würde ich die Änderungsfunktionen irgendwie in ne Revisionsklasse
stecken, ums einfacher auszurücken hier etwas Pseudocode:
$rev = new revision($user, $date);
$rev->edit_coords($loc_id, $lat, $lon [...]);
$rev->edit_text($loc_id, $type, $val [...]);
$rev->add_text($loc_id, $type, $val [...]);
$rev->edit_int($loc_id, $type, $val [...]);
$rev->edit_float($loc_id, $type, $val [...]);
$rev->delete_int($loc_id, $type);
$rev->submit();
So ich hoffe, dadurch hab ich den Vorschlag mit den einzelnen Schichten
evtl. noch etwas verdeutlicht.
Ich hoffe ich hab das verständlich genug geschrieben und in der alles
Zusammenfassung korrekt wiedergegeben. Ich wollte einfach meine
Meinungen und Ideen zu dem Thema weitergeben.
MfG Andreas Hubel