`Vorangehender Teil`   /   `Fortsetzung` 

10.2.6.6		Export: Rechenbefehle

Gerechnet werden soll mit den Inhalten von Kategorien - mit was sonst? Dabei kann es nötig sein, den in der Kategorie stehenden Text (der dann als Zahl anzusehen ist) noch auf andere Art vor- oder nachzubehandeln. Deshalb lag es nahe, auch die Rechenfunktionen als Manipulationsbefehle zu entwickeln (-Ø Kap.10.2.6.3), damit man alle nötigen Bearbeitungen miteinander kombinieren kann. Aus Gründen der Effizienz wurde für das Rechnen nur ein einziger Befehl geschaffen: der Buchstabe  x  wird benutzt, um alle Rechenoperationen einzuleiten. Mehrere x-Befehle können hintereinander ausgeführt werden. Gleich ein Beispiel: eine Kategorie #95 soll "Lieferant`/`Preis" enthalten, und wir wollen den Preis ausgeben, aber vorher sollen 20%% abgezogen und das Ergebnis mit 1.14 multipliziert und dann auf 2 Stellen gerundet werden. Das geht so: 
#95 x"*0.8" x"*1.14" x"r2" p"Endpreis: DM " 
Wenn in #95 z.B. "Meyer / DM 531,90" steht, wird  "Endpreis: DM 485.09" ausgegeben. 
Die eigentlichen Rechenbefehle müssen also einzeln jeweils hinter einem  x  in Anführungszeichen stehen. 
Die allgemeine Form eines Rechenbefehls ist 
x"OpWert"
mit einem Operatorzeichen Op und dem zu verrechnenden Wert. Die Operation wird dann jeweils auf den aktuellen Arbeitstext angewendet, das Ergebnis ist ein neuer Arbeitstext - wie bei den anderen Manipulationsbefehlen. Es hat immer 9 Nachkommastellen (auch bei ganzen Zahlen), aber stets mit Punkt, nicht Komma. 
Es macht nichts, wenn der Arbeitstext vor oder hinter der Zahl noch andere Angaben enthält: das Programm schält sich die Zahl heraus (Punkt und Komma sind dabei gleichwertig) und beachtet alles andere nicht. Die Zahl kann negativ sein, dann muß aber hinter dem Minuszeichen (Bindestrich) sofort die erste Ziffer folgen. 
Diese Operatorzeichen gibt es: 

+ - * /	Grundrechenarten 
%		Divisionsrest  (z.B.  25%7 ergibt 4) 
r		Rundung (Dahinter als Wert eine Ziffer für die Anzahl der Stellen, 0 für Rundung auf ganze Zahl) 
=		Wertzuweisung: der aktuelle Arbeitstext (nicht die Kategorie!) wird durch Wert ersetzt 
		(Nicht verwechseln mit dem Manipulationsbefehl =xy, -Ø 10.2.6.3, der den Inhalt des Arbeitstextes in eine Anwendervariable kopiert) 
>  >=		Vergleiche: Diese Befehle verändern den Arbeitstext nicht. Er wird nur mit dem Wert verglichen. 
<  <=		Wenn die Bedingung zutrifft, wird mit demselben Arbeitstext die Zeile fortgesetzt, wenn nicht, 
==		wird sie ergebnislos abgebrochen und zur nächsten übergegangen. (Vergleichen Sie dies mit den Manipulationsbefehlen bX und cX.) Insbesondere kann man so auch bedingte Sprünge auslösen. 
		Die Zeile 
		#77 +M x">=500" e0 
		bewirkt, daß zur Sprungmarke #-M gegangen wird, wenn die Seitenzahl größer oder gleich 500 ist. Dies funktioniert auch, wenn in der Aufnahme so etwas wie  
		#77 ca. 600 S.   steht. Römische Zahlen werden nicht erkannt und deshalb übergangen. 
		Die Operation  ==  prüft die Gleichheit als Gleitkommazahl, nicht als Zeichenkette. 

