Der avanti-Datenbankserver Version 1.1 960916 Der avanti-Datenbankserver ...  kann unmittelbar auf jede "allegro"-Datenbank zugreifen (Funktionsstandard ist V14c, d.h. die aktuelle Version, aber auch alle „lteren Datenbanken sind benutzbar)  l„uft in gleicher Weise auf PC-Netzen und UNIX-Systemen  spricht als Zielgruppe (auch) Systemverwalter an, die wenig von "allegro" wissen, aber vorhandene Datenbanken flexibel nutzbar machen wollen/sollen  erm”glicht es auch "allegro"-Unkundigen, "Client"-Funktionen in jede Software-Umgebung ein- zubauen, mit der sie sich auskennen, sogar in Batchdateien oder Shell-Scripts, aber auch in Perl- (HTML) und Java-Programme, denn der "avanti"-Server  ist programmierbar in einer "Auftragssprache", die viel leichter erlernbar ist als die Exportsprache (Beispiele s. am Ende)  erfordert nur fr kompliziertere Aufgaben Kenntnisse der "allegro"- Parametrierung; Exporte einfacher Art sind ohne Parameter m”glich  kann jedoch die gesamte Bandbreite der Exportparameter nutzen, d.h. vorhandene Parameter k”nnen fr Exporte eingebunden werden  bietet alle Abfragem”glichkeiten des Programms VP zur Zusammenstellug von Ergebnismengen incl. Sortierung nach w„hlbaren Kriterien (Pica-„hnlicher find-Befehl, siehe "allegro news" Nr. 40, mit den Operatoren AND, OR, NOT und symbolischen Registernamen.)  enth„lt auch Funktionen fr Schreibzugriffe, darunter eine Update-Funktion, mit der auf einfachere Art als mit dem UPDATE-Programm neue Datens„tze in eine "allegro"-Datenbank eingespeist werden k”nnen  kann auch ASCII-Dateien und die bisher blichen "allegro"-Grunddateien einlesen und einmischen bzw. exportieren  wird die bisherige, vergleichsweise recht komplizierte Methodik des WWW-Zugriffs auf "allegro"-Da- tenbanken abl”sen  stellt eine Vorstufe innerhalb des Projekts Z39.50 dar, welches nach Bewilligung durch die DFG inzwischen angelaufen ist  arbeitet so schnell, wie man es von "allegro"-Programmen gew”hnt ist. Ganz knapp zusammengefaát: mit "avanti" kann jede "allegro"-Datenbank einem Client/Server-System ausgestaltet werden, und zwar mit maágeschneiderten, leicht zu programmierenden Client-Funktionen. Damit kein Miáverst„ndnis aufkommt: die bisherigen Programme werden hierdurch nicht abgel”st oder entwertet. Es gibt kein Entweder/Oder: alles kann GLEICHZEITIG laufen. Ein C/S-System arbeitet seiner Natur nach immer indirekt und deshalb weniger schnell und effizient als ein direkt zugreifendes System. Es gibt wichtige Funktionen, wie z.B. das ZEILENweise Rauf- und Runter-Bl„ttern in Registern, die in C/S-Systemen schwierig oder gar nicht zu realisieren sind. (Haben Sie sich noch nie gewundert, warum manche Systeme das nicht k”nnen?) Da jedoch die C/S-Technik unbestreitbare Vorteile hat (wir haben oben einige aufgez„hlt), wurde als Ziel gesetzt: das Vorteilhafte tun, aber das Bew„hrte nicht lassen; "allegro"-Datenbanken sollen AUCH, aber nicht NUR, als C/S-System laufen k”nnen. Was l„uft, kann weiterlaufen; Zwang zu Žnderungen am Bestehenden gibt es nicht, Kompromisse bei Leistung und Flexibilit„t werden nicht gemacht. Arbeitsweise Man bergibt dem Server eine Auftragsdatei, geschrieben in der neuen "Auftragssprache" namens avanti. Der Server produziert als Antwort eine "Download-Datei" und eine "Error-Datei", die man sich ansehen oder per eigener Software auswerten kann. (Der Server produziert selbst keine Bildschirmanzeige und fhrt keinen Dialog mit dem Auftraggeber! Das sind typische Aufgaben fr einen Client.) Wenn der Auftrag z.B. JOB1 heiát, entsteht als Antwort die Datei JOB1.DNL (Download-Datei) und zus„tzlich JOB1.ERR (Error-Datei). Der Name der Download-Datei ist vom Anwender ver„nderbar (Befehl xport...). (Unter UNIX sind Dateina- men immer in Kleinbuchstaben zu schreiben.) Komponenten Man braucht nur drei Komponenten: 1. Das Serverprogramm AVANTI.EXE (Windows) bzw. avanti (UNIX) 2. Das Dienstprogramm AV.EXE (DOS) bzw. av (UNIX) 3. Die "Zentrale Auftragsdatei" (ZAD) avanti.jb0 Im folgenden wird beschrieben, wie man diese Komponenten installiert und in Betrieb setzt: (Im Anhang ist eine Schritt-fr-Schritt-Beschreibung einer Beispiel-Installation zum Ausprobieren unter Windows zu finden.) 1. Das Serverprogramm AVANTI.EXE (Windows) bzw. avanti (UNIX) wird gestartet wie PRESTO oder VP und liest die "Zentrale Auftragsdatei", avanti.jb0, die im selben Verzeichnis liegen muá, siehe 3. Aufruf z.B. avanti -a3 -df:\allegro\katalog -bcat -ka -lger [Windows] avanti -a3 -d/usr/allegro/katalog -bcat -ka -lger [UNIX] Im Server-Fenster erscheinen Meldungen ber den Verlauf. Man kann auf mehreren Verzeichnissen mehrere Server starten, fr unterschiedliche oder fr dieselbe Datenbank. Der normale allegro-Betrieb kann uneingeschr„nkt und unver„ndert weiterlaufen, w„hrend ein avanti-Server t„tig ist. Der Server l„uft so lange (und wartet auf Auftr„ge), bis man ihn stoppt. Das geht mit dem Befehl av -s serverpath (einzugeben in einem DOS- bzw. Command-Fenster) Zur Not auch mit Alt+F4 (Windows) bzw. Ctrl+c (UNIX). Empfehlung: Programme avanti und av auf ein fr alle zug„ngliches Verzeichnis legen, z.B. /usr/avanti (bei UNIX) oder F:\AVANTI (Novell). Dazu die Dateien uif0ger und uifsger. In der uifsger hat man die M”glichkeit, zu steuern, welche (Fehler-)Meldungen in die .dnl- oder die .err-Datei geht (Kommentar siehe dort). Begrenzung: Es ist eine Grenze von maximal 1.000.000 Befehlszeilen je Job eingestellt. (Das klingt gigantisch, aber bei Schleifen z„hlt jeder Durchlauf!) Ist diese Grenze erreicht, geht das Programm zum n„chsten Job ber. Mit Option z.B. -Vc5000 kann man die Grenze auf 5.000 Befehlszeilen (command lines) festlegen. 2. Das Dienstprogramm AV.EXE (DOS) bzw. av (UNIX) bergibt einen Auftrag (= job) an den Server. Konkret wird die Datei mit dem Auftragstext (= avanti-Programm) einfach hinten an die ZAD angeh„ngt. Genaue Form des Aufrufs s.u. Auftr„ge k”nnen auch bergeben werden, wenn der Server gar nicht l„uft! Man erh„lt dann eine Mitteilung von av. Sobald der Server gestartet wird, nimmt er sich der angesammelten Auftr„ge an. Empfehlung: Eine Shell- bzw. Stapel-Datei aj anlegen fr bequemen Aufruf. Das Minimum: UNIX: aj Novell: AJ.BAT rm $HOME/$1.dnl del %HOME%\%1.dnl av $HOME/$1 /usr/avanti av %HOME%\%1 f:\util 3. Die zentrale Auftragsdatei (kurz ZAD) namens avanti.jb0 Alle Nutzer mssen Schreibrecht auf diese Datei haben. (Unter UNIX kann man das mit dem Datei- Zugriffsrecht s l”sen.) Diese Datei beginnt beim ersten Start mit folgender Zeile: (Die ersten drei Stellen sind Signale fr den Server und fr av) 000xxxx000000016&jobname 0 : frei fr neue Auftr„ge, 1: gesperrt (wird von av gesetzt) 0 : Server steht, 1: Server l„uft (wird vom Server gesetzt) 0 : normal, 1: Server anhalten, 2: Server stoppen (wird von av gesetzt) (von auáen kann damit der Server beeinfluát werden, s.u.) xxxx : noch ungenutzte Positionen 000000016 : Offset-Position, wo der Server zu arbeiten beginnt, wenn er das n„chste Mal startet. 16 ist der Wert beim ersten Start, der Server „ndert diese Zahl selbst. Unmittelbar anschlieáend, mit dem Zeichen '&', beginnen die Auftr„ge. jobname ist der komplette Pfadname des ersten Auftrags. Es folgt der Text des Auftrags. Empfehlung: Damit die Mehrfachzugriffe funktionieren, legt man die ZAD zun„chst an, wenn der Server noch nicht l„uft. (Ein ganz kleiner Auftrag gengt, z.B. help ) Dann macht man die Datei allgemein verfgbar: UNIX: Novell: chmod 666 avanti.jb0 avanti.jb0 s Fr Kenner: Die momentane Methode der Auftragsbergabe wurde gew„hlt, weil nur diese unmittelbar auf allen Plattformen funktioniert. Jedoch wird auf UNIX eine Kommunikation ber eine "pipe", unter Windows per "WINSOCKET" effizienter sein. Da man nicht alles auf einmal machen kann, wurde also zuerst eine einfachere L”sung gew„hlt. Die Umstellung wird jedoch kein sehr groáer Aufwand sein, dafr ist intern schon gesorgt. Was sind "Auftr„ge"? Ein Auftrag (engl. "job") muá als ASCII-Datei in der avanti-Sprache formuliert und dann mit av an den Server bergeben werden. Der Aufruf hat diese Form: av jobname serverpath wobei der jobname den kompletten Pfadnamen umfassen muá, damit der Server weiá, wo er seine Ergebnisse (downloads) abliefern soll. Dann h„ngt av die Datei an die Zentrale Auftragsdatei avanti.jb0, die auf dem serverpath liegt. Als Kopf wird automatisch & jobname vorangestellt. Daran erkennt der Server, daá hier ein neuer Auftrag beginnt. Beispiel fr UNIX: Wenn z.B. /usr/mozart/auftrag1.job der jobname ist, produziert der Server die Errordatei /usr/mozart/auftrag1.err und die Downloaddatei /usr/mozart/auftrag1.dnl Der jobname ist beliebig, und er muá nicht mit .job enden. Damit man genau erkennen kann, wann ein Auftrag fertig ist, gilt folgendes: Wenn der Server mit dem Auftrag beginnt, ”ffnet er zuerst die Datei jobname.dn0. Erst bei Abschluá des Auftrags (oder wenn die Downloaddatei mit dem Befehl x f filename gewechselt wird) wird jobname.dn0 geschlossen und in jobname.dnl umbenannt. Also kann man, sobald man die .dnl-Datei sieht, sicher sein, daá diese Datei fertig ist. Es sei denn, man „ndert mit dem Befehl xport file filename den Download- Namen! Empfehlung: Fr jedes Verzeichnis, wo ein Server laufen soll, legt man am besten zwei kleine Batchdateien (bzw. Shellscripts) an: Windows: UNIX: ASTART.BAT astart avanti -ka -ddatapath -bdatabase -lger -a3 ASTOP.BAT astop av -s .\ av -s ./ Auf einem Windows-PC erh„lt man beim Start ein Fenster, auf dem der Server seine Meldungen zum Verlauf ausgibt. In einem DOS-Fenster kann man nun mit aj jobname (siehe oben unter 2.) Auftr„ge absetzen und beobachten, was der Server daraus macht. Funktionsdiagramm (fr UNIX; DOS analog; Dateinamen bei UNIX alle klein!) Datenbank Server -----------------------> /allegro/katalog | User 1 | User 2 | | | /usr/meier /usr/avanti /usr/mueller | | | | (wartet) | | aj XYJOB avanti.jb0 | XYJOB ----------------> | aj AUFTR25.JOB | [temporaer] | <----------------- AUFTR25.JOB XYJOB.DN0 <-------------- |(Abarbeitung XYJOB.DNL <-------------- | XYJOB) XYJOB.ERR <-------------- | (Abarbeitung| -----------------> AUFTR25.DN0 [temporaer] AUFTR25.JOB)| -----------------> AUFTR25.DNL | -----------------> AUFTR25.ERR (wartet) Es gilt also: wer zuerst kommt, mahlt zuerst. Jedoch sollen sp„ter mehrere Stufen von Priorit„ten eingerichtet werden: es wird dann avanti.jb1 usw. geben, also mehrere ZADs, die mit unterschiedlicher Priorit„t bedient werden. (Es wird noch ber Alternativen nachgedacht.) Andererseits k”nnen sich Insider einen Extra-Server auf einem anderen Verzeichnis einrichten und diesen parallel laufen lassen. Stoppen, anhalten, weiterfahren: Das Programm av hat drei Zusatzoptionen: halt, stop und run. Diese sind dem Systemverwalter vorbehalten (Paáwortsicherung fehlt aber noch!): av -h serverpath Der Server auf serverpath wird angehalten av -s serverpath ... wird gestoppt, d.h. beendet seine Arbeit (der aktuelle Job wird aber noch beendet) av -r serverpath ... wird (nach vorherigem -h) wieder gestartet Empfehlung:Gelegentlich l”scht man die ZAD. Das macht man, wenn der Server gerade auf Auftr„ge wartet. Dann stoppt man ihn, l”scht die ZAD, legt eine neue an, macht sie zug„nglich, und startet den Server wieder. Das Dienstprogramm av soll noch eine Funktion erhalten, mit der das automatisiert wird. Dateibersicht bei UNIX bei Novell --------------------------------------------------------------------------- /etc F:\UTIL aj 755 Auftragsuebergabe AJ.BAT S /usr/avanti F:\ALLEGRO avanti 755 Server AVANTI.EXE av 755 Dienstprogramm AV.EXE S uif0ger 600 User interface UIF0GER /serverpath drive:serverpath avanti.jb0 666 Auftragsdatei AVANTI.JB0 S astart 700 Start des Servers ASTART.BAT astop 700 Stopp ASTOP.BAT Auf /etc nur die Datei aj fr den Start, damit es automatisch fr alle zug„nglich ist. Natrlich darf es ein anderes Verzeichnis sein. Der Systemverwalter erkennt leicht, welche Rechte bzw. Flags gesetzt werden mssen. Die avanti-Sprache fr Auftragsdateien Achtung "allegrologen": diese Sprache hat einige ganz andere Aufgaben, aber nicht nur deshalb ist sie ganz anders konstruiert. Sie sollte wesentlich leichter zu erlernen sein, vor allem durch Nicht-"allegrologen". Dies war ein wichtiges Entwicklungsziel. (Vermutlich werden einige st”hnen, "warum konnte denn die Exportsprache nicht genauso einfach sein!!" Sie muá leider extrem kompakt sein (und deshalb kryptisch), weil die Parameter erstens in den Arbeitsspeicher passen mssen, zweitens aber auch schnell arbeiten sollen.) Es folgt die Liste der Befehle, die avanti zur Zeit umfaát. (Der Befehlsumfang wird noch erweitert werden) Jedes Befehlswort kann bis auf den ersten Buchstaben verkrzt werden, auáer erase und update, die man aus Sicherheitsgrnden immer vollst„ndig schreiben muá. D.h. statt write kann man wri oder wr oder auch nur w schreiben. Wichtig: Hinter dem Befehlswort oder -zeichen muá mindestens ein Leerzeichen folgen! Es muá also w n heiáen, nicht wn . Kursiv geschriebene W”rter wie filename deuten an, daá an der Stelle eine frei w„hlbare Angabe des Anwen- ders zu stehen kommt. Die Befehlsw”rter mssen so wie angegeben (also in der Regel klein) geschrieben werden, die variablen Teile k”nnen beliebige Zeichen enthalten. ERROR bedeutet: es wird der Fehlerzustand gesetzt, wenn bei dem Befehl was schiefging. Mit dem Befehl if error command oder if ok command in der nachfolgenden Zeile kann man darauf reagieren und woanders hinspringen, wenn ein Fehler aufgetreten ist bzw. wenn alles ok ist. command kann ein jump-Befehl sein, aber auch eine l„ngere Befehlsfolge, mit ; als Trennzeichen zwischen den Befehlen. Auf den letzten Seiten sind einige Beispiele zu sehen. Allgemeine Regeln  Leere Zeilen haben keine Wirkung.  Zeilen drfen mit einem oder mehreren Leerzeichen beginnen, anders als in den Export- und Import- sprachen (!). D.h. beliebige Einrckungen zwecks Gliederung sind erlaubt.  Mehrfach-Leerzeichen sind erlaubt, sie wirken wie nur ein Leerzeichen. (Bei write-Befehlen bleiben sie innerhalb von "..." erhalten)  Tabulatorzeichen wirken wie Leerzeichen.  Kommentare werden mit // (Doppelschr„gstrich) eingeleitet und k”nnen berall stehen. Der Rest der Zeile wird dann ignoriert.  In einer Zeile k”nnen mehrere Befehle stehen, sie mssen dann mit ';' getrennt werden. Besonders wichtig ist das beim if-Befehl: Wenn die Bedingung gilt, werden alle auf der Zeile nachfolgenden Befehle ausgefhrt, wenn nicht, wird zur n„chsten Zeile bergegangen. Fehlermeldungen des Programms werden in die Datei jobname.err geschrieben. Befehlsbersicht Auf den nachfolgenden Seiten sind die Befehle zu logischen Gruppen zusammengefaát. Es gibt 7 Gruppen von Befehlen: 1 Auftrags-Steuerbefehle 2 Suchen, Einlesen, Sortieren, Auflisten 3 Exportieren (Datens„tze und Texte in Download-Datei schreiben) 4 Manipulation von Daten im Arbeitsspeicher 5 Speicherfunktionen (Schreiben in die Datenbank) 6 Bedingungsprfungen und Sprnge 7 Schalter und Einstellungen Es folgt eine alphabetische Kurzbersicht, wobei die Gruppennummer links angegeben ist: 4 copy Kopiere den aktuellen Satz (d.h. es entsteht ein neuer) 3 download Exportiere den aktuellen Satz 5 erase L”sche den aktuellen Satz (auch aus den Registern) 2 find Ergebnismenge erstellen (Pica-„hnlicher Find-Befehl) 2 get Hole einen Satz (er wird dadurch zum "aktuellen Satz") 2 help Information ber die Datenbank ausgeben (Registernamen etc.) 6 if Bedingungen prfen und nachfolgende Aktion 6 jump Springe zu einem label 2 list Kurzliste der Ergebnismenge ausgeben 4 new Aktuellen Satz als neuen (leeren) Satz behandeln 2 order Sortiere die Ergebnismenge (auf- oder absteigend) 5 put Schreibe den aktuellen Satz in die Datenbank zurck (einschl. aller Register„nderungen) 2 qrix Registerauszug ausgeben 4 read N„chsten Satz aus einer ASCII-Datei oder .ALG-Datei in den aktuellen Satz einlesen 7 set Setze diverse interne Werte und Zust„nde 5 upload ASCII-Datei als neue Datens„tze einlesen und speichern 5 update ASCII-Datei einlesen, S„tze per Prim„rschlssel identizieren und ggfls. ersetzen (incl. Register„nderungen) 3 w/W Schreibe Text und Daten in Download bzw. Errordatei 3 xport Lade Exportparameter / Setze Exportdatei 4 # Aktionen mit Datenfeldern und Anwendervariablen 1 : Label (Sprungmarke) 1 @ Identifikation des Benutzers Bei den meisten Befehlen gibt es mehrere Optionen oder Unterbefehle. Auf den folgenden Seiten ist immer durch Fettdruck die krzeste Form des Befehls angedeutet. Beispiel: statt list numbered kann man auch list num schreiben, oder li nu oder irgendeine andere Verkrzung, im Extremfall l n (aber nicht ln ). 1. Auftrags-Steuerbefehle & jobname Beginn eines neuen Auftrags (diese Zeile erstellt av automatisch!) Name der bergebenen Auftragsdatei, incl. Pfad. Server macht daraus die Namen fr download und error-Datei @ Identifikation des Auftraggebers Notwendig bei Schreibzugriffen! Die genaue Form dieses Befehls steht noch nicht fest. Vorl„ufig schreibt man @3, um Schreibberechtigung zu bekommen. Damit der Server berhaupt Schreibbefehle ausfhrt, muá er mit Option -a3 gestartet worden sein. :label Sprungmarke; label = beliebige alphanum. Zeichenkette z.B. :start Mit dem Befehl jump anzusteuern, also in diesem Beispiel: jump start 2. Lesezugriffe 2.1 Hilfe anfordern help Informationen ber die Datenbank, z.B. die Namen der Register, damit man erf„hrt, was fr Fragen man stellen kann, etwa PER fr Person... help keys Einschr„nkung: nur die Namen der Register ERROR wenn keine definiert sind (d.h. keine I-Zeilen in der .API; dann funktioniert der find-Befehl nicht!) help fields Liste der Kategorien (aus der Konfigurationsdatei) 2.2 Suchbefehl: Ergebnismenge zusammenstellen find find-Befehl wie bei VP (s. "news" 40). Es entsteht eine Ergebnismenge. Evtl. besteht sie aus nur einem Satz, oder keinem! ERROR wenn nichts gefunden oder Erg.Menge zu groá oder formaler Fehler im Befehl. Die maximale Gr”áe der Erg.Menge ist vorerst 10.000. Der Befehl "find" ist wohl der wichtigste von allen, weil man mit ihm die Daten selektiert, mit denen man arbeiten will. Verschachtelte Klammerung ist m”glich. Beispiel: ('?' ist Trunkierungssymbol) f per beethoven? and (tit klavier? or piano?) if error jump nix Es werden S„tze mit "beethoven?" als Person und "klavier?" oder "piano?" als Titelstichwort gesucht. Wenn es nichts gibt, erfolgt Sprung zum Label :nix Sonderfall: find |iabcd suche abcd im Register i (wobei i=1...9, oder : fr 10 ) Dieser Sonderfall funktioniert immer. Man muá dafr jedoch wissen, welche Register die Datenbank hat. Der Befehl help liefert dazu die šbersicht. (D.h. man muá zuerst einen Auftrag abgeben, in dem nur steht. Dann studiert man die Liste und ersieht daraus, in welchem Register z.B. die Personennamen oder Stichw”rter sind. Die weitaus bequemeren Befehle wie f per goethe? kann man nur verwenden, wenn fr die betreffende Datenbank solche Bezeichnungen wie "per" definiert sind. Das erf„hrt man ebenfalls mit help. Der Systemverwalter des allegro-Systems kann Registerbezeichnungen jederzeit einfhren. Dafr mssen nur in der Index-Parameterdatei (z.B. CAT.API) Befehle dieser Art stehen: I XXX r "Klartextbezeichnung des Registers" XXX ist eine gewnschte Registerbezeichnung r ist die Nummer des Registers z.B.: I PER 1 "Personenregister" I AUT 1 "Personenregister" I TIT 3 "Titelstichwoerter" I SER 5 "Zeitschriften- und Serientitel" Man erkennt: ein Register kann mehrere Namen haben, die dann gleichwertig sind. Sonderabteilungen in Registern k”nnen eine eigene Bezeichnung bekommen: I DIS 1D. "Dissertationen unter Ortsnamen" Bei CAT.API gibt es die Sonderabteilung D miLeerzeichen hinter dem D (deshalb der Punkt) im Index 1: dort sind die Dissertationen unter Ortsname,Jahr aufgelistet. Mit dieser Definition kann man z.B. so suchen: find dis berlin,1992? // finde alle Berliner Dissertationen des Jahres 1992 find *new Innerhalb desselben Jobs kann man die bestehende Ergebnismenge mit diesem Sonderbefehl zuruecksetzen lassen. Auch eine einge- stellte Restriktion wird rueckgesetzt. find #nummern Erg„nzt die angegebenen internen Satznummern zur Ergebnismenge. Das ist eine sinnvolle Funktion, wenn man durch eine vorangegangene Aktion (vor allem im WWW-Kontext) eine Liste von internen Satznummern hat (per list i oder qrix). Diese Nummern, schlicht durch Komma getrennt, kann man sofort als Ergebnismenge verarbeiten lassen. 2.3 Datens„tze holen get option Einen Datensatz in den Arbeitsspeicher laden get edit option und zugleich zum Bearbeiten reservieren (sperren) (Freigabe erfolgt beim Speichern oder Laden des n„chsten Satzes) Statt option muá eine der nachfolgend beschriebenen Optionen stehen: get first / last Ersten / letzten Satz der Erg.Mg. laden g e f / g e l dasselbe, aber Satz zugleich sperren get next / prev N„chsten / vorigen Satz der Erg.menge laden ERROR, wenn Ende / Anfang berschritten g e n / g e p dasselbe, aber Satz zugleich sperren get k Satz k der Ergebnismenge laden ERROR wenn k<1 oder k>N (N = Gr”áe der Ergebnismenge) D.h. get 1 bewirkt dasselbe wie get first get inummer Sonderfall: (hat nichts mit Ergebnismengen zu tun) Satz mit interner Satznummer nummer einlesen, default 1 Dieser Befehl kommt zum Einsatz, wenn man durch andere Aktionen eine Liste von Satznummern hat, die abgearbeitet werden sollen ERROR, wenn nummer zu hoch oder Satz gel”scht (-> list i, list r) 2.4 Kurzlisten anfordern Die jetzt folgenen list-Befehle (bis auf l i) und der Sortierbefehl order gehen nur, wenn man eine .STL-Datei hat: list Ergebnismenge als Kurzliste ausgeben in die download-Datei Bei Bedarf vorher ordnen mit Befehl order (s.u.) list coded mit Umcodierung ASCII -> ANSI (per Tabelle o.apt) Wenn man die Liste unter Windows verwenden will, oder unter UNIX, die Datenbank aber in ASCII codiert ist. list numbered Die Liste soll numeriert sein list recnum Die internen Satznummern sollen mit ausgegeben werden (fr WWW-Verfahren vorteilhaft) l r n c Alles zusammen (d.h. r,c,n sind beliebig kombinierbar) Sonderfall: (fr WWW-Verfahren interessant) list internal Statt Text nur eine Liste der internen Satznummern, durch Komma getrennt, mit ",0" als Abschluá 2.5 Ergebnismenge ordnen order x position Ordnen ab der Stelle position der Kurztitelzeile x = a(scending) oder d(escending) ERROR wenn Menge zu groá (Grenze ca. 12.000) Achtung Parametrierer: durch geschickte Gestaltung der Kurzzeile kann man sich wertvolle Sortierm”glichkeiten schaffen. Wenn man diffizile Ordnungen braucht, die sich nicht mit der Kurzzeile machen lassen: Export mit einer der S-*.APR Dateien, anschlieáend (d.h. wenn der avanti-Job fertig ist) Sortieren mit ASORT, dann ein SRCH-Durchlauf mit einem P-*.APR, wie blich (z.B. in PR-LIST.BAT). Natrlich braucht das mehr Zeit. 2.6 Registerauszge anfordern qrix i suchbegriffListe von N Registereintr„gen ab suchbegriff im Register i (i = 1...9 und : fr 10) '?' hinter dem Suchbegriff bewirkt Trunkierung (dann erscheinen die Registerzeilen abgeschnitten) Die Zahl N stellt man mit dem Befehl q n ein, s.u. qrix reg suchbegriffreg ist eine zul„ssige Registerbezeichnung, z.B. q per goethe, q tit faust qrix n N Einstellung der Anzahl N auszugebender Zeilen, z.B. q n 20 (Default: 10) wirkt sich auf alle nachfolgenden q-Befehle aus, bis eine neue Einstellung kommt qrix m N Einstellung der maximalen Z„hlung N, die angezeigt werden soll. (Default: 1000) D.h. bei Indexeintr„gen mit mehr als N Treffern erscheint >N vor der Registerzeile. Ein kleiner Wert von N bewirkt Beschleunigung. Sonderfall: nach q m 0 kommen Registerauszge ohne Trefferzahlen. qrix format x Einstellung des Ausgabeformates. Zur Zeit gibt es nur zwei: 0 und 1. Format 0 ist das Standardformat, das voreingestellt ist. Beispiel fr Format 0: 3 registereintrag Beispiel fr Format 1: 3registereintragrnr1:rnr2:rnr3 ist das Tabulatorzeichen (ASCII 09), rnrn sind die internen Satznummern der Datens„tze, aus denen diesen Eintrag erzeugt wurde. Format 1 ist besonders geeignet, wenn man die Pr„sentation der Register selbst gestalten will (z.B. fr eine WWW-Anbindung) 3. Export (Download) 3.1 Einstellungen xport file filenameDatei filename fr Ausgaben benutzen Default: jobname.dnl W„hrend eines Auftrags kann man also das Downloading auf andere Dateien um- lenken. Zun„chst wird vom Programm das letzte Zeichen des Dateinamens auf '0' ge„ndert, erst beim Abschluá wird es durch das korrekte Zeichen ersetzt. So kann man von auáen erkennen, daá die Datei fertig ist! Man hat also die M”glichkeit, bereits auf die Fertigstellung von Teilauftr„gen zu reagieren. Davon unabh„ngig kann man auf andere Parameter umschalten: xport param parname Export-Parameterdatei parname.apr laden Default: parname=e-w ; Beispiel: xport par d-w Gilt fr nachfolgende download- und write -Befehle bis zum n„chsten xport- oder &-Befehl oder Ende des Auftrags. xport table tabname Hilfstabelle tabname.apt laden. Entspricht dem t-Befehl in der Exportparameter- sprache. 3.2 Datens„tze ausgeben download aktuellen Satz exportieren (Parameter: siehe xport parname) ERROR wenn momentan kein Satz geladen ist Default-Parameter: e-w.apr, sonst mit Befehl xport p... andere einstellen (s.o.) download set aktuelle Ergebnismenge exportieren ERROR wenn es keine gibt download family alle verknpften S„tze des aktuellen Satzes zusammenstellen (per Prim„rschlssel) und insgesamt ausgeben (s. Beispiel 5) Der aktuelle Satz selbst geh”rt dazu. Reihenfolge: ergibt sich aus Prim„rschlssel 3.3 Direkte Ausgabebefehle write cstring cstring in Downloaddatei .dnl schreiben Das Zeichen " wird vorn und hinten entfernt. Man braucht es, falls der Text mit einem der folgenden Zeichen oder mit Leerzeichen anf„ngt. Ein cstring ist eine Zeichenkette aus dezimalen ASCII-Codes und Textteilen in Anfhrungszeichen, wie im Handbuch fr den Export definiert (S.154). Zus„tzlich k”nnen die nachfolgend beschriebenen Elemente in einem cstring vorkommen (siehe unten) Sonderfall: n fr "newline", das wird bei UNIX als 10, bei DOS als 13 10 ausgegeben. Statt " kann ' verwendet werden, aber dann vorn UND hinten. (Wichtig, falls das Zeichen ' bzw. " innerhalb der Zeichenkette vorkommt!) write i j k ... Spezialfall: Folge von dezimal angegebenen ASCII-Codes i j k z.B. w 27 69 fr Esc E write #nnn Text der Kategorie #nnn in Downloaddatei schreiben #nnn kann auch eine Anwendervariable sein (Typ #uxy) ERROR wenn Kategorie nicht besetzt write internal Interne Satznummer des aktuellen Satzes write lastnum Anzahl Ergebnisse (Gr”áe der aktuellen Ergebnismenge) write newline Neue Zeile (UNIX: Code 10, DOS: 13 10) write primkey Prim„rschlssel des aktuellen Satzes write relative laufende Nr. (relative Position) des aktuellen Satzes innerhalb der Erg.Menge Nur wenn eine .STL existiert: write short Kurzzeile des Datensatzes (.STL-Eintrag) 3.4 Ausgabe in die Errordatei Befehle wie oben, nur mit groáem W: Write cstring cstring in Errordatei jobname.err schreiben, z.B. Write #nnn Text der Kategorie #nnn in Errordatei schreiben ... Alle write-Befehle lassen sich auf einer Zeile beliebig kombinieren, z.B. wri "Satznr.: " int new "Ort: " #74 ": " #75 ", " #76 ". - " #77 new Zwischen den einzelnen Elementen k”nnen mehrere Leerzeichen stehen, anders als bei der Exportsprache, ohne daá es das Ergebnis „ndert. Hier jedoch hat man (noch) nicht die M”glichkeiten der Exportsprache, einen Kategorietext zu manipulieren. 4. Manipulation von Datens„tzen im Arbeitsspeicher 4.1 Einen neuen Datensatz anlegen new aktueller Satz im Arbeitsspeicher wird geleert, d.h. er enth„lt nichts mehr und hat mit einem vorher gelesenen Satz nichts mehr zu tun. Es k”nnen nun neue Kategoriezeilen folgen (4.2), um den Satz neu aufzubauen! Dann put, um ihn als neuen Satz zu speichern. (Dasselbe geht mit upload.) copy aktueller Satz wird als Kopie behandelt, d.h. beim Speichern als neuer Satz gespeichert Dann beliebige #-Befehle, am Ende put , um den Satz wegzuschreiben. 4.2 Kategorien im aktuellen Satz manipulieren #nnn Text Kategorie #nnn in aktuellen Satz einordnen; wenn schon vorhanden, dann ersetzen. Keine Zeilentrennung innerhalb von Text! Wenn nur #nnn ohne Text, dann wird #nnn gel”scht! Wenn #nnn~Text, wird Kategorie #nnn nicht ersetzt, sondern n„chste freie Mehr- fachkategorie besetzt. Das passiert nur im Arbeitsspeicher! Erst mit dem Befehl put wird der ver„nderte Satz gespeichert. Mit download wird aber der ver„nderte Satz exportiert. Wenn die Kategorie jedoch nicht nur aus schlichtem Text besteht, sondern aus Textstcken, Variablen und anderen Kategorien zusammengesetzt werden soll, kann man folgende Form benutzen: #nnn=cstring Hinter dem '=' kann man dieselben Elemente verwenden, die auch beim write-- Befehl auftreten k”nnen, also insbes. andere Kategorien und Anwendervariablen. Achtung: das '=' muá auf der Position des ersten Textzeichens stehen (siehe CFG-- Befehl k), z.B. #40 ="Meier, Fritz" #402="Schmidt, Kurt" ist gleichwertig mit #40 Meier, Fritz #402Schmidt, Kurt Das gilt auch fr die #u-Variablen: #ubc="TEXT" oder #ubcTEXT Die Kategorie #nnn kann also auch eine #u-Variable (Anwendervariable) sein. Diese wird dann in den Hintergrundspeicher kopiert und kann sp„ter wieder benutzt werden. Man hat also Variablen des Typs #uxy zur freien Verfgung. Dieselben Variablen k”nnen innerhalb der verwendeten Exportparameter wie gewohnt eingesetzt werden. Will man z.B. die Kategorie #90 in #usg aufbewahren, braucht man nur #usg=#90 zu geben. read filename Ersten Satz aus ASCII-Datei oder .ALG-Datei filename in den aktuellen Satz einlesen (s. Beispiel 7+8) Weitere Beschreibung siehe Gruppe 5, hinter update read N„chsten Satz einlesen (also filename nur beim ersten Zugriff) ERROR, wenn es keinen mehr gibt. 5. Schreibfunktionen 5.1 Einzelne S„tze schreiben und l”schen Die folgenden Funktionen sind nur bei Schreibberechtigung m”glich. Alle Speicherungen und L”schungen werden wie bei den "normalen" Programmen in der .LOG-Datei protokolliert. put aktuellen Satz (Objekt 1) zurckspeichern ERROR, wenn es nicht geht put 1 Wenn der Satz durch get edit ... geladen, also gesperrt wurde, erfolgt zu- gleich Freigabe. put 2 Objekt 2 zurckschreiben (siehe "set obj ...") Wenn jeder Satz einer Ergebnismenge behandelt und dann zurckgeschrieben werden soll, muá man eine Schleife konstruieren. Siehe Beispiel 4. erase aktuellen Satz l”schen [keine Kurzform!] ERROR wenn nicht m”glich (weil gesperrt oder weil Verknpfung besteht, oder keine Berechtigung. erase und update drfen nicht abgekrzt werden! Beispiel 6 zeigt das L”schen einer Ergebnismenge. 5.2 Upload/Update-Funktionen update filename Datei filename laden und in Datenbank einspeisen upload filename (Format der Datei: ASCII (siehe "news" 42) oder .ALG) ERROR wenn nicht gefunden oder nicht lesbar update muá ausgeschrieben werden, auáerdem muá vorher der Ersetzungsmodus mit set uxy gesetzt werden. upload wirkt wie update mit vorherigem set u01. Sonderf„lle:  Teilfeld-Update Beim Modus set u41 kann man Teilfelder aktualisieren: Wenn der Update-Satz eine Kategorie #nnn axxxxxbxxxx... enth„lt, wird Kategorie #nnn des alten Satzes genommen und Teilfelder a und b ersetzt, die anderen bleiben erhalten.  Satz als neuen Satz speichern Wenn ein Satz auf jeden Fall als neuer Satz gespeichert werden soll, obwohl man set u11 gemacht hat und der Prim„rschlssel existiert, kann man #u1 #####fileno (fileno = 1...255) als erste Kategorie schreiben, vor die #00. Der Satz wird dann in die Datei fileno gespeichert.  Satz l”schen Wenn der Satz mit #u1 @@@@@ beginnt, wird er gel”scht. Natrlich nur, wenn der Prim„rschlssel gefunden wird, eindeutig ist, und der Satz nicht gesperrt ist. Nur diejenigen Kategorien brauchen unterhalb #u1 angegeben zu werden, die den Prim„rschlssel erzeugen. Wenn dieser also z.B. in #00 steht, braucht man in der Update-Datei nur #u1 @@@@@ #00 IdNummer zu haben, um den Satz zu l”schen.  Hierarchische Unters„tze werden, anders als bei UPDATE, anhand ihrer #01 identifiziert und entsprechend dem Modus ineinandergemischt. Wenn eine #01 im alten Satz nicht existiert, wird der Untersatz hinten angeh„ngt. upload direkt nachfolgende S„tze laden und speichern (d.h. upload-S„tze k”nnen unmittelbar in die update Auftragsdatei eingebettet sein!) Dann muá am Ende der Daten stehen: end Beginn eines neuen Satzes wird an #00 erkannt, (genauer: die erste in der .CFG definierte Kategorie.) Innerhalb der Upload-Daten drfen Zeilen nur mit '#' oder Leerzeichen beginnen, sonst endet der Upload-Vorgang! Vorher muá mit set uxy der Update-Modus gesetzt werden, sonst wird nichts geschrieben (siehe 7.) end Ende der Upload/Update-Daten, n„chste Zeile ist Fortsetzung des Auftrags. 5.3 Einlesen von ASCII- oder Grunddateien read filename Datei filename ”ffnen und ersten Satz einlesen filename kann eine ASCII-Datei oder vom Typ .ALG sein. ERROR wenn es nicht gelingt read n„chsten Satz einlesen ERROR wenn nichts mehr da Eingelesen wird der Satz in das Objekt 2, wenn vorher "set obj 2" gegeben wurde, sonst in Objekt 1. (siehe -> set object ... ) Statt mit upload oder update kann man folglich auch mit read und put arbeiten, was man als Schleife organisieren muá. Das hat den Vorteil, daá an jedem Satz vor dem Speichern Operationen durchfhr- bar sind. (Siehe Beisp. 7: S„tze einzeln einlesen und speichern) Mit read und download kann man aber auch Grunddateien exportieren (Beisp. 8), also avanti statt des konventionellen SRCH einsetzen. Wenn Schreibbefehle nicht gelingen, z.B. weil der betreffende Satz in der Datenbank gesperrt ist, werden Meldungen in die Errordatei geschrieben. 6. Bedingungsprfungen und Sprnge Wir verwenden die Symbolelabel : alphanumerische Zeichenkette ohne Leerz. command : beliebige Befehlsfolge (; als Trennung) jump label Springe zur Zeile :label if error command Wenn Fehler beim vorangegangenen Befehl, dann command ausfhren (Das kann also eine ganze Folge von Befehlen sein!) if noerror command if ok command Umgekehrt: wenn kein Fehler, fhre command aus; ok ist dasselbe wie noerror if greater N command Wenn die Ergebnismenge gr”sser ist als N, dann fhre command aus. Ntzlich, wenn man zu groáe Mengen verhindern will. if less N command Wenn die Ergebnismenge kleiner ist als N, dann fhre command aus. if fam command Wenn der aktuelle Satz zu einer Verknpfungskette geh”rt (egal of Haupt- oder Untersatz), dann fhre command aus if main command Wenn der aktuelle Satz Hauptsatz einer Verkn.Kette ist, dann command ausfhren if sub command Wenn der aktuelle Satz ein Verknpfter Untersatz ist, dann command ausfhren (Kennzeichen: '+' kommt im Prim„rschlssel vor) if hiera command Wenn der aktuelle Satz ein hierarchisches, mehrb„ndiges Werk ist, dann command ausfhren. if #nnn command Wenn Kategorie #nnn im aktuellen Satz vorkommt, dann command ausfhren. if #uxy command Dasselbe, nur auf eine Anwendervariable #uxy bezogen. D.h. command ausfhren, wenn #uxy besetzt ist. if #mmm = #kkk command Vergleiche Inhalt von #mmm mit #kkk , if #mmm > #kkk command Bei Gleichheit bzw. gr”áer/kleiner: command ausfhren if #mmm < #kkk command #mmm und/oder #kkk k”nnen Anwendervariablen sein. Wenn #mmm oder #kkk nicht besetzt ist, gilt die Bedingung als nicht erfllt. Statt #kkk kann auch eine Zahl stehen, dann wird ein Zahlenvergleich durchgefhrt, sonst Stringvergleich. Teilfelder k”nnen nicht direkt verglichen werden, dazu muá man erst Anwenderva- riablen erzeugen, z.B. #uv1 = #123$a // $a von #123 in #uv1 kopieren #uv2 = #234$b // $b von #234 in #uv2 kopieren if #uv1 = #uv2 ... (Wie beim write-Befehl muá man hier '$' statt '' verwenden. Auf diese Weise kann man auch unter UNIX problemlos solche Dinge programmmieren.) 7. Schalter und Einstellungen Mit den Befehlen switch und set (beide Befehlsw”rter sind gleichwertig) kann man eine Reihe von Einstellungen vornehmen, die sich auf bestimmte nachfolgende Aktionen auswirken. switch fam Bilde die Ergebnismenge aller S„tze, die mit dem aktuellen Satz verknpft sind (Pica- Begriff "family") Nachfolgende get- und list-Befehle beziehen sich dann auf diese Ergebnismenge. Wenn es nur darum geht, eine Satzfamilie auszugeben, kann man schlicht "download fam" sagen, -> "download". ERROR wird gesetzt, wenn es keine Verknpfung gibt. Man kann jederzeit zu der eigentlichen Ergebnismenge zurckschalten: switch resultset Man ist wieder an derselben Position wie vor dem switch fam . (Der vorher aktuelle Satz wird intern erneut geladen.) Dasselbe trifft bei nochmaligem switch fam zu: Das vormals aktuelle Familienmitglied wird wieder geladen. Die Konsequenz ist, daá man eine Erg.menge durcharbeiten und dabei zu jedem Satz alle verknpften S„tze gleichfalls abarbeiten kann. Siehe dazu Beispiel 5. switch amodus modus=0,1,2,3,4,5 Aufl”sung der V14-Stammsatznummern, d.h. Ersetzung der Nummern durch Klar- texte. Dabei gibt es die Modalit„ten laut Kap. 10.2.6.8 (Handbuch S. 199) D.h. switch a1 ist der Normalfall. Der Befehl muá fr jeden geladenen Satz ausdrcklich gegeben werden, aber er wird NUR gebraucht, wenn man per write #nnn einzelne Kategorien ausgeben will, in denen Stammsatznummern stehen k”nnten. Anschlieáend kann man den Satz nicht mit put zurckspeichern (wird verhindert). Wenn man also Žnderungen am Satz vornimmt, VOR dem Befehl switch a1 den Befehl put geben. switch coding Damit wird die Umcodierung der Registerzeilen, Kurztitelzeilen, und der write #... -Befehle ein- und ausgeschaltet. Wichtig ist das, wenn die Datenbank in ASCII codiert ist, die Ergebnisse in der .dnl-Datei aber in ANSI gebraucht werden. Oder auch, wenn Sonderzeichen in den Registerzeilen vorkommen k”nnen (siehe Befehl qrix). Fr Kurzlisten kann auch die beim Befehl list vorgesehene Option coded verwendet werden. set nfileno Dateinummer fr neue Datens„tze einstellen (fileno=1...255). Entspricht Option -n bei PRESTO. set uxy Update-Modus einstellen, vor dem Befehl update zu geben; wie beim Programm UPDATE (x = 0,1,2,3,4, y = 0,1) Man muá einen Modus setzen, der Befehl update wird sonst nicht ausgefhrt! set object 1/2 Satz 1 bzw. Satz 2 einschalten Es gibt zwei interne Arbeitsspeicher fer Datens„tze, die "Satz1" und "Satz2" genannt werden. Normalerweise ist Satz1 eingeschaltet, d.h. alle Aktionen werden in Satz1 ausgefhrt. Jederzeit kann man aber in einem Auftrag auf Satz2 schalten, einen Datensatz mit get oder read hineinholen, sonstige Aktionen damit durchfhren und ihn auch mit put wieder speichern. set download 1/2 Download1 bzw. Download2 einschalten Es k”nnen 2 download-Parameter und -Dateien definiert sein. Normalerweise ist Download1 aktiviert. Wenn erstmals set dow 2 gegeben wird, muá man gleich danach xport p ... und x f ... setzen, damit dem Programm bekannt ist, was bei download geschehen soll. Anschlieáende down-Befehle laufen dann mit diesem zweiten Set ab, bis wieder set d 1 kommt. set list i Maximalzahl Zeilen fr den -Befehl (als Default ist 10 eingestellt) set max i Maximalzahl Anzahl Datens„tze fr download-Befehl Der einfachste Client: eine Stapeldatei Nehmen wir an, wir arbeiten auf K:\USR\FRITZ und wollen laufend Auftr„ge an den "avanti"-Server geben, der auf F:\AVANTI l„uft. Wir geben einmal den Befehl set PFAD=K:\USR\FRITZ und schaffen uns eine Stapeldatei wie diese, genannt AJS.BAT: @echo off if exist %1.dnl del %1.dnl av %PFAD%\%1 f:\avanti :loop if not exist %1.dnl goto loop v %1.dnl Wenn wir dann eine Auftragsdatei JOB1 geschrieben haben, brauchen wir nur noch z.B. (je nach Installation) ajs job1 zu sagen. Und abzuwarten, bis JOB1.DNL angezeigt wird. Deshalb wird die Download-Datei vor dem Aufruf gel”scht. Sobald sie dann wieder auftaucht, wird die Schleife "loop" beendet und die Datei wird angezeigt. Diese Stapeldatei k”nnen auch andere User benutzen, die auf anderen Verzeichnissen arbeiten. Empfehlung: Man legt als Minimum eine allgemein zug„ngliche Batchdatei aj an, in der steht: DOS: UNIX: if exist %1.dnl del %1.dnl rm $1.dnl av %HOME%\%1 f:\allegro av $HOME/$1 /usr/avanti Unter DOS muá das Home-Verzeichnis des Users in der Environment-Variablen HOME stehen, unter UNIX ist das automatisch gegeben. Beispiele Man schreibt jeweils die Befehle (ohne die Kommentare!) in eine Datei mit beliebigem Namen jobname und gibt den Befehl av userpath\jobname serverpath oder, wenn man eine vorbereitete Stapeldatei wie aj.bat oder ajs.bat benutzt: aj jobname 1. Ergebnismenge bilden, geordnete Kurzliste ausgeben: (Wir nehmen hier an, daá die Kurzzeilen (.STL-Datei) an der Position 58 eine Jahreszahl enthalten) find tit berlin? or hamburg? //Titel suchen, die "berlin" oder "hamburg" // enthalten order descending 58 //Erg.Menge ordnen, absteigend ab Position 58 list //Kurzliste ausgeben 2. Ergebnismenge bilden, formatierte Titelliste ausgeben: xport p p-normal //Parameter P-NORMAL.APR fr Export verwenden find tit berlin? or hamburg? //Titel suchen, die "berlin" oder "hamburg" // enthalten order a 1 //Erg.Menge ordnen, aufsteigend ab Position 1 download set //Kurzliste ausgeben 3. Eine neue Kategorie in jeden Satz einer Ergebnismenge einbauen Z.B. in alle S„tze mit "mozart, w?" als Person und Titelstichwort Sinfonie oder Konzert/Concert soll das Schlagwort #31 Wiener Klassik eingebaut werden: (Man sieht hier, wie eine Ergebnismenge abgearbeitet werden kann) xport p p-normal //Fr downloads sollen die parameter p-normal.apr // verwendet werden find per mozart, w? and (tit sinfo? or konzert or concert) get e first //erster Satz wird geladen und gesperrt (wegen 'e') if error jump ende //wenn es keinen Satz gibt! (Erg.Menge leer / zu groá) :anfang //Anfang der Schleife #31 Wiener Klassik //diese Kategorie wird eingebaut put //Satz zurckschreiben (incl. Entsperren des Satzes) get e next //n„chsten Satz laden und sperren if noerror j anfang //falls es einen gab: weiter bei :anfang, //sonst ist die Schleife zu Ende :ende download set //gesamte Ergebnismenge (nach Ver„nderung!) downloaden ... //weitere Befehle oder Ende des Auftrags In krzester Form k”nnte dieser Auftrag auch so aussehen: (Alle Befehlsw”rter auf 1 Zeichen gekrzt, mehrere Befehle zu einer Zeile zusammengefaát; das Ergebnis ist dasselbe) x p p-normal f per mozart, w? and (tit sinfo? or konzert or concert) g e f; i e j ende :anfang #31 Wiener Klassik p; g e n; i o j anfang :ende d s ... // weitere Befehle oder Ende des Auftrags 4. Bestimmte Kategorien einer Ergebnismenge exportieren Angenommen, eine Kunstdatenbank enth„lt Bildbeschreibungen, und in einigen S„tzen steht eine Kategorie #777 mit dem Namen (z.B. URL) einer Grafikdatei. Es gibt ein Suchregister ART mit den Knstlernamen. Die Dateinamen zum Knstler Chagall sollen extrahiert werden. f art chagall? get first if error jump ende :schleife if #777 w #777 n //schreibe die Kategorie #777 heraus (wenn sie //vorkommt) und danach eine neue Zeile get next //n„chsten Satz holen if ok j schleife //wenn's noch einen gab, zurck nach :schleife :ende Als Ergebnis erh„lt man die Datei .dnl, in der die Dateinamen stehen. 5. Ergebnismenge einschlieálich aller verknpften S„tze ausgeben Eine Ergebnismenge soll exportiert werden mit den Parametern I-1.APR (d.h. als allegro-Grunddatei, die man anschlieáend fr weitere Aktionen verwenden kann). Dabei sollen aber zu jedem Satz alle mit ihm verknpften S„tze auch ausgegeben werden. (Verknpfungen mssen so realisiert sein, daá die Unters„tze den Prim„rschlssel des Hauptsatzes enthalten, aber mit angeh„ngter "Bandnummer" o.dgl., also z.B. 1234 fr den Hauptsatz, 1234+001, 1234+002, ... fr die Unters„tze, die wiederum weitere Unters„tze haben k”nnen: 1234+001+01 etc.) xport p param i-1 // Eine Grunddatei wird als Export gewnscht find ... // Bildung der Ergebnismenge get first // ersten Satz holen if error jump ende // wenn es keinen gibt (Erg.Menge leer) :beginn // Anfang der „uáeren Schleife *********** switch fam // Familie des Satzes bilden // (Ausgangssatz geh”rt dazu, wird also mit exportiert!) if error jump nofam // es gibt keine down set // Familie exportieren switch resultset // zurckschalten zur Erg.Menge *********** jump nextrec // Sprung -> :nextrec :nofam // wenn es keine Familie gab switch res down // dann den Satz ausgeben :nextrec get next // n„chsten Satz der Erg.Menge holen if ok jump beginn // wenn es noch einen gab, dann weiter bei :beginn :ende // alles ist abgearbeitet .... Die vier Befehle zwischen ****** k”nnen ersetzt werden durch die Zeile download family oder d f Nur wenn man die S„tze einer Satzfamilie einzeln behandeln will, braucht man die M”glichkeit, auf die Familie als Ergebnismenge umzuschalten. 6. Ergebnismenge l”schen @3 find ... // Erg.Menge erstellen get first // ersten Satz laden if error jump ende :schleife erase // l”schen get next if ok jump schleife :ende 7. S„tze einzeln aus Datei einlesen und speichern NEWDATA ist eine Grunddatei neuen Typs (ASCII-Datei) oder eine Grunddatei der Struktur .ALG. "avanti" merkt selbst, was es ist! Die S„tze sollen eingelesen und gespeichert werden. Dabei soll jeder Satz noch vorbearbeitet werden. Hier nur das Gerst, damit es bersichtlich bleibt: @3 read NEWDATA // QuellDatei wird ge”ffnet, erste Satz wird eingelesen :schleife // evtl. Behandlung des eingelesenen Satzes durch weitere Befehle put // Satz wegschreiben read // n„chsten Satz einlesen if ok jump schleife // wenn noch einer da war, Sprung nach :schleife 8. Grunddatei exportieren Eine Grunddatei des neuen Typs kann man nicht mit dem alten SRCH einlesen. Der "avanti"-Server kann sie aber lesen und auch exportieren: (er kann auch die bisherigen Grunddateien lesen!) Wenn die Datei z.B. ROHDATEN heiát, braucht man nur diesen Job: (Auf die Datenbank wird hierbei gar nicht zugegriffen, es sei denn, man hat Nachladungen oder V14-Verknpfungen in den Daten) xport p p-normal // diese Exportparameter benutzen // oder: // x p i-1 // Grunddatei alten Typs erzeugen xport f LISTE // ZielDatei soll LISTE heiáen read ROHDATEN // QuellDatei wird ge”ffnet, erste Satz wird eingelesen :schleife dow // Satz exportieren read // n„chsten Satz einlesen if ok jump schleife // wenn noch einer da war, Sprung nach :schleife 9. Kategorie/Teilfeld einfgen In alle bestimmte S„tze, von denen man eine Liste der Prim„rschlssel hat, soll eine Kategorie oder ein Teilfeld eingefgt oder es soll eine Kategorie gel”scht werden. (Vgl. Beispiel 3) @3 // Schreibberechtigung herstellen update // jetzt kommen Daten, die einzumischen sind: #00 IdNr1 // Prim„rschl. des ersten Satzes #nnn text // Kategorie einfgen (wenn sie schon vorhanden ist, wird sie // ersetzt #kkk xtext // Teilfeld x in Kategorie #kkk einfgen #jjj // Kategorie #jjj l”schen #00 IdNr2 // Prim„rschl. des zweiten Satzes #nnn ... ... #00 IdNrN // Prim„rschl. des N-ten Satzes #nnn ... end // Ende des update-Vorgangs Die Liste der Prim„rschlssel und Kategorien kann durch beliebige Vorg„nge vorher erstellt worden sein, z.B. durch einen Export mit manueller Nachbearbeitung. Man sieht, daá nur ein Minimum an avanti-Programmie- rung n”tig ist, um solche Manipulationen in einer Datenbank durchzufhren. Anhang: Anleitung fr Test unter Windows Damit jeder, der ber nicht mehr als einen schlichten Windows-PC verfgt, den "avanti"-Server ausprobieren und sich damit vertraut machen kann, beschreiben wir eine exemplarische Installation Schritt fr Schritt. Ausprobiert wurde alles mit WfW 3.11 auf einem 486 mit 4 MB. Wir fangen auf DOS-Ebene zu arbeiten an! (Windows wird erst sp„ter gestartet, siehe 3.) Annahmen:  Auf C:\ALLEGRO liegen die normalen "allegro"-Programme, vorzugsweise V14c, aber „ltere tun's auch.  Auf C:\ALLEGRO\KATALOG liegt die Datenbank CAT. Zum Testen wird empfohlen, eine Kopie einer echten Datenbank anzulegen und diese zu benutzen! 0. Wenn die Datenbank noch keine symbolischen Registernamen hat, diese in die Datei CAT.API einbauen, z.B. I PER 1 "Personennamen" I AUT 1 "Autoren" (AUT und PER sind dann gleichwertig!) I DIS 1D. "Dissertationen (Ort,Jahr Name)" I TIT 3 "Titelstichwoerter, Schlagwoerter" I TAF 4 "Titelanfaenge" I SER 5 "Serientitel" usw. Erlaubt sind beliebige 3stellige Bezeichnungen fr die Register und Abteilungen innerhalb der Register, bis zu 32 Stck. 1. Den Inhalt des Pakets AVANTI.LZH auf C:\ALLEGRO entpacken: avanti.exe der Server av.exe Dienstprogramm zum šbergeben von Jobs etc. uifsger Meldungstexte des Servers avanti.txt Beschreibung des Servers e-w.pr Parameter zum Downloaden von Datens„tzen aj.bat Zum einfachen šbergeben von Jobs (siehe 7.) astop.bat Um den Server zu stoppen allegro.ico Icon fr Windows 2. SHARE starten: auf DOS-Ebene den Befehl "share" geben. Damit man hinterher die Datenbank in einem DOS-Fenster benutzen kann, w„hrend der Server arbeitet. Innerhalb des DOS-Fensters braucht man nicht SHARE zu laden, es muá VOR dem Windows-Start sein! 3. Windows starten 4. Ein Programmsymbol anlegen (im Programm-Manager: Datei / Neu...) Beschreibung: avantiServer Befehlszeile: C:\ALLEGRO\avanti -ka -dc:\allegro\katalog -bcat -n1 -a3 Arbeitsverzeichnis: c:\allegro Als Icon wird ALLEGRO.ICO empfohlen. 5. Ein DOS-Fenster ”ffnen ("MS-DOS-Eingabeaufforderung"), auf C:\ALLEGRO wechseln. 6. Einen ersten Job anlegen: es gengt eine Datei mit Namen job und Inhalt help 7. Diesen Job an den Server bergeben (obwohl er noch nicht l„uft) aj job Dann wird die Datei avanti.jb0 angelegt. 8. Mit Alt+TAB zum Programm-Manager zurck, von dort den Server starten. Das Server-Fenster erscheint. Der Server nimmt den Job und fhrt ihn aus, geht dann in Wartestellung. 9. Mit Alt+Leertaste und "Wechseln zu..." zurck zum DOS-Commandfenster, auf C:\ALLEGRO weiterma- chen. Jetzt sollte job.dnl existieren und die Hilfsinformationen zur Datenbank enthalten. 10.Jetzt kann man richtig loslegen: Jobdateien anlegen (Namen beliebig), Alle Befehle der "avanti"-Sprache sind dabei erlaubt. Eine Jobdatei, sagen wir job1 , bergibt man mit aj job1 an den Server. Man braucht nur abzuwarten, bis job1.dnl fertig ist. Sie enth„lt die Ergebnisse, job1.err enth„lt evtl. Fehlermeldungen. Empfehlung: fr kleine ad-hoc-Jobs immer denselben Namen nehmen, also etwa JOB, sonst sammeln sich lauter Dateien, die man irgendwann alle beseitigen muá. W„hrend ein Job l„uft, kann man auch mit CockPit oder direkt mit presto -a3 -dkatalog -n1 die Datenbank zugleich mit dem Server benutzen. Das ist besonders interessant, wenn gerade ein upload oder update l„uft. Man kann beobachten, wie nach und nach die Eintr„ge in den Registern erscheinen. Das klappt nur, wenn man den Befehl "share" nicht vergessen hat (siehe 2.), UND dann PRESTO ohne -S startet! 11.Im DOS-Fenster astop geben, um den Server zu stoppen 12.Mit exit das DOS-Fenster beseitigen. Zum Serverfenster wechseln. 13.Das Serverfenster mit Alt+F4 schlieáen. Wenn Sie Programmiererfahrung haben, k”nnen Sie jetzt nachdenken, ob und wie Sie den Server in andere Umgebungen einbauen k”nnen. Wichtig ist nur, daá man ausfhrbare Jobdateien erstellt. Wie man das macht, ist egal. Die jobs mssen mit av an den Server bergeben werden, als Muster und Beispiel dient AJ.BAT. Wenn der Job fertig abgearbeitet ist, erscheint die Datei jobname.dnl. Wie man darauf reagiert und was man mit der Ergebnisdatei macht, ist wieder v”llig beliebig. Vielleicht stellt man daraus eine neue Jobdatei her, die man wiederum dem Server bergibt ... Anwendungen in Braunschweig Die UB Braunschweig hat den avanti-Server im Dezember '96 in ihre Web-Implementierungen eingebaut. Es handelt sich um WWW-OPACs, die auf einer SUN-Workstation laufen. Diese liefen vorher mit einer Kombination der Programme qrix und srch. Diese Art der Realisierung eines WWW-Katalogs war recht aufwendig zu parametrieren. Die neue Art ist schneller und eleganter. Die Methodik ist berblicksartig beschrieben in den allegro news Nr. 44 vom 31.12.96. Die gesamten Skripte (Perl und HTML) mit ausfhrlicher Beschreibung sind auf dem FTP-Server der UB und auf dem WWW-Server bereitgestellt worden (Datei acwww25.lzh).