5 Konfiguration

    1. Aufsetzen von populo
    2. Aufsetzen der Demo-Datenbank
    3. Anbinden einer eigenen Datenbank
      1. Anbinden der Kurztitelliste
    4. Hilfsdateien für festverdrahtete Zustände
    5. Debugging
    6. Wichtige Routinen in populo.pl
      1. POeval
      2. QueryParse
      3. PrintHeader

5.1 Aufsetzen von populo

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:

  1. Direkter Aufruf von populo.pl (oder einer Kopie davon), der Name der Datenbank muß dann im Aufrufparameter db enthalten sein, dazu korrespondierend muß dann Name.pl existieren.

  2. Aufruf des Konfigurationsskriptes Name.pl für die Datenbank Name, das mit folgendem Code abschließt:
    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)

5.2 Aufsetzen der Demo-Datenbank

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!

5.3 Anbinden einer eigenen Datenbank

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:

$User
Username für Avanti. Nutzbar als Variable.

$Passwd
Password für Avanti. Nutzbar als Variable.

$pathpraefix
Unterverzeichnis mit den Template-Dateien für die Datenbank. Mehrere Verzeichnisangaben werden durch ; getrennt und in der angegebenen Reihenfolge durchsucht.

Vorschlag: $pathpraefix = 'Unterverzeichnis/;./';

%Defaults
Voreinstellungen für HTTP-Felder, typischerweise mindestens mit dem Schlüssel JobTyp für die Einstiegsseite

Minimum: %Defaults = (JobTyp =>'Begrüssungsseite');

%MaskenSpecial
Listen von selbstdefinierten Unterprogrammen für die Aufbereitung von Suchbegriffen für kombinierte Suchen.

Minimum: %MaskenSpecial = ();

Vgl. (cf.)

@Verweisungsformen
Mögliche Verweisungsformen in Registerauszügen.

Vorschlag: @Verweisungsformen = ('s.a. ->', '->');

$Stl
Länge der Kurztiteleinträge, deaktivieren der Kurzliste via $Stl = 0;

%STLexpand
Zustandsübergänge von Linetypen, vor allem beim manuellen Nachholen von Kurztitellisteneinträgen.

Minimum: %STLexpand = ('5' => Wert_größer_10);

%STLsuppresscaption
Automatische Unterdrückung von gewissen LineTypen:

Minimum: %STLsuppresscaption = ('5' => 1);

sub OpenSTL
Öffnen der Kurztitelliste für Direktzugriffe (falls Direktzugriffe erforderlich sind, also eher nicht). Vgl. (cf.)

sub CloseSTL
Schließen der Kurztitelliste (falls Direktzugriffe erforderlich sind, also eher nicht) Vgl. (cf.)

sub ParseSTLentry
Aufbereiten der Kurztitelliste. Es wird oft reichen, @STLStruktur und %STLPositionen geeignet anzupassen. Vgl. (cf.)
sub ParseRegisterline
Aufbereiten von Registerzeilen, Zustandsübergänge Vgl. (cf.)

sub LinkEscape
Expandieren von Links aus parametrierten Vollanzeigen Vgl. (cf.)

In Verbindung mit dem Standardunterprogrammen der Beispieldatenbank sind auch noch folgende Variable erforderlich:

$DbPfad
Pfad der Datenbank für Direktzugriffe auf die .STL (Falls leer, sind Direktzugriffe verboten, die Kurztitelinformationen werden dann von Avanti erfragt.)

$DbName
Name der Datenbank für Direktzugriffe auf die .STL

%STLPositionen
Positionen für die einzelnen Elemente der .STL in der Form Name => [Start, Länge].

Minimum: %STLPositionen = (alles => [1, n]);

@STLStruktur
Indexsystem für %STLPositionen, Benennungen für Kurztitellistenelemente.

Minimum: @STLStruktur = ('alles');

%ReverseRegister
Rückauflösungen von numerischen Registerbezeichnungen, wie sie in registerübergreifenden Verweisen in der Datenbank vorkommen, zu symbolischen Namen von Avanti.

Minimum: %ReverseRegister = ();

Folgende Variable werden von populo.pl vorinitialisiert, können aber in der Konfigurationsdatei überschrieben werden:

$RealDb
Name der Datenbank für Avanti.

$AvantiHost
IP-Adresse des Avanti-Servers (für die aktuelle Datenbank)

$AvantiPort
IP-Port des Avanti-Servers (für die aktuelle Datenbank)

$ReviveCmd
Auszuführendes Kommando, falls der Server nicht erreichbar ist.

In der Konfigurationsdatei der Beispieldatenbank werden diverse Konstanten gesetzt, auf die dann (als Variable oder Strukturen) durch die .job- und .htm-Dateien zugegriffen wird.

$DbLabel
Überschriftszeile. Nutzbar als Variable.

$MaxShowResult
Zeilenmaximum bei der Darstellung von Ergebnismengen

$MaxWriteThrough
Bei weniger als so vielen Treffern soll automatisch in die Vollanzeige geschaltet werden.

