DE2527441A1 - Verfahren und vorrichtung zur kennzeichnung von datenfeldern - Google Patents

Verfahren und vorrichtung zur kennzeichnung von datenfeldern

Info

Publication number
DE2527441A1
DE2527441A1 DE19752527441 DE2527441A DE2527441A1 DE 2527441 A1 DE2527441 A1 DE 2527441A1 DE 19752527441 DE19752527441 DE 19752527441 DE 2527441 A DE2527441 A DE 2527441A DE 2527441 A1 DE2527441 A1 DE 2527441A1
Authority
DE
Germany
Prior art keywords
field
length
separator
fields
symmetrical
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE19752527441
Other languages
English (en)
Inventor
Robert J Lechner
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bull HN Information Systems Italia SpA
Original Assignee
Honeywell Information Systems Italia SpA
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Honeywell Information Systems Italia SpA filed Critical Honeywell Information Systems Italia SpA
Publication of DE2527441A1 publication Critical patent/DE2527441A1/de
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Signal Processing For Digital Recording And Reproducing (AREA)
  • Error Detection And Correction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Indexing, Searching, Synchronizing, And The Amount Of Synchronization Travel Of Record Carriers (AREA)

Description

51-01449 Ge 19. Juni 1975
HONEYWELL INFORMATION SYSTEMS INC.
200 Smith Street
Waltham, Mass., USA
Verfahren und Vorrichtung zur Kennzeichnung von Datenfeldern.
Die Erfindung bezieht sich auf ein Verfahren sowie auf eine Vorrichtung zur Kennzeichnung der Länge oder des Types von Datenfeldern innerhalb einer Reihe von aufeinanderfolgenden Datenfeldern, wobei die Kennzeichnungen zwischen den Datenfeldern angeordnet sind.
Bei der seriellen Speicherung von Daten in einem Computersystem besteht ein grundlegendes Problem darin, den Typ und/oder die Länge von nicht-vorhersagbaren Folgen von Datenfeldern zu bestimmen. Eine grundlegende Anforderung im Zusammenhang mit diesem Problem besteht darin, daß die Datenfolge in jeder Richtung abtastbar sein muß.
Im Stand der Technik sind zwei Verfahren zur Codierung solcher Datenfolgen bekannt. Ein Verfahren besteht darin, ein oder mehrere Feldseparatorzeichen vorzusehen, die ihrerseits keine legalen Zeichen darstellen. In diesem Zusammenhang sei auf die Veröffentlichung von F.. IJ. Beitz, "The Interpretation of Structured Stored Data Using Delimiters", Proc. 1970 ACM
609883/0858
SIGFIDET Workshop on Data Description & Access, November 1970, Seiten 188 - 200, verwiesen. Dort wird ein zyklischer FIFO-Puffer benutzt, in welchem eine einzelne Hinweisadresse die laufende Daten-Eingangsstelle definiert. Feldnamen und/oder Längen werden in unmittelbarerNachbarschaft der Folge von Feldwerten gespeichert. In Figur 1 ist dieser Stand der Technik dargestellt, wobei die Feldnamen und/oder Längen A. , B , C, und D, in unmittelbarer Nachbarschaft der Feldwerte (A)1, (B),, (C), und (D)1 gespeichert sind. Die Buchstaben L (A)-, L (B),, L (C), usw. bezeichnen die Längen der entsprechenden Feldwerte. Um den Pufferspeicher von links nach rechts abzutasten wird die Startadresse des nächsten Feldes durch Addition der vorhergehenden Feldlänge und der Startadresse berechnet. Mit dieser bekannten Technik ist jedoch eine Abtastung von rechts nach links nicht möglich, da hierbei der Feldvert zuerst registriert wird und sein zugehöriger Käme ohne Kenntnis der Länge des Feldes nicht ermittelt werden kann.
Eine andere im Stand der Technik bekannte Lösung ist in Figur dargestellt und vermeidet diese Beschränkung in der Abtastrichtung indem die Feldnamen A3, B3, C3 und D2 von den Feldwerten (A)2, (B)2' (c)2 usw· abgetrennt werden, was einen wahlfreien Zugriff gestattet. Die Feldnamen werden mit fester Länge angenommen und in einer getrennt angeordneten Liste gespeichert, welche beginnend an jedem Ende indiziert oder abgetastet werden kann. Bevor ein Datenblock auf ein Magnetband geschrieben wird, wird die Folge von Feldnamen der Folge von Feldwerten hinzugefügt. Figur 2 zeigt diese Lösung, wobei die Feldnamen A2/ B2, C2 und D2 in umgekehrter Pveihenfolge wie ihre entsprechende Wertfolge (A)3, (B)2, (C)2 usw. gespeichert sind und die Auflistung der Feldnamen am Ende des Datenblockes beginnt. Namen und Werte werden gleichzeitig gespeichert und beide benutzen eine gemeinsame Gruppe von unbenutzten Byte-Zellen in der Mitte des Datenblockes. Diese bekannte Technik erweist sich jedoch insofern
5G3883/Q858
als nachteilig, als sie die physikalische Verkettung der Daten und/oder ihre logische Verbindung verkompliziert.
Eine mögliche Lösung des vorliegenden ProblemeSj die bisher iir Stand der Technik nicht bekanntgeworden ist, ist in Figur 3A dargestellt. Diese Lösung gestattet eine Abtastung der Kette von Datenfeldern in beiden Richtungen, indem die Feldnamen A3, B_, C_ und D, vor und hinter jedem Feldwert (A) _, (E)3, (C)- und (D)- angeordnet sind. Bei diesem Verfahren verdoppelt sich jedoch der erforderliche Speicherplatz für die Speicherung der Feldnamen.
Es ist die Aufgabe der vorliegenden Erfindung ein Verfahren zur Kennzeichnung der Länge oder des Types von Datenfeldern innerhalb einer Reihe von aufeinanderfolgenden Datenfeldern anzugeben, bei dem die Kennzeichnungen zwischen den Datenfeldern angeordnet sind und das eine Abtastung der Datenfelder in beiden Richtungen gestattet, wobei jedoch der erforderliche Speicherplatz für die Kennzeichnungen auf ein Minimum beschrankt bleibt. Die Lösung dieser Aufgabe gelingt gemäß der im Anspruch 1 gekennzeichneten Erfindung. Weitere vorteilhafte Ausgestaltungen des Verfahrens sowie von Vorrichtungen zur Behandlung von nach dem erfindungsgemäßen Verfahren gekennzeichneten Datenblöcken sind den Unteransprüchen entnehmbar.
Gemäß der Erfindung wird eine Zweirichtungs-Abtastung einer Folge von Feldern mit variabler Länge durch einesymmetrische Differenz (oder Eool'sche Differenz) & AE gefördert, welche sich als übertragsfreie Exklusiv-ODER-Summe (bitweise Modulo-zwei-Summe) der die Länge beschreibenden Binärcodes darstellt, wobei diese Summe jeweils hinsichtlich zweier benachbarter Felder A und B gebildet wird (z.B. AAB = A © B) . Die symmetrische Differenz irgendzweier benachbarter Felder wird durch die Computer-Hardware erzeugt und als Trennmarke zwischen zwei benachbarten
503883/0858
Feldern benutzt. Sind die symmetrischen Differenzen für die Folgen von benachbarten Feldern einmal erzeugt, wie dies in Figur 3B dargestellt ist, so können diese Folgen von Feldern wahlweise in beiden Richtungen abgetastet werden.
Es sei beispielsweise angenommen, daß eine Abtastung von links nach rechts gemäß Figur 3B begonnen wurde. Bei gegebener Identität des ersten Feldes (A) sei die Identifizierung des zweiten unbekannten Feldes (B) gefordert. Die Feldlänge des Feldwertes (A) wird einer Tabelle von Feldlängen oder direkt dem Separator A entnommen. Das Δ AB-FeId wird sodann aufgesucht und die Differenz Δ AB wird in einer Exklusiv-ODER-Addition dem bekannten Feldnamen A hinzuaddiert, um B zu erhalten. In gleicher Weise ist Δ. BC bezogen auf Δ. AB über die Länge des Feldwertes (E), die zuvor als B berechnet wurde, auffindbar, so daß sich über eine Exklusiv-ODER-Addition C=D+ 4EC ergibt. Da E = C + Δ BC und A = B + Δ. AB usw. ist, arbeitet dieses Verfahren in gleicher Weise zufriedenstellend, unabhängig davon, ob die Abtastung von rechts nach links oder von links nach rechts erfolgt.
Für den Fall, daß ein symmetrischer Differenz-Separator einen Fehler aufweisen sollte, kann dieser Fehler in vorteilhafter Weise lokalisiert werden, indem eine Vorwärts- und eine Rückwärts-Abtastung vorgenommen wird und während jeder Abtastung für jeden symmetrischen Differenz-Separator absolute Adressen erzeugt werden. Ein Vergleich dieser beiden Sätze von absoluten Adressen zeigt den genauen Ort an, wo der Fehler aufgetreten ist, wenn die miteinander verglichenen Adressen übereinstimmen.
Anhand von in den Zeichnungen dargestellten Ausführungsbeispielen wird im folgenden das erfindungsgemäße Verfahren beschrieben und es werden weiterhin Vorrichtungen beschrieben, die von
509883/0858
den durch das erfindungsgemäße Verfahren erzeugten Kennzeichnungen Gebrauch machen. Es zeigen:
Figuren 1 und 2 im Stand der Technik bekannte Lösungen des vorliegenden Problemes,
Figur 3A eine bisher nicht bekannte Lösung des Problemes, die für die Erläuterung der vorliegenden Erfindung hilfreich ist, Figur 3B einen sequentiell codierten Datenaufbau gemäß der Erfindung,
Figur 4 einen bekannten, baumartigen Datenaufbau, der bei der Erfindung benutzt wird,
Figur 5 einen anderen sequentiell codierten Datenaufbau gemäß der Erfindung, welcher von der baumartigen Datenstruktur gemäß Figur 4 Gebrauch macht,
Figuren 6A und 6E logische Blockdiagramme gemäß der Erfindung für die Vorwärts- und Rückwärts-Abtastung der Datenstrukturen, Figur 7 ein logisches Blockdiagramm gemäß der Erfindung für die Abtastung von baumartig geordneten Datenstrukturen, Figuren 8A bis 8C Hardware-Diagramme für die Erzeugung eines symmetrischen Differenzcodes und
Figur 9 ein Hardware-Diagramm für die Feststellung und die Korrektur von Fehlern hinsichtlich eines symmetrischen Differenz-Separators an irgendeiner Stelle.
Allgemeine Erläuterung Darstellung von veränderlichen Datenfeldfolgen
Eine sequentielle Dateneingabe und ihre Aufzeichnung auf einem Serienspeicher, beispielsweise einer Bandkassette, wird üblicherweise durch die Verwendung eines FIFO-Pufferspeichers mit Doppelenden, eine Tastatureingabe (Laden) und eine Bandausgabe (Schreiben) bewerkstelligt (siehe hierzu D. R. Knuth: "The Art of Computer Programming", Band 1 Fundamental Algorithms, Addison-Wesley, Reading, Mass. 1968). Der Pufferspeicher ist zyklisch
SQ9383/0858
-G-
organisiert, so daß auf die physikalischen Start-und Endadressen keine Rücksicht genommen werden muß. Logisch sind die Enden des Pufferspeichers miteinander verbunden durch Berechnung von Adressen Modulo die Puffergröße, so daß wenn eine "1" an der Endadresse hinzuaddiert wird, das Ergebnis die Startadresse darstellt. Im allgemeinsten Fall kann das Lesen oder Schreiben eines Bandblockes aus einem Sektor des Pufferspeichers gleichzeitig mit der Einfügung oder Löschung eines Datenfeldes in einem anderen Pufferspeichersektor vonstatten gehen.
Das hier zu betrachtende Problem besteht in der Speicherung einer Folge von Datenfeldern von veränderlichem Typ. Zwei Anwendungsanforderungen treten gemeinsam auf, wobei die FIFO-Pufferspeicherorganisation in Schwierigkeiten gerät:
1. Wahlfreie oder veränderliche Tabellenelemente (Occurrences): Einige Feldtypen können als Merkmale eine wahlfreie oder veränderliche Anzahl von Tabellenelementen aufweisen. In einem solchen Fall ist der nächste Feldtyp manchmal nicht vorhersagbar, so daß Feldtypidentifizierer (Namen) zusammen mit den Daten aufgezeichnet werden müssen.
2. Zweirichtungs-Abtastung: Wenn sowohl eine Rückwärts- als auch eine Vorwärts-Abtastung der Datei gefordert wird, wobei diese Abtastung Feld für Feld erfolgen soll, so ergibt sich eine Datenreihe mit zwei Enden auf dem Band oder der physikalischen Eingabe/Ausgabe-Seite.
Die erste Anforderung wird durch den Wunsch nach einer flexiblen Ursprungsdatenbildung oder gar durch eine Dateneingabe in freier Form (selbstbeschreibend) bestimmt. Die zweite Forderung ist in Funktionen, die beispielsweise der Druckaufbereitung oder der Korrektur im direkten Zugriff ^enthalten, wobei von einem Operator oder einem Funktionskennschlüssel Gebrauch gemacht wird, der es erlaubt, ein Zeichen vor einem zuvor gesetzten Zeichen
5 0 98 8 3/0858
einzufügen oder bei einer Darstellung auf einer Kathodenstrahlröhre durch Einschreiben einer neuen Zeile am Kopf oder Ende der Darstellung eine Verschiebung aller Zeilen um 1 nach unten oder nach oben unter Löschung der jeweils letzten Zeile zu bewirken .
Empfohlene Lösung - Eine Lösung,die Beschränkung auf eine Einweg-Abtastung bei einem Format gemäß Figur 1 zu umgehen, besteht darin, einen Feldnamen vor und hinter jedem Feldwert anzuordnen, wie dies in Figur 3A dargestellt ist. Auf diese Weise wird jedoch der für die Speicherung der Feldnamen erforderliche Platz verdoppelt. Die erfindungsgemäß empfohlene Lösung besteht in einer einfachen Erweiterung dieses Formates, wodurch die doppelte Speicherung von Feldnamen vermieden wird (siehe Figur 3B).
Figur 3A zeigt an beiden Enden eines jeden Feldwertes einen Namen A, B usw. bestehend aus einem Ein-Byte-Symbol. Gemäß Figur 3B sind die beiden jeweils ein Paar von Feldwerten trennenden Symbole zu einem einzigen Symbol kombiniert worden mit Ausnahme am Anfang und Ende der Feldreihe. Dieses eine Symbol bildet die "symmetrische Differenz" zwischen den beiden Feldnamen, die es ersetzt. Die Feldnamen am Anfang und Ende der Feldreihe können als symmetrische Differenzen betrachtet werden, die sich durch Kombination mit dem Feldwert Null ergeben .
Die symmetrische Differenz (oder Bool'sche Differenz) AB ist definiert als die übertragsfreie, Exklusiv-ODER-Summe (bitweise modulo-zwei-Summe) der Binärcodes von A und B: AB = A + B. Wenn A und B k-Bit-Symbole sind, so erfüllt die vorzeichenrichtige algebraische Differenz AB = (B-A) oder die Ringsumme A + B (mod 2k) die gleiche Aufgabe. Die symmetrische Differenz ist jedoch einfacher und schneller auf Maschinen mit einem
509883/0858
Exklusiv-ODER-Befehl. Die anderen beiden Operationen müssen durch eine Subtraktion ersetzt werden, wenn die Abtastrichtung umgekehrt wird, während die Exklusiv-ODER-Operation unabhängig von der Richtung der Abtastung ist.
Es gibt zwei verschiedene Interpretationen für die Codes A und B, auf welchen die symmetrische Differenz basiert. In Figur 3B ist eine indirekte oder veränderliche Feldtypinterpretation angezeigt, wobei A und B die tatsächlichen Werte der Feldtypcodes darstellen und die zu den Werten A und B zugehörigen Feldlängen in einer getrennten Tabelle gespeichert sind, auf die durch den Feldtypcode Bezug genommen wird. Bei der zweiten Interpretation stellen A und B die tatsächlichen Werte der Feldlängen dar. Diese zweite Interpretation, bei welcher die Typcodierungen direkt mit der Feldlänge übereinstimmen, soll später erläutert werden.
Es sei beispielsweise angenommen, daß gerade mit einer Abtastung von links nach rechts in Figur 3B begonnen wurde. Bei gegebener Identität des ersten Feldes (A) soll das zweite unbekannte Feld vom Typ B identifiziert werden. Es wird die Differenz Δ AB zu dem ersten Feldnamen A addiert, nachdem Δ. AB ermittelt wurde, indem die Länge des Feldes A in einer Tabelle aufgesucht wurde. Sodann wird & EC bezogen auf Λ AB ermittelt über die Länge des Feldes von B und sodann wird C = E ® & BC errechnet, um das dritte Feld zu bestimmen. Da B = C © Δ BC und A = Β® Δ AB usw. ist, arbeitet dieses Verfahren gleich gut,unabhängig davon, ob mit der Abtastung von rechts oder links begonnen wird, wobei jedoch Voraussetzung ist, daß auch die Identität des am weitesten rechts liegenden Feldes bei der Blockeingabe bekannt ist.
509883/0858
Andere Anwendungen
Die zuvor skizzierte Lösung setzt eine relativ kleine Anzahl von Feldtypen voraus, wobei jeder Feldtyp von konstanter bekannter Länge war und sich oft genug wiederholte, um eine gespeicherte Tabelle von Feldlängen zu rechtfertigen. Andere Anwendungen sollen nunmehr betrachtet v/erden.
Textaufbereitung - Bezüglich einer Textaufbereitung besitzt eine bidirektionelle Abtastung augenscheinliche Vorteile. Eine geringe Änderung hinsichtlich der Semantik des Abtastalgorithmus erlaubt seine Anwendung auf eine angrenzende Folge von Worten oder anderen Grunde leinen ten des Textes.
Ein wesentlicher Gesichtspunkt ist der, daß nunmehr die Felder nicht mehr bloß aus einer Wiederholung einiger Weniger ( ^ 255 bei 8-Bit-Symbolen) Feldtypen von fester Länge bestehen. Tatsächlich können nunmehr alle Felder als Glieder einer einzigen Feldklasse mit veränderlicher Länge betrachtet werden. Es sind nunmehr wenigstens 255 Feldidentifizierer für andere Gebrauchszwecke vorhanden (die Null ist für den Nullfeldidentifizierer reserviert). Aus diesem Grund definieren alle Worte mit der Länge k, wobei 1 ■$: k $ 255 istfGlieder der K.tenfeldklasse und ordnen den Einärwert von k als Identifizierer dieser Klasse zu. Der reservierte Nullfeldtyp ist mit dieser Übereinkunft vereinbar. Symmetrische Differenz-Separatoren werden nun wie zuvor berechnet mit einem zusätzlichen Vorteil, der darin besteht, daß die Tabelle, welche früher die Feldlänge definierte und durch den Feldtyp indiziert wurde, nunmehr zum Identitätsplan wird und nicht langer benötigt wird.
Die Einführung symmetrischer Differenzcodes als Feld-Separatoren beinhaltet keine Erweiterung des Textvolumens. Beispielsweise sei angenommen, daß ein Grundelement des Textes als irgendeine
509883/0858
fortlaufende Folge von schrittfreien Zeichen zwischen Fchrittzeichen definiert ist. Jedes aneinander grenzende Paar von Schrittzeichen kann sodann so angesehen x^erden, als würde es ein Grundelement von der Länge Null zwischen sich einschließen. Auf diese Weise kann jede Folge von Fchrittzeichen durch eine Folge von Feld-Separatoren mit gleicher Länge ersetzt werden, wobei die Separatoren als symmetrische Differenzen codiert sind.
Nimmt man beispielsweise an, daß die Werte der beiden Felder A und B durch die Ausdrücke "das" und "Wort" gegeben sind und nimmt man weiterhin an, daß eine unterstrichene Zahl ihre 8-Bit-Binärcodedarstellung repräsentiert, d. h. daß die Zahl 1_ die Bit-Zeichenfolge 00000111 bezeichnet, so ergeben sich die Typcodierungen für die Felder A und B durch ihre Längen und werden zu 2 un<^ 4.· D^e symmetrische Differenz ergibt sich zu A AB = 2 + i. ~ Z· D:*-e nachstehenden Textzeichenfolgen sind als symmetrisch-differenzcodierte Equivalente dargestellt ohne Änderung ihrer Bytelängen wobei " # " einen Schritt darstellt:
a) "das #- Wort" "das ]_ Wort"
b) "das £ for Wort" "das Wort"
c) "das## ... kW Wort" "das 30.. .04Wort"
Im Fall a) ersetzt AAB ein Schrittzeichen, im Fall b) ersetzt & AO A OB zwei Schrittzeichen und im Fall c) ersetzt AAO Δ 00 ... A 00 A OB eine entsprechende Anzahl von Schrittzeichen.
Ein Nachteil dieses längeerhaltenden Textcodierungsverfahrens besteht darin, daß es innerhalb der Textgrundelemente keine Interpunktionszeichen von den alphanumerischen Zeichenfolgen trennt. Jedoch kann ein Interpunktionssymbol, welches unmittelbar einer alphanummerischen Zeichenfolge vorangeht, oder nachfolgt, als ein getrenntes Ein-Eyte-Feld durch. Einfügung eines
SG9883/Ö858
Separators vor und/oder hinter dem Interpunktionssymbol codiert werden. Dies erweitert den Text um ein oder zwei Extra-Eytes pro Interpunktionssymbol. Eei der Decodierung werden diese Separatoren durch Nullfelder anstelle von Schrittzeichen ersetzt. Bei der später folgenden Eeschreibung von Eaumstrukturen wird die Übereinkunft getroffen, daß ein Kulifeld zwischen irgendzwei benachbarten Separatoren existiert.
Wörterbuch-Absuche - Alle die vorstehend hinsichtlich der Textaufbereitung angestellten Betrachtungen sind auch bei der TCörterbuch-Absuche anwendbar. Bei ausgedehnten Suchen wird eine sehr lange Zeichenfolge von lexikographisch geordneten Worten in Blöcke unterteilt, für welche eine Indizierungstabelle erstellt wird. Eingangsstellen innerhalb der Indizierungstabelle weisen auf Blockendpunkte, welche anstelle symmetrischer Differenzen gemäß Figur 3B Feldlängen auf v/eisen. Dies erlaubt eine bidirektionale Abtastung, ausgehend von mehreren Eingangsstellen,
Veränderliche Längenfelder mit einer festen Folge von Typen -
Beide zuvor beschriebenen Anwendungen können als ein Spezialfall (n = 1) eines Datenstromes mit vielfachen Feldtypen betrachtet werden, in welchem die Typfolge vorhersagbar ist und die Feldlängen veränderlich sind und in Form symmetrischer Differenzen codiert werden müssen. Bei beispielsweise in Kartenformat vorliegenden Daten mit genau einem vorliegenden Feldtyp kann eine symmetrische Differenzcodierung benutzt werden, um führende Null und/oder abschließende Leerstellen zu unterdrücken.
Felder von unvorhersagbarem Typ und Länge - Wenn weder der Feldtyp noch die Länge entnehmbar ist, so ist eine symmetrische Differenzcodierung sowohl der Länge als auch des Types möglich. Im allgemeinen erfordert dies einen Separator von mehr als 8 Bit, beispielsweise kann ein Zwei-Byte-Separator Anwendung finden.
509883/0858
Fehlerschutz
Alle Codierverfahren, welche eine Feldadresse durch inkrementelle Addition von vorangegangenen Feldlängen aufbauen, neigen zur Fehlerunsicherheit, wobei mehrfache Fehler durch eine einzige fehlerhafte Feldlängenanzeige verursacht werden können. Im allgemeinen verursacht ein einziger Fehler eine Verschiebung aller folgenden Feldgrenzen, so daß zum. Wiederauffinden der Daten eine manuelle Interpretation erforderlich werden kann. Demgemäß wird zur Feststellung eines einzelnen Fehlers ein Verfahren mit einer Einrichtungsabtastung und für die Korrektur des Fehlers ein Verfahren mit einer Zweirichtungsabtastung des Datensatzes benutzt.
Eine Fehlerausweitung kann vollständig vermieden werden, durch Aufzeichnung einer getrennten Tabelle von relativen Adressen oder Offsets bezüglich individueller Felder, wie dies in Figur 2 dargestellt ist, wobei diese Anordnung der Daten jedoch die früher erläuterten Nachteile aufweist. Ein anderer Weg zur Lösung dieses Problems macht von der Parity-Check-Möglichkeit der symmetrischen Differenzcodierung Gebrauch. Hierbei ergibt sich eine vorteilhafte Fehlerfeststellung und Korrektur auf Grund des Gebrauchs von zwei redundanten Hinweisadressenketten, wie weiter unten erläutert wird.
Auffüllen - Ein Erfordernis zur v/irksamen Fehlerkontrolle sieht die Fähigkeit zur Unterteilung einer Folge von Feldern variabler Länge in Blöcke von fester Länge vor. Im allgemeinen stimmen die Feldgrenzen nicht mit den Elockgrenzen überein. Um die Aufteilung eines Feldes in zwei Teile zu vermeiden, was ein neues Codierungsproblem ergeben würde und um die Wiedersynchronisation der Feldhinweisadresse auf Zwischenblockgrenzen zu gestatten, wird ein Block vorzugsweise durch ein Verfahren aufgefüllt, welches die Logik des Abtastalgorithmus nicht verkompliziert.
509883/0858
Das Auffüllen wird durch Reservierung eines besonderen 8-Bit-Symboles zur Anzeige eines Nullfeldtypes verwirklicht, wobei der Kulifeldtyp als ein Typ definiert ist, dessen Wertzeichenfolge die Länge von Null aufweist. Um sich in Übereinstimmung mit jenen Anwendungen zu finden, welche einen Feldtypcode durch seinen Längenwert in Bytes ersetzen, ist das 8-Bit-Nullsymbol als ein Nullfeld-Typcode reserviert.
Die Kullfeidwerte nehmen keinen Platz ein, während ihre Separatoren einen Platz beanspruchen. Der Abtastalgorithmus arbeitet jedoch und ein kleiner Aufwand an Logik ist erforderlich, um die Nullfeldseparatoren zu erkennen.
Zwei Nicht-Nullfelder, beispielsweise die Feldtypen A und B mit den mit V,, V , bezeichneten VJertzeichenfolgen und dem mit Δ AB bezeichneten Separator erscheinen wie folgt gemäß Figur 3B: va AJ^ vB
Um ein Nullfeld (Typ 0) zwischen A und B einzufügen, ist es lediglich erforderlich Δ AB durch die zwei Separatoren A. A0, Δ 0B zu ersetzen. Auf diese Weise wird ein gesondertes Byte in die Feldfolge eingefügt. Zwei Fullfeider zwischen A und B erscheinen als V, Δ Α0 A 00 Δ0Β V_. Hierbei stellt jeder unterstrichene Ausdruck einen Feldseparator mit der Länge von einem Byte dar. Jedes weitere Nullfeld macht die Einfügung eines Separators Δ. 00 erforderlich, dessen Wert als 0 (£> 0 = gegeben ist.
Selbstidentifikation - Um eine Feldabtastung an irgendeiner Blockgrenze beginnen zu können, ist es erforderlich, die Identität des ersten abzutastenden Feldes zu kennen. Zu diesem Zweck ist es ausreichend, die Übereinkunft zu treffen, daß zumindest ein Nullfeld immer an jeder Blockgrenze eingefügt wird.
509883/0858
Es sei angenommen, daß eine Blockgrenze zwischen den Feldern A und E gemäß dem vorangegangenen Beispiel auftritt. Innerhalb des Feldzuges V. A AB V muß der Separator Δ AB entweder
Xl .11.— . — JJ "'■- ' ■" "'-
dem Block mit dem Wert V. oder dem Block mit dem Wert V0 zugeordnet werden. Keine Wahl aus beiden Möglichkeiten ist jedoch zufriedenstellend. Ist beispielsweise A, AB zusammen mit V_ gespeichert, so erfordert eine Rückwärtsabtastung innerhalb des Blockes mit V7. eine Bezugnahme auf vorangehende Blöcke, bevor der Feldtyp A und seine Länge identifiziert werden kann.
Dieses Problem verschwindet, wenn die Blockgrenze durch zwei Nullfeld-Separatoren aufgespreizt wird. Mit einer Grenze beispielsweise zwischen A. A0 und A 0B innerhalb der Feldfolge V A Α0 Α0Β V erfaßt der Abtastalgorithmus unabhängig von der Richtung, mit welchem er die Abtastung beginnt, einen Separator A A0 oder A 0B. Da die Null den Nullfeldtyp repräsentiert, ergibt sich AA0 = A + 0 = A und Α0Β = E + 0 = B. Mit anderen Worten besitzen die Nullfelder die vorteilhafte Eigenschaft, daß benachbarte Separatoren direkt den benachbarten Feldtyp identifizieren. Dies bedeutet, daß die beiden Felder an den Enden irgendeines Blockes selbstidentifizierend sind, wenn die Blöcke aufgefüllt werden, um eine Aufteilung der Felder zu vermeiden und wenigstens ein Nullfeld an den Blockgrenzen eingefügt wird.
Wiedersynchronisation - Die Nullfeldeinfügung an den Blockgrenzen macht jeden Elock unabhängig von benachbarten Elöcken, soweit das Feldabtastverfahren betroffen ist. Eine korrekte Feldabtastung vom einen Ende eines Blockes zum anderen Ende erfordert jedoch noch, daß alle zwischengefügten Feldseparatoren korrekte Werte aufweisen. Was geschieht, wenn ein Fehler auftritt?
509883/0858
Es sei zunächst das Problem der Fehlerfeststellung betrachtet. Wenn Nullfelder an beiden Elockgrenzen eingefügt sind, so muß eine korrekte Folge von Feldseparatoren automatisch eine Parity-Querprüf summe mit dem Wert Null ergeben. Es sei beispielsweise angenommen, daß ein Block vier Felder A, E, B und C aufweist, so daß sich die Folge von Feldseparatoren und zwischengefügten Wertfolgen wie folgt ergibt
Δ 0A V7. Δ, AB V_ Λ BE V_ A BC V_ Λ C0
Durch Definition ist A 0A = A und Δ AB = A © B usw., so daß sich die Parity-Prüfsumme von diesen fünf Separatoren wie folgt ergibt
Δ.0Α + Δ-ΑΒ + A. BB + A BC + Ac0 = A ® (A © B) Φ (B φ B) Φ (E Φ C) & C = (A © A) © (B φ B) φ (B © E) Φ (C (±) C) =0
Dieses Ergebnis der Paritätsprüfung ergibt sich auf Grund der Eigenschaft der Exklusiv-ODER-Addition. Da die Feldtypen oder Längencodes paarweise auftreten, ergibt sich ihre Streichung in der Gesamtquersumme. Als Folge hiervon erlaubt die Prüfsumrre mit dem Wert Null eine rasche Feststellung von Fehlern hinsichtlich der Separatoren. Dieses Prüfverfahren unterscheidet zwischen Fehlern hinsichtlich der Separatoren und der Wertzeichenfolgen, wenn ein entsprechendes Codierungsschema für die Fehlerfeststellung benutzt wird. Oftmals können die Elocklängen verkürzt werden, um die Wahrscheinlichkeit, daß mehr als ein Separatorfehler pro Block auftritt vernachlässigbar klein zu machen.
VJie ist es nunmehr möglich, einen Fehler eindeutig zu lokalisieren, wenn ein einziger Separator innerhalb eines Blockes fehlerhaft ist? Eine Prüfsumme mit einem Wert ungleich KuIl verweist
509883/0858
2527U1
auf einen fehlerhaften Feldseparator, ohne jedoch den Ort des Fehlerauftritts anzuzeigen. Die tatsächliche Prüfsumme ist jedoch nicht errechenbar, da die errechnete Folge von Separatoradressen von den korrekten Positionen unterhalb des Fehlerpunktes abweichen kann. Die Lösung des Problems ergibt sich, wenn die Prüfung beginnend mit dem entgegengesetzten Ende des Blockes ebenfalls vorgenommen wird.
Es ist ohne weiteres ersichtlich, daß immer dann, wenn die beiden Folgen von Separatoradressen ausgehend von entgegengesetzten Enden des Blockes nur eine gemeinsame Adresse aufweisen, dieser gemeinsame Treffpunkt die Position des fehlerhaften Separators anzeigt. In diesem Fall ist der korrekte Separatorwert die symmetrische Differenz der Feldtypcodierungen, die durch die beiden Abtastungen bis zu ihrem Treffpunkt errechnet wurden, sofern die Errechnung bis zu diesem Punkt eine Gesamtprüfsumme von Null ergab.
VJenn die beiden Adressenfolgen mehrere gemeinsame Berührungspunkte aufweisen, so kann jeder Berührungspunkt als eine mögliche Fehlerposition betrachtet werden. Auf diese Weise ergibt sich eine Doppelfehlerfeststellung, obwohl nicht alle Doppel-Byte-Fehler notwendigerweise auf diese Weise festgestellt werden. Weisen beispielsweise die Feldtypen A und B die gleiche Länge auf, so führt ein doppelter Separator-Byte-Fehler der
Δ. AB mit A.AA = Δ BB = 0 verwechselt von der Feldfolge VA Δ AB V0 Δ BB Vn zu V. ΔΑΑ V- Δ AB V_
Solche Doppelfehler sind durch die symmetrische Differenzcodieruna nicht feststellbar.
509883/0858
2527U1
Darstellung von baumstrukturierten Daten
Das symmetrische Differenzverfahren soll nunmehr auf die irredundante gepackte sequentielle Darstellung von hierarchischen bzw. baumstrukturierten Daten erstreckt werden. Hierdurch ist eine bidirektionale Abtastung auf jedem Pegel des Baumes möglich ohne das Erfordernis, dazwischenliegende Daten abtasten zu müssen.
Als Beispiel sei die Eaumstruktur gemäß Figur 4 betrachtet, bei welcher A, B usw. Feldtypen darstellen, deren Werte V-, VR usw. sequentiell in der Reihenfolge (AECDEFG) gespeichert werden sollen. Nicht-Endknoten P. (V7urzel) und T, können Datenfelder (Elätter des Baumes) oder andere Knoten (Teilbäume) aufweisen, die mit ihnen verbunden sind. Zu jedem Teilbaum führende Äste sind durch ein zusammengehörendes Klammerpaar umgeben. Die zugehörige lineare Klammerdarstellung des Baumes kann aus Figur rekonstruiert werden, indem bei einer Umfahrung des Baumes im Gegenuhrzeigersinn alle Ast- und Elattbezeichnungen abgelesen werden: Λ (B(CD)) (E(FG)). Hinsichtlich der Definitionen und der Erläuterung der Baumstrukturen sei auf die Seiten 305 von Band 1 des Buches "The Art of Computer Programming" von Donald E. Knuth, verwiesen, das von der Addison-Wesley Publishing Company veröffentlicht wurde.
Die zu dieser Darstellung zugehörige Wertzeichenfolge ergibt sich zu VA (VE (Vc V0)) (VE(VFVG}). Diese Zeichenfolge ist solange nicht mehrdeutig, als "("und")" reservierte Zeichen sind, die in den Werten V, bis V_, nicht auftreten oder wenn V_ bis V-,
A (j A ta
bekannte feste oder errechenbare Längen aufweisen. Um die Reservierung der Klammerzeichen zu vermeiden, seien sie als EinByte-Werte eines speziellen Punktierungs-Feldtypes ρ betrachtet. Im vorliegenden Beispiel repräsentiert somit V entweder ")" oder "(" und muß somit innerhalb der Feldseparatoren eingefügt
5G9883/Ö85S
werden, wie in jedes andere Feld. Die Anwendung der symmetrischen Differenzcodierung auf diese Feldfolge ergibt somit nachstehendes Resultat, wobei pro Klammerzeichen zwei Bytes erforderlich sind: A Ap Vp ApB VB ABp Vp ApC Vc A CD VD A Dp V
vp Aj2E v£ Ajg
A PP
Die zwei verschiedenen Halbklammerwerte "(" und ")" können durch zwei verschiedene reservierte Feldtypen ersetzt werden, in welchem Fall ihre Werte Null sind. Benutzt man beispielsweise f und • zur Kennzeichnung der Typcodierungen für die Halbklammern vom Typ "(" und ")" und Δ. AB zur Darstellung der symmetrischen Differenz der Typcodierungen A und B, so wird der Baum gemäß Figur 4 in folgender Weise darstellbar:
Α0Α v. AaI AH Vn Abc v„ Acd Vn Ad fr Λ+t AU A^e
Vt? AEJr A4" F V„ A FG Vn AGt Af j Λ t 0
Diese Struktur kommt der Speicherung entgegen, da lediglich ein zusätzliches Byte für jedes eingefügte offene oder geschlossene Klammersymbol benötigt wird. Jedes Feld muß jedoch noch abgetastet werden, indem der ganze Baum umfahren wird, was für viele Anwendungszwecke nicht efficient ist. Es sei beispielsweise angenommen, daß A eine "if"-Bedingung, B (CD) eine "then"-Bedingung und E (FG) eine "else"-Bedingung innerhalb einer Anweisung in einer zergliederten Ursprungssprache bedeutet, die zu interpretieren ist. Nach der in der Ablaufzeit erfolgenden Auswertung der Eedingung A will der Interpreter die Bedingung E (CD) abtasten und die. Bedingung E (FG) auslassen oder beispielsweise die Bedingung B (CD) auslassen und die Bedingung E (FG) abtasten.
509883/0858
Hinsichtlich der vorstehend erläuterten Baumstruktur ergibt sich eine Ineffizienz in dem Sinne, daß jede Abtastung in jeder Richtung jeden Knoten und jedes Elatt des Baumes erfassen muß, um vom einen Ende an das andere Ende zu gelangen.
Wenn der Baum viele verschachtelte Pegel aufweist und wenn lediglich ein Interesse besteht, einen Knoten mit einem höheren Pegel auszuwählen, so wird bei einer solchen Abtastung viel Zeit vergeudet. Es wird daher ein Teilbaum-Separator benötigt, der die Information bezüglich der Längen kompletter Unterstrukturen zwischen benachbarten Knoten übermittelt. Im folgenden wird eine Baumstruktur beschrieben, die das Auslassen von Teilbäumen gestattet, indem ein einzelner Feldtyp reserviert wird, der als Zwischenknoten-Separator bezeichnet wird und eine symmetrische Differenztechnik zur Codierung seines Inhaltes benutzt.
Erweiterung für Schnellabtastung - Die vorangehende codierte Darstellung einer Baumstruktur ist nicht sehr efficient, wenn ein bekannter Weg durch den Baum aufgefunden werden soll. Hinsichtlich Figur 4 sei beispielsweise angenommen, daß das Feld F im voraus als mit dem ersten Blatt verbunden bekannt ist, wobei das erste Blatt mit dem zweiten Ast und der zweite Ast über den dritten Ast mit dem Wurzelknoten verbunden ist. Die nachstehend vorgeschlagene Erweiterung gestattet es der Abtastung, die ersten beiden Äste, die mit dem Wurzelknoten verbunden sind, auszulassen, einen Pegel (auf den Knoten T2) herabzusteigen und das Feld E auszulassen, so daß das Feld F in drei Schritten erreicht wird, andernfalls erfordert die Abtastung fünf Schritte über A, B, C, D und E.
Ein neuer mit ρ bezeichneter Feldtypcode, der als Zwischenknoten-Separator feld bezeichnet wird, wird benötigt. Sein von KuIl verschiedener Wert hängt lediglich von der Länge der Teilbäume ab,
509883/0858
die durch ihn begrenzt oder getrennt werden und dieser Wert wird benutzt, um über einen Teilbaum in irgendeiner Richtung zu springen. Die symmetrische Differenzcodierung wird für die Zwischenknoten-Separatorfeldwerte benutzt, um die Speicheranforderungen zu minimalisieren. Felder von dem Typ ρ werden wie Daten und Nullfeldtypen in den Feldzug eingefügt. Während eine feldsequenzielle Abtastung lediglich Zwischenknoten-Separatoren erkennt und über solche hinwegspringt, muß ein Algorithmus für die Baumabtastung eine Logik aufweisen, um die Zwischenknoten-Separatoren zu erkennen und sie in geeigneter Weise zu verarbeiten.
Für die Zwischenknoten-Separatoren wird eine typische Länge von zwei Bytes angenommen, obwohl andere Längen ebenfalls benutzt werden können. Auf diese Weise wird die maximale Teilbaumlänge auf 65K-Bytes begrenzt. Bei diesem Abtastverfahren wird ein Stapel benutzt, um Stellenmarkierer (Hinweisadressen oder Offsets) für den Beginn und das Ende des abzutastenden Teilbaumes zu sparen. Der Stapel erlaubt ebenfalls eine direkte Rückkehr von irgendeinem Teilbaum zu seiner Wurzel oder seinem Ursprung sknoten, ohne daß hierbei über andere Äste des Teilbaumes gegangen werden muß.
Es ist einfach, die vorgeschlagene codierte Form eines Baumes durch eine sequenzielle^Abtastung seiner eingeklammerten Feldstruktur zu konstruieren. Jede schließende Klammer und jede öffnende Klammer, die nicht eine schließende Klammer als unmittelbaren Vorgänger aufweist wird durch ein Zwischenknoten-Separatorfeld mit einem Zwei-Byte-Wert ersetzt. Ein Paar von Klammern der Form ")(" wird zu einem Zwischenknoten-Separatorfeld kombiniert.
Innerhalb eines jeden zu einer einzigen offenen oder geschlossenen Klammer gehörigen Zwischenknoten-Separatorfeldes wird die Entfernung (in Bytes) zu den gegenüberliegenden zugehörigen
509883/0858
Klammern abgelegt. Dies entspricht den zuvor beschriebenen selbstidentifizierenden Feldseparatoren an den Blockgrenzen. Innerhalb des einem Paar von geschlossenen und offenen Klammern zugeordneten Zwischenknoten-Separators wird die symmetrische Differenz der Entfernungen zu den zugehörigen Klammern abgelegt. Dieser Aufbau befindet sich in Übereinstimmung mit der zuvor erwähnten Codierung der Feldlängen in den Feldseparatoren.
Jedes Paar zusammenwirkender Klammern zusammen mit all den darin eingeschlossenen Feldern und verschachtelten Klammerpaaren entspricht einem Teilbaum und dem diesen mit dem Ursprungsknoten verbindenden Ast. Beispielsweise weist der Baum gemäß Figur 4 7 Blätter und 4 Teilbäume auf. Sein Wurzelknoten ist mit R bezeichnet und die Wurzelknoten seiner Teilbäume sind mit T,
T_ und T, bezeichnet.
3 4
Die codierte Darstellung eines Teilbaumes sei als Verbundelement bezeichnet und stellt einen neuen Datentyp dar, dessen Wert durch seine Byte-Zeichenfolge gegeben ist. Das heißt, daß ein Verbundelement irgendeine Folge von Feldern darstellt, die Zwischenknoten-Separatorfelder einschließt, die ihrerseits gewissen Zwängen bei ihren paarweisen Auftritten unterliegen und die geeignete, die Länge definierende Werte enthalten.
Die Verbundelemente können verschachtelt sein. Es sei an dieser Stelle vermerkt, daß die Zwischenknoten-Separatoren, die den geöffneten und geschlossenen Klammern zugeordnet sind, nur dadurch unterscheidbar sind, daß ihre Lage in Bezug auf die Ursprungsknoten verfolgt wird. Die Lage und der Wert eines Separators bestimmt den Ort seines zugehörigen Separators. Die dazwischengefügten Zwischenknoten-Separatoren kennzeichnen die innere Struktur des Baumes auf niedrigeren Pegeln.
509383/0858
In Figur 4 sind 4 Verbünde leinen te durch Klammern bestimmt, die um die Äste gelegt sind, die zu den Wurzelknoten der zugeordneten Teilbäume führen. Lediglich ein Paar von Teilbäumen (T. und T?) sind einander auf dem gleichen Baumpegel benachbart. Die anderen beiden Teilbäume (T_ und T4) sind durch Felder oder Klammern auf höherem Pegel voneinander isoliert. V bezeichne, eine Wert-Zeichenfolge hinsichtlich eines Feldes vom Typ A. L. bezeichne den Wert eines Feldes vom p-Typ. L. soll hierbei die Länge in Bytes des Teilbaumes T. gemäß Figur 4 definieren und L.. = L. © L. soll die symmetrische Differenz von L. und L. bezeichnen. Die Baumstruktur gemäß Figur 4 erfordert somit die folgende Codierung der Folge von Feldtypen:
ApBpCDppEpFGpp
Ersetzt man A durch V usw. und ρ durch L. oder L.. so erhält man die folgende Folge von Feldwerten:
VA Ll VB L3 VC VD L3 L12 VE L4 VF VG L4 L2
Geeignete Feldseparatoren werden zur Interpunktion dieser Folge von Feldwerten eingefügt. Es sei angenommen, daß A AB den Einzel-Eyte-Feldseparator zwischen zwei Wertfolgen von Feldern des Types A und B darstellt. Unter Verwendung dieses Ausdruckes ergibt sich die volle codierte lineare Darstellung des Eaumes gemäß Figur 4 in der in Figur 5 dargestellten Form.
Figur 5 zeigt ebenfalls die Regeln zur Errechnung der Längen von Verbundelementen. Für jedes Feld, welches ein direkter Abkomme des Verbundelementes ist, dessen Länge errechnet wird, wird die Zeichenfolgelänge des Feldwertes plus ein Byte hinzugefügt. Für jedes verschachtelte Verbundelement, welches ein direkter Abkomme darstellt, wird seine Länge plus drei Bytes addiert. Dies gilt für ein Feld vom p-Typ und seinen Separator.
509883/0858
Schließlich werden drei Bytes zu dem Verbundelement selbst hinzuaddiert für den Feldvorsatzcode vom p-Typ. Dies ist in Figur 5 für den Teilbaum T3 = (E(FG)) dargestellt, wobei die Längen von V_, V_ und V^ mit x, y und ζ entsprechend bezeichnet sind.
Um das Abtastverfahren zu erläutern sei auf das Beispiel der Figuren 4 und 5 Bezug genommen. Es sei beispielsweise angenommen, daß Zugriff zu dem Feld F gewünscht wird, welches im voraus als auf dem ersten Ast des Teilbaumes T. liegend bekannt ist. Der Teilbaum T. hängt seinerseits an dem zweiten Ast des Teilbaumes T_, der seinerseits wiederum an dem dritten Ast des Ursprungsknoten R des Baumes hängt.
Die Suche nach dem Feld F beginnt beispielsweise an der linken Ecke der codierten Darstellung (Figur 5) und folgt den gestrichelten Linien:
1) Lese 0A, suche die Länge von VA auf und springe auf ÄAp
2) Lese Δ.Αρ, gehe weiter und lese L, und springe nach Δρρ, welches direkt von L,_ gefolgt wird.
3) Lese L12' errechne L_ = L, + L,2 und stapele sodann die Adresse sowohl von L-2 und L3. Dies erlaubt die Rückkehr
vom Teilbaum T. zur linken oder rechten Ecke des Teil-4
baumes T3.
4) Schreite weiter zu ApE, suche die Länge von V auf und springe nach AEp. Schreite weiter und lese L4 und stapele seine Adresse und die Adresse von L. (an der rechten Ecke des Teilbaumes T4), welches ist die Adresse (L4) + Wert (L4).
5) Schreite nach ApF, wodurch F als nächstes Feld gekennzeichnet wird.
509883/0858
Bei diesem Verfahren wird über drei Teilbäume gesprungen und über zwei Pegel nach unten in der Baumstruktur herabgestiegen. Durch Entstapeln der Rückkehradresse kann eine Rückkehr sofort nach irgendeinem Ast des nächsthöheren Pegels des Baumes vorgenommen werden. Die gestapelte Adresse der gerade vorliegenden linken oder rechten Teilbaumgrenze wird benutzt, um die Abtastung in der Vorwärts- oder Rückwärtsrichtung je nach Wunsch zusammenzufassen. Zwischenknoten-Separatoren innerhalb eines Teilbaumes sind innerhalb dieser Grenzen angeordnet.
Während dem Abtastverlauf können Mehrdeutigkeiten auftreten. Der Inhalt des Zwischenknoten-Separators legt nicht fest, ob es sich um ein Ende des gerade bearbeiteten Teilbaumes oder um einen Zwischenknoten-Separator innerhalb dieses Teilbaumes handelt. Diese Mehrdeutigkeit wird beseitigt durch Vergleich der Separatorposition mit dem Ende des gerade bearbeiteten Teilbaumes, welcher einer von zwei Teilbaum-Grenzpositionen an der Spitze des Stapels entspricht. Ein anderer Weg um diese Mehrdeutigkeit zu beseitigen, besteht in der Zuordnung dreier verschiedener Typcodierungen P,, P2 und P3 hinsichtlich der Zwischenknoten-Separatorfelder, die den Klammersymbolen "(", ")" und ")(" entsprechen.
Gemäß den Figuren 6A und 6B ist ein erstes bevorzugtes Ausführungsbeispiel der Erfindung dargestellt, wobei hardwaremäßig ausgeführte Logikschaltkreise und Register der Abtastung einer codierten Textzeichenfolge in der Vorwärts- und Rückwärtsrichtung dienen. Figur 6A zeigt die Wirkungsweise der Hardware bei der Abtastung in der Vorwärtsrichtung während eines Operationszyklus der Kardware, wobei ein Schritt einer links nach rechts Abtastung von einem Textstück zu einem anderen Textstück der codierten Eingangszeichenfolge verwirklicht wird. Figur 6B zeigt die gleiche Zeichenfolge eines Textes, der in Rückwärtsrichtung abgetastet wird. Es sei darauf verwiesen, daß die gleichen Bezugsziffern für die gleichen Elemente benutzt werden, wobei
§09883/0858
lediglich die unterschiedlichen Datenwege unterschiedlich beziffert sind. Weiterhin sei darauf verwiesen, daß die Datenwege in jeder Darstellung entsprechend ihres aufeinanderfolgenden Auftrittes beziffert sind. Gemäß Figur 6A ist ein Teil einer codierten Textzeichenfolge dargestellt, welche zwei als Text C und Text D bezeichnete Textstücke aufweist, die zusätzlich mit den Bezugsziffern 2 und 4 versehen sind. Dem Text C vorangehend ist ein symmetrischer Differenz-Separator Δ EC-I und zwischen dem Text C und dem Text D ist ein anderer symmetrischer Differenz-Separator &CD-3 angeordnet. Dieser Teil einer Textzeichenfolge 1,2,3 und 4 kann auf einem Magnetband oder einem anderen sequenziell adressierbaren Speichermedium angeordnet sein. Es versteht sich von selbst, daß viele codierte Textzeichenfolgen in dem angewählten Speichermedium vorhanden sind. In dem besonderen hier vorliegenden Fall ist die logisch definierte Textzeichenfolge in dem virtuellen Speicheradressenraum eines Rechenspeichers angeordnet. Der Inhalt des Positionsregisters 8 repräsentiert einen Offset oder eine Anzahl von Zeichen zwischen entsprechenden Bezugspunkten auf dem Speichermedium und einem besonderen Separator, z.E. ΔEC-I oder &.CD-3. Bei einer Abtastung von links nach rechts,wenn das Positionsregister 8 ergänzt ist, so daß es eine neue Position anzeigt, wird die relative Offsetadresse einer solchen Bezugsmarke des Separators A.CD-3 beispielsweise bestimmt, indem zu der Länge des Textes C-2 die relative Offsetadresse des Separators & EC-I hinzuaddiert wird. Auf diese Weise wird die relative Offsetadresse des Separators Ä.CD-3 in Bezug auf die zuvor ausgewählte Bezugsmarke auf dem Speichermedium bestimmt. Im allgemeinen stellt die ausgewählte Bezugsmarke den Beginn der logisch definierten Textzeichenfolge in dem virtuellen Adress-Speicherraum des Rechenspeichers dar. Es liegt klar auf der Hand, daß genau die gleiche Verfahrensweise bei einem Magnetband oder einem anderen sequenziellen Speichermedium verwendet werden kann.
509883/0858
Gemäß Figur 6A weist die Schaltungsanordnung drei Register auf, ein Positionsregister 8, ein Längenregister 9 und ein symmetrisches Differenzregister 5. Zusätzlich ist ein Binäraddierer 7 vorgesehen zur Ausführung einer gewöhnlichen binären Addition oder Subtraktion. Ein Exclusiv-ODER-Addierer oder Komplementierer 6 ist für die Ausführung einer übertragsfreien Exclusiv-ODER-Addition vorgesehen. Es sei hier festgestellt, daß die Exclusiv-ODER-Addition der Komplementierung des Ausganges eines Registers, beispielsweise des Längenregisters 9 in jenen Eit-Positionen entspricht, wo eine Exclusiv-ODER-Addition einer "1" durch den zweiten Eingang angezeigt wird. Die Inhalte des Positionsregisters und des Längenregisters 9 bilden zusammen ein Feld-Deskriptorwort 10. Der erste Teil dieses Wortes bildet die Position des Beginns eines besonderen abzutastenden Textfeldes, welche in dem Positionsregister enthalten ist. Der zweite Teil des Feld-Deskriptorwortes bildet die Länge des besonderen abzutastenden Textstückes, welches in dem Längenregister 9 enthalten ist. In Figur 6 wurde von der Annahme ausgegangen, daß in vorangegangenen Schritten einer links nach rechts oder rechts nach links Abtastung das Positionsregister 8 und das Längenregister 9 mit einer Beschreibung des Textes C versehen wurden. In einem nächsten Schritt einer typischen Abtastung gemäß der Erfindung ist die Abtastung des Inhalts des Positionsregisters 8 und des Längenregisters 9 sov/ie des symmetrischen Differenzregisters 5 erforderlich, um die notwendigen Operationen ausführen zu können, die zur Ergänzung des Positionsregisters 8 erforderlich sind, so daß dieses die Adresse der neuen Position^CD-3 aufweist und die weiterhin erforderlich sind zur Ergänzung des Längenregisters 9, so daß es die Länge der nächsten Textzeichenfolge D-4 aufweist. Vor der Ergänzung weist das Positionsregister 8 die Position des symmetrischen Differenz-Separators & BC-I auf, was durch den gestrichelten Pfeil 11 angedeutet ist. Ferner enthält das Längenregister 9 die Länge des Textes C-2. Demgemäß werden bei der Ergänzung der Register der Inhalt des Positionsregisters 8 zuerst entlang dem Datenweg 12 zu dem Binäraddierer 7 übertragen und es
509883/0858
wird zur gleichen Zeit der Inhalt des Längenregisters 9 entlang den Datenwegen 13 und 13£ zu dem Binäraddierer 7 übertragen und zu dem Inhalt des Positionsregisters 8 addiert. Kenn die binäre Addition vervollständigt ist, wird das Ergebnis dieser Addition entlang dem Weg 14 zurück in das Positionsregister 8 übertragen. Das Positionsregister 8 enthält nunmehr die Position des symmetrischen Differenz-Separators ÄCD-3, die dem Text D vorangeht, was durch den gestrichelten Pfeil 15 angedeutet ist. Simultan mit der Übertragung des Inhalts des Längenregisters 9 nach dem Binäraddierer 7 wird der Inhalt des Längenregisters 9 ebenfalls über die Datenweg 13 und 13B zu dem Exclusiv-ODER-Komplementierer 6 übertragen. Der symmetrische Differenz-Separator ÄCD-3, der durch den ergänzten Inhalt des Positionsregisters 8 bestimmt wird, wird über den Datenweg 16 in das symmetrische Differenzregister 5 geladen und sodann über den Datenweg 17 auf den Exclusiv-ODER-Komplementierer 6 gegeben, der eine Exclusiv-ODER-Addition (modulo-2-Addition) ausführt und es wird sodann das Ergebnis der Exclusiv-ODER-Addition über den Datenweg 18 zurück zu dem Längenregister 9 übertragen. In diesem Zeitpunkt ist ein Zyklus der Vorwärtsabtastung vervollständigt und das Positionsregister 8 enthält die Position des symmetrischen Differenz-Separators ACD-3. Ebenso enthält das Längenregister 9 die Länge des Textes D-4 der codierten Zeichenfolge und das symmetrische Differenzregister 5 enthält die codierte symmetrische Differenz &CD-3.
Anhand von Figur 6B sei im folgenden ein vollständiger Zyklus einer Rückwärtsabtastung beschrieben. Beim Beginn eines Rückwärts-Abtastzyklus sei angenommen, daß das Positionsregister 8 die Position (Adresse oder Offset) des symmetrischen Differenzseparators Δθϋ-3 enthält, der den Text C von dem Text D einer kodierten Zeichenfolge trennt. Das Längenregister 9 enthält die Länge des Textes D-4. Andererseits enthält das symmetrische Differenzregister 5 den codierten symmetrischen Differenzseparator ACD-3.
509883/0858
Bei der Rückwärtsabtastung geht es darum, die Position von ABC-! aufzufinden. Im allgemeinen geschieht dies durch Erzeugung der Länge des Textes C-2 aus dem symmetrischen Differenzseparator &CD-3 und der Länge des Textes D-4, die in dem Exklusiv-ODER-Komplementierer 6 verknüpft werden und durch anschließende Subtraktion der Länge des Textes C-2 im Binäraddierer 7 von der Adresse des symmetrischen Differenzseparators Δ. CD-3 im Positionsregister 8. Dementsprechend wirdder symmetrische Differenzseparator Δ CD-3 zuerst über den Datenweg 12A in das symmetrische Differenzregister 5 geladen und sodann über den Datenweg 13C dem Exklusiv-ODER-Komplementierer 6 zugeführt. Der Inhalt des Längenregisters 9 wird sodann über den Datenweg 14A zu dem Eklusiv-ODER-Komplementierer 6 übertragen, welcher eine übertragsfreie Exklusiv-ODER-Addition ausführt und das Resultat wird über den Datenweg 15B in das Längenregister 9 zurückübertragen. Zusätzlich wird das Resultat über den Datenweg 15A dem Binäradddarer 7 zugeführt. Es sei hier vermerkt, daß der Binäraddierer bei der Rückwärtsabtastung in Wirklichkeit eine binäre Subtraktion ausführt. Gleichzeitig wird der Inhalt des Positionsregisters 8 ebenfalls dem Binäraddierer 7 zugeführt, der in diesem Fall die binäre Subtraktion ausführt, um die Position (Adresse oder Offset) des symmetrischen Differenzseparators ^,BC-1 zu bilden und dieses Resultat wird über den Datenweg 17A zurück in das Positionsregister 8 geführt. Schließlich wird der symmetrische Differenzseparator ZkBC-I über den Datenweg 19A in das symmetrische Differenzregister 5 übertragen. Das Endresultat zu diesem Zeitpunkt des Rückwärts-Abtastzyklus ist wie folgt: Das Positionsregister 8 enthält nunmehr die Adresse des symmetrischen Differenzseparators Δ BC-1, auf welchen durch den gestrichelten Pfeil 18A hingewiesen wird; das Längenregister 9 enthält die Länge des Textes C-2 und das symmetrische Differenzregister 5 enthält den Inhalt des symmetrischen Differenzseparators &BC-3. Da die Rückwärtsabtastung das genaue Gegenteil der Vorwärtsabtastung ist, sind die Rechenschritte bei der Vorwärts und Rückwärtsabtastung jederzeit vertauschbar, so daß hinsichtlich des Schaltungsaufbaues kein Unterschied in Abhängigkeit von der vorzunehmenden Abtastrichtung besteht.
509883/0858
Die Hardware-Struktur gemäß den Figuren 6A und 6B wurde benutzt, um aufzuzeigen, wie eine Vorwärts- und Rückwärtsabtastung vonstattengeht, wenn ein Feld pro Rechenzyktus von dem Computer adressiert wird. Es ist jedoch auch möglich, eine Tabelle von Felddescrjptorworten in einem Speicher zu speichern, die sodann die Position und die Länge eines jeden codierten Textstückes exakt in einer Tableaudarsteilung enthalten, welche in einer für Digitalrechner bekannten Wiese indiziert werden kann. Um die erforderliche Information zu erzeugen und eine solche Tabelle von Felddescriptoren unter Heranziehung der Hardware gemäß den Figu-6A und 6B zu laden, wird ein Felddescriptorwort 10 erzeugt. Dieses Felddescriptorwort besteht aus dem Inhalt des Positionsregisters 8 und des Längenregisters 9, deren Inhalte über die Datenwege 19 und 20 entnommen werden. Unter Heranziehung eines Rechners, der einen|3peicher aufweist, welcher mit einem Indexregister versehen ist, das die Feldnummer jeweils zählt, beispielsweise die Nummern der Felder A, B, C und D und der für jedes solches Feld ein Felddescriptorwort in ein entsprechendes Element einer Tabelle des Speichers ladet, kann die Abtastung über die Tabelle in entsprechender Weise vorgenommen werden.
Eine Erweiterung der in den Figuren 6A und 6B dargestellten Harware ermöglicht ein Verfahren der symmetrischen Differenzcodierung auf mehrfachen Pegel für hierarchische oder baumstrukturierte Daten, wie dies zuvor anhand der Figuren 4 und 5 erläutert wurde. Figur 7 zeigt die zusätzliche Hardware, die erforderlich ist, um eine Folge von Descriptoren für codierte Textfolgen auf unterschiedlich hohen Pegeln zu speichern. Aus Gründen der Übersichtlichkeit bei der Beschreibung der Erfindung sind die verschiedenen Datenwege, der Exklusiv-ODER-Komplementierer und das symmetrische Differenzregister jeweils nicht dargestellt. Es ist jedoch selbstverständlich, daß das oberste Register in Figur 7 (A-1 und A-2) das Felddescriptorwort 10 gemäß Figur 6A enthält. Die Hardware für jeden zusätzlichen Datenpegel ist in Figur 7 als ein Satz von Registern dargestellt. Bei der tatsächlichen Realisierung dieser Register bestehen diese aus
509883/0858
LIFO-Stapelmechanismen , was bedeutet, daß zusätzliche Register nur an der Spitze der Registeranordnung gemäß Figur 7 hinzugefügt oder hinweggenommen werden können. Bei der tatsächlichen Ausführung bezeichnet ein Indexregister jeweils das gerade oberste Register gemäß Figur 7. Die Register, die sich über dem gerade obersten Register befinden, sind in dem Speicher des Rechners angeordnet und werden je nach Wahl hinzugefügt oder ignoriert. Der Aufbau und die Datenwege gemäß den Figuren 6A und 6B sind hinsichtlich des obersten Registers gemäß Figur 7 ebenfalls wirksam und anwendbar, wobei das oberste Register einem einzelnen Knoten oder Teilbaum der codierten Datenstruktur gemäß den Figuren 4, 5 und 7 entspricht.
Gemäß den Figuren 6A und 6B wurde die codierte Textfolge als eine einzelne Folge individueller Textstücke betrachtet, die durch alle auf dem gleichen Pegel auftretendem>symmetrische Differenzseparatoren getrennt sind. Die hinsichtlich eines einzelnen Textstückes einzig mögliche Indentifizierung ist daher durch seine Position im Hinblick auf den Beginn der Textfolge und seiner Länge gegeben. Gemäß Figur 7 können größere oder kleinere Textstücke auf unterschiedlichen Pegeln bezüglich der Größe oder des Details beschrieben werden. Die in Figur 7 dargestellte Textfolge ist gegenüber der zuvor erläuterten Textfolge komplexer. Eine Folge von Feldern, A, B usw. ist in einer mit G(K) bezeichneten Gruppe zusammengefaßt. Diese Gruppe ist zwischen zwei Separatoren A G(K)-IC und Ag(K+1)-U eingeschlossen. Jedes Feld A, B usw. innerhalb der Gruppe ist durch einen symmetrischen Differenzseparator, z.B. 4.AB-1F, ΔBC-1H usw. getrennt. Vor dem ersten Feld innerhalb dieser besonderen Gruppe, d.h. dem Feld A-IE ist ein Separator 6.0A-1D angeordnet, der die Länge des Feldes A-1E enthält. Es sei an dieser Stelle vermerkt, daß viele Felder innerhalb einer Gruppe bestehen können und daß ebenfalls viele Gruppen sich zu einem Datensatz zusammensetzen können. Jedes Feld ist von einem anderen Feld durch einen symmetrischen Differenzseparator getrennt und jede Gruppe ist von einer anderen Gruppe durch einen symmetrischen Differenzseparator getrennt usw.
509883/0858
Diese Zusammenfassung von Feldern und Gruppen ist auf einem nächst höheren Pegel, der als Datensatz bezeichnet wird, wiederum unterteilt und jeder Datensatz ist von zwei symmetrischen Differenzseparatoren A> R(N)-IA und AR(N+1)-1K eingeschlossen. Der nächst höhere Datenpegel ist die Datei, die ebenfalls durch nicht dargestellte symmetrische Differenzseparatoren eingegrenzt ist. In Figur 7 schließt die gestrichelte Linie 30 ein Feld zwischen zwei Separatoren, die gestrichelte Linie 31 eine Gruppe zwischen zwei Separatoren und die gestrichelte Linie 32 einen Datensatz zwischen zwei Separatoren ein.
Bei der vorgegebenen besonderen hierarchischen Datenstruktur mit vier Pegeln enthält die gegenüber der Ausführungsform gemäß den Figuren 6A und 6B erforderliche zusätzliche Hardware ein Datei-Positionsregister D-1 mit einem Datei-Längenregister D-2, ein Datensatz-Positionsregister C-1 mit einem Datensatz-Längenregister C-2, ein Gruppen-Positionsregister B-1 mit einem Gruppen-Längenregister D-2 und ein Feld-Positionsregister A-1 mit einem Feld-Längenregister A-2. Im allgemeinen ist die Anzahl dieser Register veränderlich und diese Register werden im Speicher des Rechners realisiert. Gemäß Figur 7 sind Binäraddierer D-3, C-3, B-3 und A-3 vorgesehen, um die Inhalte des Positions- und des Längenregisters jeweils miteinander zu addieren und auf diese Weise die Länge des entgegengesetzten Endes der gerade abgetasteten Datengruppe zu erhalten. Es kann jedoch ein einziger Binäraddierer für alle diese Register verwendet werden, da nur das oberste Register des Stapels in Wirklichkeit an der Abtastoperation gemäß den Figuren 6A und 6B teilnimmt. Der einzige Unterschied, wenn Gruppen-, Datensatz- oder Datei-Beschreibungen anstelle von Feldbeschreibungen in dem oberen Stapelregister abgelegt sind, besteht darin, daß Zwischenknoten-Separatoren anstelle von Feldseparatoren den Feldern entnommen werden müssen (siehe Figur 5). In gleicher Weise kann ein Exklusiv-ODER-Schaltkreis für jeden Datenpegel vorgesehen sein oder es kann ein Exklusiv-ODER-Schaltkreis mit geeigneter Gatterschaltung für den jeweils abzutastenden,sich zu^oberst befindlichen Datenpegel vorgesehen
509883/0858
sein. Die Technik der LIFO-Stapelverarbeitung ist in der Computertechnik bestens bekannt und braucht an dieser Stelle nicht näher erläutert zu werden.
Gemäß Figur 7 sind die Position und Länge der Datei in dem Dateipositionsregister D-1 und dem Datei-Längenregister D-2 entsprechend gespeichert. Das Datei-Positionsregisters D-1 enthält die relative Offset-Position des Beginns der kompletten Datei oder baumstrukturierten Datenorganisation. Dies wird durch den gestrichelten Pfeil 5A angezeigt, der auf den nicht dargestellten Beginn der Datei hinweist. Durch Addition des Inhalts des Datei-Längenregisters D-2 zu dem Inhalt des Datei-Positionsregisters D-1 im Binäraddierer D-3 wird der Endpunkt der endgültigen Position der kompletten Datei ermittelt, was durch den gestrichelten Pfeil 5B angezeigt ist. Dieser Endpunkt kann den Beginn der nächstfolgenden Datei zwecks Bestimmung ihrer Länge markieren. Die Datei wird nicht als eine Folge von Feldern geringer Größe betrachtet, sondern als eine Folge von Datensätzen, die ihrerseits in Gruppen unterteilt sind, welche Gruppen sodann die Felder enthalten. Es sei nun angenommen, daß der Benutzer, Programmierer oder das Operationssystem das Feld B innerhalb der Gruppe K des Datensatzes N in der Datenstruktur gemäß Figur 7 auffinden möchte. Um den Datensatz N aufzufinden, wird zunächst der Beginn der Datei, wie er durch das Datei-Positionsregisters D-1 angezeigt wird, ermittelt, wobei sich die Register D-1 und D-2 an der Spitze des Staoels befinden. Dieser Beginn bildet somit den Referenzpunkt hinsichtlich der Position der in der Datei enthaltenen Datensätze. Dementsprechend wird ein zweites Register C-1, C-2 dem Stapel hinzugefügt und mit dem ersten Datensatz-Separator Ar(D geladen, wodurch die Position und die Datensatzlänge beschrieben werden. Durch Anwendung der anhand von Figur 6A beschriebenen Technik wird eine Links-nach-Rechts-Abtastung hinsichtlich aller symmetrischer Differenzseparatoren bezüglich der Datensätze durchgeführt. Diese Datensatzabtastung wird N-fach wiederholt, wobei die symmetrischen Differenzseparatoren hinsichtlich der Gruppen und Felder unbeachtet bleiben, bis die Position
5098 8 3/0858
des gesuchten Datensatzes R(N)-IA erhalten wird. Wenn der gesuchte Datensatz ermittelt ist, enthält das Datensatz-Positionsregister C-1 die Adresse oder den Offset des Datensatzes N von dem Beginn der Datei und das Datensatz-Längenregister C-2 enthält die Länge des Datensatzes mit der Nummer N. Ist auf diese Weise der Datensatz mit der Nummer N aufgefunden worden, so wird anschließend innerhalb des Datensatzes N eine Suche nach einer Gruppe mit der Nummer K durchgeführt. Um diese Suche durchzuführen, während gleichzeitig die Fähigkeit erhalten bleiben soll zu der Position des Datensatzes N zurückzukehren und von dort auf andere vorrangehende oder nachfolgende Datensätze zu springen, wird in dem Gruppen-Positionsregister B-1 und dem Gruppen-Längenregister B-2 ein neues Gruppen-Descriptorwort an der Spitze des Stapels gebildet. Anfänglich enthält das Gruppen-Descriptorwort in den Registern B-1 und B-2 die Position und die Länge der ersten Gruppe innerhalb des Datensatzes N. Die Position der ersten Gruppe links von dem Separator Ad(D ist in Figur 7 als Komponente 1B dargestellt. Die Vorwärtsabtastung der Gruppe führt sodann K Abtastzyklen durch, bis die gewünschte Gruppe mit der Nummer K innerhalb der Datensatznummer N erreicht ist. In diesem Zeitpunkt enthält das Gruppen-Positionsregister B-1 die Position des Gruppenseparators OlG(KMc . Dies wird durch den gestrichelten Pfeil 3A gemäß Figur 7 angezeigt. Zur gleichen Zeit enthält das Gruppen-Längenregister B-2 die Länge der Gruppe K, die durch die gestrichelte Linie 31 eingeschlossen wird. Durch die gestrichelte Linie 31 wird veranschaulicht, daß beginnend mit dem linken Ende der Gruppe K die Gruppennummer K + 1 aufgefunden werden kann, indem der relative Gruppen-Offset im Gruppen-Positionsregister B-1 zu der Gruppenlänge des Gruppen-Längenregisters B-2 im Binäraddierer B-3 hinzuaddiert wird. In diesem speziellen Beispiel wurde jedoch angenommen, daß der Wunsch vorlag, die Gruppe K zu ermitteln und die Felder innerhalb dieser Gruppe abzutasten, um ein spezielles Feld B-1G zu bestimmen. Um dies zu bewerkstelligen, wird ein Feld-Descriptorwort erzeugt, indem die Feldregister A-1 und A-2, die die Position und Länge des ersten Feldes der Gruppe K enthalten, zu dem Stapel der Descriptorregister hinzugefügt werden. Durch eine erneut aufeinanderfolgende Ausführung einer Anzahl von Vorwärts-Abtast-
589883/0858
zyklen auf dem Feldpegel werden die Positions- und Längenregister A1 und A2 solange ergänzt, bis sie auf den symmetrischen Differenzseparator Ä.AB-1F hinweisen, welche die von dem Benutzer gesuchte Adresse des Feldes B-1G beziffert. Zu diesem Zeitpunkt enthält daher das Feld-Positionsregister A-1 die Adresse oder den Offset von einem Referenzpunkt, wodurch der Feldseparator Λ AB-"IF bestimmt ist, während das Feld-Längenregister A-2 die Länge des Feldes B-1G enthält. Zur Umkehrung des Verfahrens ist es lediglich erforderlich, den Stapel abzubauen, indem die Inhalte der Feldregister A-1 und A-2 dem Stapel entnommen werden, d.h. ignoriert werden, um auf diese Weise zu dem Gruppenpegel der Baumstruktur zurückzukehren, so daß auf diesem Pegel die Gruppen in Vorwärts- oder Rückwärtsrichtung abgetastet werden können. Andererseits kann es beim Erreichen des Feldes B gewünscht sein, die Abtastung auf dem Feldpegel fortzuführen. In diesem Fall werden die Positions- und Längenregister A-1 und A-2 bezüglich des Feldes nicht gelöscht.
Eine andere diese Technik benutzende Hardware zur Feststellung bestimmter Teile einer baumstrukturierten Datenorganisation., erfordert zusätzliche bekannte Hardware-Einrichtungen, wie beispielsweise Vergleicher und einen Assoziativspeicher. Bei diesem anderen Verfahren wird ein bestimmter Datensatz oder eine bestimmte Gruppe aufgrund des Inhalts eines bestimmten Feldes oder bestimmter Felder innerhalb des Datensatzes oder der Gruppe ausgewählt. Die auf der Inspizierung des Inhalts des bestimmten Feldes basierende Abtastung fährt wie zuvor fort und benutzt das Feld-Descrlptorregisterpaar D-1, D-2, um das Feld zu bestimmen, das mit einem bestimmten Wert übereinstimmt, wobei die Abtastung dann auf den nächstniedrigeren Pegel hinabsteigen kann und das Verfahren wiederholt wird. Eine Suche innerhalb einer Anzahl von Datensätzen zwecks Bestimmung eines Datensatzes mit einem bestimmten Feld, wird beispielsweise ausgeführt, indem der Inhalt eines bestimmten Feldes eines jeden Datensatzes ausgewählt und dieser Inhalt mit einem gesuchten Kennschlüssel verglichen wird, so daß im Falle der Obereinstimmung der Werte das gesuchte Feld innerhalb des Datensatzes ermittelt ist. In gleicher Weise wie
S09883/0858
eine erfolgreiche Abtastung bei der Ermittlung eines vorgegebenen Datensatzes ausgeführt wird, kann eine Suche innerhalb des vorgegebenen Datensatzes solange durchgeführt werden, bis Übereinstimmung mit einem vorgegebenen Gruppen-Kennschlüsselwert gefunden wird und es kann anschließend die gleiche Suche auf dem Feldpegel durchgeführt werden.
Gemäß den Figuren 8A bis 8C ist eine Schaltungsanordnung zur Erzeugung eines symmetrischen Differenzcodes und zum Einfügen dieses Codes in eine Datenfolge enthaltend eine Folge von Datenfeldern dargestellt. Die Hardware ist bezüglich aller drei Figuren 8A bis C identisch, jedoch zeigt beispielsweise Figur 8A den Zustand der Hardware beim letzten Schritt der Code-Erzeugung. Durch Anwendung üblicher Verfahren wird zunächst eine Datenfolge 50 erzeugt, die die FeldearA, B, C usw. aufweist, wobei jedes Feld durch ein 8-Bit-Separator von dem nächsten Feld getrennt ist und wobei die Separatoren anfänglich mit Nullbits aufgefüllt sind. Gleichzeitig mit der Ablegung der Datenfolge im Speicher wird eine Längentabelle 61 erzeugt, in welcher die Länge eines jeden Feldes der Datenfolge 50 gespeichert wird. Zu diesem Zeitpunkt enthält ein Teil des Hauptspeichers die gesuchte Datenfolge, wobei jedes Feld innerhalb der Datenfolge ein leeres Separatorfeld aufweist und es enthält ferner eine Längentabelle, die die Länge eines jeden Feldes innerhalb der Datenfolge 50 angibt.
Gemäß Figur 8 wird der anfängliche symmetrische Separator erzeugt, indem zunächst die Hauptspeicherposition des Beginns der Datenfolge 50 in dem Positionsregister 60 abgelegt wird. Der Inhalt des Positionsregisters 60 wird sodann über den Datenweg N-2 auf den Binäraddierer 62 gegeben. Zum gleichen Zeitpunkt wird der Inhalt des ersten Wortes der Längentabelle 61, welcher Null ist, über den Datenweg N-3 auf den Binäraddierer 62 gegeben. Als Ergenis der binären Addition ergibt sich die absolute Adresse des Beginns der Datenfolge 50, welche über den Datenweg N-4 in das Positionsregister 60 übertragen wird. Zu diesem Zeitpunkt verweist das Positionsregister 60 auf den Beginn des Feldes A der
509883/0858
Datenfolge 50. Der symmetrische Differenzcode, der an der Stelle 51 der Datenfolge 50 einzufügen ist, wird durch Auslesen des Inhalts der ersten beiden Positionen der Längentabelle 61 über die Datenwege N-3 und N-7 ermittelt. Diese beiden Werte werden auf den Exklusiv-ODER-Addierer 63 gegeben. Das Ergebnis der Addition wird über den Datenweg N-8 in das symmetrische Differenzregister 64 eingeschrieben. Das symmetrische Differenzregister 64 enthält in diesem Zeitpunkt den anfänglichen symmetrischen Differenzseparator, der in das Feld 51 der Datenfolge 50 einzufügen ist. Da die Position im Hauptspeicher der Datenfolge 50 im Positionsregister 60 gespeichert worden ist, wird der Code des anfänglichen symmetrischen Differenzseparators im symmetrischen Differenzregister 64 in das Anfangsfeld 51 der Datenfolge 50 über den Datenweg N-I8 eingeschrieben, wobei das Positionsregister 60 die Hinweisadresse N-1 liefert.
Gemäß Figur 8B werden die verbleibenden symmetrischen Differenzcodierungen für die Datenfolge 50 der Reihe nach erzeugt, um jedes Datenfeld der Datenfolge 50 von dem nächsten Datenfeld abzutrennen, mit Ausnahme des letzten Feldes der Datenfolge. Zunächst wird der Inhalt des Positionsregisters 60, welches die anfängliche Adresse der Datenfolge 50 enthält, über den Datenweg M2 auf den Binäraddierer 62 gegeben und zur gleichen Zeit wird die Länge des Feldes A in der Längentabelle 61 über den Datenweg M-9 dem Binäraddierer 62 zugeführt, so daß sich durch binäre Addition die Position des Feldes 53 innerhalb der Datenfolge 50 ergibt. Diese neue Position wird sodann im Positionsregister 60 über den Datenweg M-4 abgelegt und ersetzt die ursprüngliche Anfangsadresse. Zu diesem Zeitpunkt enthält daher das Positionsregister 60 die Adresse des Feldes 53, welchem der symmetrische Differenzcode Δ AB bei seiner Erzeugung eingeschrieben wird. Der symmetrische Differenzcode Δ AB wird durch Exklusiv-ODER-Addition der Länge A und Länge B innerhalb der Tabelle 61 erzeugt. Die in der Längentabelle 61 gespeicherte Länge A wird über die Datenwege M9 und M6 auf den exklusiven ODER-Addierer 63 gegeben, während die Länge des Feldes B über den Datenweg M7 ebenfalls dem Exklusiv-ODER-Addierer zugeführt wird. Das Ergebnis der Exklusiv-ODER-Addition wird über den Datenweg M-8 in dem symmetrischen Dif-
509883/0858
ferenzregister 64 abgelegt und anschließend über den Datenweg M-10 in das Feld 53 übertragen, auf welches durch Positionsregister 60 hingewiesen wird. Die Datenwege M-9 und M-7 werden sodann an die nächsten Felder der Längentabelle 61 angeschlossen, um die Längen B und C während des nächsten Zyklus der Operation auszuwählen. Dieses Verfahren wird immer wiederholt, um alle symmetrischen Differenzseparatoren für die Datenfolge 50 zu erzeugen, mit Ausnahme für den Code des letzten symmetrischen Differenzseparators innerhalb der Datenfolge 50.
Ein leicht unterschiedliches Verfahren zur Erzeugung des Codes für den letzten symmetrischen Differenzseparator wird benutzt, um sowohl eineRückwärts-als auch eine Vorwärtsabtastung zu ermöglichen. Gemäß Figur 8C wird der Code des letzten symmetrischen Differenz^separators innerhalb der Datenfolge 50 durch eine Exklusiv-ODER-Addition der Länge des Felde B in der Tabelle 61 mit einer ebenfalls in der Tabelle 61 abgelegten binären Null erzeugt. Die Länge des Feldes D in der Tabelle 61 wird über den Datenweg 0-6 und die binäre Null wird aus der Längentabelle 61 über den Datenweg 0-7 dem Exklusiv-ODER-Addierer 63 zugeführt. Nach entsprechender Addition wird das Ergebnis in das symmetrische Differenzregister 64 über den Datenweg 0-8 übertragen und schließlich über den Datenweg 0-18 an der letzten Stelle der Datenfolge 50 abgelegt. Es sei vermerkt, daß zu diesem Zeitpunktf nachdem zuvor der Reihe nach alle symmetrischen Differenzseparatoren erzeugt wurden, das Positionsregister 60 die Adresse D des Feldes 59 enthält, welches die am weitesten rechts liegende Position der Datenfolge 50 ist.
Gemäß Figur 9 ist die Hardware zur Feststellung und Korrektur von Fehlern hinsichtlich des Inhalts der symmetrischen Differenzseparator-Positionen einer Datenfolge dargestellt. Wie zuvor bereits erläutert, werden Positionsfehler hinsichtlich der symmetrischen Differenzseparatoren während einer Vorwärts-oder einer Rückwärtsabtastung der Datenfolge 50 festgestellt, während ein anderes Verfahren diese Fehler lokalisiert, nachdem sie fest-
509883/0858
gestellt worden sind. Die Hardware gemäß Figur 9 weist grundsätzlich zwei Hauptabschnitte auf, die Fshlerfestellungs-Hardware 900, welche benutzt wird, um Fehler innerhalb der symmetrischen Differenzseparatoren festzustellen und die Fehlerlokalisierungs-Hardware 901 , welche benutzt wird, um diese Fehler, nachdem sie festgestellt worden sind, zu lokalisieren. Wie zuvor bereits erläutert, muß die Paritäts-Prüfsumme aller symmetrischen Differenzseparatoren innerhalb eines gegebenen Blockes Null sein. Das muß so sein, da, wie zuvor gezeigt worden ist, symmetrische Differenzseparatoren durch Exklusiv-ODER-Addition benachbarter Felder erzeugt werden. Demgemäß müssen die symmetrischen Differenzseparatoren bei ihrer Exklusiv-ODER-Addition die Feldlängen erzeugen, die für ihre Bildung verantwortlich waren. Da jedes Feld bei der Erzeugung der symmetrischen Differenzsepatoren zweimal benutzt worden ist, tritt der Feldtyp oder Längencode in Paaren auf, wenn die symmetrischen Differenzseparatoren einerExklusiv-ODER-Addition unterworfen werden, wodurch eine paarweise Streichung innerhalb der gesamten Prüfsumme verursacht wird. Dementsprechend führt eine Exklusiv-ODER-Addition der symmetrischen Differenzseparatoren innerhalb eines vorgegebenen Blockes zu einem Ergebnis mit der Prüfsumme Null, wenn alle symmetrischen Differenzseparatoren in der richtigen Weise vorhanden sind. Liegt jedoch ein Fehler hinsichtlich eines bestimmten symmetrischen Differenzseparators vor, so>wird seine absolute Adresse bei der Vorwärtsabtastung gebildet, indem alle vorangegangenen Feldlängen zu der anfänglichen Adresse des Blockes addiert werden, bis dieser bestimmte symmetrische Differenzseparator erreicht wird. In gleicher Weise kann eine wahre Adresse des mit dem Fehler behafteten symmetrischen Differenzseparators durch eine Rückwärtsabtastung gebildet werden, indem von der absoluten Endadresse des Blockes jede Feldlänge zwischen dem Ende des Blockes und des fehlerhaften symmetrischen Differenz separators subtrahiert wird. Alle diese Prinzipien werden zunächst benutzt um Fehler festzustellen und anschließend diese Fehler zu lokalisieren.
§09883/0858
Es sei nun beispielsweise hinsichtlich Figur 9 angenommen, daß augenblicklich kein Fehler bezüglich des Feldseparators 55 vorliegt. In diesem Fall müssen alle Feldlängen der Datenfolge 50 korrekt gewesen sein. Wenn unter Benutzung dieser Feldlängen eine Positionstabelle 72 errichtet wird, so enthält diese die korrekten Adressen eines jeden symmetrischen Differenzseparators einschließlich des letzten Separators, welcher das Ende des Blockes anzeigt. Um festzustellen, daß die Adresse des Blockendes, welche unter Heranziehung all der verschiedenen Feldlängen erzeugt wurde, korrekt ist, ist es lediglich erforderlich, die bekannte Adresse des Blockendes mit der erzeugten Adresse zu vergleichen. Wenn diese einander gleich sind, so sind entweder alle Feldlängen und alle Feldpositionen korrekt oder es weisen mindestens zwei symmetrische Differenzen einen Fehler auf. Ein Grenzregister 73 wird benutzt, um die bekannte korrekte Adresse des Blockendes zu speichern und diese gespeicherte Adresse wird mit der erzeugten Adresse des Blockendes im Vergleicher 75 verglichen.
Es sei nun ein Zustand angenommen, wo ein Fehler hinsichtlich des symmetrischen Differenzseparators 55 vorliegt, der durch den Wert
/^ BC + E angezeigt wird. Bei einer Links-nach-Rechts-Abtastung sind alle vorangehenden errechneten Feldlängen korrekt.Andererseits sind jedoch alle Feldlängen, die hinter diesem Fehlerort errechnet werden, mit einem Fehler behaftet (siehe Längentabelle 71). Somit weist die Positionstabelle 72,die für eine Datenfolge 50 mit diesem Fehler errichtet wird, eine nicht-korrektv erzeugte Adresse für das Blockende auf, die somit mit der bekannten, im Grenzregister 73 gespeicherten Adresse nicht übereinstimmt. Dementsprechend wird für die Feststellung eines Fehlers in irgendeinem symmetrischen Feldseparator eine Längentabelle und eine Positionstabelle mit Eingangsstellen für jedes Feld durch die Fehlerfeststellungs-Hardware 900 erzeugt. Da jede Position eines jeden Feldes erzeugt und in der Positionstabelle 72 abgelegt wird, wird sie hierbei mit der bekannten rechten Endposition im Grenzregister 73 mittels des Vergleichers 75 verglichen. Es sei an dieser Stelle vermerkt, daß die in der Fehlerfestellungs-Hardware dargestellten Datenwege nur für einen bestimmten Augen-
609883/0858
blick die dargestellte Form einnehmen und in einem späteren Augenblick einen unterschiedlichen Verlauf aufweisen. Solang der Inhalt des Grenzregisters 73 größer als irgendeine Position irgendeines Feldes innerhalb des Blockes 50 ist, wird kein Fehler angezeigt. Da jedoch im vorliegenden Beispiel angenommen wurde, daß ein Fehler hinsichtlich des symmetrischen Differenzseparators 55 vorliegt, weisen alle Feldlängen, die auf diese Position folgen, einen Fehler auf und demgemäß wird irgendeine erzeugte Position eines Feldes in der Tabelle 72 größer als der Inhalt des Grenzregisters 73. Es wird somit zu jedem Zeitpunkt, zu dem der Inhalt des Grenzregisters kleiner als irgendeine erzeugte Position irgendeines Feldes innerhalb eines vorgegebenen Blockes ist, ein Fehlersignal erzeugt. Ebenso wird ein Fehlersignal wiederum erzeugt, wenn bei der Erzeugung der letzten Position des letzten Feldes innerhalb des Blockes und einem Vergleich mit dem Inhalt des Grenzregisters 7 3 gefunden wird, daß diese letzte errechnete Position kleiner als der Inhalt des Grenzregisters ist.
Im allgemeinen ist das Blockende bekannt, da die Anzahl der Felder bekannt ist oder vorbestimmte Blockgrößen benutzt werden oder die Baumstruktur auf die Länge des Blockes verweist.
Es sei nochmals auf die Fehlerfeststellungs-Hardware gemäß Figur Bezug genommen und es sei/ angenommen, daß der symmetrische Differenzseparator & BC im Feld 55 fehlerhaft ist und daß die Längentabelle 71 und die Positionstabelle 72 der Datenfolge 50 mittels einer Links-nach-Rechts-Abtastung gebildet werden. Gleichzeitig mit der Bildung dieser Tabellen wird ein Vergleich der erzeugten Position eines jeden Feldes mit der Position des rechten Endes der Datenfolge 50 durchgeführt. Es ist 2t!ivorbereits erläutert worden, wie irgendein symmetrischer Differenzseparator aus den Feldern auf seinen beiden Seiten erzeugt wird und wie eine Längentabelle errichtet wird. Im folgenden soll die Bildung der Positionstabelle bei der Erzeugung eines jeden symmetrischen Differenzseparators beschrieben werden, wobei ein Vergleich dieser
509883/0858
Position mit einer bekannten Position des Blockendes der Information durchgeführt wird.
Ein eine Datenfolge 50 enthaltender Informationsblock mit Separatoren von einem Byte zwischen jedem Feld wird an einem bekannten Speicherplatz im Hauptspeicher abgespeichert. Da die Position bekannt ist, wird die Adresse des Blockes in das Positionsregister 70 geladen und da die Länge des Blockes ebenfalls bekannt ist - in diesem Fall sei eine vorbestimmte bekannte Länge angeommen - ist die rechte Endposition des Informationsblockes der Datenfolge 50 ebenfalls bekannt und wird im Grenzregister 73 abgelegt. Das Feld A-52 beginnt am linken Ende des Blockes und es gibt somit kein Datenfeld innerhalb des Blockes 50, das dem Feld A vorausgeht. Die anfängliche Feldlänge ist daher mit Null gegeben. Dieser Wert wird in der ersten Stelle der Längentabelle 71 abgelegt. Um die absolute Position des linken
des
Endes Blockes 50 zu erhalten, wird die Länge Null in dem Binäraddierer 78 zu dem Inhalt des Positionsregisters 70 binär addiert, um auf diese Weise die absolute Position des Informationsblockes 50 im Hauptspeicher zu erzeugen. Diese Position wird in der Positionstabelle 72 abgelegt, wobei der entsprechende Speicherplatz als linkes Ende bezeichnet ist. Die Länge des Feldes A-52 entspricht Δ. AO und wird dem Separatorfeld 51 entnommen und am Speicherplatz für die Länge A innerhalb der Längentabelle 71 abgelegt. Die Länge A wird dem Binäraddierer 78 zugeführt und zu dem Inhalt des Positionsregisters 70 addiert, dessen Inhalt über den Datenweg P-2 dem Binäraddierer 78 ebenfalls zugeführt wird. Das Ergebnis dieser Addition wird über die DatenwegeP-4 und P4A dem Positionsregister 70 und über die Datenwege P-4, P-4B und P-4C am Speicherplatz A der Positionstabelle 72 abgelegt. Weiterhin wird das Ergebnis der Addition über die Datenwege P-4, P-4B und V-4C dem Vergleicher 75 zugeführt, der über den Datenweg V-4D zugleich an das Grenzregister 73 angeschlossen ist. Wenn der Inhalt des Grenzregisters 73 größer als die errechnete Länge A ist, so wird das Verfahren fortgesetzt. Im nächsten Schritt wird ein symmetrischer Differenzseparator ΔίΒ-53
609883/0858
erzeugt, indem das Feld A und das Feld B in dem Exklusiv-ODER-Addierer 77 einer zuvor anhand der Figuren 8A bis 8C erläuterten Addition unterzogen werden. Dieses Verfahren wird hinsichtlich jedes Feldseparators wiederholt. Da der FeEseparator 55 als fehlerhaft erzeugt angenommen wurde, sind alle symmetrischen Differenzseparatoren und Feldpositionen, welche nach diesem Separator erzeugt werden, ebenfalls fehlerhaft. Die Hardware bemerkt jedoch diese Fehlerbildung zu diesem Zeitpunkt noch nicht. Sie fährt mit der Erzeugung der Länge C fort, welche fehlerhaft ist und speichert diese in der Längentabelle 71, um sodann anschliessend die Position D zu erzeugen, die ebenfalls fehlerhaft ist und in der Positionstabelle 72 abgelegt wird. Nach jeder Erzeugung veranlaßt die Hardware eine Vergleichsprüfung im Vergleicher 75 zwischen der erzeugten Position und der bekannten Endposition. An irgendeinem Punkt, bevor das Ende des Blockes erreicht ist, ergibt ein Vergleich der erzeugten Position, mit der in dem Grenzregister 73 enthaltenen Endposition des Blockes, daß die Grenze des Grenzregisters 73 überschritten ist. Andererseits wird durch Gleichheit zwischen dem Inhalt des Grenzregisters 7 3 und dem Inhalt des Positionsregisters 70 angezeigt, daß das rechte Ende des Informationsblockes tatsächlich erreicht worden ist , aber die erzeugte absolute Position in der letzten Engangsstelle der Längentabelle 71 (Fehler 3) ungleich Null ist. Somit ist angezeigt, daß ein Fehler irgendwo innerhalb des Blockes 50 aufgetreten ist, wobei jedoch der Fehlerort unbekannt ist. Zur Bestimmung des exakten Ortes des Fehlers ist die Fehlerlokalisierungs-Hardware 901 gemäß Figur 9 erforderlich.
Das Grundprinzip zur Feststellung der absoluten Adresse, an der ein Fehler in einem symmetrischen Differenzseparator aufgetreten ist, basiert auf der Tatsache, daß alle erzeugten Positionen eines jeden dem fehlerhaften Block vorausgehenden Feldes unabhängig von der Richtung, in der die absolute Adressenposition erzeugt wird, korrekt sein müssen. Andererseits sind nach Fehlerauftritt alle Adresspeicherplätze unabhängig von der Abtastrichtung, in der die Adressen erzeugt werden,inkorrekt. Durch zweifache Erzeugung von absoluten Adressen für jedes Feld, wobei die Ergebnisse
5098 83/0858
einer Vorwärts- und einer Rückwärtsabtastung verwendet werden und durch anschließenden Vergleich der beiden absoluten Adressen für jeden Feldpunkt wird festgestellt, ob die Adresse unabhängig von der Richtung, in der sie erzeugt wird, korrekt ist. Beispielsweise wurde in Figur 9 die Annahme getroffen, daß der symmetrische Differenzseparator A BC + E-55 fehlerhaft ist. Somit sind bei einer Vorwärtsabtastung alle Adresspositionen, die bis zu dem Feld 55 erzeugt werden, korrekt, während alle nach dem Feld 55 erzeugten Adresspositionen inkorrekt sind. Andererseits verhält es sich bei einer Rückwärtsabtastung so, daß alle Adressen ausgehend vom Feld 59 bis zum Feld 55 korrekt sind, während alle Adressen nach dem Feld 55, d.h. die Felder 54,53,52 usw. inkorrekt sind. Somit ist es zur Affindung der exakten Stelle, an der der Fehler auftritt, lediglich erforderlich, zusätzlich zu einer Positionstabelle bei einer Vorwärtsabtastung eine andere Positionstabelle bei einer Rückwärtsabtastung zu erzeugen, wobei mit dem Ende des Blockes begonnen wird und wobei die absolute Position eines jeden Feldes innerhalb des Blockes 50 durch Subtraktion der Feldlängen von dem Ende des Blockes 50 erzeugt werden. Durch Vergleich der beiden erzeugten Feld-Positionstabellen, die im Rahmen einer Vorwärts- und Rückwärtsabtastung erzeugt wurden, ergibt sich somit eine Stelle innerhalb des Blockes, in diesem Fall das Feld 55, an welchem die absolute, bei der Vorwärtsabtastung erzeugte Position genau der absoluten, bei der Rückwärtsabtastung erzeugten Position entspricht. Dies verhält sich deswegen so, da eine korrekte Adresse für die absolute Position des Feldes 55 bei der Vorwärtsabtastung verfügbar ist und ebenfalls eine korrekte Adresse für das Feld 55 bei der Rückwärtsabtastung verfügbar ist und diese Adressen genau die gleichen sowohl in der Vorwärtsais auch in der Rückwärtsrichtung sind.
Das vorstehend erläuterte Verfahren wird durch die Fehler-Lokalisierungs-Hardware 901 gemäß Figur 9 wie folgt ausgeführt. Die Position des Endes der Datenfolge gemäß Block 50 wird im Positionsregister 80 abgelegt. Da &DO-59 das Ende des Blockes 50 bildet, besitzt irgendein Feld hinter dem Block in Bezug auf den
509883/0858
" 44 " 2527U1
Block die Länge Null. Diese Länge wird in der letzten Eingangsstelle der Längentabelle 81 der Fehlerlokalisierungs-Hardware abgelegt. Um die Länge des Feldes D-58 bei der Rückwärtsabtastung zu erzeugen, wird der symmetrische Differenzseparator ^ DO in dem Exklusiv-ODER-Addierer 87 zu dem Feld D-58 hinzuaddiert. Der symmetrische Differenzseparator &DO-59 wird in dem symmetrischen Differenzregister 86 abgelegt und sodann dem Exklusiv-ODER-Addierer 87 über den Datenweg V-3 zugeführt. Die Länge des auf der rechten Seite des symmetrischen Differenzseparators Λ DO-59 liegenden Feldes ist gleich Null und wurde im vorangehenden Schritt in der Längentabelle 81 abgelegt. Diese Länge wird dem Exklusiv-ODER-Addierer 87 über den Datenweg V-4A und V-4 zugeführt, so daß die addierten Werte die Länge des Feldes D-58 ergeben, welche sodann über den Datenweg V-5B und V-4B in der Längentabelle 81 abgelegt wird. Als nächstes wird der symmetrische Feldseparator Δ. CD-57 in dem symmetrischen Differenzregister 86 abgelegt und der Inhalt dieses Registers wird sodann dem Exklusiv-ODER-Addier 87 über den Datenweg V-3 zugeführt. Im selben Zeitpunkt wird die gerade erzeugte Länge D, die in der Längentabelle 81 abgelegt ist, dem Exklusiv-ODER-Addierer 87 über den Datenweg V-4 zugeführt und die beiden Größen werden zusammen addiert, um die Länge des Feldes C-56 zu ergeben, welche sodann in die Längentabelle 81 über die Datenwege V-5B und V-5A eingeschrieben wird. Dieses Verfahren wird solange wiederholt, bis alle Längen der Datenfolge 50 des Informationsblockes erzeugt sind. Wenn diese Längen durch eine Rückwärtsabtastung erzeugt werden^ so sind die Längen der Felder D und C korrekt bis einschließlich Feld 55. Die Feldlänge B-54 und Feldlänge A-52 sind jedoch nicht korrekt falls eine Rückwärtsabtastung erfolgt. Andererseits wefet die Tabelle 71, deren Längen bei einer Vorwärtsabtastung erzeugt wurden, die Feldlänge A-52 und die Feldlänge B-54 in korrekter Weise auf und es sind die Felder C-56 und D-58, welche auf das inkorrekte Feld 55 folgen, mit Fehlern behaftet. Es ist zuvor erwähnt worden, daß zur Lokalisierung des Fehlers ein Vergleich der bei der Vorwärtsabtastung erzeugten Positionen mit den bei der Rückwärtsabtastung erzeugten Positionen solange
509883/0858
durchzuführen ist, bis sich bei diesem Vergleich eine Gleichheit ergibt. Dementsprechend wird, da jede Länge eines jeden Feldes bei der Rückwärtsabtastung erzeugt wird, die absolute Position dieses Feldes in dem Positionsregister 80 wie folgt ebenfalls erzeugt. Ist beispielsweise die Länge D des Feldes D-58 erzeugt worden, so wird die absolute Position des Feldes D bei der Rückwärts abtastung erzeugt, indem die Länge des Feldes D im binären Addierer/Subtrahierer 88 von der absoluten Endposition 59 des Blockes 50 subtrahiert wird. Zu diesem Zweck wird die Adresse des Blockendes 59 über die Datenwege V-1A und V-1B dem binären Addierer/Subtrahierer 88 zugeführt. Zur gleichen Zeit wird die Länge des Feldes D aus der Längentabelle 81 über die Datenwege V-4B und V-4 dem Addierer/Subtrahierer 88 zugeführt. Das Ergebnis dieser Subtraktion wird sodann über den Datenweg V-1C dem Positionsregister 80 eingeschrieben. Demgemäß enthält nunmehr das Positionsregister 80 die absolute Position des Feldes 57, welches bei einer Rückwärtsabtastung erzeugt wurde. Die Position des einen Fehler ET aufweisenden Feldes D, welches in der Positionstabelle 72 abgelegt ist, wurde durch eine Vorwärtsabtastung erzeugt. Diese Position wird sodann in dem Vergleicher 84 mit der Position des Feldes D, wie es bei der Rückwärtsabtastung erzeugt wurde, verglichen. Die Position des den Fehler E1 aufweisenden Feldes D wird dem Vergleicher 84 über den Datenweg D1B zugeführt und der Inhalt des Positionsregisters 80 wird dem Vergleicher 84 über die Datenwege V-1A und V1A1 zugeführt. Sodann werden beide Werte miteinander verglichen. In diesem Fall, wenn die bei der Vorwärtsabtastung ermittelte Position D die falsche Position ist, während die bei der Rückwärtsabtastung ermittelte Position D die richtige Position ist, ergibt sich keine Übereinstimmung. Wenn dieses Verfahren wiederholt wird, so wird durch es unter Umständen die Position des Feldes 55 ausgewählt, welches den tatsächlichen Fehler aus der Tabelle 72 enthält, wie er bei der Vorwärtsabtastung korrekt erzeugt wurde (Position B in Positionstabelle 72). Die Position des Feldes 55 wird ebenfalls während der Rückwärtsabtastung korrekt errechnet und ist zu diesem Zeitpunkt im Positionsregister 80 abgespeichert. Ein Vergleich des Inhalts des
Positionsregister 88 mit der Position C der Positionstabelle im Vergleicher 84 ergibt somit Übereinstimmung, .wodurch der Fehler lokalisiert ist.
Es sei hier vermerkt, daß die Längentabelle 71 für die Fehlerlokalisierung nicht erforderlich ist, da alle ihre maßgebliche Information in die Positionstabelle 72 übernommen ist. Die Längentabelle 81 ist daher nicht erforderlich, da tatsächlich die Längentabelle 71 wieder bei der Rückwärtsabtastung während des Fehlerlokalisierungsverfahrens verwendet werden kann.
509-883/0658
Begriffsliste
(Aus "Fundamental Algorithms" - Band 1 - "The Art of Computer Programming", Donald E. Knuth, Addison-Wesley Publishing Company)
Grundelement (Atomic element)
Baum (Tree) ein Element aus einer Vielzahl
gesuchter Objekte
ein endlicher Satz T von einem oder mehreren Knoten dergestalt, daß
a) ein bestimmter Knoten als Wurzel des Baumes (T) bezeichenbar ist und
die verbleibenden Knoten (ausgenommen die Wurzel) in m^0
b)
zergliederte Sätze
T1
T.
Teilbäume (Subtrees) unterteilt sind und jeder dieser Sätze seinerseits ein Baum ist.
- die Bäume T.. . . .. , T werden als Teilbäume der Wurzel bezeichnet
Wurzel (Root) ein speziell bezeichneter Knoten
eines Baumes
Knoten (Node)
Grad eines Knoten (Degree of Node) ein oder mehrere aufeinanderfolgende Worte eines Rechenspeichers, der in benannte, als Felder bezeichnete Teile unterteilt ist (Synonyme
für Knoten sind: Datensätze, Systemelemente usw.)
die Anzahl der Teilbäume eines
Knoten
Endknoten oder Blatt (Terminal Node or Leaf)
Astknoten (Branch Node) ein Knoten mit dem Grad Null
ein weiterführender Knoten
509883/0858
Pegel eines Knoten (Level of a Node)
Wald (Forest)
Linearliste (linear List)
Stapel (Stack)
Warteschlange Queue)
Doppelenden-Warteschlange JjDuble-ended queue) der Pegel eines Knoten in Bezug auf T, wobei die Wurzel den Pegel 1 aufweist und andere Knoten einen Pegel besitzen, der um 1 höher liegt gegenüber dem Teilbaum der Wurzel T., welche die Knoten enthält. D
ein Satz von null oder mehreren nicht-ζusammenhängenden Bäumen. Ebenso die Knoten eines Baumes unter Ausnahme der Wurzel
ein Satz von m > O Knoten, deren strukturelle Eigenschaften nur die auf eine Dimension bezogene Position von Knoten einschließen.
eine Linearliste,hinsichtlich derer alle Einfügungen und Entnahmen am einen Ende der Liste vorgenommen werden
eine Linearliste, bei der alle Einfügungen am einen Ende und alle Entnahmen (Zugriffe) am anderen Ende der Liste vorgenommen werden
eine Linearliste, bei der alle Einfügungen und Entnahmen an den Enden der Liste vorgenommen werden.
509883/085Ö

