GEDCOM-Validator

aus GenWiki, dem genealogischen Lexikon zum Mitmachen.

Wechseln zu: Navigation, Suche


Info

Dieser Artikel hat noch wenig Substanz und ist eventuell nur mit einer Struktur oder mit minimalen Informationen angelegt worden, um die weitere Bearbeitung zu erleichtern. Falls jemand gesicherte Informationen ergänzen kann – nur zu!


Info
Hier entsteht die Doku für den geplanten Online-Validator für GEDCOM-Dateien.


Ich habe begonnen, einen GEDCOM-Validator in Java/Grails zu implementieren.

Idee der Validierung

Das Einlesen der Datei erfolgt datenstrom-basiert, da so unabhängig von der Größe der Eingabedatei ein nahezu konstanter Speicherverbrauch erreicht werden kann.

Die GEDCOM-Spezifikation nennt auf Seite 19

  • Strukturelemente in doppelten spitzen Klammern
  • Primitive in einfachen spitzen Klammern

Die Idee ist, für jedes Strukturelement eine gleichnamige Klasse zu schreiben, die den ihr zugehörigen Inhalt liest. Für Primitive gibt es (zunächst in einer einzigen Klasse) gleichnamige Methoden, die den Inhalt überprüfen.

Eine Klasse für Strukturelement soll folgende Felder bekommen:

singleTags
eine Liste aller Tags, die nur einmal innerhalb des Elements auftauchen dürfen
tagName
der Name des zum Element gehörenden Tags (z.B. "FAM" bei "FAM_RECORD")
isXref
gibt an, ob das Element Ziel einer XREF ist (z.B. FAM_RECORD und INDIVIDUAL_RECORD)
primitives
Liste aller Tags die ein Primitives (also direkt Text) enthalten mit Angabe des Namens des Primitiven
subStructures
eine Liste aller möglichen untergeordneten Strukturelemente. Hier ist es nicht notwendig, einen Tagnamen aufzuschreiben, da die Klasse des Strukturelements diesen Namen (ggf. auf verschiedene) enthält.

Bereits fertig

Geschrieben und mit Unittests versehen sind Methoden zum zeilenweisen Einlesen von GEDCOM-Dateien. src/groovy/net/genealogy/gedcomvalidator/GedcomReader.groovy Dort ist auch eine Methode enthalten, die den Zeichensatz einer GEDCOM-Datei bestimmen kann. Insbesondere UTF-16 kodierte Dateien sind nicht gleich auf Anhieb so einfach zu lesen.

Eine Testversion kann man sich hier ansehen: http://grails.genealogy.net/gedcom-validator/ Bislang wird nur ausgewertet, welcher Zeichensatz in der GEDCOM-Datei verwendet wird.

Programmcode

Programmcode
liegt im Subversion-Repository:
http://svn.genealogy.net/gedcom-validator/trunk/
Welche Bedeutung die einzelnen Felder haben, kann man in der Klasse LINEAGE_LINKED_GEDCOM nachlesen. Stöbern in anderen fertigen Definitionen (z.B. FAM_RECORD) hilft sicherlich auch...
Regeln für Strukturelemente
src/groovy/net/genealogy/gedcomvalidator/rules
Die eigentliche Überprüfung
findet in net.genealogy.gedcomvalidator.StructureElement statt. Die Klasse ist zwar etwas dokumentiert, aber vermutlich noch nicht genug.
Überprüfung des simple content (des Textes)
erfolgt in der Klasse Primitives.groovy im selben Verzeichnis. An den meisten Closures steht noch "TODO" dran.
Tests
Die Testdatei TGC551.ged wird fehlerfrei verarbeitet, was aber noch nicht heißt, dass nicht doch Fehler drin sind.
mitarbeiten?
Viele Klassen erben noch von "DummyStructureElement", dort wird das Element einfach nur übersprungen und ein entsprechender Eintrag in die Liste der nicht-überprüften Tags gemacht. Allerdings werden auch schon weitere Klassen bearbeitet, Aktivitäten bitte vorher mit Jesper abstimmen.
Persönliche Werkzeuge