Pfad-Ausdrücke
Pfad-Ausdrücke
Ein Pfad-Ausdruck besteht aus einem oder mehreren Pfaden, die durch die Pipe (’|’) getrennt werden. Ein Pfad besteht aus einem oder mehreren Strings, die durch einen Schrägstrich (’/’) getrennt werden. Dabei muß der erste String ein Variablenname sein, und die restlichen Strings – die Pfadsegmente – dürfen Zahlen, Buchstaben und Leerzeichen enthalten, sowie die Zeichen Unterstrich (’_’), Minus (’-’), Punkt (’.’), Komma (’,’) und Tilde (’~’).
Die Syntax lautet:
PathExpr ::= Path [’|’ Path]*
Path ::= variable[‘/’URL_Segment]*
variable ::= Name
Ein Beispiel:
request/cookies/oatmeal
nothing
here/some-file 2001_02.html.tar.gz/foo
root/to/branch | default
When ein TALES Pfadausdruck ausgewertet wird, wird versucht, die Pfade von links nach rechts abzuarbeiten bis entweder ein Pfad gültig ist oder keine Pfade mehr vorhanden sind. Um einen Pfad zu durchlaufen, wird erst einmal das Objekt, das an erster Stelle steht, eingelesen. Für jedes Pfadsegment wird dann das dadurch benannte Unterobjekt geladen. Wurde ein Pfad erfolgreich abgearbeitet, ist das gegenwärtig aktuelle Objekt das Ergebnis des Ausdrucks. Ist das Objekt ausführbar – wie eine Funktion oder eine Klasse – so wird es ausgeführt. Die Semantik der Pfadtraversierung und was ausführbar bedeutet ist implementierungsspezifisch.
Misslingt ein Traversierungsschritt, wird die Auswertung sofort beim nächsten Pfad fortgesetzt. Gibt es keinen weiteren Pfad, ist das Ergebnis ein Fehler.
Da jeder Pfad mit einem Variablennamen beginnen muß, benötigt
man eine Grundmenge von Objekten, über die andere Objekte
lokalisiert und angesprochen werden können. Page Templates
definieren die unten aufgelisteten Variablennamen. Da Variablen
zuerst lokal, dann global und dann in dieser Liste gesucht
werden, verhalten sich die aufgelisteten Variablen wie eingebaute
Standardvariablen in Python. Sie sind jederzeit verfügbar, können
aber durch die Deklaration globaler oder lokaler Variablen
ausgeblendet werden. Die Variablen können jedoch jederzeit
angesprochen werden, wenn man dem Namen das Wort
’CONTEXTS’ voranstellt, also beispielsweise
’CONTEXTS/root’ oder
’CONTEXTS/nothing’.






