Nachdem die Archive poppop.lzh mit populo.pl und nodbpop.lzh
mit den Fehlerseiten in ein CGI-Verzeichnis entpackt wurde, sind
ggfls. einige Anpassungen vorzunehmen:
Dies betrifft alle .htm-Dateien noxxx.htm in diesem
Verzeichnis, insbesondere den Verteiler in nodb.htm, falls nicht
ein eigenes Startdokument erstellt wird.
Für den Aufruf von populo gibt es zwei Varianten:
if ( defined $Pop ) {#wir wurden aufgerufen
1; und geben Erfolg zurueck
}
else {#wir rufen selber auf
$Db = 'Name';
require (populo.pl); #oder der heutige Name von populo
}
(vgl. auch den Abschnitt (cf.) über das Anbinden eigener
Datenbanken)
Das Archiv demopop.lzh ist in das Verzeichnis mit populo.pl zu
entpacken, so daß die Unterverzeichnisse avdemo, cat und
inmages entstehen.
cat enthält die Templates für Jobs und Ausgabe, es braucht dem
Server nicht bekanntgegeben zu werden.
avdemo enthält die Hilfsseiten für die Datenbank, sollen diese
sichtbar sein, ist dieses Verzeichnis als /avdemo für
WWW-Lesezugriffe freizugeben.
popimg enthält die GIFs für die Datenbank, sollen diese
sichtbar sein, ist dieses Verzeichnis als /popimg für
WWW-Lesezugriffe freizugeben (oder die Images sind in ein
als /popimg freigegebenes Verzeichnis zu kopieren)..
Damit Direktzugriffe auf die Kurztiteltabelle funktionieren, ist die (dem Vorschlag bei der Installation von avanti-w entsprechende) Setzung
$DbPfad = "c:/avanti-w/avdemo";eventuell anzupassen. Es gibt aber normalerweise keinen Grund für Direktzugriffe auf die Kurztiteltabelle!
Empfehlenswert ist, zunächst unter dem gewünschten Namen
eine Kopie der Beispielkonfigurationsdatei avdemo.pl zu erstellen
und diese dann schrittweise zu modifizieren.
Wird eine Konfigurationsdatei Name.pl in das CGI-Verzeichnis gelegt, das auch populo.pl enthält, so ist dies als Anbindung zunächst ausreichend, allerdings müssen die folgenden Variablen und Unterprogramme in der datenbankspezifischen .pl-Datei definiert sein:
Vorschlag: $pathpraefix = 'Unterverzeichnis/;./';
JobTyp für die Einstiegsseite
Minimum: %Defaults = (JobTyp =>'Begrüssungsseite');
Minimum: %MaskenSpecial = ();
Vgl. (cf.)
Vorschlag: @Verweisungsformen = ('s.a. ->', '->');
$Stl = 0;
Minimum: %STLexpand = ('5' => Wert_größer_10);
Minimum: %STLsuppresscaption = ('5' => 1);
@STLStruktur und %STLPositionen
geeignet anzupassen.
Vgl. (cf.)
In Verbindung mit dem Standardunterprogrammen der Beispieldatenbank sind auch noch folgende Variable erforderlich:
Name => [Start, Länge].
Minimum: %STLPositionen = (alles => [1, n]);
%STLPositionen,
Benennungen für Kurztitellistenelemente.
Minimum: @STLStruktur = ('alles');
Minimum: %ReverseRegister = ();
Folgende Variable werden von populo.pl vorinitialisiert, können aber in der Konfigurationsdatei überschrieben werden:
In der Konfigurationsdatei der Beispieldatenbank werden diverse Konstanten gesetzt, auf die dann (als Variable oder Strukturen) durch die .job- und .htm-Dateien zugegriffen wird.
%RegInfo
SanifyRegister entspricht, d.h. zu den symbolischen
Registern werden Start- und Endwerte sowie eventuelle
Präfixe (bei Subregistern) definiert.
%VarInputDef
%VarInputDef
%Darstellung
%Sortierung
%Codierung
Wird mit der Kurztitelliste der Datenbank operiert, müssen auch folgende Vorbereitungen getroffen sein:
$STLisopen.
Vgl. (cf.)
$STLisopen zurück.
Vgl. (cf.)
ParseSTLentry. Vgl. (cf.)
Normalerweise sollten inzwischen Direktzugriffe auf die .STL nicht
erforderlich sein, es gibt nämlich inzwischen auch für erweiterte
Register den Avanti-Befehl qrix title+, der hinter jedem
Indexeintrag die zugehörigen Kurztitel auswirft!
Damit auch unvollständige Aufrufe sinnvoll funktionieren, ist eine leere
Datenbank nodb fest eingestellt. Diese benötigt folgende Dateien:
Um interne Fehler etc. abzufangen, gibt es eine Reihe von vordefinierten Jobtypen, die ggfls. automatisch besetzt werden:
Noconn.job und Noconn.htm: Keine
Verbindung.
Nojob.job und Nojob.htm: Kein gültiger
Jobtyp
Ist in populo.pl die Variable $ReviveCmd definiert (Vorgabe:
perl avwrest.pl), so wird im Fall von keine Verbindung ein
avwrest.pl ist den lokalen
Bedingungen anzupassen.
populo.pl kann auch über die Kommandozeile gestartet werden.
Nach dem Start werden über die Tastatur (oder via Umlenkung von STDIN
mit <Strg>-Z (oder das Dateiende) startet dann die
Verarbeitung.
Ist in populo.pl die Variable $PopDebug::Allow gesetzt,
so ist des Protokollieren gewisser Zwischenergebnisse eingeschaltet,
Welche hiervon ausgegeben werden sind, muß durch einen Aufruf von
PopDebug->init() spezifiziert werden.
Mögliche Parameter sind (in
Besser ist es jedoch, statt des Aufrufs von PopDebug->init()
die gewünschten Parameter in der Konfigurationsdatei in das
Array @WantDebug zu schreiben:
@WantDebug = ('Params', 'Showjob');
Mit dieser Konstruktion nämlich kann Debugging angefordert werden,
bevor populo.pl (und damit das Modul PopDebug) überhaupt
geladen sind.
Dieser Abschnitt ist obsolet. Die POeval existiert nicht
mehr, Funktionen und Routinen besitzen Prototypen, anhand
derer die Anzahl der benötigten Argumente und ihre Art ('b' wie
bare: Textstring wird erwartet, oder 'e' wie evaluate
oder expression: Variablenname oder Ausdruck wird erwartet)
deklariert wird. Ein Unterschied besteht nur im ambivalenten
Fall, daß eine Zeichenkette mit Großbuchstaben beginnt und
nicht in einfache oder doppelte Anführungszeichen eingeschlossen
ist: In diesem Fall gibt die Art des Prototyps an, ob es sich
in jedem Fall um eine Zeichenkette handelt ('b') oder ob eine
Variable gemeint ist ('e').
POeval sorgt für die korrekte Interpretation von
populo-Sprachteilen.
POeval ist ein populo-interner Befehl und sollte daher
nur innnerhalb von selbst definierten Routinen oder Funktionen
aufgerufen werden.
(Solche Definitionen gehören selbstverständlich in die
datenbankspezifische Datei Db.pl)
Alles innerhalb der Begrenzungen PO!
! und
PO:
: wird als Argument an POeval weitergereicht,
außerdem verschiedene Argumente einiger Routinen, Funktionen und
Kontrollstrukturen. (Intern sind diese Argumente Zeichenketten.)
Zunächst entfernt POeval jeglichen Leerraum am Anfang und Ende
des Argumentes.
Ist Argument der Name einer gültigen populo-Variable (7),
gibt POeval den Wert der Variablen zurück (u. U. auch einen
undefinierten Wert, falls keine entsprechende Zuweisung stattgefunden
hat.)
Enthält Argument eine Vergleichsoperation (<, <=,
==, !=, >=, > für numerische Vergleiche und
lt , le , eq , ne , ge ,
gt für Zeichenkettenvergleiche, oder && bzw. ||
für logisches Und bzw. Oder, oder = bzw. !
für Stringvergleiche mit regulären Ausdrücken), so wird Argument an der
letzten dieser Stellen getrennt, beide Seiten einzeln mit POeval
ausgewertet, und der Wahrheitswert der abschließend ausgeführten
Vergleichsoperation zurückgegeben. (8)
Ist Argument eine mit
Ist Argument eine Routine oder Funktion, werden überflüssige Leerzeichen entfernt und die entsprechende Funktion ausgeführt. Zurückgegeben wird der Rückgabewert der Funktion. (Hierauf ist bei eigenen Befehlsdefinitionen zu achten!)
Trifft keine der obigen Bedingungen auf Argument zu, wird Argument unverändert zurückgegeben. Dies trifft insbesondere bei numerischen Argumenten von Vergleichsoperatoren zu, kann aber auch bei Syntaxfehlern auftreten.
XxX-Reg-XxX an
allen Stellen, wo ein Registername für Avanti einzusetzen ist.
In der zweiten Form wird die Stopwortliste in $Stopwords
berücksichtigt, Default für $Stopwords ist eine aus
swl1.apt gewonnene Wortliste, die jedoch um and,
nicht, not, oder, or und und bereinigt wurde.
Es handelt sich hier nicht um AND, OR und NOT als binäre (boole'sche) Operatoren, sondern um unäre (Prefix-) Operatoren im Stil von Internet-Suchmaschinen!
Resulat der Umwandlung einer Benutzereingabe ist ein normierter
Suchbegriff in den Formen (Reg steht hier stets für die
Zeichenkette XxX-Reg-XxX)
Reg "AND-Begriff1" [AND Reg "AND-Begriff2" ] bzw. Reg "OR-Begriff1" [OR Reg "OR-Begriff2" ] bzw. ( Reg "AND-Begriff1" [AND Reg "AND-Begriff2" ] ) OR Reg "OR-Begriff1" [OR Reg "OR-Begriff2" ] bzw. ( Reg "AND-Begriff1" [AND Reg "AND-Begriff2" ] ) NOT Reg "NOT-Begriff1" [NOT Reg "NOT-Begriff2" ] bzw. ( Reg "OR-Begriff1" [OR Reg "OR-Begriff2" ] ) NOT Reg "NOT-Begriff1" [NOT Reg "NOT-Begriff2" ] bzw. ( ( Reg "AND-Begriff1" [AND Reg "AND-Begriff2" ] ) OR Reg "OR-Begriff1" [OR Reg "OR-Begriff2" ] ) NOT Reg "NOT-Begriff1" [NOT Reg "NOT-Begriff2" ]
Beispielaufruf:
$Stopwords = join("|", qw(0 1 2 3 4 5 6 7 8 9 der die das la li lu));
\dots
%MaskenSpecial = ( # Unterprogr. z. Vorbeh. der Suchbegriffe
STW => 'TitAndify',
\dots
);
\dots
sub TitAndify { # darf veraendern: $register $logik $trunk
$trunk = "";
&QueryParse(1); # kill stopwords
s/XxX-Reg-XxX/$register/g;
# alternativ:
# Simultan mit SR in FTX und $register suchen:
# s/XxX-Reg-XxX \"([^"]+)\"/ ( $register "$1" or FTX &"$1" ) /g;
$register = "";
}
Der Standard-Content-Type text/html kann durch Setzen der
Variablen ContentType modifiziert werden.