Claims (17)

  1. 511449 -49- 2527U1
    Patentansprüche
    Verfahren zur Kennzeichnung der Länge oder des Types von Datenfeldern innerhalb einer Reihe von aufeinanderfolgenden Datenfeldern, wobei die Kennzeichnungen zwischen den Datenfeldern angeordnet sind, dadurch gekennzeichnet, daß die Kennzeichnungen als zwei benachbarte Datenfelder gleichzeitig kennzeichnende symmetrische Differenzseparatoren ausgebildet sind, wobei der jeweilige symmetrische Differenzseparator die Summe oder Differenz zweier benachbarter Feldwerte repr äsentiert.
  2. 2. Verfahren nach Anspruch 1,dadurch gekennzeichnet, daß jeder symmetrische Differenzseparator durch eine übertragsfreie Exklusiv-ODER-Addition der Werte benachbarter Datenfelder gebildet wird.
  3. 3. Vorrichtung zum Kennzeichnen der Länge benachbarter Datenfelder bei der Durchführung des Verfahrens nach Anspruch !,gekennzeichnet durch
    a. eine erste Einrichtung (61) zur Speicherung der Länge wenigstens zweier benachbarter Datenfelder, die durch einen der genannten symmetrischen Differenzseparatoren zu trennen sind und
    b. eine zweite mit der ersten Einrichtung (61) verbundene Einrichtung (63) zur Erzeugung des jeweiligen symmetrischen Differenzseparators.
    509833/0858
  4. 4. Vorrichtung nach Anspruch 3,dadurch gekennzeichnet, daß die erste Einrichtung eine Längentabelle (61) ist.
  5. 5. Vorrichtung nach Anspruch 3,dadurch gekennzeichnet, daß die zweite Einrichtung ein übertragsfreier Exklusiv-ODER-Addierer (63) ist, der die Länge zweier benachbarter Felder addiert.
  6. 6. Vorrichtung nach Anspruch 5, gekennzeichnet durch eine mit der ersten und zweiten Einrichtung verbundene dritte Einrichtung (62) zur Erzeugung einer absoluten Adresse für jedes der aufeinanderfolgenden Felder.
  7. 7. Vorrichtung nach Anspruch 6, gekennzeichnet durch eine an die dritte Einrichtung angeschlossene vierte Einrichtung (60) zum Speichern der laufenden absoluten Adresse des jeweils zuletzt erzeugten symmetrischen Differenzseparators.
  8. 8. Vorrichtung nach Anspruch 7, dadurch gekennzeichnet, daß die dritte Einrichtung aus einem Binäraddierer (62) besteht, der die Länge eines der benachbarten Felder zu der zuletzt erzeugten absoluten Adresse algebraisch addiert.
  9. 9. Vorrichtung nach Anspruch 7,dadurch gekennzeichnet, daß die vierte Einrichtung ein Positionsregister (60) ist.
  10. 10. \brrichtung zum bidirektionalen Abtasten der nach dem Verfahren nach Anspruch 1 gewonnenen symmetrischen Differenzseparatoren zwecks Bestimmung der Adresse eines nächstfolgenden Feldes innerhalb einer Folge von Feldern mit variabler Länge, gekennzeichnet durch
    509883/0858
    a. eine erste Einrichtung (9) zum Speichern der Länge wenigstens zweier benachbarter Datenfelder, die durch einen symmetrischen Differenzseparator getrennt sind,
    b. eine zweite mit der ersten Einrichtung verbundene Einrichtung (6) zur Erzeugung des symmetrischen Differenzseparators,
    c. eine mit der ersten und zweiten Einrichtung verbundene dritte Einrichtung zur Erzeugung der Länge des jeweils anderen der beiden benachbarten Felder in Abhängigkeit von dem jeweils vorliegenden Differenzseparator und des einen der beiden benachbarten Felder und
    d. eine mit der dritten Einrichtung verbundene vierte Einrichtung (7) zum algebraischen Addieren der Länge eines der beiden benachbarten Felder zu der Adresse des symmetrischen Differenzseparators.
  11. 11. Vorrichtung nach Anspruch TO, dadurch gekennzeichnet, daß die zweite Einrichtung aus einem übertragsfreien Exklusiv-ODER-Addierer/Subtrahierer besteht.
  12. 12. Vorrichtung nach Anspruch 10, dadurch gekennzeichnet, daß die dritte Einrichtung aus einem übertragsfreien Exklusiv-ODER-Addierer/Subtrahierer besteht.
  13. 13. Vorrichtung nach Anspruch 10, dadurch gekennzeichnet, daß die vierte Einrichtung aus einem Binäraddierer (7) für eine vorzeichenrichtige algebraische Addition besteht.
  14. 14. Vorrichtung nach Anspruch 13, gekennzeichnet durch eine fünfte mit der vierten Einrichtung verbundene Einrichtung (5) zur Speicherung der Adressen der symmetrischen Differenzseparatoren.
    5098:83/0.850
  15. 15. Vorrichtung zur Fehlererkennung beim Abtasten der nach dem Verfahren nach Anspruch 1 gewonnenen Differenzseparatoren, gekennzeichnet durch
    a. eine erste Einrichtung (73) zur Erzeugung der absoluten Adresse des Endes eines die Datenfelder aufweisenden Informationsblockes
    b. eine zweite Einrichtung (78) zur Erzeugung der absoluten Position jeder der aufeinanderfolgenden Felder und
    c. eine dritte mit der ersten und zweiten Einrichtung verbundene Einrichtung (75) zum Vergleichen der absoluten Adresse des Blockendes mit jeder der absoluten Positionen der aufeinanderfolgenden Felder.
  16. 16. Vorrichtung nach Anspruch 15, dadurch g.ekennzeichnet, daß eine mit der dritten Einrichtung verbundene vierte Einrichtung angeordnet ist, die anzeigt, ob die absolute Adresse des Blockendes größer, kleiner oder gleich der absoluten Adresse der absoluten Position des gerade verglichenen Datenfeldes ist.
  17. 17. Vorrichtung zur Fehlerlokalisierung beim Abtasten der nach dem Verfahren nach Anspruch 1 gewonnenen Differenzseparatoren, gekennzeichnet durch
    a. eine erste Einrichtung zur Erzeugung der absoluten Adresse eines jeden symmetrischen Differenzseparators innerhalb eines Blockes von Datenfeldern mittels einer Vorwärtsabtastung
    b. eine zweite Einrichtung zur Erzeugung der absoluten Adresse eines jeden symmetrischen Differenzseparators innerhalb eines Blockes von Datenfeldern mittels einer Rückwärtsabtastung und
    c. eine dritte mit der ersten und zweiten Einrichtung verbundene Einrichtung zum Vergleichen der absoluten Adresse eines jeden bei einer Vorwärtsabtastung erzeugten symmetrischen Differenzseparators mit der absoluten Adresse eines jeden bei einer Rückwärtsabtastung erzeugten symmetrischen Differenzseparators.
    509883/0858
