GEDCOM/Syntax GEDCOM-Zeile
Name und Bedeutung
Strukturelement GEDCOM-Zeile
Eine GEDCOM-Datei setzt sich aus einzelnen Zeilen mit genau definiertem Aufbau (Syntax) zusammen.
Formale Beschreibung zulässiger Werte
GEDCOM-Zeilen sind Bestandteile der Datensatz-Struktur innerhalb einer GEDCOM-Datei. Die Struktur der Datensätze wird in einem gesonderten Artikel behandelt werden.
Die folgende Beschreibung basiert auf der Übersetzung des GEDCOM Standards Draft 5.5.1 von Jörn Daub.
Aussagen des Standards
Eine GEDCOM-Zeile hat folgende Syntax:
gedcom_zeile := ebenennummer + begrenzer + [optionale_querverweis_id] + kennzeichen + [optionaler_wert] + zeilenende
Beispiel:
- 1 NAME Will /Rogers/
Die einzelnen Bestandteile sind wie folgt im Standard erläutert und definiert:
Bemerkung zur Darstellung
Die Bestandteile des obigen Musters werden hier ... definiert. Einige der Komponenten werden durch primitive Muster definiert. Die Leerzeichen dienen hierbei nur dazu, sie voneinander abzusetzen, und sind nicht Bestandteil des resultierenden Musters. Zeichenkonstanten sind in hexadezimaler Form angegeben, (0x20) ist dabei der hexadezimale Wert des Leerzeichens. Zeichenkonstanten, die durch einen Bindestrich (-) getrennt sind, repräsentieren ein beliebiges Zeichen innerhalb des Bereiches zwischen der ersten angegebenen Zeichenkonstante und der zweiten.
ebenennummer
Ebenennummern müssen zwischen 0 und 99 liegen, und dürfen keine führenden Nullen beinhalten. Ebenennummer eins ist daher 1, und nicht 01. Jede neue Ebenennummer darf nicht höher sein als die der vorhergehenden Zeile plus 1
Bemerkung zu dieser Formulierung im Standard:
- Ebenennummer null wird also als 0 und nicht als 00 ausgegeben,
- Ebenennummer eins wird also als 1 und nicht als 01 ausgegeben,
usw.
begrenzer
begrenzer := [(0x20) ]
wobei: (0x20)=Leerzeichen
begrenzer := Der begrenzer ist ein einzelnes Leerzeichen, und beendet sowohl die ebene als auch kennzeichen, die beide eine variable Länge haben. Hierbei ist zu beachten, dass auch der zeilen_wert Leerzeichen enthalten kann.
optionale_querverweis_id
optionale_querverweis_id := querverweis_id + begrenzer
Zur querverweis_id siehe Artikel GEDCOM/XREF_ID.
kennzeichen
kennzeichen := [alphanum | kennzeichen + alphanum ]
kennzeichen := Ein kennzeichen ist eine Zeichenkette variabler Länge aus alphanum-Zeichen. Alle benutzerdefinierten Kennzeichen, die nicht im GEDCOM-Standard definiert sind, müssen mit einem Unterstrich (0x95) beginnen.
Das kennzeichen bestimmt die Bedeutung des zeilen_wertes im Kontext der ihr übergeordneten Zeilen und trägt gleichzeitig zur Bedeutung der ihr untergeordneten Zeilen bei. Die einzelnen Kennzeichen werden im Anhang A definiert. Das Vorhandensein eines Kennzeichens zusammen mit einem zeilen_wert repräsentiert eine Annahme, die der Verfasser dem Empfänger mitteilen möchte. Ein Kennzeichen ohne zeilen_wert beinhaltet keine solche Annahme. Wenn ein Kennzeichen nicht angegeben wird, bedeutet dies, dass keine Annahme gemacht wird. Informationen negativer Natur (wie z. B. dass man mit Sicherheit weiß, dass ein bestimmtes Ereignis nicht stattgefunden hat) werden durch ein semantisch getrenntes Kennzeichen samt zugehörigem Wert explizit abgebildet.
Obwohl formal definierte Kennzeichen nur drei oder vier Zeichen lang sind, sollten Systeme darauf vorbereitet sein, längere benutzerdefinierte Kennzeichen zu verarbeiten. Kennzeichen sind eindeutig innerhalb der ersten 15 Zeichen.
Gültige Kombinationen von spezifischen kennzeichen, zeilen_werten, querverweis_ids und zeigern werden durch die GEDCOM-Form eingeschränkt, um bestimmte Informationen abzubilden (siehe Kapitel 2 des Standards).
Hinweis zur Aufteilung des Themas in GenWiki: Die Kennzeichen (englisch: tag) werden jeweils einzeln behandelt und haben eigene Artikel in GenWiki.
optionaler_wert
optionaler_wert := begrenzer + zeilen_wert
zeilen_wert
zeilen_wert := Der zeilen_wert entstammt einer Menge von möglichen Werten, die im Kontext des Kennzeichens erlaubt sind. Die Kombination aus kennzeichen, zeilen_wert und dem hierarchischen Zusammenhang der zugehörigen gedcom_zeilen ermöglicht das Verständnis der beinhalteten Werte. Die Menge der möglichen Werte wird durch die GEDCOM-Form (Siehe Kapitel 2 des Standards) bestimmt. Werte, bei denen die Quellinformationen unleserliche Teile enthalten, sollten dadurch gekennzeichnet werden, dass der unleserliche Teil durch Auslassungszeichen ersetzt wird (…) Werte sind im Allgemeinen nicht binär zu kodieren, oder durch Abkürzungen zu ersetzen, um Platz zu sparen. Sie sind allgemein so zu halten, dass ein typischer Anwender ihre Bedeutung ohne Dekodierung verstehen kann. Dies soll den Dekodieraufwand der empfangenden Software klein halten. Ein GEDCOM-optimierter Datenkompressionsstandard wird in Zukunft definiert werden, um Platz zu sparen. In der Zwischenzeit können Anwender sich darauf einigen, eine bestimmte Kompression zu nutzen, die Verfasser und Empfänger beide verstehen. Der zeilen_wert im Kontext seiner Hierarchie von gedcom_zeilen repräsentiert ein Informationsstück, und korrespondiert mit einem Feld in traditioneller Datenbank- oder Dateiterminologie.
zeilenende
zeilenende := Ein zeilenende begrenzt den zeilen_wert, der eine variable Länge hat, und signalisiert das Ende einer gedcom_zeile. Die möglichen Zeichen für ein Zeilenende sind:
[ carriage_return | line_feed | carriage_return + line_feed | line_feed + carriage_return ]
Mindestumfang einer GEDCOM-Zeile
Alle GEDCOM-Zeilen haben entweder einen zeilen_wert oder einen zeiger, es sei denn, die Zeile hat untergeordnete GEDCOM-Zeilen. In anderen Worten: Das Vorhandensein einer Ebenennummer und eines Kennzeichens allein darf nicht dazu benutzt werden, um daraus Daten abzuleiten (z. B.: 1 DEAT Y sollte benutzt werden, um anzuzeigen, dass der Tod einer Person bekannt ist, aber weder dessen Datum noch Ort – nicht: 1 DEAT). Diese Grammatik erlaubt es nicht, sowohl einen zeilen_wert als auch einen zeiger in der gleichen Zeile zu speichern.
Unzulässige Einrückungen / Zeilen in einer GEDCOM-Datei
Einige Systeme geben eingerückte GEDCOM-Zeilen aus, um für eine bessere Lesbarkeit zu sorgen, und geben Leerzeichen oder Tabulatorzeichen vor der Ebenennummer aus, um die Hierarchie sichtbar zu machen. Es wurde auch vorgeschlagen, zusätzliche Leerzeilen zwischen den Datensätzen auszugeben, um diese sichtbar zu trennen. GEDCOM-Dateien, die so erzeugt wurden, dürfen nicht dazu genutzt werden, diese an andere Systeme zu übermitteln.
Beispiele aus dem Standard
Die folgenden Zeilen sind voneinander unabhängige Beispiele gültiger GEDCOM-Zeilen.
- 0 @1234@ INDI
- …
- 1 AGE 13y
- …
- 1 CHIL @1234@
- …
- 1 NOTE Dies ist ein Notizfeld, das
- 2 CONT auf der nächsten Zeile fortgesetzt wird
Die erste Zeile hat die ebene 0, die querverweis_id @1234@, ein INDI-kennzeichen und keinen zeilen_wert.
Die zweite Zeile hat die ebene 1, keine querverweis_id, ein AGE-kennzeichen und einen zeilen_wert von 13y.
Die dritte Zeile hat die ebene 1, keine querverweis_id, ein CHIL-kennzeichen, und einen zeilen_wert, bestehend aus einem zeiger auf die querverweis_id @1234@.
Entscheidungsvorschläge zur Syntax von GEDCOM-Zeilen
Aufgrund der Diskussion wurden folgende Entscheidungsvorschläge abgeleitet, die hiermit vor einer Abstimmung noch einmal zur Diskussion gestellt werden:
E1 Regeln zur Syntax
Folgende Vorgaben des Standards müssen beim Export eingehalten werden:
- Vor der Ebenennummer sind keine Zeichen zulässig (Ausnahme: BOM in der allerersten Zeile der Datei)
- Die Ebenennummer muss eine Zahl im Bereich (0-99) sein, sie darf keine führende Null vor einer zweiten Ziffer enthalten.
- Der Begrenzer zwischen den anderen Bestandteilen der GEDCOM-Zeile besteht aus genau einem Leerzeichen (0x20)
- Leere Zeilen (also nur aus einem Zeilenende bestehende Zeilen) sind nicht zulässig
- Jede GEDCOM-Zeile muss entweder einen Zeilen_Wert oder einen Querverweis_Zeiger enthalten, es sei denn, ihr sind weitere GEDCOM-Zeilen untergeordnet
E2 Zusammensetzung der GEDCOM-Zeile
Die GEDCOM-Zeile muss beim Export den im Standard vorgeschriebenen Aufbau aufweisen:
- gedcom_zeile := ebenennummer + begrenzer + [optionale_querverweis_id] + kennzeichen + [optionaler_wert] + zeilenende
mit
- optionale_querverweis_id := querverweis_id + begrenzer
- optionaler_wert := begrenzer + zeilen_wert
Für die Bestandteile gelten die im Standard festgelegten Bestimmungen.
E3 Zeilenende
Das Zeilen_Ende muss gemäss einer der 4 Alternativen exportiert werden:
- CR/LF | LF | CR | LF/CR
Im Standardexport wird die Verwendung von CR/LF empfohlen, bei Programmen, die nicht unter Windows laufen, die Verwendung von LF.
I1 Umfang des Importes
Nach den Regeln E1 bis E3 gebildete GEDCOM-Zeilen müssen grundsätzlich unterstützt werden. Bezüglich der Kennzeichen, Querverweiszeiger und Zeilenwerte gelten die gesonderten Vereinbarungen.
I2 Vorgehensweise bei Abweichungen vom Standard in der Importdatei
- Alle Zeichen vor der Ebenennummer, insbesondere Tabulatoren und Leerzeichen, werden ignoriert (mit Ausnahme des BOM in der ersten Zeile der Datei)
- Sind mehrere Leerzeichen an Stelle eines Begrenzers vorhanden, werden diese wie ein Begrenzer behandelt (Sonderreglung zu CONC siehe Vereinbarungen zu CONC)
- Leere Zeilen (nur aus dem Zeilenende bestehend) werden ignoriert
- Zeilen, die weder einen Zeilenwert, noch einen Querverweiszeiger haben und auch keine untergeordneten Zeilen aufweisen, werden ignoriert.
Hinweis:
Die Vereinbarungen über die zulässige Länge der GEDCOM-Zeile sowie die Feldgrößen innerhalb der Zeile werden unter GEDCOM/Feldlängen dokumentiert.
Behandlung/Darstellung schwieriger Situationen
Doppelbedeutung des Leerzeichens: Begrenzer und Dateninhalt
Das Leerzeichen in einer GEDCOM-Zeile hat doppelte Bedeutung: Einerseits ist es als begrenzer ein Strukturelement, um die anderen Bestandteile der GEDCOM-Zeile voneinander zu trennen, andererseits kann es zum zeilen_wert und damit zum zu transferierenden Dateninhalt der GEDCOM-Datei gehören.
Für einen eindeutigen, fehlerfreien Datentransfer muss die Vorgabe eingehalten werden, dass der begrenzer aus (genau!) einem Leerzeichen besteht. Würde diese Vorgabe nicht eingehalten, könnten die Dateninhalte zu Beginn und am Ende des zeilen_wertes nicht mehr eindeutig interpretiert werden, wenn der zeilen_wert aus Text besteht. Dann wäre nämlich unklar, ob bei mehreren Leerzeichen an dieser Stelle ein mehrfacher begrenzer exportiert wurde oder auch Leerzeichen zum zeilen_wert gehören.
Einige wenige Programme halten diese Vorgabe des Standards nicht ein und verursachen somit Importprobleme für die mit ihnen erzeugten Dateien. Zur tieferen Diskussion dieses Aspektes wird auf den Artikel GEDCOM/CONC-Tag verwiesen.
Zeilenende
Die Diskussion zum Zeilenende war in der Liste vorübergehend zurückgestellt, ist jetzt aber wieder aufgerufen. Es wurde schon darauf hingewiesen, dass je nach Betriebssystem die nach GEDCOM-Standard zulässigen Zeilenenden erhebliche Importprobleme bereiten können.
Zugelassen laut Standard sind alternativ: LF, CR, CR/LF, LF/CR (letztere Version ist wahrscheinlich nicht in Verwendung).
Nicht zulässige Zeilenenden wie UNICODE-Zeichen FF, NEL, LS, PS wurden bislang in der GEDCOM-Praxis auch nicht beobachtet.
Einige Windows-Textverarbeitungsprogramme kommen mit den Alternativen zu CR/LF nicht zurecht.
Die bisherige Diskussion hat im wesentlichen zu folgenden Vorschlägen geführt:
- a) Beim Export nur die Kombination CR/LF berücksichtigen
- b) Beim Export als Standardversion CR/LF, aber auch andere - insbesondere LF - als Option anbieten
- c) Beim Export unter den Systemen Unix und MacOS als Standardversion LF exportieren, unter Windows CR/LF
- d) Möglichst ohne vom Anwender einzustellende Option exportieren, da der Anwender sich oft nicht mit dieser Materie auskennt
Vorschlag a) hat wegen der Verwendung von LF als Zeilenende unter Unix und MacOS weniger Zustimmung gefunden.
Für den Import wurde vorgeschlagen, dass ein Programm alle nach Standard zulässigen Zeilenenden unterstützen muss.
Abweichungen vom Standard bei der Verwendung
siehe Doppelbedeutung des Leerzeichens: Die Vorschrift, dass der begrenzer nur aus einem Leerzeichen besteht, wird von einigen wenigen Programmen nicht eingehalten.