Kopie des alten Systems |
Dies ist eine alte Kopie des GenWiki und spiegelt den Stand vom 8. Mai 2022 wider. This is an old copy of the GenWiki and reflects the status as of May 8, 2022. Please visit us at wiki.genealogy.net |
GEDCOM-Validator
aus GenWiki, dem genealogischen Lexikon zum Mitmachen.
Diese Seite wurde zum sofortigen Löschen vorgeschlagen. Dies ist keine Aufforderung zum Leeren der Seite, denn nur Administratoren können Seiten vollständig löschen. Bitte entferne deshalb diesen Hinweis nicht! Hinweis: Wenn du diesen Baustein eingefügt hast, kannst du den Autor der Seite auf dessen Diskussionsseite mit {{subst:Gelöscht|art=GEDCOM-Validator}} benachrichtigen. Weiteres zum Thema Löschen im Hilfe-Artikel Löschvorschlag. Lösch-Logbuch • Linkliste |
Begründung: Seit 13 Jahren hat sich hier nichts mehr getan und die Links funktionieren auch alle nicht mehr. --Hartenthaler 23:33, 10. Apr. 2022 (CEST)
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!
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.