DE19752527441 1974-06-24 1975-06-20 Verfahren und vorrichtung zur kennzeichnung von datenfeldern Pending DE2527441A1 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US482125A US3918027A (en) 1974-06-24 1974-06-24 Scanning and error checking apparatus for address development utilizing symmetric difference encoded data structure

Publications (1)

Publication Number Publication Date
DE2527441A1 true DE2527441A1 (de) 1976-01-15

Family

ID=23914791

Family Applications (1)

Application Number Title Priority Date Filing Date
DE19752527441 Pending DE2527441A1 (de) 1974-06-24 1975-06-20 Verfahren und vorrichtung zur kennzeichnung von datenfeldern

Country Status (5)

Country Link
US (1) US3918027A (de)
JP (1) JPS5119454A (de)
CA (1) CA1031464A (de)
DE (1) DE2527441A1 (de)
FR (1) FR2279157A1 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS543848A (en) * 1977-06-13 1979-01-12 Toray Ind Inc Water-soluble polyester adhesive
US4200893A (en) * 1978-05-17 1980-04-29 Dictaphone Corporation Instruction indicating apparatus for a record and/or playback device
US4608633A (en) * 1983-04-01 1986-08-26 Honeywell Information Systems Inc. Method for decreasing execution time of numeric instructions
US5247505A (en) * 1985-04-17 1993-09-21 Canon Kabushiki Kaisha Information recording method for reciprocally recording and verifying information
CA1268252A (en) * 1985-04-17 1990-04-24 Fumiaki Kawaguchi Information recording method
US4910725A (en) * 1986-04-23 1990-03-20 Drexler Technology Corporation Optical recording method for data cards
DE3732983A1 (de) * 1987-09-30 1989-04-13 Thomson Brandt Gmbh Cd-spieler mit einem speicher
US5819297A (en) * 1995-09-27 1998-10-06 Emc Corporation Method and apparatus for creating reliably duplicatable tape volumes without copying any padding
US5860088A (en) * 1996-12-06 1999-01-12 International Business Machines Corporation Method for extraction of a variable length record from fixed length sectors on a disk drive
EP0945784A1 (de) 1998-03-27 1999-09-29 Motorola, Inc. Verfahren und Vorrichtung zur Speicherung von Datenstrukturen unter Verwendung von Addressenzeigern
DE19840835C2 (de) 1998-09-07 2003-01-09 Fraunhofer Ges Forschung Vorrichtung und Verfahren zum Entropiecodieren von Informationswörtern und Vorrichtung und Verfahren zum Decodieren von Entropie-codierten Informationswörtern

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3366928A (en) * 1964-06-29 1968-01-30 Ibm Accessing system for large serial memories
US3439344A (en) * 1966-08-09 1969-04-15 Sperry Rand Corp Continuous data recording apparatus

