walter_rafelsberger/projects/hanuman/loesungsvorschlaege
Hanuman
Lösungsvorschlage
Wir fangen zum Glück nicht ganz bei Null an. Hanuman baut auf meheren bestehenden Open-Source-Projekten auf, die die entsprechende Basis für eine erfolgreiche Umsetzung garantieren. Wir nutzen bestimmte Funktionalitäten dieser Projekte und verschränken sie zu einem neuen Ganzen. Da zwischen dem Einreichtermin und dem anvisierten Projektbeginn ca. ein halbes Jahr liegen, werden wir bei Projektstart die zugrundeliegenden Open-Source-Projekte einer Reevaluierung unterziehen.
PhpWiki (http://sourceforge.net/projects/phpwiki/) fungiert als Backend und semantische, dokumentbasierte Datenbank, in dem Content-Typen angelegt und verwaltet werden. Man ist nicht auf die in diesem Zusammenhang sperrige und aufwändige Handhabung einer relationalen Datenbank angewiesen, sondern definiert eigene Content-Typen ohne grossen Administrationsaufwand (z.b. Typen in der Art “Text”, “Bild”, “Event” statt “String”, “Integer”, “Boolean” etc.). Zu bemerken ist, dass wir PhpWiki in diesem Zusammenhang nicht als “klassiches” Wiki verwenden, sondern als Framework, dessen Philosophie (Schnelligkeit und Einfachheit in der Bedienung) und Features (wie Versionierung, semantische Funktionen und Rechteverwaltung) wir als Basis nutzen. PhpWiki war der erste Php-Klon des ursprünglichen WikiWikiWeb-Konzeptes, Hauptentwickler ist seit vielen Jahren der Österreicher Reini Urban.
Smarty Template Engine (http://www.smarty.net/) garantiert eine klare Trennung von Design und Inhalt. Das ist sowohl für die Publikation in verschiedenen technischen Formaten als auch für diverse Zielplattformen (Browser, Mobile Web etc.) von Relevanz. Ein wichtiger Sicherheitsaspekt: Die Templates enthalten keinen Programmiercode und werden im Wiki-Backend gespeichert, wodurch auf sie ebenfalls Features wie Versionierung und Zugriffsrechte angewandt werden können.
phpThumb (http://phpthumb.sourceforge.net/) hat sich als vielseitiges Tool für serverseitige Bildbearbeitung erwiesen. Innerhalb von Hanuman wird es genutzt, um Bilddateien dynamisch in verschiedene Zielformate und -grössen umzuwandeln.
Mootools (http://www.mootools.net/) nutzen wir für die Umsetzung eines innovativen User-Interfaces. Im Unterschied zu anderen Javascript-Frameworks wie jQuery und Prototype/Scriptacolous hat sich für uns die tiefere Verschränkung mit Javascript bewährt.
Unter http://www.rafelsberger.at/images/hanuman/hanuman_mockup_r0002.png finden Sie einen Mock-up, der die Benutzeroberfläche zum Anlegen eines Theaterstücks für das Fallbeispiel 1 zeigt. Die Oberfläche wird ausgehend von Objektdefinitionen dynamisch generiert. Einzelne Elemente wie Bilder, Mitwirkende und Termine können angelegt, editiert und angeordnet werden, ohne die Seite verlassen und an anderer Stelle weiterarbeiten zu müssen. Die eingegebenen Inhalte werden dynamisch auf Richtigkeit überprüft. Im Bereich der Mitwirkenden zeigt sich, wie Unterelemente wie die Rolle des Pozzo angelegt werden.
Die Objektdefinitionen werden im Backend festgelegt. Ausgehend von diesen wird dynamisch die Benutzeroberflaeche erzeugt. Das "Skelett", also die Definition für ein Theaterstueck sieht wie folgt aus. Die Elemente sind in der Wiki-Syntax für semantische Relationen angegeben.
definition: _data/class/theaterstueck
[element::/title]
[element::/subtitle]
[element::/image]
[element::/gallery]
[element::/description]
[element::/cast]
[element::/events]
[element::/year]
[element::/tags]
Die einzelnen Elemente werden im Detail definiert, hier z.b. das Titel-Element. Die Definition beschreibt, dass das Element das Label "Titel" hat, ein Element vom Typ "Text" ist und dass die Angabe des Elements obligatorisch ist.
definition: _data/class/theaterstueck/title
[caption:=Titel]
[type:=text]
[required:=true]
Die Definition für die Bildgallerie beschreibt, dass es sich wiederum um ein Content-Object handelt, das unter “_data/class/imageset” beschrieben wird.
definition: _data/class/theaterstueck/gallery
[caption:Bildgallerie]
[type:=object]
[object:_data/class/imageset]
Die Bildgallerie ist also ein Content-Objekt vom Type “Imageset”, das im folgenden beschrieben wird. Die unterschiedliche Definition des Titel- und Bildelements zeigt, dass Elemente absolut oder relativ angelegt werden können. Das Titelelement ist absolut, d.h. es bezieht sich auf eine allgemeine Definition, die unter “_data/element/title” angelegt ist. Das Bildelement ist relativ, d.h. es wird als spezifisches Element des Content-Objects unter “_data/class/imageset/image” angelegt. Weiters sind zwei Templates definiert, eines für die allgemeine Darstellung der Bildgallerie, ein weiteres für die Darstellung in Listen (die beim Anlegen der Bildgallerie im Content-Objekt Theaterstück zum Einsatz kommt).
definition: _data/class/imageset
[element::_data/element/title]
[element::/image]
[element::_data/element/description]
[template::/template]
[template-list::/template-list]
Das Bildelement bezieht sich wie das Imageset selbst auf ein Content-Objekt, d.h. diese können mehrfach verschachtelt werden. Die Angabe “array:=true” beschreibt, dass innerhalb des Imagesets mehrere Bilder hinzugefügt werden können. Eine optionale Angabe wie “max:=10” würde die Anzahl der Bildelemente auf 10 beschränken.
definition: _data/class/imageset/image
[caption:Bild]
[type:=object]
[object:_data/class/image]
[array:=true]
Das Template für die Listendarstellung der Bildgallerie greift auf die im Content-Objekt “imageset” definierten Elemente und nutzt die Syntax der Smarty Template Engine. In diesem Fall werden maximal die ersten sechs Bilder der Bildgallerie dargestellt. PhpThumb wird genutzt, um die Bilder in quadratische Thumbnails mit 75 Pixel Breite umzuwandeln.
Template: _data/class/imageset/template-list
<h3>{$title}</h3>
<ul class="imageset-list">
{section name=mg loop=$img max=6}
<img class="imageset" src="/hanuman/phpThumb.php?src=/hanuman/uploads/{$img[mg].file}.{$img[mg].filetype}&w=75&h=75&zc=1" alt="$img[mg].title" />
{/section}
</ul>
Durch die Definition der Objekte und Elemente in semantischer Wiki-Syntax ergibt sich daraus die automatische Generierung einer projektspezifischen Ontologie. Die definierten Beziehung werden analysiert und an eine performante Linkdatenbank übergeben. Hanuman nutzt diese Daten, um daraus dynamisch das entsprechende User-Interface zu generieren. Auch wenn es möglich ist, diese Definitionen im Wiki-Backend in dieser Form händisch zu definieren (das mag für versierte Benutzer durchaus eine Option sein), bietet Hanuman einen integrierten visuellen Editor, in dem diese Content-Objekte definiert werden können.
Ein Inhaltsobjekt wird im Prinzip also in seine Microcontent-Elemente zerlegt. Diese zeichnen sich dadurch aus, dass sie ein Teilkonzept des Gesamtinhalts beschreiben und auch technisch einzeln z.B. via API oder Permalinks ansprechbar sind (vgl. http://en.wikipedia.org/wiki/Microcontent#Other_meanings). Hanuman unterstützt diesen Ansatz. Dadurch ergeben sich ganz neue Anwendungsfälle. So ist es z.B. möglich, in einem Hanuman-Blog nicht nur einen Artikel per se zu kommentieren, sondern sich auch auf einzelne Elemente wie Absätze oder Bilder zu beziehen. Daraus ergibt sich eine granularere Form des Austausches im Netz.
Hanuman Project Concept ist lizensiert unter Creative Commons Attribution-Share Alike 3.0 Austria License.