%RegInfo
Registerinformationen (Schlüssel sind die symbolischen Namen für Avanti) mit Hilfstexten, Namen von Hilfsseiten, Überschriftszeilen.

@RegisterKeys
Indexsystem für %RegInfo

%RegConstraints
Eine Struktur, die den Vorgaben von SanifyRegister entspricht, d.h. zu den symbolischen Registern werden Start- und Endwerte sowie eventuelle Präfixe (bei Subregistern) definiert.

%VarInputDef
Definition der Maskenfelder für das Formular „kombinierte Suche“
@MaskenVariable
Indexsystem für %VarInputDef
@MaskenRegister
Indexsystem für %VarInputDef

%Darstellung
Erläuterung und Namen der Parameterdateien für Ausgabevarianten von Vollanzeigen
@ParamKeys
Indexsystem für %Darstellung

%Sortierung
Erläuterung und Avanti-Sortierbefehl für Sortiervarianten in Kurzlisten und Vollanzeigen
SortKeys
Indexsystem für %Sortierung

%Codierung
Erläuterung und Name der Includetabelle für Zeichencodierungen bei Vollanzeigen
@CodierKeys
Indexsystem für %Codierung

5.3.1 Anbinden der Kurztitelliste

Wird mit der Kurztitelliste der Datenbank operiert, müssen auch folgende Vorbereitungen getroffen sein:

$Stl
Länge der Kurztitellisteneinträge

$DbPfad
für Direktzugriffe auf die Kurztitelliste: realer Pfad der Datenbank

$DbName
für Direktzugriffe auf die Kurztitelliste: realer Name der Datenbank

sub OpenSTL
Öffnen der Kurztitelliste für Direktzugriffe, setzt $STLisopen. Vgl. (cf.)

sub CloseSTL
Schließen der Kurztitelliste für Direktzugriffe, setzt $STLisopen zurück. Vgl. (cf.)

sub ParseSTLentry
Kurztitelzeile holen und aufbereiten. Vgl. (cf.)

sub stlsort
Sortierroutine für Kurztiteleinträge (deprecated, Vgl. (cf.))

sub STLmap
Aufbereitungsroutine für die Sortierung von Kurztiteleinträgen. Vgl. (cf.)

@STLStruktur, %STLpositionen
Konfiguration für ParseSTLentry. Vgl. (cf.)

%STLsuppresscaption
Festlegungen für die LineType (größer 10), für die die Angabe der ursprünglichen Registerzeile unterdrückt werden soll.

%STLexpand
Festlegungen für den LineTyp von separat beschafften Kurztitelzeilen.

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!

5.4 Hilfsdateien für festverdrahtete Zustände

Damit auch unvollständige Aufrufe sinnvoll funktionieren, ist eine „leere“ Datenbank nodb fest eingestellt. Diese benötigt folgende Dateien:

Nodb.pl
Grundlegende Setzungen
Nodb.job
Einziger (und leerer) Job
Nodb.htm
Einzige Ausgabedatei (enthält typischerweise einen Verteiler für die angebotenen Datenbanken)

Um interne Fehler etc. abzufangen, gibt es eine Reihe von vordefinierten Jobtypen, die ggfls. automatisch besetzt werden:

noconn
mit Noconn.job und Noconn.htm: Keine Verbindung.
nojob
mit 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
Neustart von Avanti
versucht. Das kurze Perlscript avwrest.pl ist den lokalen Bedingungen anzupassen.

5.5 Debugging

populo.pl kann auch über die Kommandozeile gestartet werden. Nach dem Start werden über die Tastatur (oder via Umlenkung von STDIN mit '<'!) Zeilen mit Paaren Name=Wert in genau dieser Form eingegeben, <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 '' eingeschlossen und mit ',' getrennt anzugeben):

Mess
Pleonastisch, von populo.pl automatisch freigegeben: Meldungen bezüglich erkannter Syntaxfehler
Params
Anzeige der Übergabeparameter
Showjob
Anzeige des erzeugten Auftrags für Avanti
Showresult
Anzeige des Original-Ergebnisses von Avanti
ShowSTL
Anzeige der explizit geholten Kurztitelzeilen
Envir
Anzeige des Environments
Conf
Anzeige der wichtigsten Konfigurationsinformationen
Showcode
Anzeige des intern generierten Perl-Codes
Parseval
Parsing-Informationen bei interpretierten Ausdrücken

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.

5.6 Wichtige Routinen in populo.pl

5.6.1 POeval

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(<Argument>)
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 ''' umschlossene Zeichenkette, so werden die ''' enfernt und der Rest zurückgegeben.

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.

5.6.2 QueryParse

QueryParse(0)
QueryParse(1)
Umstrukturierung eines Suchstrings mit „AND“, „OR“ und „NOT“ in einen Avanti-Suchbegriff, dieser enthält zur bequemen Weiterverarbeitung die Feste Zeichenkette 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 = "";
}

5.6.3 PrintHeader

PrintHeader()
Ausgabe des HTTP-Headers

Der Standard-Content-Type „text/html“ kann durch Setzen der Variablen ContentType modifiziert werden.