next up previous contents
Nächste Seite: Zope in der Praxis Aufwärts: Der Application-Server Zope Vorherige Seite: Online-Hilfe   Inhalt


Lokalisierung von Objekten in Zope

Auf einem normalen Webserver werden Dateien mit Hilfe ihrer physischen Abspeicherung im Dateisystem adressiert. Zope besitzt dagegen einen dynamischen Mechanismus namens Akquisition für das Ermitteln der Objekte18:

Wenn ein referenziertes Objekt im aktuellen Verzeichnis nicht gefunden wird, sucht Zope im übergeordneten Objekt der Anfrage danach. Dies wird solange fortgesetzt, bis das Wurzelverzeichnis-Objekt erreicht wurde. Ist dort das Objekt ebenfalls unbekannt, zeigt Zope eine Fehlermeldung anstatt der gewünschten Seite an.

Dazu kommt, dass man in Zope ein Script auf ein anderes Objekt anwenden kann. Im Zope-Buch [8] wird in Kapitel 8.1 das Beispiel eines Zoos gebracht, in dem Tiere gefüttert werden. Die Tiere entsprechen Objekten und das Füttern einem Script.

Wie oben erwähnt, ist der Anfragepfad des Benutzers relevant, nicht nur die tatsächliche Ablage in der Verzeichnisstruktur. Dies soll an einem abstrakten Beispiel verdeutlicht werden. Ausgangspunkt ist die Verzeichnisstruktur in Abbildung 3.

Abbildung 3: Beispiel-Verzeichnisstruktur für Aktionen und Objekte
\includegraphics[scale=0.52]{bilder/acquisition_sample_structure.eps}

Es gibt die vier Objekte aktion_a, aktion_b, objekt_a und objekt_b, die einzeln mit /aktionen/aktion_a, /aktion_b, /objekte/objekt_a und /objekt_b aufgerufen werden können. Aufgrund der Akquisition kann beispielsweise objekt_b auch mit /objekte/objekt_b adressiert werden, weil Zope selbständig im Wurzelverzeichnis / sucht, wenn das genannte Objekt in /objekte nicht gefunden werden kann.

Jetzt soll auf ein Objekt eine Tätigkeit (z.B. eine DTML-Methode oder ein Python-Script) ausgeübt werden. Dazu kann man in Zope einfach den Namen eines Objektes einem anderen Objekt anhängen. Möchte man aktion_b auf objekt_b ausüben, ruft man /objekt_b/aktion_b auf. Die gleiche Aktion auf objekt_a angewandt lautet /objekte/objekt_a/aktion_b.

Im Zope-Buch [8] wird der Vorgang im dortigen Kapitel 8.1.2 wörtlich beschrieben:

Zope verwendet einen URL als ,,Karte``, um das Objekt und das Script, das Sie aufrufen möchten, zu finden.

Zope zerlegt den URL und vergleicht ihn mit der Objekthierarchie. Es arbeitet dabei so lange rückwärts, bis es für jeden Teil eine Übereinstimmung gefunden hat. Diesen Prozess nennt man URL-Traversal (Überquerung).

Leicht angepasst an das oben angegebene Beispiel19 lautet die weitere Erklärung aus dem Zope-Buch:

Wenn Sie Zope z.B. den URL objekte/objekt_a/aktion_b übergeben, beginnt es beim Ordner Root und sucht nach einem Objekt namens objekte. Anschließend macht es mit dem Ordner objekte weiter [...] und sucht nach einem Objekt namens objekt_a und im Objekt objekt_a nach einem Objekt namens aktion_b. Da es das Script aktion_b im Objekt objekt_a jedoch nicht gibt, wird es mittels Akquisition im Root-Ordner gefunden. [...]
Nun hat Zope das Ende des URLs erreicht. Es ruft das zuletzt gefundene Objekt auf, nämlich aktion_b. Das Script aktion_b operiert auf seinem Kontext, nämlich dem vorletzten gefundenen Objekt - dem Objekt objekt_a.

Auf den ersten Blick außergewöhnlich wirkt die Anfrage, wenn man aktion_a, die im Unterverzeichnis aktionen platziert ist, auf die beiden Objekte anwenden möchte. Dies erreicht man mit /aktionen/objekt_b/aktion_a und mit /aktionen/objekte/objekt_a/aktion_a.

Einzeln aufgeschlüsselt passiert bei der zuletzt genannten Anfrage folgendes:

Die beiden ausführlich beschriebenen Beispiele zeigen, dass Anfragen in Zope nicht immer der physikalischen Abspeicherung der Objekte entsprechen müssen. Mit Hilfe des Akquisitions- und des URL-Traversal-Mechanismus lassen sich komplexe Anfragen realisieren, wenn das dahinterstehende System verstanden wurde. Es ist sinnvoll den Einsatz dieser Mechanismen zu dokumentieren, damit sich andere Personen schnell einen Überblick darüber verschaffen können.


next up previous contents
Nächste Seite: Zope in der Praxis Aufwärts: Der Application-Server Zope Vorherige Seite: Online-Hilfe   Inhalt
Reinhard Holler 2003-04-12