Als Wert kann man drei verschiedene Dinge einsetzen: 
Zahl		eine sog. "Gleitkommazahl" mit Dezimalpunkt oder -komma. Auch negative Zahlen sind möglich. 
Anw.var.	eine Anwendervariable, dann wird deren Inhalt genommen und mit dem Arbeitstext verrechnet, z.B. x"+vb"  (für #uvb ; wenn diese nicht belegt ist, wird der Wert Null verwendet.) 
Kat		eine normale Kategorie mit '#', also z.B.  x"+#76 "

Einige Hinweise auf nützliche Manipulationen: 
e"." beseitigt den Dezimalteil, E".??" schneidet hinter der zweiten Nachkommastelle ab (beides ohne Rundung), 
x"r0" rundet auf eine ganze Zahl, x"r2" rundet auf zwei Nachkommastellen, und 
x"r2" r7,$  tut dasselbe, macht aus dem Ergebnis aber dann eine siebenstellige, rechtsbündige Zeichenkette und füllt diese links mit '$' auf. 

Ein Beispiel mit Ablaufbeschreibung ("Seitensumme") finden Sie in 10.4.5, dazu gehört die Parameterdatei R-0.APR, die Sie als Prototyp für rechnerische Auswertungen von Ergebnismengen ausnutzen können. 

10.2.6.7		Satzverknüpfungen  ("Nachladen" anderer Sätze beim Export)

Nach heutiger Vorstellung sollen Datensätze in einer bibliothekarischen Datenbank keine isolierten Einheiten sein, die beziehungslos nebeneinander stehen. Aus der Sicht der strengen Theorie, die mit den Konstrukten "Normdatei" und "Mehrdateisystem" operiert, gab es bis zur Version 11.1 noch mehrere Mängel und daher offene Wünsche: 

1.	Mehrbändige Werke konnte allegro zwar schon gut speichern und drucken, aber man mußte das gesamte Werk als u.U. riesengroßen und dann unhandlichen Datensatz erfassen. Besser wäre, man könnte wahlweise auch so verfahren, daß man die Bände als eigene Datensätze erfaßt, jedoch mit einer irgendwie gearteten Verbindung zum Datensatz der Hauptaufnahme. Für Druck und Anzeige müßte dann alles wieder zusammenführbar sein. Die Recherchierbarkeit der einzelnen Bände würde sich gegenüber der älteren Lösung in dem Sinne verbessern, daß nur der relevante Teil angezeigt wird. 

2.	Bestimmte Funktionen ließen sich bis V11.1 mit dem allegro-Konzept gar nicht realisieren, wie z.B. diese: Anlegen einer Stammdatei für Lieferanten - Eingabe eines Lieferantencodes in einen Bestellsatz - Einfügen der Lieferantenadresse in das Bestellformular, d.h. automatisches Zuführen der Angaben aus dem Stammsatz; oder: Anlegen einer Zeitschriften-Stammdatei mit unterschiedlichen Voll- und Kurztitelfassungen je Zeitschrift - Eingabe einer Kurzbezeichnung (wie z.B. CODEN oder ISSN) statt eines vollständigen Zeitschriftentitels bei der Erfassung von  Aufsätzen - Einfügen der jeweils gewünschten Titelfassung in die Dokumentaufnahme zum Zeitpunkt der Druckausgabe oder auch Bildschirmanzeige. 

3.	Ansetzungsformen von Namen, Schlagwörtern u.a. mußten konsistent in allen Aufnahmen gespeichert sein, um eine korrekte Zusammenführung im Index zu gewährleisten. Besonders bei Körperschaftsnamen bedeutet das nicht nur beträchtliche zusätzliche Eingabearbeit (die sich zwar durch die Kopierfunktionen des Editors mindern läßt), sondern auch mehr Speicherbedarf durch die redundante Speicherung. Unangenehme Klimmzüge oder Kompromisse sind dann vonnöten, wenn es um Verweisungsformen geht. Verfährt man so, wie es im -Ø Kap.1.6 angedeutet wird, speichert also in der Aufnahme nur eine Identifikationsnummer statt z.B. des Körperschaftsnamens, so konnte man noch bis Version 13 für einen Ausdruck den Namen selbst nicht automatisch heranholen und einsetzen lassen - man mußte dann schon die richtige Namensform mit in der Aufnahme speichern. 

4.	Änderungen an Ansetzungsformen mußten in allen betroffenen Datensätzen durchgeführt werden statt an nur einer Stelle, nämlich im Normdatensatz. Zwar kann man mit der "globalen Änderung" recht schnell solche Änderungsaktionen bewältigen, aber integrierte Normdaten sind halt doch noch eleganter! 

Ab Version 11.2 sind die Mängel 1. und 2., ab V14 auch 3. und 4. behoben, und zwar durch neue Befehle in der Exportsprache: 
·	der Nachladebefehl (ein Manipulationsbefehl) zum Heranholen eines anderen Satzes, und 
·	der Schaltbefehl (ein Steuerbefehl), der zum Ausgangssatz zurückschaltet. 
·	besondere Schlüssel, Ersetzungs- und Pseudoschlüssel, ermöglichen es, daß Nummern automatisch durch Ansetzungsformen ersetzt werden. Dieses geht erst ab V14  (-Ø 10.2.6.8). 

Warum überhaupt ist die Exportsprache der logische Ort für die Satzverknüpfungen? Nun, die oben aufgezählten Probleme haben eins gemeinsam: die Zusammenführung des jeweils Zusammengehörigen muß immer nur zum Zeitpunkt einer Anzeige, Ausgabe oder Indexierung erfolgen, und genau dafür ist ja die Exportsprache zuständig. Ansonsten können alle Daten in der Datenbank stehen, wo sie wollen. Das Zusammenführen geschieht über den Index mit Hilfe von dafür präparierten Schlüsseln und geeigneten Exportbefehlen. Aber: Die Verknüpfungen sind deshalb indirekter Natur, ohne den darauf eingerichteten Index sind sie nicht nutzbar, da es sich nicht um direkte Querverweise zwischen Datensätzen handelt. Der Umgang mit Verknüpfungen ist für den Parametrierer alles andere als trivial, und es bleibt das schwierige Problem der "satzübergreifenden Suche" zu beachten: 

5.	Bei verknüpfter Speicherung von Haupt- und Unteraufnahme hat man das "Schiller-Räuber-Problem": man findet Schillers "Räuber" nicht durch UND-Verknüpfung, wenn "Schiller" nur in der Hauptaufnahme, die "Räuber" aber nur in einem separat gespeicherten Untersatz stehen. Bei hierarchischer Speicherung ist das kein Problem, denn beides steht im selben Datensatz. Mit V15 wurde auch dieses Problem gelöst (-Ø`10.2.9). 

Die grundlegenden Mechanismen, den man braucht, um die Probleme 1-4 zu lösen, sind plausibel: 

1.	im Prinzip muß man in jeder Kategorie, wo es logisch sinnvoll ist, statt eines Textes auch einen eindeutigen Schlüsselbegriff unterbringen können, der sich auf einen anderen Datensatz (Normsatz bzw. übergeordneten Titelsatz) bezieht. Dieser Schlüsselbegriff muß einem Indexeintrag entsprechen, der zu dem anderen Satz gehört. Meist ist das eine Identnummer, es kann auch so etwas wie ein "Kürzel" sein (s.u.). 
2.	Beim Export (wozu auch die Bildschirmanzeige und die Indexierung gehören) muß das Programm mit Hilfe dieses Schlüsselbegriffs entweder 
	a)	den betreffenden Datensatz über den Index suchen und zusätzlich in den Arbeitsspeicher holen. Anschaulich: der nachgeladene Satz wird oben auf den/die schon vorhandene(n) gestapelt. Oder: 
	b)	den Schlüssel automatisch durch einen Klartext ersetzen (dazu -Ø 10.2.6.8). 
3.	Anschließend steht im Fall a) der nachgeladene Satz bereit, und jeder seiner Bestandteile kann nun exportiert werden, mit allen Möglichkeiten, die die Exportsprache bietet. Es können auch noch weitere Nachladebefehle kommen, die den Stapel noch vergrößern. Im Fall b) kann man so tun, als gäbe es die Identnummern gar nicht, sondern nur Klartexte. 
4.	Danach muß man im Fall a) mit einem eigenen Befehl vom nachgeladenen Satz wieder zum Ausgangssatz zurückkehren können, damit man mit dessen Export fortfahren kann. Anschaulich: der Stapel muß, evtl. Stück für Stück, wenn mehr als einmal nachgeladen wurde, wieder abgebaut werden. 
5.	Diese Vorgänge müssen während des Exports eines Satzes selbstverständlich mehrfach und auch ineinander verschachtelt durchführbar sein, um alle Eventualitäten damit in den Griff zu bekommen. 

Anwendungsbeispiel "Zitat"
Nehmen wir als Beispiel die Erfassung von Aufsatzdaten. Die wesentlichen Kategorien sind 
#20  Aufsatztitel 
#40  Verfasser 
#70  Quelle (Zeitschriftentitel)    oder   #70 _Kürzel 
#704 Band 	(das Programm erkennt am '_', daß in #70 ein Kürzel steht und kein Titel) 
#706 Heft 
#708 Seitenzahlen 
#70i ISSN 
Nun würden wir gern auf die Eingabe des vollständigen Zeitschriftentitels unter #70 verzichten, müssen dann aber auf einen "Stammsatz" für die Zeitschrift zurückgreifen können. Dieser Stammsatz hätte die Kategorien (-Ø Anhang B) 
#20  RAK-Ansetzungstitel der Zeitschrift 
#8n  Zeitschriftentitel (normierte Ansetzung für die Zitierung) 
#8na Kürzel 
#8n1 Titel für alternatives Zitierformat 1 
#8n2 Titel für Zitierformat 2  usw. 
#8nr andere Verweisungsformen des Titels (getrennt durch "; ") 
#74  Erscheinungsort 
#88  ISSN 
Die ISSN und das Kürzel sollen im Index 5 registriert sein. In CAT.API ist das z.B. so geregelt. 
Unter #8n1, #8n2... kann man mehrere verschiedene Zitiertitel unterbringen. Nehmen wir an, es sollen nun die Aufsatzdaten mit dem Zitiertitel 2 gedruckt werden. Innerhalb der Druckparameterdatei hätten wir zu schreiben: 

#70 +#8n2 i4,_ e";" |52	Nimm Inhalt von #70; wenn es ein Kürzel ist, lade den 
#70i |52					zugehörigen Stammsatz. Wenn es keinen gibt: versuche es mit #70i,
#8n2 C p"In: "			entnimm aus #8n2 Zitiertitel 2, neue Zeile, "In: " davorsetzen
#74 p" (" P")"			Erscheinungsort in Klammern dahinter setzen
#<						zurückschalten, d.h. vom Stammsatz wieder zum Titelsatz
#704 p", "				restliche Aufsatzdaten ausgeben, so daß die Form
#76 p"(" P")"			Titel, Band(Jahr)Heft, S.nnn-nnn    entsteht
#706 
#708 p", S."
Die zwei wichtigen Befehle sind hier der Manipulationsbefehl  |52 , der das Nachladen des Stammsatzes bewirkt, und der Steuerbefehl  #< , der ihn wieder beseitigt, so daß die Arbeit am Ausgangssatz weitergehen kann. 

Nun zur allgemeinen Form der Befehle für das Nachladen von Datensätzen. 
Das Laden eines anderen Datensatzes wird durch den Manipulationsbefehl '|' veranlaßt. Man muß also zuerst die Kategorie angeben, in der der zu suchende Schlüssel steht. Man sorgt dafür, daß der Arbeitstext genau dem zu suchenden Schlüssel entspricht (auch bzgl. Groß-/Kleinschreibung!). Wenn also z.B. in #70i hinter der ISSN noch etwas anderes stehen könnte, wäre  #70i e9 |52  richtig gewesen (die ISSN hat immer 9 Stellen). Der Nachladebefehl |52 nimmt dann den Arbeitstext und sucht im Index 5 danach. Bei Erfolg wird der zugehörige Satz gelesen, über den aktuellen Satz gestapelt und selbst zum aktuellen Datensatz gemacht. Nachfolgende Exportbefehle beziehen sich also auf diesen! 

Die allgemeine Form des Nachladebefehls sieht so aus: 

|im		Bedeutung: nimm den Arbeitstext als Schlüssel, suche danach im Register i und lade den gefundenen Satz in den Arbeitsspeicher, mache ihn zum aktuellen Satz. Dabei ist 
		i  = 	Indexnummer (1,..,9, ':' für 10, ';' für 11): in diesem Index soll gesucht werden 
		 m = 	Modusziffer (0,..,9), und zwar: gesucht wird immer nach dem aktuellen Arbeitstext, jedoch mit unterschiedlichen Modalitäten: 
			0 :	der erste Satz mit einem genau dem Arbeitstext gleichen Schlüssel 
			1 :	der nächste mit genau gleichem Schlüssel (ein Befehl mit 0 muß vorangehen) 
			2 :	wie 0, aber der Schlüssel kann länger sein als der Arbeitstext, er muß nur am Anfang mit ihm übereinstimmen 
			3 :	wie 1, aber wieder auf den Anfangsteil beschränkt 
			Falls mehrere Ladebefehle aufeinander folgen, werden die nachgeladenen Sätze jeweils im Arbeitsspeicher aufgestapelt, falls man nicht #<  gibt. Dies kann zwar erwünscht sein, manchmal jedoch nicht - dann addiert man besser gleich eine 4 auf die Modusziffer, also 
			4 :	wie 0, aber ein vorher geladener Satz wird beseitigt 
			5 :	wie 1, usw. 
	aber:		8 :	Der Satz wird nicht geladen, nur der erste (8) bzw. nächste (9) gefundene 
			9 :	Schlüssel wird nach #uxi kopiert und kann als Anwendervariable benutzt werden. 
Sonderfall: Wenn es ungewiß ist, ob der gesuchte Schlüssel vorkommt, kann man '>' oder '<' vor den Arbeitstext setzen. Dann wird der erste Schlüssel ermittelt, der größer bzw. der letzte, der alphanumerisch kleiner ist als der Arbeitstext. 
Im Beispielfall geht es nur um einen einzigen Nachladesatz pro Ausgabesatz, dann wäre der Effekt bei |56 derselbe wie bei |52. 
Wenn es ungewiß ist, ob ein Stammsatz existiert, kann man durch einen bedingten Sprung auch Fehlerbehandlungen programmieren: 
#70c +M |52        suche den Inhalt von #70c im Index 5, wenn gefunden, gehe zu #-M
würde bewirken, daß im Erfolgsfall zur Sprungmarke #-M gegangen wird, bei Mißerfolg aber mit der nächsten Zeile weitergemacht wird. Eine Anweisung mit Nachladebefehl bewirkt in keinem Fall eine Ausgabe, sie dient nur zum Auslösen des Nachladens. 

ACHTUNG: Vor dem Befehl  |im  muß man mit y1 oder y2 eine Umcodierung erzwingen (per p- bzw. q-Tabelle, meistens zur Wandlung von groß in klein), denn automatisch passiert sie in  diesem Fall nicht, d.h. das # oder ! am Zeilenanfang hat nicht die gewünschte Wirkung. 

Sonderfälle:	|00	Kurztitelzeile des aktuellen Satzes in die Variable #ux0 kopieren 
		|01	Arbeitstext als Satznummer interpretieren und den zugehörigen Satz nachladen 
Einschränkung: Das Nachladen ist auch in einer Index-Parameterdatei anwendbar, ABER: die Prozedur des Nachladens setzt ja voraus, daß schon ein Index vorhanden ist. Nur im 2. Durchlauf (siehe Kap. 7) kann deshalb ein Nachladen stattfinden, und auch nur dann, wenn beim ersten Durchlauf die erforderlichen Schlüssel, über die zuzugreifen ist, auch schon erzeugt wurden. Ab Version 14 gibt es für diesen Zweck die wesentlich bequemere Methode, Identnummern direkt und automatisch durch Klartexte ersetzen zu lassen (-Ø 10.2.6.8). 
Der nachgeladene Satz bleibt solange aktuell, bis 
•	ein neuer Ladebefehl kommt (es hängt von dessen Modusziffer ab, was dann passiert) 
•	der Exportsatz beendet wird (durch #+# oder #+- oder Erreichen des Endes der Kategorieliste) 
•	ein "Schaltbefehl" kommt: 
In der Regel wird man aus dem nachgeladenen Satz eine oder mehrere Kategorien entnehmen, anschließend aber mit dem Ausgangssatz weitermachen wollen (wie im obigen Beispiel). Dann kommt der zweite neue Befehl zum Einsatz, der sog. Schaltbefehl:

Schaltbefehl:  Es gibt 8 Formen, jede beginnt mit #<  : 

#<+M	"zurückschalten" (oder anschaulich: vom Stapel 1 Satz herunternehmen) d.h. weitermachen mit dem aufrufenden Satz. Dieser kann seinerseits ein vorher nachgeladener Satz sein! Wenn die Rückschaltung ausgeführt werden konnte, geht es bei der Sprungmarke #-M weiter. +M darf fehlen, dann geht es mit der nächsten Zeile weiter. 
#<^M	Wirkung von #< rückgängig machen, d.h. wieder "hinaufschalten" zum vorher nachgeladenen Satz. Wenn man abwechselnd #< und #<^ gibt, kann man beliebig oft zwischen den momentan geladenen Sätzen hin- und zurückschalten, ohne daß immer neu von der Platte nachgeladen werden muß. 
 		Empfehlung: Immer #</, wenn Rückschaltung nicht gebraucht wird.
#<<M	zurückschalten zum Ausgangssatz, also zum untersten Satz des Stapels, damit man mit diesem weitermachen kann. Danach ist mit #<^ jedoch (evtl. mehrfach) ein Rückschalten mit  #<^  zu den vorher nachgeladenen Sätzen noch möglich, denn der Stapel bleibt vorhanden. 
#</M	dasselbe, aber die aufgestapelten Nachladesätze werden nun weggenommen, d.h. anschließend kann man nicht mehr wieder mit  #<^  hinaufschalten. 
#<iM	Umschalten auf die parallele Datenbank (i=1,2,3), wenn man beim PRESTO-Aufruf 2 oder 3 Datenbanken aktiviert hat (-Ø Kap.12.1, Option -d). Mit #<0 wird zur ersten Datenbank geschaltet und zugleich der Zeiger im Index zurückgesetzt, damit man weiterblättern kann. Sprung zu #-M, wenn das Umschalten funktioniert hat. 
#<d 	Bei hierarchischen Sätzen: schalte zum nächsten Untersatz (#<d) / zum vorigen Untersatz (#<u) / 
#<u		zum Hauptsatz (#<U) des hierarchischen Satzes. Dahinter kann jeweils noch ein Zeichen stehen, 
#<U		z.B. #<dM heißt: springe nach #-M, wenn der Schaltbefehl ausführbar ist. 
Das M darf jeweils auch fehlen. Dann fährt das Programm nach Ausführung mit der nachfolgenden Zeile fort. Wenn aber ein M gesetzt ist (erlaubt sind alle druckbaren Zeichen), wird nach erfolgreicher Ausführung des Schaltbefehls zur Sprungmarke #-M gegangen, und nur bei Mißerfolg (wenn kein nachgeladener bzw. Untersatz vorhanden war) geht es mit der nachfolgenden Zeile weiter. Folglich kann man auf jede Situation angemessen reagieren. 

Anwendungsbeispiel "Mehrbändiges Werk"
Vorab: Die hierarchische Darstellungsweise mehrbändiger Werke kann beibehalten werden. Man kann sogar innerhalb derselben Datenbank wahlweise diese oder die im folgenden beschriebene neue Technik anwenden. 
Mit den Lade- und Schaltbefehlen ist eine neuartige Speicherungstechnik für mehrbändige Werke realisierbar. Hauptaufnahme und Bände können getrennte, unabhängig voneinander gespeicherte Datensätze sein. Stößt man beim Zugriff auf einen Band, so soll er zusammen mit der Hauptaufnahme angezeigt werden, findet man letztere, soll das Programm sie mit allen zugehörigen Bänden präsentieren können. Es sind auch mehrere Hierarchiestufen möglich. 
Vorbemerkung: Bisher brauchte man nicht unbedingt eine eigenständige, eindeutige Indentifikationsnummer für jede Aufnahme, jetzt aber geht es nicht ohne, denn die besagte Methode ist auf einen zuverlässigen Schlüssel angewiesen. In der Kategorie #00 der Hauptaufnahme muß also, zumindest bei den mehrbändigen Werken, etwas stehen, was eindeutig ist, und man muß es indexieren. (CAT.API macht dies im Index 9.) Es kann sich um eine Zugangsnummer oder Signatur handeln, oder die ID.-Nummer eines Verbundes, oder aber so etwas wie die Library of Congress Card Number. (Statt #00 dürfte es auch jede andere Kategorie sein, denn die  Realisierung ist ja vollständig parametriert.) 
   Statt eine unselbständige Unteraufnahme an die Hauptaufnahme anzuhängen (mit einer Kategorie #01) tut man jetzt so, als erfasse man eine neue Hauptaufnahme. Mit zwei Unterschieden: 

•	In #00 der Bandaufnahme erfaßt man die Id.-Nr. der Hauptaufnahme plus der Angabe, die man sonst in die #01 schriebe, und zwar 
	so:	#00	idnr+ordnr[=bandnr] 
			idnr			Id.Nr. der Hauptaufnahme 
	 			  ordnr			Ordnungsnummer, sortierfähig (führende Nullen) 
					  bandnr	Bandnummer in Vorlageform, falls abweichend 
	z.B.:	#00 89-12345+015=Vol. XV
•	man erfaßt in der Bandaufnahme nur diejenigen Kategorien, die zur Bandstufe gehören, denn alle anderen wird man bei Bedarf aus der Hauptaufnahme entnehmen können, wenn man diese nachlädt. 

Ob eine Aufnahme unselbständig ist, kann am '+' innerhalb der #00 erkannt werden. Die Ordnungsnummer ordnr  kann mehrteilig sein, wenn es sich um hierarchische Unterteilungen von Bänden handelt. Wenn man bisher z.B.   #01 2 und #02 A gehabt hat, kann man nun z.B. #00 idnr+02+A  geben, man trennt also die Stufen durch '+' . Die Gestaltung der sortierfähigen Bandnummern ist freigestellt und muß sich nach den Eigenheiten der vorliegenden Zählung richten. Die maximal mögliche hierarchische Gliederungstiefe ist dabei 12 (nach der alten Methode 6). 
Wichtig ist ferner: die Kategorie #00 muß einschließlich der sortierfähigen Bandnummern indexiert sein. Dadurch entsteht im Index eine aufsteigende Folge der Identifikationsnummern: zuerst die der Hauptaufnahme (ohne '+'), dann die der Bände. 
In der Hauptaufnahme braucht man außer der Speicherung einer Id.Nr. in #00 keine weiteren Vorkehrungen für die Verknüpfungstechnik zu treffen! Die Feststellung, ob zugehörige Bandaufnahmen existieren, wird mit den oben beschriebenen Befehlen über den Index durchgeführt. Es werden also, um es ganz deutlich zu sagen, keine Satznummern, -adressen oder -schlüssel irgendwelcher Art von untergeordneten Aufnahmen innerhalb der übergeordneten gespeichert. Die Zusammenführung und die Herstellung der Reihenfolge regeln sich ausschließlich über den Index. Damit ist die Verknüpfungstechnik unempfindlich gegenüber Reorganisationen. 
Eine Parameterdatei für Anzeige oder Druck solcher Datensätze sollte nach folgender Vorschrift arbeiten: 

1.	Prüfe, ob die aktuelle Aufnahme eine unselbständige ist. 
	ja : 	lade die übergeordnete Aufnahme und mache sie zur aktuellen Aufnahme, fahre mit 1. fort  (dies würde bis zu 12 mal funktionieren, das wäre allerdings sehr extrem) 
	nein :	fahre mit 2. fort 

2.	Gib die aktuelle Aufnahme aus. Ist noch eine darunter auf dem Stapel? 
	ja :	nimm den obersten Satz vom Stapel und fahre mit 2. fort 
	nein :	fahre mit 3. fort (die Ausgangsaufnahme wird nun wieder zur aktuellen Aufnahme!) 

3.	Prüfe, ob mit der aktuellen Aufnahme noch ein untergeordneter Satz verknüpft ist. Mit anderen Worten, ob sie selbst die Hauptaufnahme eines verknüpft gespeicheerten mehrbändigen Werkes darstellt. 
	ja :	alle untergeordneten Sätze nacheinander laden und ausgeben. (Dieser Vorgang ist potentiell unbegrenzt, denn die Anzahl der möglichen Untersätze unterliegt keiner Beschränkung.) 
	nein :	Ende 

Bei normalen einbändigen Werken wird zwangsläufig nur einmal Vorgang 2. ausgeführt. 

Die mitgelieferten Parameterdateien D-1.APR für Bildschirmanzeige, P-KARTE für Kartendruck, sowie P-NORMAL und P-EINZEL enthalten diese Vorgänge und auch die unter dem Beispiel "Zitat" beschriebene Methodik. Sie sind ausreichend kommentiert und werden sehr zum Ausprobieren empfohlen. In der Datei  D-KAPT verwendet in D-KRTF.APR und D-KHTM.APR) findet man die Grundstruktur der Verknüpfungslogik als allgemeines Schema. In der Beispieldatenbank finden Sie im Index 9 eine mehrstufige Aufnahme unter dem Schlüssel  123456 .  Die Parameterdatei CAT.API und die genannten Exportparameter stellen also schon eine vollständige Implementierung der hier beschriebenen Verknüpfungen dar. Sie enthalten ab V14 auch Möglichkeiten für Personen-, Körperschafts- oder Schlagwortverknüpfungen (10.2.6.8). 

Was geschieht beim Retrieval im Falle einer mehrstufigen Hierarchie? Es können drei Fälle vorkommen: 
a)	man stößt auf eine Aufnahme der obersten Stufe (Hauptaufnahme): der gesamte hierarchische Komplex wird angezeigt - wie nach der alten Methode 
b)	... auf eine Satz einer mittleren Stufe der Hierarchie: es werden hintereinander angezeigt: 1. alle direkt übergeordneten (keine parallel liegenden) Einheiten bis hinauf zur Hauptaufnahme werden angezeigt, 2. die Bandaufnahme selbst, 3. alle darunter hängenden Einheiten. 
c)	... auf einen Satz der untersten Stufe: wie bei b), aber der Teil 3. entfällt. 
Der wichtigste Fall ist dieser: der -zigste Band eines vielbändigen Werkes wird zusammen mit der Hauptaufnahme angezeigt - nur diese zwei. Das ist wesentlich übersichtlicher als bei der hierarchischen Satzstruktur. 

`Vorangehender Teil`   /   `Fortsetzung` 

?Vorangehender Teil=h ac10-8 
?Fortsetzung=h ac10-10