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
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@.
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.