GEDCOM/Syntax GEDCOM-Zeile: Unterschied zwischen den Versionen

aus wiki, dem genealogischen Lexikon zum Mitmachen.
Zur Navigation springen Zur Suche springen
(an die Kategorie GEDCOM-Struktur angehängt)
(Entscheidungsvorschläge eingefügt)
Zeile 114: Zeile 114:


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@.
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.
*  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 mindestens 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'''
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 ==
== Behandlung/Darstellung schwieriger Situationen ==

Version vom 30. Januar 2010, 22:21 Uhr

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


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.
  • 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 mindestens 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

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.