Also Published As

Publication number Publication date
CA1031464A (en) 1978-05-16
JPS5119454A (de) 1976-02-16
FR2279157A1 (fr) 1976-02-13
US3918027A (en) 1975-11-04

Similar Documents

Publication Publication Date Title
DE2527472A1 (de) Vorrichtung zum abtasten von datenfeldern in zwei richtungen
DE2905328A1 (de) Verfahren und vorrichtung zur assoziativen informationswiedergewinnung
DE69708654T2 (de) Chipkarte mit gemäss einer baumartigen struktur gespeicherten dateien
DE2227148C3 (de) Schaltungsanordnung zur Umsetzung digitaler Daten
DE2557553C2 (de) Maschinelles Verfahren zur Verdichtung und -Wiederausdehnung eines beliebigen Schwarzweiß-Bildes und Einrichtung zur Durchführung des Verfahrens
DE3991231C2 (de) Vektorprozessor und Verfahren zum Suchen einer Stichwortzeichenfolge in einer Textzeichenfolge
DE2459006C2 (de) Einrichtung zum Bilden einer absoluten Adresse in einer Datenverarbeitunsanlage
DE3788563T2 (de) Verfahren und Einrichtung um eine Datenbankadresse zu bestimmen.
DE2809623A1 (de) Verfahren und vorrichtung zur assoziativen informationswiedergewinnung
Brooker et al. The compiler compiler
DE2160412A1 (de) Binärdatenumsetzer
DE69026885T2 (de) Dynamische Selektion von Datenformaten für rekursiv geschachtelte logische Elemente
DE2527441A1 (de) Verfahren und vorrichtung zur kennzeichnung von datenfeldern
DE2521436B2 (de) Informationswiedergewinnungsanordnung
DE1474040C3 (de) Einrichtung zur Bildung von Speicheradressen
DE2262070A1 (de) Mit schieberegistern arbeitendes fehlerkorrektursystem
DE69814465T2 (de) Verfahren und gerät zur datenspeicherung auf magnetischen medien, die fehlerkorrekturkodes enthalten
DE102008016179A1 (de) Automatische Generierung von Kompaktcodetabellen
EP1719345B1 (de) Verfahren und vorrichtung zur codierung und decodierung von strukturierten dokumenten
DE3511684A1 (de) Verfahren zum korrigieren von daten in einem videoformatsignal
DE2647574C2 (de) Vorrichtung zum Verarbeiten von durch ein Anfangs- und Endzeichen begrenzten Datenfeldsegementen variabler Länge bei einem Umlaufspeicher
DE69820230T2 (de) N-weg verarbeitung von bitketten in einer datenflussarchitektur
DE3736455A1 (de) Hierarchisches ablagesystem
DE1964570A1 (de) Verfahren zum Wiederauffinden gespeicherter Informationen
DE2458331A1 (de) Datenverarbeitungssystem zur adressierung eines in einem sekundaerspeicher abgelegten datensatzes

Legal Events

Date Code Title Description
OHJ Non-payment of the annual fee