"Schiller-Raeuber": Loesung

Bernhard Eversberg EV at buch.biblio.etc.tu-bs.de
Di Apr 15 08:37:18 CEST 1997


Satzuebergreifende Suche                                          970411
------------------------

Die Loesung des "Schiller-Raeuber-Problems"

Die Theorie der Loesung lag schon in der Schublade, sie musste "nur noch"
programmiert werden. Das ist mittlerweile geschehen, und V15.0 enthaelt
die noetigen Prozeduren.
Die Loesung ist: verknuepfte Untersaetze erhalten einen zusaetzlichen
Schluessel, der auf den Hauptsatz verweist. Wenn eine Ergebnismenge dann
die Nummer des Hauptsatzes enthaelt, kann das Programm dessen
Untersaetze auf Wunsch mit hinzunehmen. Konkret: Ist "Schiller:
Gesammelte Werke" in der Ergebnismenge enthalten, kann das Programm
die untergeordneten Saetze, u.a. "Die Raeuber", mit hinzunehmen; die
anschliessende UND-Verknuepfung mit "raeuber" liefert dann ein frueher
nicht moegliches Ergebnis.
Das "mit hinzunehmen" bezeichnen wir als auch als "Plus-Suche".
Es wird ausgeloest durch das Steuerzeichen '&'.
Auf dem APAC-Menue steht vorlaeufig "Verknuepfungen beruecksichtigen".
Wir warten noch auf einen besseren Einfall. 


Was muss man parametrieren?
---------------------------
Um die Plus-Suche zu ermoeglichen, genuegen ein paar sehr einfache
Massnahmen in den Indexparametern.

1. Neuer Befehl  i7

Mit dem neuen Befehl  i7  wird zum einen das Register festgelegt, wo die
notwendigen Hilfsschluessel anzusiedeln sind, zum andern wird damit dem
System signalisiert, DASS die Datenbank eine Plus-Suche gestattet.

i7=k         Nummer des SR-Hilfsregisters  (1 <= k <= 10)


2. SR-Hilfsschluessel: neuer Manipulationsbefehl  X

Jeder Untersatz, der bei einer Plus-Suche auffindbar sein soll, muss einen
oder mehrere zusaetzliche Schluessel bekommen. Ein solcher Hilfsschluessel
muss aus dem Primaerschluessel eines anderen Satzes bestehen (i.d.R. ist das
der Hauptsatz eines mehrbaendigen Werkes).
Ein solcher Hilfsschluessel wird mit Hilfe des neuen Manipulationsbefehls X
angelegt. Wie das geht, zeigen wir an einem Beispiel. Wir gehen vom
Konsolidierten Format aus, wo der Primaerschluessel aus #00 gebildet wird
und Untersaetze in der #00 die IdNummer des Hauptsatzes mit angehaengtem
'+' enthalten. Die Primaerschluessel stehen im Register 9. Die Hilfsschluessel
sollen aber im Register 8 stehen.

i7=8                     Hilfsschluessel sollen ins Register 8
...
ak=zz+U             Fuer jeden Satz wird der Abschnitt #-U angesprungen ...
...                 (hierfuer ist keine spezielle Marke reserviert)

#-U                 ... aber nur bei Untersaetzen passiert wirklich was:
#00 +#00 c"+" e0         Kommt '+' vor, d.h. ist es ein Untersatz?
#+-                      wenn nicht, dann keine Aktion
#00 y0 e"+" X9           SR-Hilfsschluessel per Reg. 9 bilden.
#+#

Was dann genau passiert, braucht man eigentlich nicht zu wissen, aber wer
neugierig ist, soll es erfahren:
Das Programm INDEX bildet zunaechst nur einen temporaeren Schluessel.
Wenn man z.B. #00 55555+17  in einem Untersatz hat, sieht der temporaere
Schluessel so aus: "|9\55555". Im zweiten Durchlauf macht INDEX
daraus den eigentlichen Hilfsschluessel. Wenn der Hauptsatz (der mit dem
Primaerschluessel "55555" im Register 9) die INTERNE Nummer 123 hat, dann
lautet der Hilfsschluessel des Untersatzes  "|123"  und steht im Register 8.
Die Hilfsschluessel duerfen im selben Register stehen wie die Primaerschluessel.
(Im Register 8 steht dann wirklich "|123", das hat nichts mit Register 1
zu tun, sondern heisst, "dieser Untersatz gehoert zu Satz 123"!)

Wenn die Plus-Suche aktiviert wird, passiert folgendes: 
Das Programm nimmt sich die aktuelle Ergebnismenge vor. Diese besteht
intern nur aus einer Liste von internen Satznummern. (Wohlgemerkt: nur
diese sind in dem Moment greifbar, nicht die Primaerschluessel, sonst waere
die ganze Sache etwas einfacher.) Fuer jede dieser Nummern wird im 
Register 8 (i7) nachgesehen, ob es Hilfseintraege unter dieser Nummer gibt. 
Wenn ja, werden die zugehoerigen internen Nummern zur Ergebnismenge 
hinzugenommen.

Daraus ergibt sich: die Plus-Suche muss auf einen Suchbegriff angewendet
werden, bevor die logische UND-Verknuepfung ausgefuehrt wird. 
Was ist dafuer zu tun?
In den Programmen PRESTO und APAC kann jeweils nur die zum ersten
Suchbegriff gehoerige Ergebnismenge erweitern. In den Beispielen entspricht
das dem Fall &vollmer AND natur, also genau dem originalen Schiller-
Raeuber-Problem.
Man bilde also zuerst die Ergebnismenge zu demjenigen Begriff, der
tatsaechlich erweitert werden soll (d.h. der moeglicherweise in einem
Hauptsatz vorkommt, z.B. schiller oder vollmer). Danach:
In PRESTO wird '&' gedrueckt (auf dem Registerbildschirm). 
In APAC kann statt dessen auf dem ESC-Menue die neue Funktion 
Verknuepfungen beruecksichtigen  ausgefuehrt werden.
Die Ergebnismenge wird dann etwas groesser, aber nur, wenn es zu
mindestens einem der Saetze verknuepfte Untersaetze gibt, fuer die ein
Hilfsschluessel gebildet wurde.
Nun fuehrt man ganz normal die Verknuepfung mit dem zweiten Begriff aus
(also raeuber bzw. natur).

In der avanti-Sprache braucht man nur das '&' vor jeden Begriff zu setzen,
der satzuebergreifend gesucht werden soll.
Anders als bei PRESTO/APAC kann dies jeder der verknuepften Suchbegriffe sein.
Beispiele:
             find per &schiller? and tit raeuber
             find per &vollmer? and tit &wissen
             find per &vollmer? and &lorenz?

Die korrekte Behandlung der Hilfsschluessel ist in die Programme PRESTO,
MENUED, ALFA, INDEX und UPDATE schon in die ausgelieferte V15.0
eingebaut, desgleichen in den avanti-Server.





Mehr Informationen über die Mailingliste Allegro