Visualisierung und interaktive Manipulation genealogischer Daten Diplomarbeit vorgelegt von Marijan Gjoreski Institut für Informatik III Rheinische Friedrich-Wilhelms-Universität Bonn Professor Dr. Rainer Manthey April 2004 Danksagung Bei Herrn Prof. Dr. Rainer Manthey bedanke ich mich besonders für die Möglichkeit, meine Arbeit an diesem Institut durchführen zu können. Außerdem danke ich ihm für die intensive und freundliche Betreuung. Ein großes Dankeschön möchte ich den fleißigen Korrekturleserinnen Ma. Isabel Conejo y Dahm, Manuela Gjoreski und Kathrin Obrusnik aussprechen. Mein besonderer Dank geht an meine Familie, die mir diese Ausbildung ermöglicht und mich während des gesamten Studiums uneingeschränkt unterstützt hat. Inhaltsverzeichnis 1. Einleitung 2. Genealogie 2.1 Begriffsbildung und Fachterminologie 2.2 Formate für genealogische Daten 2.2.1 Klassische Formate 2.2.2 Computergenealogische Formate 2.3 Datenbanken mit genealogischem Hintergrund 2.4 Visualisierungsmöglichkeiten 1 3 5 10 10 13 16 20 3. Datenbank und Java Grundlagen 3.1 Grundlagen von Datenbanken 3.1.1 Das relationale Modell und SQL 3.2 Access 3.3 JDBC/ODBC 3.4 Java AWT und Swing 24 24 25 30 30 32 4. Graphisch Visualisierung genealogischer Daten 4.1 Klassifizierung 4.2 Rechnergestützte Methoden zur Stammbaumausgabe 4.2.1 GFAhnen Version 5.0 4.2.2 Ursprung 4.2.3 Famtree Version 2.3 4.2.4 Fzip Family Tree S1.7d 4.2.5 WinAhnen V6.02 4.2.6 DYNASS-TREE V300 4.2.7 GEN-Master V3.1.4 4.2.8 GeneWeb 4.09 4.2.9 StaBa Der Stammbaumgenerator 36 36 37 37 40 41 42 43 45 47 48 49 5. Konzepte zur Stammbaumvisualisierung 5.1 Diskussionen von Alternativen und Kritik 5.2 Vorstellungen der eigenen Methoden 50 50 55 6. Implementierung des Systems ViMaGe 6.1 Architektur und Komponenten 6.2 Vorstellung des Datenbankschemas 6.3 Ausgewählte Aspekte der Implementierung 6.3.1 Datenbank-Kopplung 6.3.2 Einlesen von Personendaten 6.3.3 Layoutberechnung 6.3.3.1 Vertikale Anordnung 6.3.3.2 Plazierung der Kinder 6.3.3.3 Auflösung von Überschneidungen 6.3.3.4 Linienberechnung 60 61 63 64 64 66 68 69 70 72 75 7. Zusammenfassung und Ausblick 7.1 Zusammenfassung und Bewertung 7.2 Ausblick 76 76 77 Literaturverzeichnis 81 2 Genealogie Begibt man sich auf die Suche nach den Ursprüngen der Genealogie, wird man bereits in frühen hebräischen Schriften fündig. So sind unter anderem in den Büchern Mose auffallend ausführliche Abstammungslinien festgehalten worden. Beispielsweise läßt sich die Stammfolge von Adam und Eva über Noah, Abraham und König David bis zu Jesus aus verschiedenen Teilen des Alten und des Neuen Testaments wie folgt lückenlos zusammenstellen: Adam und Eva zeugten einen Sohn Set; Set zeugte Enosch; Enosch zeugte Kenan; Kenan zeugte Mahalalel; Mahalalel zeugte Jered; Jered zeugte Henoch; Henoch zeugte Metuschelach; Metuschelach zeugte Lamech; Lamech zeugte Noah; Noah zeugte drei Söhne: Sem, Ham und Jafet; Sem zeugte Arpachschad; Arpachschad zeugte Schelach; Schelach zeugte Eber; Eber zeugte Peleg; Peleg zeugte Regu; Regu zeugte Sergug; Sergug zeugte Nahor; Nahor zeugte Terach; Terach zeugte Abraham; Abraham zeugte Isaak; Isaak zeugte Jakob; Jakob zeugte Juda; Juda zeugte mit Tamar Perez und Serach; Perez zeugte Hezron; Hezron zeugte Aram; Aram zeugte Amminadab; Amminadab zeugte Nachschon; Nachschon zeugte Salomon; Salomon zeugte mit Rahab Boas; Boas zeugte mit Rut Obed; Obed zeugte Isai; Isai zeugte König David; König David zeugte mit Urijas Frau Salomo; Salomo zeugte Rehabeam; Rehabeam zeugte Abija; Abija zeugte Asa; Asa zeugte Joschafat; Joschafat zeugte Joram; Joram zeugte Usija; Usija zeugte Jotam; Jotam zeugte Ahas; Ahas zeugte Hiskaija; Hiskaija zeugte Manasse; Manasse zeugte Amos; Amos zeugte Joschija; Joschija zeugte Jojachin; Jojachin zeugte Schealtiël; Schealtiël zeugte Serubbabel; Serubbabel zeugte Abihud; Abihud zeugte Eljakim; Eljakim zeugte Azor; Azor zeugte Zadok; Zadok zeugte Achim; Achim zeugte Eliud; Eliud zeugte Eleasar; Eleasar zeugte Mattan; Mattan zeugte Jakob; Jakob zeugte Josef, der schließlich Maria, deren Sohn Jesus Christus der Messias genannt wird, ehelichte. [Rau] Es lassen sich aber durchaus noch wesentlich ältere Aufzeichnungen von Abstammungslinien finden, und zwar in Form von bildlichen Darstellungen, die zum Teil bis in die Epoche des altägyptischen Reiches zurückdatiert werden können. Gleichsam werden in vielen hellenischen Lobgesängen auf berühmte Helden typischerweise die jeweiligen Stammväter erwähnt. Die außerordentliche Bedeutung, die der Abstammung wiederum im antiken Rom zukam, läßt sich anhand der bewußten und ausgeklügelten Fälschungen erahnen, die von den vornehmsten und mächtigsten Familien begangen wurden in dem Bestreben, ihre Vorfahrenreihe bis zu Romulus und Remus, den Stadtgründern, zurückzuführen. [GHGRBe] Im Mittelalter wuchs die Bedeutung der Genealogie weiter an. Verschiedene Stände und Gesellschaftsschichten bemühten sich, ihre Abstammung als Mittel einzusetzen, um sich immer schärfer voneinander abgrenzen zu können. Als Voraussetzung für den Antritt bestimmter geistlicher oder weltlicher Ämter oder auch für die Teilnahme an Turnieren mußte oft die sogenannte Ahnenprobe erbracht werden, bei welcher eine adelige oder zumindest freie Abstammung zum Teil bis zur sechsten Vorfahrengeneration nachgewiesen werden mußte. [Wik_6], [GHGRBe] Im späten Mittelalter erstellte der Gelehrte Ladislaus Suntheim (ca. 1440 1530) im Auftrag Kaiser Maximilians eine Chronik der Häuser Habsburg und Bamberg. Suntheim ist somit einen der ersten eigentlichen Berufsgenealogen; man kann ihn daher sogar als den Begründer der Genealogie als Wissenschaft ansehen. [GHGRBe] 3 In der römisch-katholischen Kirche wurde durch das Konzil von Trient im 16. Jahrhundert die Einführung von Kirchenbüchern angeordnet. Diese bildeten damals wie auch heute noch für die Genealogie die wichtigste Quelle ihrer Forschung. Ihre Bedeutung wurde im 19. Jahrhundert durch die Einführung der Personenstandsregister (auch Standesregister oder, in der Schweiz, Zivilstandsregister genannt) ergänzt und auch abgelöst. [Liw], [GHGRBe] Mit der Jahrhundertwende zum 19. Jahrhundert entstanden schwere gesellschaftliche Umbrüche und es traten Krisen in ganz Europa auf. Mit der französischen Revolution und der Herrschaft Napoleons wurde eine staatlich-standesamtliche Registrierung der Bürger und ihrer Personenstandsangelegenheiten eingeführt. Die bis dahin für den Adel zum Nachweis ihres Adelsgeschlechtes genutzte Genealogie erlitt einen enormen Bedeutungsverlust, trotz der neu eingeführten Personenstandsangelegenheiten. Eine neue Bedeutung erhielt die Genealogie erst wieder gegen Mitte der zweiten Hälfte des 19. Jahrhunderts durch eine eng verwandte Nachbarwissenschaft, der Heraldik oder Wappenkunde, mit der Gründung der heraldischen Gesellschaften Herold (Berlin 1869) und Adler (Wien 1870). Im folgenden begannen sich zwei unterschiedliche theoretische Richtlinien in der Genealogie herauszubilden. Als Vertreter der soziologisch und historisch orientierten Genealogie, in der es mehr um eine umfassende Familienkunde und dabei auftretende praktische Probleme ging, sind Stephan Kekulé von Stradonitz sowie Eduard Heydenreich, der Verfasser des Handbuchs der praktischen Genealogie", zu nennen. Stephan Kekulé von Stradonitz entwickelte ein Ahnennummerierungsystem, das heute weltweit eingesetzt wird. Unter dem Einfluß der Entwicklungslehre Darwins und Haeckels sowie der Vererbungtheorien Mendels entstand daneben eine mehr naturwissenschaftlich orientierte genealogische Richtung, die auch später im Dritten Reich ähnlich wie im Mittelalter und der Antike zur Abgrenzung verwendet wurde, nur mit anderen Zielen. Als ein weiterer Vertreter der stark auf die Humangenetik fixierten Richtung ist Ottokar Lorenz zu nennen. [Web03], [GHGRBe] Die Machtergreifung der Nationalsozialisten in Deutschland führte dazu, daß die Genealogie entgegen ihrer vorherigen Bedeutung als Werkzeug der Rassenpolitik mißbraucht wurde. Beispielsweise wurde sie dazu benutzt, Gebietsansprüche im Osten zu rechtfertigen, die sich aus der Abstammungsfolge des deutschen Volkes ergaben, und zur Feststellung einer arischen oder jüdischen Abstammung. So wurde von der NSDAP als Aufnahmebedingung eine reine arische Abstammung ab dem Jahre 1800 erwartet, die auch für den Ehepartner gelten mußte. Die SS verlangte sogar einen Nachweis bis zum Jahre 1750, der anhand einer Ahnenliste vorzulegen war. Zur Vereinfachung des Abstammungsnachweises wurde schließlich der Ahnenpaß eingeführt, in dem Eltern und Großeltern nachgewiesen werden mußten. [Wik_1], [Wik_3], [Web03] Heutzutage existieren weltweit enorm viele genealogische Vereine, deren Mitglieder sich beruflich mit der Abstammungskunde beschäftigen. Genealogie ist allerdings nicht nur rein wissenschaftlich anwendbar, sondern sie ist mittlerweile auch ein verbreitetes Hobby von Privatpersonen. Letztere können dabei entweder selbständig versuchen, genealogische Daten zu sammeln wie eben durch Einsicht von Kirchenbüchern, Standesregistern u. ä. oder entsprechend orientierte Dienstleistungsunternehmen in Anspruch nehmen. In jedem Falle spielt das Internet heutzutage eine sehr wichtige Rolle für Genealogen, was folgendes Beispiel verdeutlicht: Gibt man in der Internet-Suchmaschine Google Genealogie als Suchbegriff ein, werden ungefähr 1.170.000 Treffer als Ergebnis bei einer Suchdauer von 0,16 Sekunden geliefert. Gibt man wiederum Stammbaum in Google ein, werden innerhalb von 0,11 Sekunden ca. 651.000 Treffer gefunden. 4 In den vergangenen Jahrhunderten standen einem Genealogen als Handwerkszeug lediglich Papier, Bleistift, Federhalter, Karteikarten, Aktenordner, Bücher und Zeitschriften zur Verfügung. Vor ungefähr achtzig Jahren kamen die Schreibmaschine so wie der Fotoapparat (zur Dokumentation von Schriftstücken etc.) dazu, und seit etwa dreißig Jahren finden Fotokopierapparate intensive Verwendung. Diese Hilfsmittel werden mittlerweile schon seit rund zwanzig Jahren durch Computer, Drucker und Disketten ergänzt. Heute wird diese Palette an Hilfsmitteln abgerundet durch Scanner, CD und Internet, wobei letzteres sehr schnell eine hervorragende Stellung bei der Genealogie sowie natürlich auch anderen Wissenschaften erobert hat. [Liw], [Rud] 2.1 Begriffsbildungen und Fachterminologie An dieser Stelle sollen zunächst im Kontext dieser Arbeit wichtige Begriffe aus dem Bereich der Genealogie definiert werden. Desweiteren werden einige genealogische Hilfsmittel vorgestellt. Ahnenliste: Bei einer Ahnenliste handelt es sich um eine strukturierte Liste aller Ahnen eines Probanden, die mit diesem beginnt. Es folgen dessen Eltern, diesen wiederum die vier Großeltern usw. Der Proband erhält dabei die Nummer 1, seine Eltern die Nummern 2 und 3 usw., so daß jeder Vorfahr durch eine Nummer gekennzeichnet ist, wobei gerade Zahlen für männliche, ungerade für weibliche Ahnen stehen. Die Generationen werden, beginnend mit den Eltern des Probanden, durch römische Ziffern kenntlich gemacht. [See_a], [Rau] Ahnentafel: Eine Ahnentafel stellt die Vorfahren eines Probanden schematisch in graphischer oder tabellarischer Form dar, wobei sie mit dem Probanden und seinen Eltern als der untersten genealogischen Einheit beginnt. Es folgen dann die weiteren Generationen, die, wie bei einer Ahnenliste, beginnend mit den Eltern des Probanden durch römische Ziffern gekennzeichnet werden. So läßt die Ahnentafel auf einen Blick die Vorfahren des Probanden über mehrere Generationen erkennen, wobei sie im Gegensatz zum Stammbaum von der Gegenwart bis in die Vergangenheit weist. [Ber91a], [Wik_2], [Reu01a] Ahnennummerierung: Stephan Kekulé von Stradonitz (deutscher Mathematiker, 1863 - 1933) führte im vergangenen Jahrhundert ein System zur Nummerierung der Vorfahren ein, das einem einfachen Prinzip folgt: dem Probanden wird die Nummer 1, seinen Eltern die Nummern 2 und 3, den Großeltern die Nummern 4 7 zugeteilt etc. Gerade Zahlen werden dabei für männliche Vorfahren, ungerade Zahlen für weibliche Vorfahren verwendet. Die Nummer des Vaters einer Person ist somit immer das Doppelte der Nummer dieser Person; die Nummer jeder Mutter ist immer das Doppelte der Nummer ihres Kindes plus eins. [See_a], [Rau], [Mag] Die Ahnennummerierung nach Kekulé erlaubt nur die Nummerierung direkter Vorfahren, ist also nur für Ahnentafeln verwendbar. Dabei werden auch keine Zweitehen berücksichtigt. Sollen auch Geschwister und Kinder aus weiteren Ehen mit erfaßt werden, ist die Ahnen5 nummerierung nach Kekulé zu erweitern. Für eine solche Erweiterung gibt es keine eindeutige Vorschrift; beispielsweise kann jeder Geschwisterteil mit einem Buchstaben markiert werden. In der folgenden Tabelle werden die Bezeichnungen für die Generationen und deren AhnenNummerierung nach Kekulé demonstriert. [Sch], [Rau] Bezeichnung Proband Eltern Großeltern Urgroßeltern Alteltern (Ur-Urgroßeltern) Altgroßeltern Alturgroßeltern Obereltern Obergroßeltern Oberurgroßeltern Stammeltern Stammgroßeltern Stammurgroßeltern Ahneneltern (Stammalteltern) Ahnengroßeltern Ahnenurgroßeltern Urahneneltern Urahnen-Großeltern Urahnen-Urgroßeltern Erzeltern Erzgroßeltern Erzurgroßeltern Erzahneltern Erzahnen-Großeltern Erzahnen-Urgroßeltern Generation I. II. III. IV. V. VI. VII. VIII. IX. X. XI. XII. XIII. XIV. XV. XVI. XVII. XVIII. XIX. XX. XXI. XXII. XXIII. XXIV. Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Generation Personennummer 1 2-3 4-7 8 - 15 16 - 31 32 - 63 64 - 127 128 - 255 256 - 511 512 -1023 1024 -2.047 2.048 - 4.095 4.096 - 8.191 8.192 - 16.383 16.384 - 32.767 32.768 - 65.535 65.536 - 131.071 131.072 - 262.143 262.144 - 524.287 524.288 - 1.048.575 1.048.576 - 2.097.151 2.097.152 - 4.194.303 4.194.304 - 8.388.607 8.388.608 - 16.777.215 16.777.216 - 33.554.431 Die Personennummern sind nur theoretischer Natur: Nimmt man einen Generationsabstand von durchschnittlich ca. dreißig Jahren an und errechnet ein Proband mit dem Geburtsjahr 2000 die Anzahl seiner Vorfahren bis zur fünfundzwanzigsten Generation, die bei einer angenommenen Generationsdauer von ca. 30 Jahren also etwa im Jahre 1220 n. Chr. gelebt haben, ergibt sich, daß zu diesem Zeitpunkt mehr als 67 Millionen Vorfahren des Probanden gelebt haben müßten. Allerdings war zu dieser Zeit nicht einmal die gesamte Bevölkerung von ganz Deutschland derart zahlreich. Diese Divergenz ist mit dem Ahnenschwund zu erklären: Einige Ahnen eines Probanden können selbst miteinander verwandt sein, wenn auch nur entfernt. Heiratet z.B. ein Mann seine Cousine, so haben beide dieselben Großeltern, Urgroßeltern usw., und für die Kinder aus dieser Ehe bedeutet dies, daß die Urgroßeltern mütterlicherseits und väterlicherseits identisch sind. Somit wird die theoretische Anzahl von Ahnen nie erreicht, da in der Regel früher oder später eine Heirat zwischen Verwandten vorkommt. [GHGRBa], [GHGRBc], [Rau], [Enz] 6 Genealogie: Der Begriff Genealogie leitet sich aus dem Lateinischen und dem Altgriechischen ab: Das Wort genus bedeutet soviel wie Geschlecht oder Abstammung , während sich logos mit Kunde oder Lehre übersetzen läßt. Das griechische genealogein bedeutet: die Abstammung angeben oder einen Stammbaum aufstellen . Die Genealogie ist also die Geschlechter- oder Abstammungskunde und beschäftigt sich mit der Erforschung von Ursprung und Schicksal von Familien, ihren Vorfahren und ihren Nachkommen, oder mit anderen Worten mit der Erforschung der Abstammungsverhältnisse und Verwandtschaftsbeziehungen zwischen Menschen. Man unterscheidet die darstellende Genealogie und, darauf aufbauend, die theoretische Genealogie. Die darstellende Genealogie behandelt die Abstammung und die verwandtschaftliche Beziehung einzelner Personen oder Personengruppen; die theoretische Genealogie befaßt sich mit den allgemeinen Regeln und Gesetzen der Genealogie. Heutzutage beschäftigt sich die Genealogie als geschichtliche Hilfswissenschaft mit der Erforschung der Abstammungsverhältnisse einzelner Geschlechter und der Beantwortung der sich daraus ergebenden historischen Fragestellungen. So wird die Genealogie etwa zur Bestimmung von Besitz- und Herrschaftsverhältnissen in einzelnen Familien und damit auch zur Bestimmung ihrer gesellschaftlichen und politischen Rolle herangezogen. [Ber91b], [Lex90] [Lec93], [Bün96], [Wik_6], [Web03] Nachfahrentafel: Als Nachfahren- oder Enkeltafel bezeichnet man die schematische Aufzeichnung der Nachkommenschaft eines Ehepaares, der Stammeltern. Werden nur die Nachkommen, die denselben Familiennamen tragen, ermittelt, spricht man von einer Stammtafel. [Wik_9], [Ber91c] Nachkommennummerierung: Zur Nummerierung von Nachfahren werden verschiedene Methoden genutzt. Die Nummerierung nach Aboville und die Nummerierung nach Saragossa zählen dabei zu den meistgenutzten. [Rud], Bei der Nummerierung nach Aboville wird immer mit einem Buchstaben begonnen; dieser bestimmt die Generation. Somit ist es möglich, Personen bis zur 26. Generation durchzunummerieren; dabei trägt der Proband die Nummer A1, seine Kinder erhalten demnach die Nummern B1.1 für das erste Kind bis B1.n für das n-te Kind usw. [GHGRBc], [Rud] Nachfahrennummerierung nach Aboville: A1 B1.1 B1.2 C1.2.1 C1.2.2 D1.2.2.1 C1.2.3 B1.3 C1.3.1 Maxim Goreski (1912 1990) Lenka Goreska (1952 ) Kirko Goreski (20.02.1953 ) Marijan Gjoreski (16.10.1975 ) Manuela Gjoreski (13.09.1978 ) Alexander Smirnoff (14.07.2003 ) Gregor Gjoreski (14.07.1982 ) Senka Grozdanovska (14.01.1954 ) Maximilian Grozdanovski (02.1.1979 7 ) Das Nummerierungssystem nach Saragossa ist ähnlich; der einzige Unterschied zu Aboville liegt darin, daß hier ausschließlich Zahlen verwendet werden und die Generationen somit nicht mit angegeben werden. [GHGRBc] Nachfahrennummerierung nach Saragossa: 1 1.1 1.2 1.2.1 1.2.2 1.2.2.1 1.2.3 1.3 1.3.1 Maxim Goreski (1912 1990) Menka Goreska (1952 ) Kirko Goreski (20.02.1953 ) Marijan Gjoreski (16.10.1975 ) Manuela Gjoreski (13.09.1978 ) Alexander Smirnoff (14.07.2003 ) Gregor Gjoreski (14.07.1982 ) Senka Grozdanovska (14.01.1954 ) Maximilian Grozdanovski (02.1.1979 ) Eine weitere bekannte Nummerierung ist die von Reginal Buchanan Henry 1935 eingeführte. Dabei wird beim Stammvater die Nummerierung mit einer 1 begonnen. Die Kinder des Stammvaters werden in der Geburtsreihenfolge mit 1x durchnummeriert, wobei der Erstgeborene die Nummer 11 , der an vierter Stelle Geborene die Nummer 14 erhält. Diese Nummerierung wird für die Nachkommen ebenso weitergeführt, wobei also z.B. der Erstgeborene des zweiten Kindes des Stammvaters die Nummer 121 besitzt. Um mehr als neun Kinder nummerieren zu können, wird ab dem zehnten Kind ein X eingesetzt und von diesem an mit Buchstaben aus dem Alphabet weiter beziffert (A = 11, B = 12, C = 13 ). [Mag], [Rud] Das Nummerierungssystem nach Henry erlaubt es, Kinder aus verschiedenen Ehen zu kennzeichnen. Dazu wird hinter dem Kind ein kleingeschriebener Buchstabe (a für ein Kind aus erster Ehe, b für ein Kind aus zweiter Ehe usw.) angefügt, der somit beschreibt, aus welcher Ehe das Kind stammt. Diese Nummerierung existiert auch in einer leicht abgeänderten Form, bei der die Kinder ab dem zehnten Kind nicht mit Buchstaben, sondern mit einer zweistelligen Ziffer, die in Klammer steht, gekennzeichnet werden. Die Kennzeichnung 12X1A würde nach diesem modifizierten Verfahren also 12(10)1(11) entsprechen. [Mag], [Rud] Nachfahrennummerierung nach Henry: 1 11 12 121 122 1221 123 13 131 Maxim Goreski (1912 1990) Lenka Goreska (1952 ) Kirko Goreski (20.02.1953 ) Marijan Gjoreski (16.10.1975 ) Manuela Gjoreski (13.09.1978 ) Alexander Smirnoff (14.07.2003 ) Gregor Gjoreski (14.07.1982 ) Senka Grozdanovska (14.01.1954 ) Maximilian Grozdanovski (02.1.1979 ) In Südafrika entwickelten Ch. De Villiers und Dr. Cor Pama im neunzehnten Jahrhundert eine weitere Art der Nummerierung von Nachkommen. Sie ähnelt der Nummerierung nach Aboville: Der Stammvater wird mit einem a markiert und die jeweils nächste Generation durch Anhängen des nächsten Buchstabes des Alphabets gekennzeichnet, wobei zusätzlich eine Zahl angefügt wird, die kennzeichnet, um das wievielte Kind es sich handelt. Die Generationen werden durch einen Punkt voneinander getrennt. Folgendes Beispiel dient zu Verdeutlichung: a.b1.c2 steht für das zweite Kind des ersten Kindes des Stammvaters. [Mag], [Rud] 8 Stammbaum: Ein Stammbaum zeigt die Nachkommen eines Stammvaters, d.h. des ältesten, direkten männlichen Vorfahrs, der nachgewiesen werden kann. Die Darstellung der Verwandtschaftsbeziehungen erfolgt dabei in Baumform, wobei der Stammvater die Wurzel und die folgenden Generationen die Äste und Zweige bilden. Der Stammbaum eines Probanden besteht dabei im Gegensatz zur Ahnentafel aus allen lebenden und verstorbenen Familienmitgliedern, die seinen Familiennamen tragen. Somit zeigt also ein Stammbaum von der Vergangenheit in die Gegenwart. [Wik_4], [Wik_10], [Lex90b] Stammliste: Die Stammliste stellt die Nachkommenschaft einer Person in Listenform dar. Dabei existieren zwei mögliche Anordnungen: die fortlaufende und die unterbrechende Liste. Bei ersterer folgt jeder Person sofort ihre gesamte Deszendenz, wobei jede Generation um das gleiche Stück nach rechts eingerückt wird. Auf den Stammvater folgt also z.B. dessen ältester Sohn, diesem wiederum dessen Nachkommenschaft und erst dann das zweite Kind des Stammvaters, das wieder entsprechend seines Bruders nur wenig eingerückt wird. Bei der unterbrechenden Liste dagegen werden die einzelnen Kleinfamilien, d.h. Eltern und Kinder aufgelistet. Die Kinder, deren Deszendenz dargestellt werden soll, werden dabei nur kurz mit Hinweis auf die folgenden Kleinfamilien erwähnt und dort ausführlich mit ihren eigenen Kindern genannt, während die nächsten Generationen in weiteren Kleinfamilien erscheinen. [See_a], [Lex90b] Stammtafel: Entsprechend einer Ahnentafel werden hier die Nachkommen eines Stammvaters in graphischer oder tabellarischer Form dargestellt. Wie bei einem Stammbaum werden lediglich Familienmitglieder mit dem gleichen Familiennamen berücksichtigt. [Lex90b] Symbole in der Genealogie: Für genealogische Zwecke existieren spezielle Abkürzungen und Symbole. Im folgendem wird die Bedeutung einiger wichtiger Symbole aufgezeigt. [Her00] Symbol Bedeutung * (*) ~ o oo I oo II oo + geboren außereheliche Geburt getauft verlobt verheiratet erste Ehe zweite Ehe gestorben Symbol Bedeutung o/o o-o X +X [] ++ 9 geschieden (alternativ auch o|o) freie Verbindung gefallen an im Kampf erlittenen Wunden gestorben beerdigt ausgestorbene Linie Verwandtschaft: Die Verwandtschaft gibt die Beziehung zwischen zwei Personen, von denen die eine von der anderen abstammt oder beide von einer dritten Person abstammen, an. Man unterscheidet dabei zwischen Konsanguität (Blutsverwandtschaft) und der Affinialverwandtschaft, die auch angeheiratete Personen umfaßt. [See_a], [Lex90a] Unter Aszendenz versteht man die leiblichen Eltern, Großeltern und weitere blutsverwandte Vorfahren eines Probanden. Die Deszendenz bezeichnet dagegen die gesamte Nachkommenschaft eines Probanden oder der Stammeltern. [See_a], [Lex90a] Verwandtschaftsbezeichnungen: Verwandte eines Probanden lassen sich folgendermaßen definieren: Die Mutter bzw. der Vater ist der weibliche bzw. männliche Elternteil. Der Großvater ist wiederum der Vater eines Elternteils, die Großmutter die Mutter eines Elternteils. Als Onkel bezeichnet man den Bruder eines Elternteils oder den Ehemann der Schwester eines Elternteils. Die Tante ist eine Schwester der Mutter oder des Vaters, oder die Ehefrau eines Bruders der Mutter oder des Vaters. Ein Bruder ist ein von denselben Eltern abstammendes männliches Kind, die Schwester eine weibliche Person, die von denselben Eltern abstammt. Ein Cousin (Synonym: Vetter) ist der Sohn eines Onkels oder einer Tante, eine Cousine (veraltetes Synonym: Base) dementsprechend die Tochter eines Onkels oder einer Tante. Ein Sohn ist ein männliches Kind des Probanden, eine Tochter demgemäß ein weibliches Kind. Als Neffe bzw. Nichte bezeichnet man das männliche bzw. weibliche Kind eines Bruders oder einer Schwester. Als Enkel (Enkelsohn) bzw. Enkelin (Enkeltochter) bezeichnet man ein männliches bzw. weibliches Kind einer Tochter oder eines Sohnes. [Lex90_1], [Lex90_2], [GHGRBa] Die Eltern des Probanden sind für dessen Ehepartner die Schwiegereltern, also Schwiegervater bzw. Schwiegermutter. Der Bruder bzw. die Schwester des Ehepartners oder der Ehepartner von Bruder oder Schwester wird Schwager bzw. Schwägerin genannt. [Lex90_2] 2.2 Formate für genealogische Daten Genealogische Daten werden bzw. wurden meist schriftlich oder graphisch in verschiedenen Formen festgehalten. Seit Beginn des Computerzeitalters wurden spezielle computerbezogene Formate zur digitalen Speicherung von genealogischen Daten entwickelt. 2.2.1 Klassische Formate Genealogische Daten sind nur selten in einer für ihre Sammlung idealen komprimierten Form zu finden, sondern müssen teilweise aus Schriftstücken, deren Umfang von kurzen Texten bis zu längeren Büchern reichen kann, herausgefiltert werden. Als Beispiel sei auf die eingangs zu diesem Kapitel erwähnte der Bibel entnehmbare Abstammungsfolge von Jesus verwiesen. Quellen, denen genealogische Daten entnommen werden können, sind dabei recht vielgestaltig: So verwaltet das Standesamt genealogische Daten, die in Form von Standesregistern wie Geburtsurkunden, Heiratsurkunden und verschiedenen weiteren Dokumenten zugänglich sind. Eine Vielzahl genealogischer Daten sind auch in Krankenhäusern und Privatarchiven vorhanden. Ungefähr seit Anfang des dreizehnten Jahrhunderts wurden Grundbücher angelegt, in 10 denen ebenfalls genealogisch relevante Daten verzeichnet sind. Weitere Quellen sind auch Testamente (seit ca. 1250) sowie Bürgerbücher (seit ca. 1490). Im sechzehnten Jahrhundert wurde der Einsatz verschiedener Schriftstücke zur Datensammlung gebräuchlich: Etwa um 1550 wurden Hausbücher, Volkszählungslisten, Leichenpredigten und Kirchenbücher eingeführt. Das älteste bekannte deutsche Kirchenbuch wurde jedoch schon im fünfzehnten Jahrhundert in Basel von der Pfarrei St. Theodor angelegt; dort wurde 1481 die Führung von Taufbüchern angeordnet. Mit dem neunzehnten Jahrhundert kamen um 1840 1870 ferner auch Einwohnermeldelisten, Auswandererlisten, Adreßbücher, Passagierlisten, und die Sammlungen in Standesämtern dazu. In Privatarchiven finden sich Auszüge aus den oben erwähnten Schriftstücken ebenso wie in selbst angelegten Familienchroniken oder Wappen. [Rud] Interessant ist vor allem die Sammlung genealogischer Daten einer bestimmten Familie. Sobald alle verfügbaren Daten für alle Personen dieser Familie zusammengetragen wurden, werden sie in einer bestimmten Weise zusammengefaßt und dargestellt. Das geschieht fast immer in Textform, durch per Hand gezeichneten Stammbäume oder Ahnentafeln, je nach dem Anliegen des Benutzers. Die verschiedenen Darstellungsmöglichkeiten werden in Kapitel 2.5 ausführlich beschrieben. Klassische genealogische Daten werden meist ortsabhängig archiviert, wie am folgenden Beispiel des Verzeichnisses der Standesregister aus französischer Zeit erläutert: Dieses spezielle Verzeichnis für die ehemals fürstbischöflichen Gemeinden des Birsecks und des Laufentals für die Jahre 1792 1815 kennzeichnet den jeweiligen Standort der Daten von Geburten, Eheverkündungen, Hochzeiten und Todesfällen. Es werden jeweils nur die ersten zwei Zeilen der Tabelle dargestellt. [KBLa], [KBLb] Bezirk Arlesheim: 9 ehemals fürstbischöfliche Gemeinden Standort: Staatsarchiv des Kantons Basel-Landschaft, Liestal Gemeinde Aesch Grenzjahre 1800 1813 Archiv StA BL Signatur ST 4201 Statthalteramt Arlesheim, 01.08.01 Allschwil 1792 1814 StA BL ST 4201 Statthalteramt Arlesheim, 01.08.02 Bezirk Laufen: 12 ehemals fürstbischöfliche Gemeinden Standort: Archives de l'ancien Evêché de Bâle (AAEB), 10 rue des Annonciades, 2900 Porrentruy, Tel/Fax 032 466 32 43. Gemeinde Blauen Grenzjahre Burg 1792 1814 1792 1794 1798 1814 Archiv AAEB Signatur Microfilm, NC 45 AAEB Microfilm, NC 45 Diese Verzeichnisse geben Auskunft darüber, an welchen Orten die Daten zu finden und folglich zur Einsicht verfügbar sind. Wie auch beim Standesregister gibt es auch Verzeichnisse der Kirchenbücher, die wie das folgende Beispiel online abrufbar sind, wobei jeder Ort mehrere Kirchenregister besitzt, abhängig von der Zahl der Kirchen des Ortes oder der Gemeinde. [KBL_1] 11 Kirchenbücher: Übersicht und Ortsregister E 9.1.01. Aesch (ev.-ref.) E 9.2.01. Aesch (röm.-kath.) E 9.1.02. Allschwil (ev.-ref.) E 9.2.02. Allschwil (röm.-kath.) E 9.3.02. Allschwil (christ.-kath.) E 9.1.03. E 9.2.03. E 9.1.04. Anwil (ev.-ref.) Anwil (röm.-kath.) Arboldswil (ev.-ref.) Römisch-katholische Kirchgemeinde Aesch bis 1803 siehe E 9.2.60 Pfeffingen siehe E 9.1.58 Oltingen siehe E 9.2.29 Gelterkinden bis 1881: siehe E 9.1.17 Bubendorf ab 1811: siehe E 9.1.85 Ziefen Auch bei den Kirchenregistern muß zur Einsicht in die Daten vor Ort recherchiert werden. Zu den Archiven kann es je nach Gemeinde einen Verweis auf ein anderes Archiv geben, da es vorkommt, daß eine Gemeinde einer anderen Kirchengemeinde zugeordnet wird und ab diesen Zeitpunkt die Daten in einem anderen Archiv weitergeführt werden. Unter der Archivnummer ist ein Verweis zu finden, der angibt, wo die Daten zu finden sind. [KBL_2] Unter E 9.1.01 ist folgender Standort abgelegt: E 9.1.01. Aesch Evangelisch-reformierte Kirchgemeinde Aesch, Pfeffingen Die Kirchenbücher befinden sich bei der Kirchgemeinde Die Archive sind vor Ort wieder in Unterarchive unterteilt; somit sind die Taufen, Ehen, Todesdaten usw. in jeweils eigenen Archiven vermerkt, so daß nicht alle Daten zu einer Person an einer Stelle zusammengetragen sind. Als Beispiel ein Taufeintrag aus dem Jahre 1632: [GHGRBd] Der linke Text in Druckschrift : 1632 7 Octob. 241. Margret Rothen sunt genant Sandfluhgredi ihra ein unehelich kind gtoufft, hats geben dem Daniel Zandt dem jüngeren, das kind heisst Hans, Zügen Hans Zahndt StadtHalters Sohn, Willi Zbinden, und Anna Kündiger. Abb. 2.3.1.1. Taufeintrag [GHGRBd] 12 2.2.2 Computergenealogische Formate Speziell für den Bereich der sogenannten Computergenealogie wurden eigene Formate zur Datenspeicherung entwickelt: FOKO und GEDCOM. Dieses sind programmunabhängige Formate. Der Vollständigkeit halber sollte erwähnt werden, daß jedes genealogische Programm sein eigenes internes Format besitzt, welches meist nicht einzusehen ist. Einige Programme verwenden Textdateien, die dann eingesehen werden können. Programme, die GEDCOM unterstützen, verfügen immer über ein weiteres programmspezifisches Datenformat für die genealogischen Daten. FOKO ist ein Projekt für Familienforscher mit deutschem Hintergrund, GEDCOM ein Format, welches in den USA von den Mormonen entwickelt wurde. Diese Formate sind zum Austausch genealogischer Daten gedacht und nicht für ihre Darstellung. Außerdem ist die Darstellung der Daten auch nicht direkt aus diesen Formaten möglich; daher müssen sie zu diesem Zweck selbst für Programme, die FOKO oder GEDCOM unterstützen, zunächst in ein internes Datenformat umgewandelt werden, oder, im Falle von GEDCOM, mit einem HTMLGEDCOM-Konverter in HTML-Dokumente. Aus diesen sind die Daten dann zu lesen - jedoch nur in Textform und nicht graphisch. [Fok01], [Kei_c] FOKO (FOrscher KOntakte) ist ein Projekt der DAGV (Deutsche Arbeitsgemeinschaft Genealogischer Verbände). Es startete Ende der 80er Jahre. Bei der DAGV handelt es sich um eine Gesellschaft von über fünfzig auf Deutschland bezogene genealogischen Vereinen, Verbänden und Einrichtungen. Heute wird FOKO nicht mehr aktualisiert, die Datensätze sind aber noch online abrufbar. [Fok01], [Kei_c] FOKO soll den Datenaustausch zwischen Familienforschern mit deutschem Hintergrund erleichtern. Um dies zu gewährleisten, wurde ein Standard für Personendaten festgelegt und eine Organisation aufgebaut, die für den Austausch und die Integration von derartigen FOKODaten zuständig ist. Zum ersten Schritt gehörte die Festlegung des FOKO-Daten-Standards für Personendaten. Im folgenden wurden von der DAGV die Ahnendaten ihrer Mitglieder und anderen interessierten Personen gesammelt. Durch die Verwandtschaft einiger Familienforscher gab es viele redundante Aufzählungen einzelner Personendaten und die gesamten Daten mußten bereinigt werden. Seit Oktober 1999 ist der Verein für Computergenealogie für die FOKO-Datensätze zuständig, die damals zwischen 0,5 1 Million Datensätzen lagen. Seit Anfang des Jahres 2000 stehen Informationen zu allen FOKO-Datensätzen kostenlos unter der Internetadresse http://foko.genealogy.net/ zur Verfügung. Die Datensätze können nicht selbst abgerufen werden, sondern müssen unter den Kontaktadressen der Verwalter angefordert werden. [Kei_c], [Fok01] Eine FOKO-Datei besteht aus FOKO-Sätzen von jeweils gleicher Länge und Struktur. Ein FOKO-Satz enthält die wichtigsten Daten zu einer Person, wobei es zu jeder Person nur einen FOKO-Datensatz gibt (bis auf einige Ausnahmen). Ein Satz für eine Person enthält keinerlei Beziehung zu Sätzen anderer Personen, selbst dann nicht, wenn diese in der gleichen FOKODatei gespeichert sind. Es ist somit aus dem FOKO-Satz einer Person keine Information zu Eltern, Ehepartnern oder Kindern verfügbar. [Fok01], [Kei_c] 13 Der FOKO-Datensatz enthält u.a. folgende Informationen zu einer Person: [Foko01] Familienname Vorname (Bei mehreren Vornamen kann der Rufname groß geschrieben werden.) Matrikeltyp (Gibt die Genauigkeit der folgenden Daten an, d.h. ob sie sicher oder unsicher sind.) Jahreszahl der ältesten Erwähnung Jahreszahl der jüngsten Erwähnung Bekenntnis Territorium Staat Postleitzahl (bzw. Kennziffer bei ehemaligen dt. Ostgebieten) Ort (Hierauf bezieht sich der Matrikeltyp und die beiden Jahreszahlen. Bei mehreren Orten sind auch mehrere Sätze pro Person nötig.) Kennzeichen (Gibt den genealogischen Verein sowie die Mitgliedsnummer der Person an, die die Daten einreicht. Nichtmitglieder erhalten eine eindeutige Gastnummer.) Dabei gilt: Jeder Eintrag ist ein Zeile lang. Im folgenden Beispiel sind zur Anschaulichkeit anstelle der nichtdruckbaren Zeichen Doppelpunkte eingefügt. Um eine FOKO-Datei zu bearbeiten, wird ein FOKO-Programm benötigt; ein ASCII-Editor reicht dazu nicht aus. [Kei_c] Familienname Jahreszahl der ältesten / jüngsten Erwähnung Postleitzahl (bzw. Kennziffer) Bekenntnis Vorname / Rufname Territorium Ort Staat :Bayer Johan ANDREAS ::::::::::::1743:1743:rk:::::SUD:CS::w62247:Landek::::::::::::::::::: :Braun Katharina:::::::::::::::::1822:1880:rk:::::SUD:CS::w62239:Gießhübel P Sollmus:::::: :Benedikt Anna MARIA:::::::::::::1765:1791:rk:::::SUD:CS::w62246:Rössin P Tschelief::::::: :Brautfelder Franz:::::::::::::::1853:1925:rk:::::SUD:CS::w62234:Lauterbach (Stadt)::::::: Abb. 2.3.2.1 Beispiel für einen FOKO-Datensatz mit vier Einträgen GEDCOM (Genealogical Data Communication) ist ein Format zur Speicherung und zur Ermöglichung des Austausches von Familiendaten zwischen verschiedenen GenealogieProgrammen und Computersystemen. [GHGRBb] Entwickelt wurde GEDCOM interessanterweise von der Religionsgemeinschaft Kirche Jesus Christus der Heiligen Letzten Tage (besser bekannt als Mormonen), bei denen auch das Copyright liegt: Für Mormonen ist die Ahnenforschung eine religiöse Verpflichtung, da sie daran glauben, daß Familienbande ewig, auch über den Tod hinaus, bestehen. Als Vorbereitung auf das Leben nach dem Tode versuchen sie daher, möglichst viele ihrer Ahnen mit Namen und, wenn möglich, mit Lebensgeschichte zu kennen. Daraus erklärt sich ihre Motivation zur Sammlung genealogischer Daten. [See_a], [GHGRBb], [Kei_a], [Kei_b], [Reu01b] Mit der Entwicklung von GEDCOM wurde etwa 1984 begonnen. Ursprünglich zum Austausch von Daten innerhalb der Gemeinschaft der Mormonen gedacht, wurde es als gemein14 samer Datensatz von fast jedem Programm übernommen und von einigen auch modifiziert. Daher erzeugen in manchen Fällen verschiedene Programme auch verschiedene GEDCOMDatensätze, die nicht immer untereinander kompatibel sind. Mittlerweile sind unter www.FamiliySearch.com, in einer Datenbank, die von den Mormonen verwaltet wird, über 650 Millionen Namen online abrufbar. [NL_2], [Kei_a], [Kei_b], [Reu01b] GEDCOM entspricht einer Zwischensprache und ist als solche, wie schon erwähnt, zum Austausch von genealogischen Daten zwischen verschiedenen Programmen gedacht: Diese Programme haben jeweils eine eigene Datenstruktur, können aber das GEDCOM-Format importieren und/oder exportieren. GEDCOM selbst bietet also keine Organisation zum Austausch der Daten, sondern ist ein Standard, der beschreibt, in welcher Form komplexe genealogische Daten gespeichert werden können. [Kei_a], [Kei_b] Während die erste Version von GEDCOM nur Export und Import der wichtigsten Elemente einer Genealogiedatenbank, wie Name, Geburtsdatum und ort, Heiratsdatum und ort etc. erlaubte, führte die Weiterentwicklung dieses Standards parallel zu der der Genealogieprogramme dazu, daß in der aktuellen Version 5.5 auch Elemente wie Bilder, Töne und Video berücksichtigt werden. Somit können in einer GEDCOM-Datei einzelner Individuen Verweise auf die genannten multimedialen Elemente eingefügt werden, die in Bezug zu den Personen stehen. Mit GEDCOM 5.5 wird seit 1996 gearbeitet; der Standard wurde im Januar 1996 verabschiedet. Zur Zeit steht GEDCOM-Version 6.0 in Entwicklung; eine Beta-Spezifikation wurde bereits vorgestellt. [GHGRBb], [Kei_a], [Kei_b] Eine GEDCOM-Datei ist eine reine Textdatei, die in Datensätze unterteilt ist. Dabei zeigt jeder Datensatz einen hierarchischen Aufbau. Man unterscheidet drei Datensatz-Typen: 1. HEAD 2. INDI 3. FAM Jede GEDCOM-Datei beginnt mit einem HEAD-Datensatz, der allgemeine Informationen über die Datei liefert. Es folgen INDI-Datensätze, in denen die Informationen zu den Personen gespeichert werden. In den FAM-Datensätzen werden die Verwandschaftsverhältnisse zu den einzelnen Personen angegeben. Jede Zeile eines Datensatzes beginnt mit einer Zahl und einem Tag. Die erste Zeile beginnt mit einer 0 und dem HEAD-Tag. Durch die 0 wird dabei der Anfang eines neuen Datensatzes gekennzeichnet. Bei FAMI- und INDI-Datensätzen steht vor dem Tag der ersten Zeile eine ID, anhand der alle Datensätze unterscheidbar sind. [Kei_a], [Kei_b], [GHGRBb] Die Informationen in den Datensätzen beginnen mit einer 1; sobald weitere Informationen zu einer Zeile folgen, wird eine weitere hierarchische Stufe eingefügt. Die jeweilige Art der gespeicherten Information ist dabei anhand des Tags zu erkennen. Z.B. verweist der Tag OCCU (von engl. occupation) im INDI-Datensatz auf die Angabe des Berufs der betreffenden Person. [Kei_a], [Kei_b], [Reu01b], [GHGRBb], [Kei_a], [Kei_b] 15 0 HEAD 1 FILE gjoreski.ged 1 GEDC 2 VERS 5.5 1 CHAR ANSI 1 LANG German 0 @0@INDI 1 NAME Kathrin/Obrusnik/ 1 FAMS @F1@ 0 @1@INDI 1 NAME Marijan/Gjoreski/ 1 SEX M 1 BIRT 2 DATE 19751016 2 PLAC Bedburg 1 OCCU Student 1 FAMS @F1@ 0 @F1@ FAM 1 HUSB @I1@ 1 WIFE @I0@ 1 CHIL @I3@ 1 CHIL @I4@ 1 MARR 2 DATE 08.12.2002 2 PLAC Bonn Beginn des HEAD-Datensatzes Name der GEDCOM-Datei Beginn der GEDCOM-Informationen Version benutzter Zeichensatz verwendete Sprache Beginn des INDI-Datensatzes mit Code 0 Name des Individuums Person 0 gehört zu Familiensatz F1 Beginn des INDI-Datensatzes mit Code 0 Name Geschlecht Beginn der Geburtsdaten Geburtsdatum Geburtsort Beruf Person 1 gehört zu Familiensatz F1 Beginn des FAMI-Datensatzes mit Code F1 Mann Person mit Code 1 Frau Person mit Code 2 Kind Person mit Code 3 Kind Person mit Code 4 Beginn Heiratsdaten Heiratsdatum Ort der Heirat Abb. 2.3.2.1. Beispiel einer Gedcom-Datei 2.3 Datenbanken mit genealogischem Hintergrund Datenbanken mit genealogischem Hintergrund sind im Internet international vertreten. Darunter befinden sich die unmittelbar mit der Genealogie in Verbindung stehenden Datenbanken, aber auch die von Genealogen als Hilfsmittel benutzten Namens- und Ortsdatenbanken. Genealogische Datenbanken werden von verschiedenen Vereinen angeboten. Als Beispiel seien die Mitgliederdatenbanken genannt. In diesen sind die Forschungsgebiete der jeweiligen Mitglieder erfaßt, wodurch die genealogische Forschung in bestimmten Territorien unter verschiedenen Vereinen, die zusammenarbeiten, aufgeteilt ist. In den Datenbanken kann zwar nach Orten und Familiennamen gesucht werden, jedoch werden für den allgemeinen Zugriff nur die Datensätze angezeigt, die von den jeweiligen Forschern zur Veröffentlichung freigegeben wurden. Folgende Vereine z.B. verwalten eine Mitgliederdatenbank, die online abrufbar ist: AGoFF Arbeitsgemeinschaft ostdeutscher Familienforscher e.V., AMF - Arbeitsgemeinschaft für mitteldeutsche Familienforschung e.V., DVG Dresdner Verein für Genealogie e. V., und viele weitere. Sämtliche dieser Datenbanken sind über Links auf der Seite http://www.genealogienez.de/bookmarks /Genealogie.htm zu erreichen. Dort sind auch Links zu weiteren Mitgliederdatenbanken vorhanden. Desweiteren existiert die FOKO-Datenbank des Vereins für Computergenealogie, die über http://foko.genealogy.net/ zu erreichen ist, sowie weltweit eine Vielzahl von GEDCOM-Datenbanken verschiedener Organisationen. Als 16 erstes ist hier die unter www.FamiliySearch.com zugängliche Datenbank mit über 650 Millionen Namenseinträgen zu nennen, die unter Verwaltung der Mormonen steht, welche, wie bereits erläutert, den GEDCOM-Standard entwickelt haben. Weitere Beispiele sind die Datenbank der Organisation WorldConnect unter http://worldconnect.-genealogy.rootsweb.com/ mit über 321 Millionen Namenseinträgen, und speziell für den deutschsprachigen Raum GEDBAS (die genealogische Datenbasis), eine deutschsprachige GEDCOM-Datenbank, unter http://gedbas.genealogy.net/index.jsp. In GEDBAS sind wie in den anderen Datenbanken die GEDCOM-Datensätze enthalten, nicht die Datensätze selbst abrufbar, sondern es ist nur die Suche in diesen Datensätzen möglich. Zu diesem Zweck gibt es ein Suchfenster, in dem es möglich ist, unter bestimmten Suchkriterien nach Personen zu suchen. In GEDBAS sind dies Vor- und Zuname der Person, ihrer Eltern und des Partners; außerdem kann der Ort und ein Datum eingegeben werden. [GHGRBb], Abb. 2.3.2.2. Suchfenster für eine GEDCOM-Datenbank Historische Adreßbücher sind anerkanntermaßen eine weitere wichtige Sekundärquelle für den Familienforscher. Die aus der systematischen Erfassung von historischen Adreßbüchern gewonnenen Datenbestände werden für viele deutsche Orte und ehemals zu Deutschland gehörende Gebiete in einer Datenbank online zur Verfügung gestellt. Weitere für Genealogen wichtige Datenbanken sind Namensdatenbanken; unter diese fallen neben den Personen-Suchportalen auch Online-Telefonbücher verschiedener Anbieter, eMailVerzeichnisse oder Suchmaschinen wie Google oder Yahoo, die ebenfalls wichtige Informationen bei der Suche nach Ahnen oder Verwandten liefern können. Bei einer Ortsdatenbank wie GOV Das genealogische Ortsverzeichnis erhält man als Antwort auf eine Anfrage nach einem Ort den offiziellen Namen des Ortes, die Postleitzahl (die aktuelle sowie die alte, vor der Wiedervereinigung Deutschlands gültige), die staatliche Zugehörigkeit und einen Locator Code. 17 Wenn zu den eingegebenen Daten Einträge in der Datenbank existieren, werden alle Suchergebnisse in Kurzform aufgelistet und einer der Datensätze kann zur Darstellung mit allen bekannten Informationen als Datenblatt geöffnet werden. Beides ist in Abb. 2.4.2 und 2.4.3 zu sehen. In ähnlicher Art und Weise ist die Suche auch in anderen Datenbanken geregelt; es unterscheidet sich nur die Optik. Selbst die internationalen Suchmasken für die jeweiligen Datenbanken sind ähnlich aufgebaut; es existieren nur je nach Organisation zusätzliche Suchoptionen, die eingetragen werden können. Zu nennen sind hier beispielsweise der Todesort oder das Todesdatum, welche in der speziellen GEDBAS-Suchmaske nicht berücksichtigt werden. Abb. 2.4.2 GEDBAS-Suchergebnisse 18 Abb. 2.4.3 GEDBAS-Datenblatt Als Beispiel für eine genealogische Hilfsdatenbank sei das genealogische Ortsverzeichnis genannt, bei dem zu dem Namen einer Stadt oder eines Dorfes weitere für Genealogen wichtige Daten ausgegeben werden. Diese Hilfsmittel sind nötig, um Daten aus sehr frühen Zeitepochen, in denen Ortsnamen offiziell bzw. von Einwohnern anders geschrieben wurden, mit heutigen Orten identifizieren zu können. In Abb. 2.4.4. ist die Eingabemaske zur Suche eines Ortes in Deutschland gezeigt, dabei ist auch die phonetische Suche (d.h. nach Orten, die so klingen wie der gesuchte) möglich. Als Ergebnis wird der in dem Beispiel gesuchte Ort mit seiner aktuellen Zugehörigkeit, der Postleitzahl (dabei wird die aktuelle ebenso wie die ehemalige westdeutsche Postleitzahl angegeben) und einem Code (Locator) ausgegeben, wie er beispielsweise in FOKO zur Kennzeichnung von Orten benutzt wird. Abb. 2.4.4 Suchmaske im Ortsverzeichnis 19 Abb. 2.4.5. Suchergebnis im Ortsverzeichnis 2.4 Visualisierungsmöglichkeiten für genealogische Daten Genealogische Daten sind verschiedentlich darstellbar. Es sind dabei die Darstellung in Textform und die graphische Darstellung zu unterscheiden. Am weitesten verbreitet ist die erstere, da auf diese Weise jedermann seinen Datensatz aufzeigen kann, ohne sich mit graphischen Problemen zu belasten. Dies ist vor allem darauf zurückzuführen, daß sehr viele Personen ohne umfangreiche Computerkenntnisse in der graphischen Visualisierung ihre Daten im Internet darstellen möchten, aber nur die einfachsten Möglichkeiten, die zur Darstellung in Textform nötig sind, beherrschen. Als einfachste Darstellungsform, die auch im Internet sehr weit verbreitet ist, ist die Stammliste zu nennen. Dazu wird bei dem ältesten bekannten Ehepaar begonnen, und jeder Nachkomme einer Person wird um einen bestimmten Abstand nach rechts eingerückt. Das folgende Beispiel ist zur Übersichtlichkeit verkürzt. Georg Ludwig, Elector of Hannover , succeeded his cousin Queen Anne as GEORGE I, King of Great Britain and Ireland 1 Aug 1714; he was b.Osnabrück 28 May 1660 and d.nr Osnabrück 11 Jun 1727; he m.Celle 21 Nov 1682 (separated 1694) Sophia Dorothea Dss of Braunschweig-Lüneburg (Celle 5 Sep 1666-Ahlden 2 Nov 1726) 1a) GEORGE II Augustus, King of Great Britain and Ireland (Hannover 30 Oct 1683- 25 Oct 1760); m. 22 Aug 1705 Karoline Margravine of Brandenburg-Ansbach (1 Mar 1683-St.James's Palace 20 Nov 1737) 1b) Frederick Lewis, Pr of Wales (Hannover 20 Jan 1707-Leicester House 20 Mar 1751); m.St.James's Palace 8 May 1736 Auguste Pss of Saxe-Gotha (Gotha 30 Nov 1719-Carlton House 8 Feb 1772) 1c) Augusta, Pss Royal (St.James's Palace 31 Jul 1737-London 23 Mar 1813); m 16 Jan 1764 Karl II, Duke of Braunschweig (9 Oct 1735- 10 Nov 1806) 2c) GEORGE III William Frederick, King of Great Britain (4 Jun 1738-Windsor Castle 29 Jan 1820); m. 8 Sep 1761 Charlotte Dss of Mecklenburg-Strelitz (19 May 1744- 17 Nov 1818) 8b) Louisa (Leicester House 7 Dec 1724- 8 Dec 1751); m. Altona 11 Dec 1743 King Frederik V of Denmark and Norway (Copenhagen 31 Mar 1723- 14 Jan 1766) 2a) Sophia Dorothea (Hannover 16 Mar 1687-Monbijou, nr Berlin 28 Jun 1757); m.Berlin 17 Nov 1706 King Friedrich Wilhelm I of Prussia (Berlin 15 Aug 1688-Berlin 31 May 1740) Abb. 2.4.1 Stammliste 20 Zu dieser Darstellung als Stammliste gibt es weitere ähnliche Varianten. Abweichend von dem ersten Beispiel können auch Linien in die Darstellung einbezogen werden, die die Zugehörigkeit der Daten als optisches Hilfsmittel unterstreichen. In den meisten Fällen sind der Liste nicht so viele Informationen zu entnehmen wie in dem obigen Beispiel der englischen Königsfamile, sondern nur Name, Vorname, das Geburts- und das Sterbedatum. Je nach Vorliebe wird ein Heiratsdatum, Geburts-, Sterbeort oder eine andere gewünschte Information mit angegeben. [Rud], [VC], [GHGRBa], [GHGRBc] Person 1 Partner 1 von Person 1 Kind 1 von Person 1 und Partner 1 Kind 2 von Person 1 und Partner 1 Kind x von Person 1 und Partner 1 Partner von Kind x Partner m von Person 1 Kind von Person 1 und Partner m Abb. 2.4.2 Darstellung einer Stammliste mit Linien Bei einer anderen Möglichkeit der Visualisierung wird mit einem Ehepaar begonnen, und jede weitere Generation wird durch eine Markierung abgetrennt. In der zweiten Generation stehen somit die Kinder dieses Ehepaars, in der dritten Generation die Enkel, wobei diese jeweils nach ihren Eltern geordnet sind und bei jedem Enkel aufgeführt ist, wer die Eltern sind. Stammvater: 1 (1) Kirko Goreski, * 20.02.1949 in Bazernik oo 1973 (2) Olgica Neistorovska, *13.09.1953 I. Generation: 2 Kinder des (1) Kirko Goreski I 1-2 I1 (3) Marijan Gjoreski, * 16.10.1975 in Bedburg oo 02.01.2002 (5) Kathrin Obrusnik, *31.12.1978 in Köln I 2 (4) Manuela Gjoreski * 16.09.1978 in Bedburg oo 02.01.2003 (6) Tom Smirnoff, *11.02.78 II. Generation: 2 Kinder des (3) Marijan Gjoreski II 1-2; 2 Kinder der (4) Manuela Gjoreski II 3-4 II 1 (7) Alexander Gjoreski, * 14.06.2003 II 2 (8) Maya Gjoreski, * 14.06.2003 II 3 (9) Alexandra Smirnoff * 06.01.2004 II 4 (10) Natascha Smirnoff, * 06.01.2004 21 Dieser Darstellung ähnelt der Familienbogen oder auch Familiengruppenbogen. Der Unterschied zur oben beschriebenen Darstellung besteht darin, daß nur ein Ehepaar mit seinen Kindern eingetragen wird. Bei einigen Familienbögen werden auch die Eltern des Ehepaars, jedoch nur namentlich und eventuell mit Geburts- und Sterbedatum, erwähnt. [GHGRBa], [GHGRBc], [VC] Der Familienbogen beginnt mit den Informationen des Ehemannes und den Informationen der Ehefrau. Meistens sind dies Name, Vorname, Geburts- und gegebenenfalls Sterbedatum und einige benutzerabhängige Eintragungen wie Beruf oder Religion. Diesen Daten folgen die Informationen zu den einzelnen Kindern. Familienbögen müssen nicht so ausführlich wie der hier als Beispiel dargestellte sein; es ist auch möglich, daß die Kinder nur namentlich ohne ihre jeweiligen Ehepartner und nur mit Geburts- und gegebenenfalls Sterbedatum erwähnt werden. [VC] Abb. 2.4.3. Familienbogen [VC] Zu den graphischen Visualisierungsmöglichkeiten gehören weiterhin auch die Ahnentafel und der Stammbaum. Es gibt eine Vielzahl von Möglichkeiten bei der Darstellung eines Stammbaums. Eine ausführliche Diskussion findet im Kapitel 4 statt, in dem die Alternativen vorgestellt werden. Die Ahnentafel wird manchmal in Anlehnung an einen Stammbaum in den Hintergrund eines Baumes integriert, so daß der Proband die Wurzel bildet und alle seine Vorfahren folgen; dabei werden nur die direkten Eltern berücksichtigt, wie es bei einer Ahnentafel üblich ist. [GHGRBa], [GHGRBc] 22 Daniel Josef Rüttgers Hubert Josef Rüttgers Franziska Moll Hubert Josef Rüttgers Adelheit Frenzen Daniel Josef Rüttgers Alfred Müller Helga Müller Katherina Obermann Abb. 2.4.4. Ahnentafel mit vier Generationen Georg Ludwig Sophia Dorothea GEORGE II Augustus Sophia Dorothea Karoline Margravine Frederick Lewis Anne, Pss. Royal Pss. Auguste Willem IV Amelia Sophia Eleanor Friedrich Wilhelm I Caroline Elizabeth George William Abb. 2.4.5 Stammbaum 23 William Augustus Mary Louisa Friedrich II Frederik V 3 Datenbanken und Java Grundlagen 3.1 Grundlagen von Datenbanken Ein DBMS (Daten Bank Management System) besteht aus einer Sammlung von Programmen, das Datenbanken eines bestimmten Typs (relational, objektorientiert, ) verwalten kann. Dabei ist eine Datenbank (DB) eine Menge von Daten, die in Beziehung zueinander stehen. Zusammen kann man sie als DBS (Datenbanksystem) bezeichnen. Ein Datenmodell wird durch die Menge von Skizzen zur Modellierung beschrieben. Mit ihm werden die in der Datenbank enthaltenen Daten formal beschrieben und ihre Beziehungen zueinander aufgezeigt. Das Modell dient zur Modellierung von beliebigen Anwendungen, darunter beispielsweise Tabellen, Funktionen, Typen und Klassen. Es existiert eine Vielzahl von Datenmodellen; in dieser Arbeit wird allerdings nur das am weitesten verbreitete relationale Modell betrachtet. Weitere bekannte Modelle sind unter anderem das Entity-Relationship-Modell, welches ein rein konzeptionelles Modell ist; eher historische Beispiele und kaum noch verwendet sind das Netzwerkmodell und das hierarchisches Modell. Neben dem relationalen Modell existieren unter anderem das objektrelationale und das objektorientierte Modell. [KE97], [Man98] Nachdem die Auswahl eines bestimmten Modells getroffen wurde, ist desweiteren noch ein Datenbankschema nötig. Ein Datenbankschema ist anwendungsabhängig und stellt eine Struktur des Datenmodells, die eine bestimmte spezielle Anwendung beschreibt, dar. Mit Hilfe des anwendungsunabhängigen Datenbankmodells wird also ein anwendungsabhängiges Datenbankschema entwickelt. Eine derartige Entwicklung des Datenbankschemas ist sinnvoll, damit im laufenden Betrieb in der Regel keine Änderungen am Schema notwendig werden, bzw. damit, falls sie doch nötig sein sollten, das Schema sich nur in sehr großen Zeitspannen ändert. Eine solche auch als Schema-Evolution bezeichnete Änderung könnte durch Integritätsbedingungen erschwert werden, so daß manche Änderungen anhand der schon in der Datenbank existierend Daten und der dazugehörigen Integritätsbedingungen erst gar nicht zugelassen werden. [KeEi97],[Man98], [Voss99] Existiert für eine bestimmte Anwendung ein Datenbankschema, so werden reale Daten in die zugehörige Datenbank geladen. Diese auch als Populieren der Datenbank bezeichnete Aktion führt zum Datenbankzustand. Ein Datenbankzustand oder auch eine Datenbankausprägung ist wiederum die Gesamtheit aller realen Daten (d.h. Daten aus der realen Welt), die in der Datenbank gespeichert sind. Eine Datenbank enthält Daten, die möglicherweise vertraulich oder überflüssig sind und für bestimmte Benutzergruppen ausgeblendet werden sollen. Für solche Fälle gibt es externe Schemata, die auf der logischen Ebene der Datenbank die Daten in Subschemata anzeigen, ohne das Schema des Datenmodells zu verändern. Sie werden auch als Views (Sichten) bezeichnet. Das Ausblenden von vertraulichen und irrelevanten Informationen ebenso wie der Schutz des Benutzers vor möglichen Schema-Evolutionen, die ein View nicht betreffen, bezeichnet man als logische Datenunabhängigkeit. Es existiert in einer Datenbank ferner eine physische Datenunabhängigkeit, was bedeutet, daß der Benutzer von der Datenspeicherung und des Datenzugriffs abgeschirmt wird; er kennt das logische Schema der Datenbank und muß sich mit der physischen Speicherverwaltung nicht befassen. [KeEi97], [Man98], [Voss99] Die Daten einer Datenbank werden im 3-Schema-Konzept (oder auch 3-Schichten-Modell) beschrieben. Das 3-Schichten-Modell dient dazu, die Unabhängigkeit der Daten für die Anwendungspogramme zu gewährleisten, die in drei Ebenen aufgeteilt werden: Es existiert eine konzeptuelle Ebene, in der die logische Gesamtstruktur aller Daten mitsamt ihrer Beziehungen dargestellt werden. In der internen Ebene werden die spezielle Speicherstruktur sowie 24 die Speicherverwaltung und Zugriffsmechanismen einer Datenbank beschrieben. Die dritte und letzte, die sogenannte externe Ebene ist die Benutzersicht. Dort werden die Daten unabhängig von Struktur und Schema in einem speziell auf den Benutzer zugeschnittenen externen Schema dargestellt. Zwischen diesem externen Schema und dem konzeptionellen Schema existiert somit die logische Datenunabhängigkeit; zwischen dem konzeptionellen Schema und der internen Ebene wiederum gilt die physische Datenunabhängigkeit. [KeEi97],[Man98] externe Ebene Logische Datenunabhängigkeit Konzeptionelle Ebene physische Datenunabhängigkeit Interne Ebene Abb. 3.1 drei Schichten Modell Eine Datenbanksprache umfaßt die Datenbeschreibungssprache (oder auch Data Definition Language, DDL), die zur Darstellung eines Schemas dient, und die Datenmanipulationssprache (DML, Data Manipulating Language) zur Formulierung von Anfragen, Änderungen und Eingaben. [KeEi97] 3.1.1 Das relationale Modell und SQL Relationale Datenbanksysteme sind heutzutage marktbeherrschend. Im relationalen Datenmodell werden Informationen in Tabellen (Relationen) abgelegt. Eine Tabelle besitzt einen Tabellennamen (kursiv) sowie mehrere Feldnamen (Spalten). Letztere werden als Attribute (Fettdruck) bezeichnet. Durch den Wertebereich eines Attributes wird festgelegt, welcher Art die mögliche Eintragung ist. Ein Datensatz, d.h. eine Zeile in einer Tabelle, wird als Tupel (umrandet) bezeichnet. Eine Spalte eines Tupels bezeichnet man als Wert. [KeEi97], [Man98], [Voss99] 25 Vögel Gruppe Greifvögel Greifvögel Greifvögel Singvögel Singvögel Singvögel Art Habicht Steinadler Turmfalke Wiesenpieper Zaunkönig Nachtigall Größe ~Mäusebussard >Mäusebussard <Rabenkrähe < Haussperling < Haussperling >Haussperling Status Teilzieher Jahresvogel Teilzieher Teilzieher Jahresvogel Sommervogel Abb. 3.1 Tabelle einer relationalen Datenbank Im folgenden soll eine kurze Einführung in SQL (Structured Query Language ) gegeben werden, die allerdings aus Zeit- und Platzgründen nicht vollständig sein kann. Die Einführung erfolgt anhand von SQL2, wobei die Anfragemöglichkeit mit SQL als Schwerpunkt behandelt wird. SQL ist eine strukturierte Anfragesprache für relationale Datenbanken. Der erste SQLStandard wurde 1986 von der ANSI verabschiedet, 1989 revidiert, und wurde als SQL1 bzw. SQL89 bekannt. Trotz dieses Standards existierten auch noch weiterhin verschiedene SQLImplementierungen. Erst mit SQL2, auch als SQL92 bekannt, wurde eine Norm standardisiert, an die sich die meisten Hersteller halten konnten. SQL3 schließlich wurde 1999 verabschiedet und ist deshalb auch unter SQL: 1999 bekannt. Dieser letzte Standard wurde mit Konzepten wie Rekursion und objektorientierten Ansätzen erweitert. [Man98], [NL_5] SQL kann als stand alone -Sprache benutzt werden oder auch eingebettet in eine allgemeine Programmiersprache. SQL ist eine vollständige DB-Sprache, die als DDL-Teilsprache oder auch als DML-Teilsprache mit Anfrage- und Änderungsmöglichkeiten verwendet werden kann. [Man98] Grundlagen der SQL-DDL Die CREATE TABLE-Anweisung dient zur Definition eines neuen Relationsschemas inklusive Attribute, Wertebereiche und Integritätsbedingungen (Anlegen einer Tabelle). In Abb. 3.2.1 wurde die Tabelle Professoren mit den drei Attributen: PersNr, Name und Rang generiert, wobei hinter jedem Attribut der Wertebereich angegeben wird. Als Integritätsbedingung wird bei den ersten beiden Attributen not null festgelegt. Die DROP TABLE-Anweisung entfernt eine Tabelle aus dem Schema. Die ALTER TABLE-Anweisung dient zum Ändern der Attribute, Wertebereiche oder Integritätsbedingungen. [Man98] 26 CREATE TABLE Professoren (PersNr integer not null, Name varchar (20) not null Rang character (2)); ALTER TABLE Professoren ADD COLUMN Gehalt INTEGER; DROP TABLE Professoren; ALTER TABLE Professoren ALTER COLUMN Name VARCHAR(30); Abb. 3.2.1 Es existieren noch einige weitere DDL-Operationen zur Wertebereichs-, Index- und Sichtdefinition, auf die hier nicht weiter eingegangen wird. [Man98] Grundlagen der SQL-DML Mit der INSERT-Anweisung werden einzelne Tupel oder eine Tupelmenge in eine Tabelle eingefügt. Fehlende Attributwerte werden mit Nullwerten aufgefüllt. Da keine Attribute angegeben werden, fügt man sie in der gleichen Reihenfolge wie in der Schemadefinition ein. Der DELETE-Operator löscht eine Tupelmenge oder einzelne Tupel, die im WHERE-Teil spezifiziert werden; falls der WHERE-Teil nicht angegeben ist, werden sämtliche Inhalte der Relation gelöscht. Die UPDATE-Anweisung ist nichts anderes als eine nacheinander ausgeführte DELETE- und INSERT-Anweisung. Sie kann also als syntaktischer Zucker angesehen werden. Die UPDATE-Anweisung kann bedingungslos ausgeführt werden; in diesem Fall werden alle Tupel der Tabelle geändert. Um nur bestimmte Tupel einer Tabelle zu ändern, wird dieses im Bedingungssteil separat angegeben. Beispiele für die Operationen sind in Abb. 3.2.2 angegeben. [Man98], [KeEi97] INSERT INTO Professoren VALUES (1250, Manthey , C4 , 4000); DELETE FROM Professoren WHERE Gehalt >5000 INSERT INTO ProfessorenC4 SELECT * FROM Professoren WHERE Rang = C4 * Bedeutet, alle Attribute sind gewählt. UPDATE Professoren SET Gehalt = Gehalt + 400 Alle Professoren bekommen eine Gehaltserhöhung. UPDATE Professoren SET Gehalt = Gehalt + 400 WHERE Rang = C4 (Nur Rang C4-Professoren bekommen eine Gehaltserhöhung.) Abb. 3.2.2 UPDATE, INSERT und DELETE Beispiele 27 Anfragen mit SQL Anfragen werden in SQL mit SELECT-FROM-WHERE-Blöcken gestellt. Der WHERETeil ist optional und kann daher entfallen. [Man98] In den SELECT-Teil kommen die auszugebenden Attribute mit expliziter Relationszugehörigkeit, falls es nicht eindeutig ersichtlich ist, zu welcher Relation sie gehören. Der FROMTeil beschreibt, welche Relationen an der Anfrage beteiligt sind und teilt ihnen für die Anfrage einen Namen zu, falls z.B. eine Relation mehrfach auftritt. [Man98] Es ist zu beachten, daß Ergebnisse von Anfragen in SQL keine Relationen sind, sondern Multi-Mengen. Sie können Duplikate enthalten. Um Duplikate zu vermeiden, muß dies explizit mit dem Schlüsselwort DISTINCT gefordert werden. [Man98] SELECT xi1.A1, , Xim.Am FROM R1 x1, , Rn xn WHERE Bedingung SELECT Geburtsort FROM Person SELECT DISTINCT Geburtsort FROM Person GEBURTSORT Bonn Bonn Bonn Bornheim Köln Köln Köln GEBURTSORT Bonn Bornheim Köln Links eine Multimenge und oben eine Menge. SELECT-Blöcke sind auch mit den folgenden drei algebraischen Operatoren kombinierbar: 1. (Schnitt in SQL2 INTERSECT ) 2. (Vereinigung IN SQL2 UNION ) 3. (Minus in SQL2 EXCEPT) Auf diese Weise können mehrere Anfragen durchgeführt und die Ergebnisse schließlich entweder vereinigt, nur die gleichen betrachtet, oder bestimmte abgezogen werden. SELECT-Blöcke können auf drei Arten mit Operatoren im WHERE-Teil geschachtelt werden: 1. Schachtelung mit dem IN-Operator in WHERE-Teil, um zu prüfen, ob Attribute in dem geschachtelten SELECT-Block enthalten sind. 2. Schachtelung mit Vergleichsoperatoren mit Quantoren; folgende sechs Quantoren existieren, gefolgt von ALL oder SOME : 4. < 5. = 6. > 1. 2. 3. < > 28 3. Schachtelung mit dem Existenzquantor EXISTS; analog dazu wird NOT EXISTS angewendet. SQL kennt keinen Allquantor; deshalb müssen alle Anfragen mit Hilfe des aus der Prädikatenlogik bekannten Zusammenhangs x(P) = x( P) umgewandelt werden. SELECT Name FROM Person WHERE ID IN (SELECT ID FROM Professoren WHERE Name= Manthey ) SELECT Name FROM Professor WHERE PersNr<= ALL (SELECT PersNr FROM Professor); . Namen der Professoren mit der kleinsten Personalnummer SELECT Name FROM Professor WHERE EXISTS (SELECT * FROM Professor WHERE PersNr = 15466) Desweiteren existieren noch andere Operatoren in SQL, die hier nicht genauer beschrieben werden. Dazu gehört die Aggregatfunktionen COUNT zur Erfassung der Anzahl auftretender Werte für ein Attribut. Im Spezialfall COUNT (*) werden die Anzahl der Tupel gezählt und mit DISTINCT mehrfach vertretene Werte ignoriert. Für numerische Werte berechnet SUM die Summe aller Werte eines Attributes; AVG ermittelt den arithmetischen Mittelwert eines Attributes und MAX bzw. MIN gibt den größten bzw. kleinsten Wert eines numerischen Attributes aus. Nullwerte werden bei den Aggregatfunktionen nicht berücksichtigt. [KeEi97], [Man98] Joins lassen sich seit SQL2 auch direkt formulieren und müssen nicht wie in früheren SQLVersionen durch den Anwender selbst simuliert werden. [Man98] 1. 2. 3. 4. 5. 6. CROSS JOIN NATURAL JOIN JOIN LEFT OUTER JOIN RIGHT OUTER JOIN FULL OUTER JOIN Bei den letzten vier Joins wird im ON-Teil die Join-Bedingung angegeben. Mit GROUP BY ist es möglich, sich Ergebnisse von Anfragen gruppiert ausgeben zu lassen. Zusätzlich kann HAVING als Bedingung für die Gruppierungsanweisung angegeben werden. SQL bietet die Möglichkeit, die Attribute in der Antwortmenge aufsteigend (ASC) oder absteigend (DESC) zu sortieren. [KeEi97], [Man98] 29 3.2 Access Access ist ein DBMS und seit 1992 ein Teil von Microsoft Office. Die neueste Version ist Access 2003 aus dem Office 2003 -Paket. Access ist für kleinere Netzwerke oder Einzelplatz Desktops geeignet. Die Spezifikation von Access gibt die Anzahl der Benutzer, die gleichzeitig auf die verwaltete Datenbank zugreifen können, mit zweihundertfünfundfünfzig an, jedoch ergibt sich durch die Mehrbenutzersynchronisation eine in der Praxis erheblich geringere Zahl. Durch die Verwaltung der Sperren bei Datenänderungen wird Access bei mehr als zehn Benutzern zu langsam. Sollte die Datenbank mehr als 100.000 Einträge besitzen oder regelmäßig mehr als zehn Benutzer auf die Datenbank zugreifen, sollte Access mit einem SQL-Server gekoppelt werden. Für Anwendungen im Internet bietet Access einen großen Vorteil, da die meisten Internet Service Provider einen MS Access-ODBC-Treiber installiert haben, wohingegen ODBC-Treiber für SQL-Server nicht immer angeboten werden bzw. teuer gekauft werden müssen. [NL_2], Der Aufbau von Microsoft Access gestaltet sich so, daß die Benutzeroberfläche als Interface von der Jet-Engine, die alle elementaren Datenbankfunktionen enthält, getrennt ist. Diese JetEngine wird von allen Microsoft-Office-Programmen und Visual-Basic unterstützt und darf im Gegensatz zum restlichen Microsoft-Access-Paket frei weitergegeben werden. Der JetEngine ist es möglich, auch auf andere Datenbank-Formate wie dBase, Paradox und weitere zuzugreifen. Dazu werden ISAM-Treiber (Index-Sequential-Access-Method) benötigt. Datenbanken, die nicht mit der ISAM-Technik ansprechbar sind, werden über ODBC angesprochen. [Wik_8], 3.3 JDBC/ODBC ODBC (Open DataBase Connectivity) steht für offene Datenbankanbindung. Hierbei handelt es sich um eine standardisierte Methode, die den Zugriff auf Datenbanken erlaubt, ohne zu berücksichtigen, mit welchem Programm oder mit welchem Betriebssystem der Zugriff erfolgt. ODBC beruht auf einer Spezifikation, die durch die SAG (SQL-ACCESS-Group) unter Aufsicht von Microsoft erstellt wurde. JDBC (Java DataBase Connectivity) stellt einen Satz von Klassen und Methoden zur Nutzung relationaler Datenbanksysteme dar. Im Gegensatz zu ODBC ist JDBC plattformunabhängig. JDBC erlaubt nur Kommunikation mit Datenbanksystemen, die ebenfalls JDBC unterstützen. [Ull03], [Wit_a], [Wit_a], [ODBCa] [Job02], [Hag96] Das ODBC-Interface bietet Funktionen, um einer Anwendung zu erlauben, sich mit einer Datenbank zu verbinden. Diese Verbindung dient zur Übertragung von SQL-Befehlen an die Datenbank und zum Empfang der Ergebnisse. ODBC benutzt eine Syntax, die auf X/OPEN und SAG basiert. Die ODBC-Verbindung besitzt eine Menge von Fehlercodes, um dem Anwender das Suchen nach Fehlern zu ermöglichen. Die Architektur von ODBC wird in vier Schichten gegliedert: [MSH02], [Ull03], [Job02], [Hag96], [ODBCa] 1 2 Die ODBC-Applikation; sie ist für die SQL-Ausdrücke und den Empfang der Ergebnisse zuständig. Der ODBC-Treiber-Manager; er ist zum aktivieren des erforderlichen Treibers für die Applikation zuständig, wobei eine Applikation auf verschiedene DBMS gleichzeitig zugreifen kann. Der Treiber-Manager verarbeitet ODBC-Anfragen und überprüft ihre Parameter. 30 3 4 Der ODBC-Treiber; er stellt die Verbindung zum DBMS her und sendet die Anfragen an das System. Desweiteren liefert er die Ergebnisse der Anfragen zurück. Sollte ein Fehler auftreten, gibt er die Fehlermeldung an den Benutzer zurück. Die Datenquelle; diese besteht aus den Daten mit den zugehörigen Informationen für den Zugriff auf diese Daten aus anderen Programmen und Datenbanken, die ODBC unterstützen. Die API von ODBC kann in drei Ebenen gegliedert werden 1. 2. 3. Core-API Level 1-API Level 2-API In dem Core-API sind die Funktionen enthalten die jeder ODBC-Treiber unterstützt. Darin sind die Aufgaben zur Datenbankanbindung, zum Ausführen von SQL-Ausdrücken und zum Bearbeiten der Informationen eines Ergebnisses sowie die Standardfehlermeldungen enthalten. Es kann davon ausgegangen werden, daß jeder ODBC-Treiber diese Funktionen bietet. [MSH02], [Ull03], [Wit_a], [Wit_a], [Job02] Das Level 1-API stellt Funktionen zur Verfügung, die es erlauben, mehr Informationen über die in der SQL-Anweisung angesprochene Tabellen des Datenbankschemas und die Ergebnisse zu erhalten, dazu gehört die Genauigkeit von Datentypen und um welche Datentypen es sich handelt. Weiterhin kann die Datenverbindung konfiguriert werden, es können z.B. die unterstützten Treiberfunktionen abgefragt werden. Das Level 2-API dient hauptsächlich der Erhöhung der Performance, worunter auch die Optimierung der Anfragen fällt. [MSH02], [Ull03], [Wit_a], [Wit_a], [Job02] Von den verschiedenen Treiberherstellern wird nicht jede der drei Ebenen unterstützt bzw. vollständig unterstützt. Dem Anwender bleibt oft nichts anderes übrig, als verschiedene Treiber auszuprobieren. [MSH02], [Ull03], [Wit_a], [Wit_a], [Job02] Java kommuniziert über das JDBC mit dem DBMS. Falls JDBC nicht unterstützt wird, kann einfach eine ODBC-Bridge dazwischen gesetzt werden. Das JDBC Projekt wurde 1996 gestartet und auch 1996 spezifiziert. Seit dem JDK 1.1 ist JDBC Bestandteil des Java-CorePaketes. Mit JAVA 1.1x wird auch ODBC in das Java Core-Paket aufgenommen, da nur wenige Datenbanksysteme JDBC direkt, jedoch fast alle Datenbanksysteme ODBC unterstützen. Eine JDBC-ODBC-Bridge gewährleistet, daß mit Java auf alle ODBC-Systeme zugegriffen werden kann. [MSH02], [Ull03], [Wit_a], [Wit_a], [Job02] JDBC definiert aus Anwendersicht: Klassen zum Absetzen der SQL-Befehle, Klassen mit Metadaten, Klassen zur Auswertung der Fehlermeldungen, Klassen zur Bearbeitung der Ergebnisse der Abfragen, allgemeine Zuordnungen von Java-Datentypen zu denen der DB und den Ablauf zum Zugriff auf die Datenbank. 31 Darstellung der grundlegenden Abläufe von JDBC Driver Manager getConnection DBMS Connection createStatement Statement DB executeQuery Result Set while (next ()){ getXXX() } Abb. 3.4.1 JDBC-Anbindung 3.4 Java AWT und Swing Graphische Benutzerschnittstellen, auch GUI (Graphical User Interface) genannt, können in Java mit AWT (Abstract Window Toolkit) und Swing programmiert werden. Swing wurde ab Java 2 in dem Paket javax.swing als Teil des Java-Pakets implementiert; vorher war Swing eine optionale Komponente, die in Java 1.1 eingeführt wurde. Swing ist eine Erweiterung des AWTs; die Klassen, Methoden und Techniken wurden unter Swing verbessert und ausgebaut. Diese Verbesserung bringt jedoch einen Nachteil mit sich, nämlich in Bezug auf die Performance und den Ressourcenverbrauch. Swing-Anwendungen sind in der Regel langsamer, da sie mehr Speicher- und Prozessorressourcen benötigen als nur auf AWT basierende Anwendungen. Viele der Swing-Komponenten sind direkt vom AWT abgeleitet und besitzen densel32 ben Namen, dem ein J vorangestellt wird. Somit entsprechen die AWT-Klassen Window, Frame, Applet und Dialog den Swing-Klassen JFrame, JWindow, JApplet und JDialog. Alle Oberflächenkomponenten sind in Swing von JCopmonent abgeleitet, dadurch sind sie gleichzeitig Komponenten und Container. Sie sind alle, bis auf die vier oben erwähnten Komponenten, Lightweight-Komponenten, im Gegensatz zu den AWT-Komponenten, die HeavyweightKomponenten sind. Heavyweight-Komponenten liegen auf der z-Achse über den Lightweight-Komponenten, sind immer rechteckig und werden immer deckend (engl. opaque) ohne transparente Bereiche gezeichnet. [MSH02], [Ull03] Nun werden einige Komponenten vorgestellt, die auch im Rahmen dieser Diplomarbeit verwendet wurden. Zu Beginn wird das Erstellen eines Fensters beschrieben. [MSH02], [Ull03] import.java.awt.*; public class MakeFrame extends Frame { public MakeFrame (String Title) { super(Title); setSize(200,100); setVisible(true); } public static void (String [] args) { new MakeFrame( Java Frame mit AWT ); } } import.javax.swing.*; public class MakeFrame extends JFrame { public MakeFrame (String Title) { super(Title); setSize(200,100); setVisible(true); } public static void (String [] args) { new MakeFrame( Java Frame mit Swing ); } } Abb. 3.4.1 Ein Frame mit AWT und Swing Die nun folgenden Beispiele werden nur noch in Swing vorgestellt. An ein Frame kann in wenigen Schritten ein Menü angefügt werden. Ein Fenster kann aber auch noch nicht geschlossen werden. Um dies zu ermöglichen, ist noch eine Erweiterung einzufügen. Unter Swing wird dieses mit der Zeile setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) ermöglicht. [MSH02], [Ull03] 33 import javax.swing.*; public class Fenster extends JFrame { public Fenster (String Title) { super(Title); initializeMenu(); setSize(250,100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public void initializeMenu() { JMenu mJMenu; JMenuBar menuBar= new JMenuBar(); menuBar.add(mJMenu = new JMenu("Datei")); mJMenu.add(new JMenuItem("Beenden")); setJMenuBar(menuBar); } public static void main (String[] args) { new Fenster("Java Frame mit Swing"); } } Abb. 3.4.2 JFrame mit Menü und Close Operation Mit new JMenuBar() wird eine Menüleiste erstellt. An dieser können dann einzelne Menüpunkte angehangen werden; wie im Beispiel wird mit new JMenu( Datei ) ein neuer Menüpunkt erzeugt. An diesen Menüpunkt können dann weitere Menüpunkte oder Submenüs angehangen werden. Mit new JMenuItem( Menüname ) wird ein Menüpunkt und mit new JMenu( Menüname) wird ein Untermenü erzeugt, an dem weitere Menüpunkte angehangen werden können. Diese müssen, nachdem sie erzeugt wurden, mit add an die Menüleiste oder das Menü angehangen werden. Als weitere Menü-Komponenten exstieren JChekBoxMenuItem, um den Status als selektiert oder nicht selektiert anzuzeigen, und JRadioButtonMenuItem. Mit dieser kann eine Gruppe von Optionen zusammengefaßt werden, von denen immer nur eine selektiert werden kann. Es ist mit JToolBar auch möglich, Buttons in die Menüleiste einzufügen. [MSH02], [Ull03] Zur Darstellung der Größe gibt es verschiedene Möglichkeiten. Die im Beispiel verwendete ist setSize(), mit der die Größe explizit angegeben wird. Die Größe ermittelt sich aus dem Inhalt und den plattformabhängigen Umrahmungen, so daß bei einer größeren Umrahmung wie in Windows XP (im Vergleich zu älteren Windows-Versionen) die Titelleiste größer und somit der Inhalt kleiner ist. Die zweite Möglichkeit pack() stellt ein Fenster in der minimalen Größe dar, so daß alle enthaltenen Komponenten ausreichend Platz haben. Nach Festlegung der Größe eines Fenster muß es noch mit setVisible(true)sichtbar gemacht werden. [MSH02], [Ull03] Um Komponenten, die zu groß für die Oberfläche sind, anzuzeigen, wird JScrollPane benutzt. Ein JScrollPane besteht aus dem JViewport, d.h. dem Bereich innerhalb des Fensters, und einem horizontalen und einem vertikalen Rollbalken. Diese beiden Rollbalken erscheinen, sobald die Komponente aufgrund ihrer Größe nicht mehr angezeigt werden kann. Um zwei Komponenten zu trennen, kann eine JSplitPane genutzt werden. Die Leiste (Divider) zwischen den getrennten Komponenten kann verschoben werden, wobei dann der sichtbare Be34 reich der einen Komponente proportional zum Wachstum der anderen abnimmt. Es ist ein horizontales und vertikales Teilen möglich. [MSH02], [Ull03] Zum Bestätigen oder Treffen einer Auswahl existieren Buttons. Mit JButton wird ein Button erzeugt, der nach Bestätigung wieder in seine Ausgangsposition zurückkehrt. JToggleButton bleibt bis zur nächsten Auswahl gedrückt. Desweiteren verhält sich JCheckBox wie ein JToggleButton, nur ist die graphische Darstellung die eines leeren Kästchens, das bei Bestätigung mit einem Häkchen versehen wird. JRadioButton entspricht in etwa einer JCheckBox, wobei immer nur ein Punkt aus einer Gruppe ausgewählt werden kann. [MSH02], [Ull03] Die einfachste Textkomponente in Swing ist ein JTextField. Sie erzeugt ein einzelliges Textfeld, dessen Inhalt beispielsweise für Eingaben abgefragt werden kann. JTextArea erstellt im Gegensatz dazu ein Textfeld mit mehreren Zeilen. [MSH02], [Ull03] Es existiert ein Vielzahl von weiteren Komponenten, allerdings wird hier nur noch auf den Layout-Manager eingegangen. Mit dem Layout-Manager wird bestimmt, wie verschiedene Komponenten angeordnet werden, beispielsweise die Buttons in einem Fenster. Zu den Standard-Layouts gehören FlowLayout, BorderLayout, CardLayout, GridLayout, GridBagLayout, BoxLayout und das SpringLayout. Neben diesen Layouts gibt es die Möglichkeit eines selbstdefinierten Layouts. Hier werden die ersten beiden Layouts vorgestellt. Das FlowLayout ist bei JPanel voreingestellt. Es ordnet alle Komponenten in der Reihenfolge, in der sie eingefügt werden, nebeneinander an. Sobald der Container zu schmal ist, wird in der nächsten Zeile fortgefahren. Die Ausrichtung kann linksbündig, rechtsbündig oder zentriert erfolgen. Bei einer Änderung der Größe des Containers wird das Layout angepaßt. Das BorderLayout ist der voreingestellte Layout-Manager von JWindow, JFrame und JDialog. Hiermit ist es möglich, Komponenten gezielt nebeneinander oder untereinander anzuordnen. Der Container wird in fünf Bereiche aufgeteilt, und zwar in eine Komponente in der Mitte, um die die anderen vier Bereiche angeordnet werden. Sie werden mit den vier Himmelsrichtungen angesprochen. Soll ein JLabel mit einem Text beispielsweise rechts vom Zentrum angeordnet werden muß, geschieht dies mit folgendem Befehl: add(BorderLayout.NORTH, new JLabel( Text )). [MSH02], [Ull03] 35 4 Graphische Visualisierung genealogischer Daten Zur Darstellung von Stammbäumen kann aus einer großen Zahl von Alternativen gewählt werden, die sich jeweils in der graphischen Anordnung der Personen unterscheiden. Begonnen wird bei jeder Variante mit dem Stammvater, d.h. der ältesten bekannten Person und ihrem/ihren Ehepartner(n). Diese Stammeltern stellen die Wurzel dar, von der ausgehend die Kinder und alle weiteren Nachkommen aufgeführt werden. Die Wurzel des Stammbaumes wird in der Regel an das obere Ende der Darstellung gesetzt, so daß der Stammbaum nach unten hin wächst. Die Wahl der Darstellung ist oft davon abhängig, wo der Stammbaum seinen Platz finden soll. Ist er dazu bestimmt, gewissermaßen als Wohnungsaccessoire oder Bild ein Zimmer zu schmücken, wird meistens auf einen von Hand gezeichneten Stammbaum oder Vordrucke, die vervollständigt werden, zurückgegriffen. Bei einer Online-Darstellung im Internet auf einer eigenen Homepage oder einer allgemeinen Seite werden Stammbäume in den meisten Fällen als Stammliste dargestellt. Sollten sie als Graph zur Verfügung gestellt werden, sind diese Versionen sehr oft als Bilddatei gespeichert, was mit einem von Hand gezeichneten Stammbaum gleichgesetzt werden kann; nur wurden hierbei als Handwerkszeug keine Pinsel und Farben benutzt, sondern ein computergestütztes Graphikprogramm. Als Stammliste dargestellte Stammbäume sind wegen der einfachen Generierung beliebt. Da viele Internetseiten mit genealogischem Hintergrund und Homepages vor der Einführung von DSL erstellt wurden, haben sich viele Genealogen bzw. Hobbygenealogen dazu entschlossen, ihren Stammbaum in reiner Textform darzustellen. 4.1 Klassifizierung Darstellungsformen für genealogische Daten können in vier Arten eingeteilt werden. 1. 2. 3. 4. Mündliche Darstellung Bildliche Darstellung Schriftliche Darstellung Graphische Darstellung In einer mündlichen Darstellung werden die Daten von Generation zur Generation in Form von Geschichten oder Liedern weitergegeben. Z.B. gehört es in einigen Staaten Afrikas zur Tradition, sich den eigenen Stammbaum, von dem mehr als zwanzig Generationen bekannt sein können, einzuprägen; dabei werden aber ausschließlich die männlichen Ahnen berücksichtigt. Bei diesem Brauch ist es aufgrund der immer größer werdenden Anzahl der Vorfahren mittlerweile üblich geworden, viele Generationen namentlich zu überspringen und dabei lediglich die Anzahl der jeweils ausgelassenen Generationen festzuhalten. Welche Generationen jeweils übersprungen werden, ist davon abhängig, welchen Status die betreffenden Vorfahren innehatten. [Wik_5] Prominente Beispiele für eine bildliche Darstellung sind unter anderem Höhlenmalereien oder Portraits von Ahnen in Form von Gemälden oder Skulpturen. Die bildliche Darstellungsweise wurde durch die schriftliche und graphische Darstellung erweitert, durch welche mehr oder überhaupt erst Informationen in die Darstellung mit einflossen. 36 Die graphische Darstellung ist noch weiter unterteilbar. Es sind Stammbäume, die der Definition eines Stammbaums im eigentlichen Sinne entsprechen, von stammbaumähnlichen Darstellungen zu unterscheiden, welche nur die Form eines Stammbaums besitzen. Auf den ersten Blick fällt diese Differenzierung nicht leicht, sondern wird erst durch Betrachtung der Daten deutlich: Bei einem Stammbaum stellt eine Tochter immer ein Blatt des Baumes dar. Auch wenn sie selbst schon Nachkommen besitzt, sind diese hier nicht dargestellt, sondern werden in dem Stammbaum der Familie, in die sie einheiratet, weiter aufgeführt. In einer stammbaumähnlichen Darstellung dagegen kann ausgehend von der Tochter die Familie weiter aufgeführt werden. [Wik_5] Bei Stammbäumen kann man desweiteren verschiedene Varianten der graphischen Darstellung unterscheiden. Häufig verwendet werden Stammbäume, die üblicherweise von oben nach unten wachsen. Eine Alternative dazu sind Stammbäume, die einer Ahnenliste ähnlich von links nach rechts wachsen. Letztere stellen sich in ihrer Ausdehnung oft sehr breit und flach dar. Nachdem die Ausrichtung eines Stammbaums zur Klassifizierung berücksichtigt wird, sind sie desweiteren noch anhand der Darstellung der Personen in dem Baum zu unterscheiden. Hierbei gibt es zwei Möglichkeiten: Entweder können die Individuen durch Objekte wie Rechtecke, Kreise oder Ovale, die mit den Informationen der Personen gefüllt werden, symbolisiert werden, oder es kann einfach ein mehr oder weniger ausführlicher bzw. informativer Text über die Person ans Ende einer Linie plaziert werden, und vom Ende dieses Textes ausgehend weiter verzweigt werden. Bei eingerahmten Personen existiert die Möglichkeit, einen Partner mit eigenem Platzhalter darunter oder daneben zu setzen, oder alternativ den Partner mit in die eigene Box zu schreiben. 4.2 Rechnergestützte Methoden zur Stammbaumausgabe Es existiert bereits eine Vielzahl von Programmen zur Speicherung und Darstellung von genealogischen Daten. Einige dieser Programme werden im folgenden vorgestellt und an diesen Beispielen Vorzüge und Nachteile der schon existierenden Anwendungen erläutert. Ferner werden anhand der Auswahl dieser Programme die verschiedenen möglichen Arten der Darstellung genealogischer Daten aufgezeigt. Jedes der im folgenden beschriebenen Softwareprodukte kann über die Seite http://www.genealogie-software.de per Download erworben werden. Dort findet sich auch eine Linksammlung von weiteren Programmen, wobei einige kommerzielle Anbieter jedoch keine Testversion vor dem Kauf zur Verfügung stellen. 4.2.1 GFAhnen Version 5.0 GFAhnen 5.0 ist eine kommerzielle Software, die zum Preis von 75 erworben werden kann. Sie wird von der Gesellschaft für Familienforschung in Franken vertrieben und ist in der neusten Version 5.0 lieferbar. Die Gesellschaft ist unter http://www.gf-franken.de/ im WWW zu erreichen. In GFAhnen 5.0 sind die wichtigsten Daten einer Person auf dem Hauptbildschirm präsentiert (Abb. 4.2.1.1). Die Personendaten der jeweils aktiven Person sind durch eine rote Umrandung markiert. Von der aktiven Person kann über verschiedene Buttons zu ihrem Vater (V), der Mutter (M), ihrem Partner (P) oder einem Kind (K) dieser Personen gewechselt werden. Die Eltern und Ehepartner werden rechts angezeigt (grüne Umrandung). In dem blau umrandeten Bereich können alle ehelichen und unehelichen Kinder, Paten und andere Daten angezeigt 37 werden. Die Personeneingabe sowie die Zuordnung von Beziehungen wie Pate, Kind usw. geschieht im braun umrandeten Feld. Visualisierungsmöglichkeiten werden immer von der aktiven Person ausgewählt, die somit den Probanden darstellt. Es stehen vier verschiedene Visualisierungsarten der Daten zur Auswahl: 1. Ahnentafel (mit AT) 2. Stammbaum (mit SB) 3. Familienanalyse (mit FA) 4. Familienblatt (mit FB) In jedem Fall können allerdings maximal fünf Generationen in die Darstellung aufgenommen werden. Abb. 4.2.1.1 Hauptbildschirm Abbildung 4.2.1.3 zeigt die Ahnentafel der aktiven Person, Abbildung 4.2.1.2 den in Form eines Filesystems dargestellten Stammbaum. In der in Abb. 4.2.1.4 dargestellten Familienanalyse sind die Daten der für eine Familie, das heißt Ehepartner und deren Kinder, wichtigsten Ereignisse als Symbole in einer Zeitlinie markiert. Hierzu gehören unter anderem Geburten, Heiraten und Sterbedaten. Das Familienblatt ist nicht abgebildet; dort sind die Informationen zu Eltern, Ehepartnern und Kindern in Textform festgehalten. 38 Abb. 4.2.1.2 Stammbaum Abb. 4.2.1.3 Ahnentafel 39 Abb. 4.2.1.4 Familienanalyse 4.2.2 Ursprung Die Software Ursprung ist als Freeware für private, nichtkommerzielle Zwecke unter der Adresse http://www.prog.de als Download zu beziehen. Der Autor Heiko Pruess beschreibt sie als Programm zur Verwaltung eines Familienstammbaums; eigentlich wird mit dieser Software aber kein Stammbaum sondern, eine Ahnentafel verwaltet. Somit dient Ursprung der Speicherung der Ahnen eines Probanden bis zur siebten Generation, wobei der Proband die erste Generation bildet. Es können daher 27-1 = 127 Personen gespeichert werden. In Ursprung existiert nur eine Bildschirmdarstellung, die in Abb. 4.2.2.1 zu sehen ist. Auf der rechten Seite ist ein kleiner Baum abgebildet, innerhalb dessen man mit Hilfe der vier Pfeiltasten umherwandern und so zu den verschiedenen Personen gelangen kann. Die Informationen und eigene Anmerkungen werden in Textfeldern angezeigt, in denen Eintragungen direkt vorgenommen werden können. Der Proband besitzt innerhalb des Baumes die Nummer 1-1 (Ebene eins, Person eins). Der Baum wird folglich bis zur siebten Generation von 7-1 bis 7-64 weitergeführt. Es können Name, Vorname, Geburtsname, Geburtsdaten, Taufdaten, Konfirmationsdaten, Hochzeitsdaten, Sterbedaten und Beruf eingetragen werden. Zusätzlich existiert ein Feld für Notizen sowie die Möglichkeit zur Einbindung eines GIF-Bildes, welches unterhalb des Baums angezeigt wird. Die Speicherung erfolgt in Textdokumenten. Für jede Person, die in der Ahnentafel eingetragen wird, legt das Programm ein Textdokument an, so daß sich bei vollständig ausgefüllter Ahnenliste demnach 127 Textdateien ergäben. Allgemein werden die Textdateien mit Uxxxyyy.txt bezeichnet, wobei xxx die Generation und yyy die Nummer der Person 1-64 auf Ebene 7, 1-32 auf Ebene 6 etc. bezeichnet. Für den Probanden wird daher das Dokument U001001.txt angelegt usw. In der Textdatei steht in jeder Zeile nur eine Information, angefangen mit Zeile 1 für den Vornamen, Zeile 2 für den Nachnamen, Zeile 3 für das Geschlecht etc. Dabei können immer nur die Ahnen für einen Probanden dargestellt werden. Sobald ein anderer Datensatz angelegt werden soll, werden automatisch die vorher angelegten Textdokumente überschrieben. 40 Abb. 4.2.2.1 Ursprung Hauptfenster 4.2.3 Famtree Version 2.3 Famtree wird kommerziell zu einem Preis von 20 angeboten. Der Entwickler Dr. Bruno Stöckle vertreibt es unter der zur Zeit neuesten Version 2.3. Eine Demoversion ist unter http://bst-soft.de erhältlich. Famtree ist ebenso wie Ursprung ein Programm, mit dem nur die Ahnentafel dargestellt werden kann. Der Name Famtree des Programms ist also insofern irreführend, als daß er auf einen Stammbaum schließen läßt. Abweichend von einer eigentlichen Ahnentafel jedoch gibt es hier die Möglichkeit, auch Ehepartner und Geschwister einzutragen. Diese werden allerdings nicht in der Ahnentafel selbst, sondern in separaten Textboxen angezeigt. Das Programm zeigt eine Ahnentafel bis zur fünften Generation an. Falls jedoch mehr Ahnen existieren bzw. bekannt sind, besteht die Option, eine Person aus der Ahnentafel auszuwählen (durch Klick auf die entsprechende Stelle der Ahnentafel) und diese als neuen Probanden zu markieren. Dabei werden nur zum aktuell gewählten Probanden Vorname, Nachname, Geburtsname, Beruf, Ort, Lebensdaten, ein Kommentar und falls vorhanden ein Bild angezeigt. Wird ein Ahne angeklickt, werden dessen Daten in einem zusätzlichen Textfeld dargestellt. Desweiteren gibt es die Möglichkeit, sich die Ahnentafel ausdrucken zu lassen. Dabei wird eine der Definition entsprechende Ahnentafel (gegebenenfalls mit Bildern) gedruckt. Alternativ kann die Familie eines Probanden in zwei verschiedenen Versionen ausgedruckt werden. Dabei werden jeweils Proband, Partner und Kinder dieser Ehe mit ausgegeben. In der ersten möglichen Version sind die Eltern über die ganze Breite einer Seite in einer Box inklusive Heiratsdaten aufgeführt und ihre Kinder in Boxen, die jeweils nur ein Drittel dieser Größe 41 haben. Die zweite Version gibt den Probanden mit Name, Nachname, Geburtsname, Ort, Lebensdaten, Beruf der Eltern und zusätzlichen Bemerkungen aus, den Partner mit dessen entsprechenden Daten und zusätzlich den Heiratsdaten und schließlich alle Kinder ohne eventuelle Partner. Die Daten werden in einer Datei gespeichert, wodurch mehrere Datensätze angelegt werden können. Es besteht keine Möglichkeit, Daten zu importieren, doch die eingetragenen Daten können als Textdokument exportiert werden. Sie sind dann aber nur zur Ansicht zu verwenden und haben keine weitere Funktion; ein erneuter Import ist ebenfalls nicht möglich. Abb. 4.2.3.1 Fammtree Hauptbildschirm 4.2.4 Fzip Family Tree S1.7d Fzip ist ein kommerzielles Programm, das gegen eine Gebühr von 20 erworben werden kann. Es wird von Andrew Croft vertrieben und ist unter http://members.ozemail.com.au/ ~acroft/ zu beziehen. Abbildung 4.2.4.1 zeigt eine von zwei unterschiedlichen Ansichten des Hauptfensters mit Daten zu den Personen. Unter dem Menüpunkt Ausdrucke kann eine Fülle von Informationen angefordert werden. Die Darstellungen sind dann allerdings nur in der Druckvorschau (wie der Menüpunkt Ausdrucke andeutet) zu sehen und müssen daher teilweise erst ausgedruckt werden, um einige Visualisierungen komplett anzuzeigen. 42 Abb. 4.2.4.1 In Abb. 4.2.4.1 unten ist eine Ahnentafel dargestellt. Eine ähnliche Form besitzen auch die anderen hier nicht vorgestellten Ausgaben, wie Daten zur Person oder Partnerliste . Abb. 4.2.4.1 oben zeigt den Nachkommen-Baum, dessen Aussehen dem des Vorfahren-Baums äquivalent ist. Der Stammbaum (in Fzip so genannt, stellt jedoch eine Ahnentafel dar) ist ähnlich der Ahnentafel aus Abb. 4.2.1.3 aus GFAhnen. Der eigentliche Stammbaum, hier Nachkommen-Box-Chart genannt, ist hier nicht abgebildet da der Stammbaum erst vollständig ausgedruckt und zusammengeklebt werden muß, um als Ganzes betrachtet werden zu können. Fzip bietet ebenfalls einige Statistiken, die als Text ausgegeben werden können. 4.2.5 WinAhnen V6.02 Das Programm WinAhnen ist derzeit in der aktuellen Version 6.02 für 45 von dem Herstellerteam Robert Mund und Olaf Schilling zu beziehen. Unter http://www.winahnen.de ist eine Testversion erhältlich. WinAhnen bietet die Möglichkeit, die Personendaten als Stammbaum, Ahnentafel, Tabelle oder als Formular auszugeben. Dabei sind die Ausgaben als Tabelle und Formular sehr ähnlich in Tabellenform aufgebaut, mit nur leichten Abweichungen im Aufbau der Tabellen. Im großen und ganzen aber werden bei beiden die gleichen Informationen aufgezeigt. Die Ahnentafel entspricht hier nicht einer Ahnentafel im engeren Sinne (bei der nämlich nur ein Proband mit seinen direkten Eltern und von diesen jeweils auch nur die direkten Eltern usw. dargestellt werden), sondern bezieht auch die Geschwister der Vorfahren mit ein, die direkt nebeneinander dargestellt werden. Die Entscheidung für die Verwirklichung der Ahnentafel in 43 dieser Form hat zur Folge, daß die Symmetrie einer Ahnentafel nicht mehr gegeben ist. Desweiteren wächst der Baum durch die Darstellung der Geschwister unvorteilhaft in die Breite, was dazu führt, daß die Ahnentafel unübersichtlich wird. Der Stammbaum beginnt beim Stammvater, wobei als dieser auch eine Frau gewählt werden kann. Allerdings können im Stammbaum nur Ahnen und deren Partner eingefügt werden; somit ist es hier nicht möglich, Kinder direkt einzutragen. Zur Übersicht läßt sich der Stammbaum bzw. die Ahnentafel verkleinern, wodurch aber die Personendaten nicht mehr zu lesen sind. Es besteht zwar die Möglichkeit, die Personendaten zu bearbeiten, allerdings sind sämtliche Informationen auf insgesamt elf Formularblättern verteilt (Allgemein, Geburt, Taufe, Partner, etc.). Die in Bezug zu dieser Arbeit interessante Form der Stammbaudarstellung wird im folgenden ausführlicher diskutiert: Frauen werden in der Darstellung durch rote, Männer durch blaue und unbekannte Personen durch weiße Boxen symbolisiert. Die Platzhalter für einzelne Personen werden alle in der gleichen Größe aufgezeichnet, was bei diesem Programm im Kontrast zu anderen vorgestellten sehr zur Übersichtlichkeit beiträgt. Partner werden einer Person zugeordnet und direkt oberhalb in einer eigenen Box angehangen. Bei Mehrfachehen wird die Ansicht so generiert, daß alle Ehepartner einer Person nebeneinander über dieser Person angeordnet werden. Diese Entscheidung führt dazu, daß die Breite des Baums sich bei vielen Mehrfachehen deutlich vergrößert, wobei er aufgrund des Layouts ohnehin schon mehr in die Breite als in die Höhe wächst. Die Kästen haben eine solche Form, daß maximal fünf Personen einer Generation mitsamt ihren Ehepartnern falls alle Personen nur einmal verheiratet waren - nebeneinander angezeigt werden können. Außerdem wird durch die Wahl der Platzierung der Ehepartner der Baum flach gehalten, da zwischen jeder Generation der gleiche Abstand besteht. Es können vier Generationsebenen auf einer Bildschirmseite dargestellt werden. Die Kinder einer Ehe werden dem Ehepartner angefügt; dadurch ist ersichtlich, wer die Mutter und wer der Vater eines Kindes ist. Falls aber ein Elternteil mehrere Ehen eingegangen ist, aus denen Kinder hervorgingen, führen von einem direkten Nachkommen mehrere Linien zu verschiedenen Kindern. Dadurch ist an bestimmten Stellen des Stammbaumes nicht immer ersichtlich, ob eine Person Geschwister hat. Zu diesem Zweck muß mindestens zu den Eltern gescrollt und hier geschaut werden, ob ein Elternteil eventuell Kinder aus einer weiteren Ehe hat. Nach eigenem Empfinden betrachtet, könnte diese Darstellung durch die Entscheidung für einen Stammbaum, der von oben nach unten wächst, verschönert werden; möglicherweise wurde hier die entgegengesetzte Variante gewählt, da die Ahnentafel optisch das gleiche Format wie der Stammbaum hat. Dadurch sollte wohl der Stammbaum auf den ersten Blick von der Ahnentafel unterscheidbar gemacht werden. In Abb. 4.2.5.1 ist ein Stammbaumausschnitt zu sehen. Die Ahnentafel weist eine äquivalente Darstellung auf, mit dem Unterschied, daß sie am oberen Rand beginnt und nach unten fortgesetzt wird. Desweiteren werden in der Ahnentafel Geschwister nebeneinandergesetzt, wie in dem Stammbaum bei der Mehrfachehe zu sehen ist. 44 Abb. 4.2.5.1 Stammbaumdarstellung in WinAhnen 4.2.6 DYNASS-TREE V300 Dynass-Tree wird von Gerhard Bauch Software vertrieben. Die Vollversion ist für 49 unter der Internetadresse http://www.dynas-tree.de zu beziehen. Das Programm bietet neben der Darstellung genealogischer Daten viele erweiterte Funktionen. Mit Dynass-Tree können Gedcom-Dateien importiert und exportiert werden. Es ist möglich, sich eine Statistik in Balkengraphik über verschiedenste Daten ausgeben zu lassen; als Beispiel seien Geburtsmonat, Alter, Todesjahr, Kinder in der ersten Ehe unter vielen anderen Möglichkeiten genannt. Desweiteren hat man die Möglichkeit, sich Berichte auszudrucken, d.h. Listen, in denen zu einer gewählten Person alle Blutsverwandten, Nachkommen, Vorfahren oder andere ausgewählte Informationen aufgeführt werden. Bei der Auswahl der visuellen Ausgabe hat man die Wahl zwischen einem Stammbaum, einer Ahnenliste, oder dem Stammbaum einer Person, zu der auch noch die bekannten Vorfahren ausgegeben werden. Positiv zu bewerten ist, daß einem die Möglichkeit gegeben wird, in elementare Formatierungen der visuellen Ausgabe einzugreifen. Der Benutzer wählt aus, ob der Baum von oben nach unten, von links nach rechts oder jeweils umgekehrt ausgegeben werden soll. Dabei kann ausgesucht werden, ob auch angeheiratete Partner mit angezeigt werden oder nur die Blutsverwandten. Der Benutzer kann auch entscheiden, wie viele Generationen der Baum maximal umfassen darf, und kann auf der Visualisierung verschiedene Änderungen vornehmen. Die Visualisierung ist in einer der möglichen Formen in den Abb. 4.2.6.1 und Abb. 4.2.6.1 gezeigt. Als nachteilig anzusehen ist wiederum die Unproportionalität zwischen den einzelnen Personen: Je mehr Informationen es zu einer Person gibt, desto größer ist die Box, in der sie dargestellt wird. Übersichtlicher und auch ästhetischer wäre die Darstellung 45 jeder Person mit den wichtigsten Informationen in einheitlich großen Boxen. Falls mehr Informationen angezeigt werden sollen, sollten diese in einem Menüpunkt auswählbar sein. Abb. 4.2.6.1 Stammbaum in zwei Ausrichtungen 46 4.2.7 GEN-Master V3.1.4 GEN-Master ist in der Version 3.0 für 15 zu erwerben; der Hersteller des Programms ist Ralph Hedke. Eine Demoversion steht unter http://www.genmaster.de zum Download bereit. GEN-Master bietet graphische Balkendarstellungen über die Verteilung der Geschlechter, des Alters, der Jahrgänge und der Konfessionen. Neben GEN-Master-Dateien können auch GEDCOM-Datensätze importiert und exportiert werden. Als weiteres Exportformat existiert ein Format speziell für die Seite www.vorfahrensuche.de; dazu werden zwei Textdateien erzeugt, die speziell von dieser Seite zur Aufnahme in ihre Datenbank genutzt werden. In der Datei psxxxxxxxx.txt werden alle Personendaten gespeichert und in der Datei ehxxxxxxxx.txt alle Daten zu Hochzeiten von Personen, wobei xxxxxxxx jeweils für eine achtstellige Nummer steht. Ein eindeutiger Nachteil bei der graphischen Darstellung der Daten in Form eines Stammbaums ist die Tatsache, daß der Baum sich nicht auf dem Bildschirm, sondern nur in ausgedruckter Form betrachten läßt. In Abb. 4.2.7.1 ist der Stammbaum abgebildet. Ein Scrollen ist hier allerdings nicht möglich, so daß in der Ansicht einige Personen verdeckt bleiben. Desweiteren existiert die Option, eine Darstellung in Textform, z.B. als Ahnenblatt, auszugeben. Bei der Stammbaum-Darstellung werden jeweils nur die Namen angezeigt. Durch das Anklicken einer Person werden zwar mehr Informationen sichtbar, jedoch sind eben nicht alle Personen sichtbar und es kann unzweckmäßigerweise nicht zu den verdeckten Personen gewechselt werden. Dadurch stehen die weiteren nicht dargestellten Informationen in der ausgedruckten Version nicht zur Verfügung. Abb. 4.2.7.1 47 4.2.8 GeneWeb 4.09 Bei GeneWeb handelt es sich um Freeware, die vom Hersteller INRIA unter der Internetadresse http://www.genealogie-software.de kostenlos bezogen werden kann. GeneWeb ist ein attraktives Programm zur Darstellung von Stammlisten. Der Vorteil von GeneWeb besteht darin, daß aus den Daten eine Stammliste erzeugt wird, die nicht nur zur Ansicht dient, sondern auch weitere Funktionen bietet. GeneWeb verwendet als Oberfläche den installierten Webbrowser. Die Daten können aus einer GEDCOM-Datei importiert und auch wieder exportiert werden. Ist ein Datensatz geöffnet, besteht die Möglichkeit, ihn sich als Stammliste ausgeben zu lassen; wird dabei eine Person aus einer Stammliste weiter selektiert, so wird ihr Familienblatt angezeigt. Im Familienblatt hat man die Möglichkeit, sich weitere Informationen bezüglich der Person angeben zu lassen, wie z. B. ihre Cousinen, Cousins, Onkel, Tanten und weitere Beziehungen. Zusätzlich existieren einige statistische Auswertungen der Daten, wie etwa die ältesten lebenden Personen, die letzten Heiraten, die letzten Sterbedaten und andere, wobei diese sich jeweils auf maximal zwanzig Personen beziehen. Als Hilfsmittel für Genealogen ist ein Datumsrechner integriert, der die Daten zwischen dem gregorianischen, julianischen, französischen und hebräischen Kalender konvertiert. In Abb. 4.2.8.1 ist die Stammliste aufgeführt. Abb. 4.2.8.1 Stammliste 4.2.9 StaBa Der Stammbaumgenerator 48 Auch StaBa ist eine kommerzielle Software zur Darstellung von Stammbäumen. Die Lizenz zum Download des Programms ist für den Preis von 22 unter http://www.codev.de/nunz zu beziehen. Lizenz und Programm zusammen auf CD sind für 32 erhältlich. Der Entwickler ist Jochen Herz. Im Stammbaumgenerator wird das Familienblatt übersichtlich dargestellt, wobei ein komfortabler Wechsel zu den direkt in Beziehung stehenden Personen ermöglicht ist. Die graphische Darstellung als Stammbaum jedoch erweist sich als sehr unübersichtlich: Der Stammbaumgenerator erstellt die Beziehungen zu Personen, ordnet sie aber nicht korrekt an, so daß die Darstellung, wie in Abb. 4.2.9.1 unten zu sehen recht konfus wirkt ohne dabei einen Bezug zwischen den Daten erkennen zu lassen. Die Darstellung des Stammbaums als Stammliste ist jedoch ohne Probleme möglich, wie in Abb. 4.2.9.1 oben gezeigt. Abb. 4.2.9.1 Stammliste und Stammbaum 49 5 Konzepte zur Stammbaumvisualisierung 5.1 Diskussion von Alternativen und eigener Ansatz Bei einer Stammbaumvisualisierung muß vieles berücksichtigt werden. Besonders wichtig sind hierbei die Art der Informationen, die angezeigt werden sollen, sowie die Auswahl der Darstellungsweise der einzelnen Personen. In Bezug auf die Informationen besteht eine Möglichkeit darin, sämtliche für eine Person existente Daten mit in den Stammbaum aufzunehmen. Alternativ könnten aber auch nur wenige, relevante Angaben in komprimierter Form direkt in die Visualisierung mit aufgenommen werden, während gleichzeitig auf Verlangen zusätzliche Informationen zu einer bestimmten Person gesondert angezeigt werden könnten. Die Ausgabe könnte dabei in einem eigenen Fenster erfolgen, welches sich auf eine Anfrage hin öffnet, oder aber auch an einer bestimmten Stelle im Hauptfenster. Wurde nun eine bestimmte Art der Informationsdarstellung festgelegt, ist weiterhin zu entscheiden, wie die Individuen optisch im Stammbaum dargestellt werden. Sollen die Daten einfach als Text ohne eine Umrandung dargestellt werden, oder soll ein Platzhalter in Form eines Rechtecks oder eines anderen Gebildes in den Stammbaum die Personendaten aufnehmen. Mit dem Begriff Platzhalter ist dabei im folgenden die Darstellung der Personendaten in dem Stammbaum gemeint. Männliche und weibliche Personen könnten entweder unterschiedliche Rahmen erhalten, die ihre jeweiligen Daten einfassen, oder es wird für alle Geschlechter dieselbe Umrahmung verwendet. Bei geschlechtsspezifischer Umrandung ergibt sich dabei ein Problem für unbekannte Personen, deren Existenz zwar erwiesen ist, deren Name und Geschlecht jedoch nicht bekannt sind. In diesem speziellen Fall müßte daher noch eine dritte Form zur Kennzeichnung existieren. Werden dagegen alle Personen in gleicher Art und Weise dargestellt, könnte das jeweilige Geschlecht auch einfach durch ein Zeichen kenntlich gemacht werden. Oft ist natürlich die jeweilige Geschlechtszugehörigkeit schon anhand des Vornamens zu erkennen; bei unklarer Namensgebung könnte daher das Geschlecht auch einfach nur aus der erweiterten Anzeige der Person ersichtlich gemacht werden. Diese Probleme ergeben sich bei gleichartigen Rahmen aber selbstverständlich gar nicht erst, wenn sämtliche Personendaten ausgegeben werden. ID Kirko Goreski *20.02.1949 ID Kirko Goreski *20.02.1949 oo 1973 ID Olgica Goreska *13.09.1953 ID Marijan Gjoreski *16.10.1975 ID Olgica Goreska *13.09.1953 ID Manuela Gjoreski *16.09.1978 ID Marijan Gjoreski *16.10.1975 Abb. 5.1.1 Personplatzhalter 50 ID Manuela Gjoreski 16.09.1978 Bei der Wahl eines Platzhalters für eine Person im Stammbaum kann entweder für jede Person unabhängig von der Anzahl der zugehörigen Daten derselbe Platzhalter einer einheitlichen Größe verwendet werden, oder es kann dessen Größe individuell an die Menge der dargestellten Daten angepaßt werden. In Abb. 5.1.2 sind zum Vergleich dieser beiden Alternativen jeweils zwei Personen abgebildet. Bei einer individuell angepaßten Größe werden häufig wechselnde Darstellungen, wie das Beispiel von Abb. 5.1.3 zeigt, schnell unübersichtlich. Anhand dieser aus dem Programm DYNASS-TREE übernommenen Art der Abbildung werden im folgenden zwei weitere Designmöglichkeiten diskutiert. ID Gajus Julius Caesar 100 v.Chr 44 v.Chr. ID Gajus Julius Caesar 100 v.Chr 44 v.Chr. Geburtsort Todesort Titel: römischer Staatsmann und Feldherr ID Kaiser Augustus ID Kaiser Augustus Titel: römischer Kaiser 60-53 v.Chr. Abb. 5.1.2 Größe von Personenplatzhaltern ID 1 Huber, Heinrich Blasius Willibald * 01.02.1850 * Hirschberg am Neckar ID 6 Tochter *01.02.1850 *Bretzenheim ID 15 Huber, Hans * 13.04.1904 ID 2 Nothburga Niethammer * 03.04.1851 * Nauheim oo 01.04.1874 oo Hirschberg am Neckar ID 4 Huber, Horst *13.12.1875 * Hirschberg am Neckar ID 16 Huber, Gerti * 08.12.1907 ID 3 Walburga Weber * 04.05.1852 * Wiesbaden oo 01.08.1881 oo Wiesbaden + 01.06.1886 + Wiesbaden ID 5 Huber, Robert * 06.02.1884 * Wiesbaden ID 17 Leonard Lachmann oo 12.06.1826 Trauzeuge Huber, Hans ID 14 Franziska Freitag ID 21 Josef Jäger oo 01.06.1938 oo Waging Trauzeuge Jäger, Jockel Abb. 5.1.3 Stammbaum mit verschieden großen Personenplatzhaltern 51 Für die Darstellung der Partner einer Bezugsperson bieten sich mehrere Möglichkeiten an. Der trivialste Fall ist eine Auflistung aller Daten eines Partners unter der jeweiligen Bezugsperson, wobei deren Platzhalter größer gewählt werden muß. Dadurch entstehen allerdings weitere Probleme, die zu berücksichtigen sind, z.B. die Frage, ob alle Personen eine äquivalente Größe in der Darstellung erhalten sollen, oder ob die Größe von der Anzahl der Partner bzw. davon, ob überhaupt Partner vorhanden sind, abhängen soll. Bei der Entscheidung für individuell anzupassende, also veränderliche Größen leidet die Symmetrie der Darstellung; wird dagegen eine Einheitsgröße gewählt, ergeben sich wiederum verschiedene andere Probleme. Zunächst stellt sich die Frage, welche Größe als Standard festgelegt werden soll. Ist diese Vorgabe relativ großzügig, resultiert ein zu großer Freiraum bei Personen ohne Partner. Wählt man dagegen einen zu kleinen Platzhalter, etwa einen für ein bis zwei Partner ausreichenden, entstehen an allen Positionen des Stammbaums Engpässe, an denen eine Person mit überzähligen Partnern eingetragen werden soll. Eine denkbare Lösung dieses Problems läge darin, lediglich den ersten oder letzten Partner aufzuführen und darüber hinaus durch Verwendung einer bestimmten Farbe oder eines Symbols auf die Existenz weiterer Partner zu verweisen. Damit diese weiteren Partner eingesehen werden können, wäre ferner ein Menüpunkt oder eine Funktion einzubringen, der bzw. die eine erweiterte Sicht oder Zusatzinformationen in einer anderen Art ermöglicht. Allerdings wäre dann nicht direkt anhand des Stammbaumes zu erkennen, ob jemand mehrfach verheiratet war und somit seine Kinder aus unterschiedlichen Ehen stammen könnten, sondern dies müßte an jeder Stelle der Darstellung gesondert überprüft werden. Für den Fall, daß die Partner in eigenen Platzhaltern dargestellt werden, ergeben sich je nachdem, ob die Partner rechts oder unter den zugehörigen Personen angeordnet werden, einige Alternativen für diese Anordnung: Die Ehepartner könnten bündig oder um ein wenig nach rechts bzw. links versetzt an die zugehörige Person angefügt werden. Dabei muß diese Verschiebung erst beim zweiten Partner beginnen und ist nur nötig, falls die Kinder anhand der Linien ihren Eltern zugeordnet werden sollen, da die Verbindungen zu den Kindern jeweils von dem Partner x-ter Ehe aus hergestellt werden; siehe hierzu beide Alternativen in Abb. 5.1.4. Diese Möglichkeit der Zuordnung von Nachkommen führt jedoch beim Auftreten mehrerer Partnerschaften mit jeweiligen Kindesvorkommen zu vielen zusätzlichen Verbindungen, die die Zuordnung unübersichtlich machen. In Abb. 5.1.5 sind diese beiden Darstellungsvarianten bei einem nach rechts expandierendem Stammbaum aufgezeigt. Nachfahre OO I Nachfahre Partner 1. Ehe OO II Partner 2. Ehe I Kind 1. Ehe Kind 1. Ehe Kind 2. Ehe Abb. 5.1.4 Anordnung der Ehepartner 52 OO Partner 1. Ehe OO Partner 2. Ehe II Kind 2. Ehe Bei dem in Abb. 5.1.3 dargestellten Beispiel ist auf den ersten Blick nicht sofort erkennbar, daß die Personen Huber Horst, Huber Robert und die namenlose Tochter Geschwister sind. Wäre die vorige Generation und somit ihre Eltern nicht gleichzeitig dargestellt, weil der Benutzer gerade eine jüngere Generation betrachtet, so wäre überhaupt kein Zusammenhang erkennbar. Um solche Unklarheiten bei nicht vollständiger Darstellung des Stammbaums auszuschließen, wäre die in Abb. 5.1.4 auf der rechten Seite sichtbare Linienführung vorzuziehen. Ein Stammbaum kann entweder von oben nach unten expandieren oder von links nach rechts. Ahnentafeln sind in der Regel von links nach rechts angeordnet, so daß man den Stammbaum auf den ersten Blick für eine Ahnentafel halten könnte. Weiß der Benutzer aber um den Unterschied zwischen beiden, so ist der Stammbaum leicht anhand der eingetragenen Daten zu erkennen. Werden die Personendaten in einem Quadrat dargestellt, ist es irrelevant, in welcher Richtung sich der Baum ausdehnt; es kommt in diesem Fall dann lediglich auf den Geschmack des Nutzers oder des Entwicklers an. Jedoch ist es effektiver, rechteckige Platzhalter für die Personendaten zu verwenden (ausgenommen ist der Fall, in dem sämtliche verfügbare Personendaten im Stammbaum eingetragen werden sollen). Dies ergibt sich aus der Schriftform. Für die chinesische Schriftform wäre ein um 90 grad gekipptes Rechteck besser geignet. Ein von links nach rechts wachsender Baum wird in der Regel eine flachere und breitere Ausdehnung erreichen als ein von oben nach unten expandierender Baum. In Abb. 5.1.5 ist ein nach rechts wachsender Stammbaum abgebildet. Bei der zweiten Alternative in Abb. 5.1.6, bei der auf dem ersten Blick die Partnerzuordnung übersichtlicher erscheint, ist der entstehende Baum sogar noch flacher, da dort die Abstände zwischen den Partnern kleiner sind und keine Platzhalter für das Heiratssymbol verwendet werden. Frederick Lewis OO Sophia Dorothea Pss. Auguste OO Anne, Pss. Royal Friedrich Wilhelm OO George Ludwig Wilhelm IV OO Sophia Dorothea GEORGE II Augustus OO Amelia Sophia Eleanor Karoline Margravine Caroline Elizabeth George William Abb. 5.1.5 Nach rechts expandierender Stammbaum 53 Sophia Dorothea Frederick Lewis Friedrich Wilhelm Pss. Auguste George Ludwig Sophia Dorothea Anne, Pss. Royal GEORGE II Augustus Wilhelm IV Karoline Margravine Amelia Sophia Eleanor Caroline Elizabeth George William Abb. 5.1.6 Nach rechts expandierender Stammbaum mit alternativer Partnerzuordnung Ein Symmetrieproblem bleibt bei Kindern aus mehreren Ehen bestehen, in denen die Kinder jeweils durch eine Verbindung vom Partner markiert werden, um einer Ehe zugewiesen zu werden (Abb. 5.2.1 links). Dort verzweigt sich die die Linienführung sehr stark, insbesondere bei einem nach rechts wachsenden Stammbaum. Es ist ferner noch die Entscheidung über Anordnungsregeln in dem Stammbaum zu treffen, d.h. darüber, wie die Kinder den Eltern zugeordnet im Stammbaum plaziert werden sollen. Eine sich anbietende Möglichkeit besteht darin, alle Kinder eines direkten Nachkommens im Stammbaum mittig unter diesem zu plazieren, und zwischen allen Geschwistern den gleichen Abstand zu wählen. Das hat zur Folge, daß an gewissen Stellen, wie in Abb. 5.2.2 oben zu erkennen ist, unnötiger Freiraum entsteht, der dazu führt, daß der Stammbaum bei gleicher Personenzahl größer ist und daher weniger Informationen auf einem Bildschirm bei der Darstellung angezeigt werden können. Der Vorteil dieser Anordnung besteht aber darin, daß trotz des größeren Freiraums zwischen den Personen weniger ungenutzte Flächen in der Darstellung zu sehen sind, da eine große Verteilung der Personen auf der gesamten Zeichenfläche erreicht wird. Dies kann aber auch zu einer größeren Gesamtfläche führen. Für die Darstellung der Informationen einer Person, die nicht im Stammbaum angezeigt werden, bieten sich zwei alternative Möglichkeiten an. Zum einen könnte ein permanenter Anzeigebereich für die Daten an einer fest verankerten Stelle des Hauptfensters vorgesehen werden. Alternativ dazu könnte für jede Person ein neues Fenster erzeugt werden, welches vom Benutzer frei plaziert werden kann und so lange Zeit zu sehen ist, wie es benötigt wird. Mit dieser zweiten Variante ist es möglich, sich die gesamten Daten von mehreren Personen gleichzeitig anzeigen zu lassen. Dies ist ein bedeutender Vorteil bei einem Vergleich von mehreren Datensätzen, wohingegen bei einer zur Datenanzeige fest vorgegebenen Plazierung jeweils nur ein einzelner Datensatz betrachtet werden kann. 54 ID 11 Michael Müller Gebtag 17.20.76 ID 11 Michael Müller Gebtag 17.20.76 ID 21 Michael üller Schmitz Gebtag 17.20.7% Abb. 5.1.6 Verschieden Arten eines Infofensters 5.2 Vorstellungen der eigenen Methoden Um eine gewisse Symmetrie zu erreichen, fiel die Wahl auf die Darstellung des Platzhalters jeder Person als ein Rechteck einheitlicher Größe. In diesem werden die wichtigsten Daten zur jeweiligen Person angegeben. Mit Platzhalter ist hierbei ein Knoten im Stammbaum gemeint, der für eine Person steht. Im Falle einer Ehe sind an einem Knoten mehrere Platzhalter vorhanden, d.h. für jeden Ehepartner einer. Als wichtige Informationen, die im Stammbaum angezeigt werden, wurden ID, Name sowie die Lebensdaten der jeweiligen Person ausgewählt. Zusätzlich werden verstorbene Personen durch ein Zeichen, nämlich ein Kreuz ( ), kenntlich gemacht. Da die Lebensdaten und somit gegebenenfalls auch das Sterbedatum zu jeder Person angegeben werden, ist dies zwar eigentlich nicht nötig, allerdings sind Daten von Personen, die vor längerer Zeit gelebt haben, oft unvollständig. Somit ist auch bei bekanntermaßen verstorbenen Personen das Sterbedatum nicht zwingend bekannt und kann in diesem Fall also auch nicht angezeigt werden. Dieser Sachverhalt ist im Stammbaum in Abb. 5.1.3, der aus einem existierenden Datensatz erstellt wurde, zu erkennen. Die ID identifiziert eine Person eindeutig aus dem Datensatz der Datenbank und wird zum Vergleich mit einer Übersicht benötigt. Name und Lebensdaten dagegen sind direkte Informationen zu einer Person, die dargestellt werden sollen. Wie bereits verdeutlicht, können aufgrund der statische Größe der Personenplatzhalter nicht sämtliche Daten, die zu einer Person existieren, im Stammbaum dargestellt werden. Ist man aber an zusätzlichen, nicht dargestellten Daten interessiert, wird auf Anfrage hin ein separates Fenster geöffnet. In diesem werden neben den schon im Stammbaum integrierten alle weiteren vorhandenen Daten, wie Geburtsund Sterbeort, Titel, Geschlecht, Geburtsname und Heiratsdatum, angezeigt. Aus der Auswahl der anzuzeigenden Informationen leitet sich für den Personenplatzhalter eine Größe von 100 mal 50 Pixeln ab. Die Höhe von 50 Pixeln ergibt sich daraus, daß jeweils vier Zeilen an Informationen ausgegeben werden und der Text bei voller Ausnutzung dieser Höhe in einer angenehm lesbaren Größe erscheint. In der ersten Zeile wird die ID der Person und, falls sie verstorben ist, ein Kreuz dargestellt. Der Name einer Person wird in der zweiten Zeile eingetragen. Zeile 3 enthält das Geburtsdatum und die vierte und letzte Zeile das Sterbedatum. Die Breite von 100 Pixeln ergibt sich aus mehreren Faktoren. Der Platzhalter sollte mindestens diese Länge aufweisen, um die Daten darstellen zu können und die meisten Namen komplett aufzunehmen. Bei 100 Pixeln Breite können Namen mit bis zu sechzehn Buchstaben eingetragen werden. Längere Namen werden ab der dreizehnten Stelle mit drei Punkten abgekürzt. Da ein Stammbaum ausschließlich Personen mit gleichem Nachnamen enthält, werden nur die Vornamen ausgegeben; der Nachname ist nur in der erweiterten Ansicht mit 55 dargestellt. Ein Wert von genau 100 Pixeln wurde gewählt, da diese Länge der doppelten Breite entspricht und die Proportion von 1:2 die Symmetrie und somit das Aussehen der Platzhalter ansprechender erscheinen läßt. Männliche und weibliche Personen werden mit einem Platzhalter derselben Art dargestellt. Es wurde darauf verzichtet, männliche Personen mit einem Rechteck und weibliche Personen mit einem Kreis oder einem anderen Symbol darzustellen, da es möglich ist, daß vom ersten bekannten Nachfahren eben nur dessen Existenz, aber keine weiteren Daten bekannt ist. Somit ist auch das Geschlecht unbekannt, und folglich ist ungewiß, wie der Platzhalter zu wählen ist. Als Beispiel wäre hier ein uneheliches Kind zu nennen, von dem der Vater erst spät unterrichtet wurde, aber über dessen Existenz hinaus er nie mehr über dieses Kind in Erfahrung bringen konnte. Desweiteren wirkt die Darstellung von weiblichen Personen in Form von Kreisen nicht attraktiv, was ein ästhetisches Argument gegen diese Form wäre. Wird aber für die weiblichen Personen eine nur leicht geänderte Form wie etwa ein Rechteck mit abgerundeten Ecken gewählt, ist der Unterschied zwischen den Geschlechtern wiederum kaum zu erkennen. Aus den Alternativen der Zuordnung von Partner wurde eine direkte Plazierung aller Partner einer Person unmittelbar unter dieser gewählt. Auf diese Weise wird die partnerschaftliche Beziehung zu einer Person ohne weitere Symbole oder Linien direkt aufgezeigt. Die Kinder einer Ehe werden jeweils einem Block von Partnerschaften zugeordnet, wobei der direkte Nachkomme, in der Regel immer der Vater ist. Die Kinder eines weiblichen direkten Nachkommen werden üblicherweise in dem Stammbaum der Familie aufgezeigt, in die die Frau eingeheiratet hat. Existiert ein Kind, das eine angeheiratete Person mit in die Familie bringt, wird es nicht aufgeführt, es sei denn es wird vom Partner seines leiblichen Elternteils adoptiert und nimmt somit auch den neuen Nachnamen an. Alle Kinder des direkten Nachkommens werden im Stammbaum zusammengefaßt, auch wenn sie aus verschiedenen Partnerschaften stammen, und bei allen wird eine Verbindung zu den Elternteilen hergestellt. Konkret bedeutet dies, daß die Verbindung bei dem letzten Partner des direkten Nachkommens beginnt und zu allen Kindern aus einer der Partnerschaften führt. Es wurde darauf verzichtet, die Verbindung der Kinder zu den jeweiligen Partnerschaften einer Ehe anzuzeigen, da diese zusätzlichen Linien hauptsächlich verwirren. Für die Darstellung wurde ein von oben nach unten expandierender Stammbaum gewählt. Ein Argument für diese Entscheidung ist dabei die subjektiv als ansprechender empfundene Gestalt eines solchen Baumes. Desweiteren wird auf diese Weise optisch eine deutliche Abgrenzung zu einer Ahnentafel erreicht, die, wie schon erwähnt, im allgemeinen seitlich wachsend von links nach rechts dargestellt wird. Außerdem spricht für diese Darstellungsvariante auch die Verwendung von rechteckigen Personenplatzhaltern, deren Breite größer ist als ihre Höhe, da sich in diesem Fall ein seitlich expandierender Stammbaum flacher und breiter entwickeln würde als ein von oben expandierender. Außerdem ermöglicht diese sich seitlich ausdehnende Stammbaum-Variante bei eventuell auftretenden Mehrfachehen eine direkte Zuordnung der Kinder zum betreffenden Partner des direkten Nachkommens. Jedoch tritt, falls eine Person mit mehreren aufeinanderfolgenden Partnern jeweils mehrere Kinder hat, neben den schon weiter oben diskutierten Problemen ein zusätzliches auf, nämlich das der Linienführung. Somit fällt die Entscheidung für ein bestimmtes Layout schwer, da jedes eigene Vor- und Nachteile mit sich bringt. 56 Karl Heinz Erste Ehefrau Kind 1 Kind 1 Ehe 1 Kind 2 Kind 2 Ehe 1 Kind 3 Karl Heinz Zweite Ehefrau Kind 3 Ehe 1 Erste Ehefrau Zweite Ehefrau Kind 1 Kind 1 Ehe 2 Kind 2 Kind 2 Ehe 2 Kind 3 Kind 3 Ehe 2 Abb. 5.2.1 Alternative Möglichkeiten zur Verzweigung zu den Kindern Alle Kinder werden dazu an den Stellen, die es erlauben, mittig unter den Platzhaltern des Elternpaares plaziert, wie in Abb. 5.2.2 zu sehen. Dabei existiert also eine Verbindung zu allen Kindern des direkten Nachkommens, unabhängig davon, ob sie alle von dem gleichen zweiten Elternteil abstammen. ID Person 10.04.1939-17.05.1998 ID Partner 1 11.06.1941ID Partner 2 05.07.1944- ID Partner 1 11.06.1971- ID Partner 2 05.07.1972- ID Partner 1 11.06.1976- Abb. 5.2.2 Plazierung der Kinder im Bezug zu den Eltern An einigen Stellen ist es, abhängig von den weiteren Nachkommen, nicht möglich, die Kinder wie beschrieben anzuordnen. Dieses Problem wurde gelöst, indem das erste Kind, das auch am weitesten links im Stammbaum zu finden ist, den Platz beibehält, der ihm zugewiesen wurde. Sollte eine Verschiebung eines Kindes nötig sein, werden alle Nachkommen beginnend mit den Eltern des Kindes nach rechts verschoben. Die Anordnung an der betreffenden Stelle ist nach dieser Layoutentscheidung zwar nicht mehr symmetrisch, jedoch werden die Freiräume innerhalb des Baums so klein wie möglich gehalten, so daß weniger Scrollen erforderlich ist. In Abb. 5.2.3 ist ein Beispiel für die zwei Möglichkeiten bezüglich des Abstandes zwischen Geschwistern dargestellt. Im oberen Baum wird die Symmetrie durch Beibehalten desselben Abstandes für alle Geschwister bewahrt, allerdings werden auf diese Weise innerhalb des Stammbaumes größere Freiräume geschaffen. Die untere Alternative in zeigt das in dieser Arbeit gewählte Layout des Baumes. Sollte eine Verschiebung erforderlich sein, so werden 57 nur an der benötigten Stelle größere Abstände eingefügt, wodurch der Baum nicht mehr vollständig symmetrisch ist. Abb. 5.2.3 Abstand zwischen Geschwistern Bezüglich einer Übersichtsdarstellung des gesamten Baumes erfolgte die Entscheidung für zwei verschiedene Darstellungsbereiche: Es sind zwei verschiedene Zeichnungsbereiche für den Stammbaum verwirklicht worden, die gleichzeitig angezeigt werden. Im ersten Bereich wird der Stammbaum mit allen hier diskutierten Entscheidungen bezüglich der Darstellung aufgezeichnet, und im zweiten Bereich wird derselbe Stammbaum in einem kleineren Maßstab zur Übersicht wiedergegeben. Dieser Übersichtsstammbaum enthält nur die IDs der Personen, da für weitere Eintragungen kein Platz vorhanden ist und mit diesen lediglich der Bezug zum ersten Stammbaum hergestellt werden soll. Die beiden Fenster sollten synchronisiert sein, so daß die Hauptdarstellung des Stammbaums immer einen Teil einer bestimmten Stelle aus der Übersicht zeigt. 1 GEORGE II Augustus Karoline Margravine 6 Frederick Lewis Anne, Pss. Royal Pss. Auguste Willem IV Amelia Sophia Eleanor Abb. 5.2.4 Stammbaum mit Übersicht 58 3 7 ID Georg Ludwig * 28.05.1660 11.06.1727 ID Sophia Dorothea * 05.09.1666 02.11.1720 ID GEORGE II Augustus * 30.10.1683 25.10.1760 Nachfahre ID Sophia Dorothea * !&.0§.16(/ 28.06.1757 ID Karoline Margravine * 01.03.1683 20.11.1737 angeheiratet ID Friedrich Wilhelm I * 12.05.1687 11.06.1757 ID Sophia Dorothea * 20.01.1707 20.03.1751 ID Sophia Dorothea * 02.11.1791 12.01.1759 ID Sophia Dorothea * 10.06.1711 31.10.1786 ID Friedrich Wilhelm I * 30.1.1719 08.02.1772 ID Friedrich Wilhelm I * 28.05.1708 12.01.1727 Abb. 5.2.5 Layout des Stammbaums Abb. 5.2.4 zeigt den Stammbaum mit der Übersicht. Zusammenfassend ergibt sich das in Abb. 5.2.5 dargestellte Layout für die Stammbaumdarstellung in der Hauptansicht. Zur Anzeige der nicht im Stammbaum dargestellten Daten, wird bei Bedarf ein neues Fenster mit sämtlichen Informationen eingeblendet. 59 6 Implementierung des Systems ViMaGe Das System wurde aus dem Kontext heraus ViMaGe benannt, da es ein Werkzeug zur Visualisierung und interaktiven Manipulation genealogischer Daten darstellt. Die Implementierung erfolgte in Java und die Daten werden in einer Microsoft-Access-Datenbank abgelegt. Im folgenden soll ViMaGe vorgestellt werden; dabei werden einige ausgewählte Aspekte der Implementierung betrachtetet. ViMaGe bietet die Funktion zur Erstellung eines Stammbaums aus den in einer Datenbank in bestimmter Form gespeicherten Daten, und läßt gleichzeitig Manipulationen darauf zu. Das Datenbankschema, das hierzu nötig ist, wird in Kapitel 6.2 vorgestellt. Der Stammbaum wird auf zwei Arten dargestellt. Zu diesem Zweck sind auf der Hauptseite zwei Anzeigebereiche zu sehen: Das Hauptfenster ist vertikal in zwei kleinere Fenster unterteilt, wobei die Größenänderung des einen Fensters eine umgekehrt proportional Änderung in der Größe des anderen Fensters bewirkt. In dem linken Fenster befindet sich die Hauptansicht des Stammbaums. Sie zeigt die Informationen ID, Name, Lebensdaten und Lebensstatus einer Person an. In dieser Ansicht können vorgefertigte Anfragen und Manipulationen an jede hier dargestellte Person gestellt werden. Dazu wird eine Person im Stammbaum mit der rechten Maustaste angeklickt, woraufhin ein entsprechendes Popup-Menü erscheint. In diesem Menü stehen folgende Funktionen zur Auswahl: Daten zur Person ausgeben öffnet ein Fenster, in dem alle gespeicherten Daten zu einer Person ausgegeben werden, die nicht im Stammbaum angezeigt werden. Nachfahren ausgeben markiert alle direkten Nachfahren dieser Person farbig. Kind einfügen ermöglicht das Einfügen eines Kindes zu der ausgewählten Person; dabei ist jeweils die angeheiratete Person zu wählen, da bei Mehrfachehen sonst unklar bleibt, wer der zweite Elternteil ist. Partner einfügen Hiermit ist es möglich, einen Partner für die gewählte Person einzutragen. Daten ändern ermöglicht es, Daten in der Datenbank zu ändern; Personendaten können geändert und neue Titel können eingetragen werden. Beziehungen anzeigen erlaubt die Auswahl einer Verwandtschaftsbeziehung aus einer Menge und die farbige Markierung dieser im Stammbaum. Beispielsweise können alle Enkel einer Person markiert werden, wobei diese rot dargestellt werden und die Bezugsperson grün. Sind die Antworten auf diese Anfrage nicht auf dem aktuellen Ausschnitt des Stammbaums sichtbar, kann unter dem Menü Aktion der Menüpunkt Gehe Zu gewählt werden, der bewirkt, daß der Ausschnitt mit den Antworten als aktueller Bezugspunkt im Stammbaum angezeigt wird. Unter diesem Menüunterpunkt ist es auch möglich, zu den Stammeltern zu springen. Das rechte Fenster zeigt die Übersichtsdarstellung des Stammbaumes. Dort wird ein um die Hälfte verkleinerter Übersichtstammbaum dargestellt, in dem nur die IDs der Personen abgebildet sind, um die Personen in beiden Stammbäumen miteinander referenzieren zu können. In Abb. 6.1 ist der Hauptbildschirm mit beiden Stammbäumen dargestellt. Markierungen werden jeweils in beiden Stammbäumen dargestellt. Die linke obere Ecke wird jeweils als Bezugspunkt zum anderen Stammbaum verwendet. Wird in einer der Ansichten gescrollt, wird dies auch in der anderen Ansicht so übersetzt, daß im Maßstab 1:2 ausgehend von der linken oberen Ecke der gleiche Punkt in beiden Ansichten vom Stammbaum dargestellt wird. 60 6.1 Architektur und Komponenten Dem System ViMaGe liegt die in Abb. 6.1.1 beschriebene Architektur zugrunde. ViMaGe JDBC-ODBC-Brücke ODBC-Schnittstelle von Windows ODBC-Schnittstelle von Access Microsoft Access DB Abb. 6.1.1 Architektur und Komponenten VM ÜbersichtStB DBAnbindung Hauptfenster MenuGenealogy TopologieSB Person DJPanel ZeichneLinien Eingabemaske DBDateneingabe ABAbfrage Abb. 6.1.2 Zusammenwirken der Java-Klassen 61 Wahlbox Das System ViMaGe besteht aus zwölf Java-Klassen, die wie in Abb. 6.1.2 gezeigt zusammenwirken. Die Klasse Person enthält Methoden, in denen die Personen aus der Datenbank eingelesen werden und in denen für jede Person ein Objekt erzeugt wird. Desweiteren wird in dieser Klasse die Layout-Berechnung für die Anordnung der Personen in der StammbaumDarstellung durchgeführt. Die wichtigsten Methoden in dieser Klasse sind 1. Personeneinlesen(int y) 2. Personeneinlesen(String idv, int y) 3. partner(String personid, String geschlechtpartner, int y) 4. kindvonvec(String personid, String geschlechtvor) 5. partnervec(String personid, String geschlechtpartner) 6. balance(int xwert, int startbalance) 7. elternteileintragen(String idelternteil,Vector kinder, int zaeler,int xwertkind) 8. veschiebegeschwister() 9. elternverschieben(String id, int verxpos, int ebene) 10. nachkommenverschieben(String nid, int xwertverschieben) 11. countline() Die ersten fünf Methoden sind zum Personeneinlesen nötig, an dieser Stelle wird bereits der erste Schritt der Layoutberechnung durchgeführt. Methoden sechs und sieben sind für den zweiten Layoutschritt erforderlich, acht bis zehn für die Layoutoptimierung und die letzte Methode zur Berechnung der Linien im Stammbaum. Der genaue Ablauf wird in Kapitel 6.3 erläutert. TopologieSB erzeugt Objekte, die Informationen zu der topologischen Anordnung der Personen im Stammbaum und zu ihrer Darstellung enthalten. Dazu zählen die x- und yKoordinaten, Farbinformationen sowie Angaben zu der Ebene im Stammbaum, die Anzahl von Geschwistern und die größte Anzahl von Ehepartnern, die eine Person auf dieser Stammbaumebene hat. Desweiteren ist gespeichert, ob die Person innerhalb des Stammbaums einen Nachfahren darstellt oder lediglich eingeheiratet hat. Jedem Person-Objekt wird ein TopologieSB-Objekt zugeordnet. LinienVerbindungen generiert für jede Linie ein Objekt, in dem die x- und y-Koordinaten von Startposition und Endposition der Linie angegeben sind. In WahlBox wird die Auswahl des Stammvaters inklusive Datenbankanfrage verwaltet. DBAnbindung ist für das Laden der Treiber zur Verwendung der JDBC-ODBC-Bridge und zum Verbindungsaufbau mit der Datenbank verantwortlich. In Eingabemaske werden die Fenster zur Dateneingabe erzeugt. Zu diesen gehören unter anderem das Fenster, in dem die Datenbank angegeben wird, die unter ODBC registriert ist, sowie die Fenster zur Personen- oder Titeleingabe von Personen. Die Klasse DJPanel erstellt das Fenster, in dem die erweiterten Personeninformationen angezeigt werden. Dieses Fenster wird erzeugt, sobald eine Anfrage über Personendaten zu einer bestimmten Person vom Benutzer über das Popup-Menü im Hauptfenster gestellt wird. In Hauptfenster wird das Hauptfenster erzeugt und das Menü integriert. Außerdem wird in dieser Klasse auch das Popup-Menü erzeugt. Im Hauptfenster werden zwei Scrollpanes, also scrollbare Bereiche, erzeugt. Jedem dieser Bereiche wird ein Panel zugeordnet. Auf dem Hauptpanel wird der Stammbaum gezeichnet, auf dem Übersichtspanel wird ein ÜbersichtStB dem zweiten Scrollpane zugeordnet. Dort wird der Stammbaum um die Hälfte kleiner ge62 zeichnet und nur mit der ID als Ausgabe erstellt, damit die beiden Bäume einander zugeordnet werden können. ÜbersichtStB erzeugt ein Panel, welches im Hauptfenster in das Scrollpane eingebunden wird. Hier wird der um die Hälfte verkleinerte Übersichtsstammbaum abgebildet. Das Panel muß dabei in einer anderen Klasse erzeugt werden als das Hauptpanel für den Stammbaum, da die Paint-Methode andernfalls in beiden Panels die gleichen Zeichnungen einfügt. MenuGenealogy erzeugt das Menü im Hauptfenster. DBDateneingabe ist für das Absetzen von SQL-Befehlen, die eine Änderung der Datenbank wie z.B. das Einfügen neuer Personen oder Titel zur Folge haben, zuständig. Durch DBAbfrage werden die Beziehungen einer Person wie vom Benutzer abgefragt ermittelt und im Stammbaum markiert. 6.2 Vorstellung des Datenbankschemas Die genealogischen Daten werden in einer relationalen Datenbank gespeichert, die unter Access angelegt wird. In dieser Datenbank werden die Informationen zu den einzelnen Personen in sechs Tabellen aufgeteilt. Informationen, welche später auch in Kurzform im Stammbaum dargestellt werden, befinden sich in den Tabellen Person und Lebensdaten . Das erste Attribut der Person -Tabelle stellt die ID der Person und gleichzeitig den Schlüssel der Tabelle dar. Diese ID ist ein Autowert, d.h. ein Integerwert, der automatisch inkrementiert wird, sobald eine neue Person eingetragen wird. Der Name einer Person wird in drei verschiedenen Spalten der Tabelle eingetragen, nämlich unter Name , Vorname und Geburtsname . Alle diese Attribute haben den Wertebereich Text und dürfen Nullwerte enthalten. Zwei weitere Attribute sind Geschlecht , in dem m für männlich, w für weiblich und unbekannt eingetragen werden kann, falls das Geschlecht einer Person nicht bekannt sein sollte, und Lebendig , in dem der Wert ja , nein oder unbekannt eingetragen werden muß. Diese beiden Attribute haben ebenfalls den Wertebereich Text, besitzen jedoch eine Gültigkeitsregel, so daß hier anders als bei den ersten drei genannten kein anderer Wert als in der Gültigkeitsregel spezifiziert ist eingetragen werden kann. Die einzutragenden Werte sind dabei die oben beschriebenen Werte. Eine weitere Tabelle ist Stammvater , die nur eine Spalte besitzt. Hier können Stammväter, die zur Wahl stehen sollen, eingetragen werden. Ausgehend von demjenigen Stammvater, der aus dieser Tabelle gewählt wird, beginnt die Berechnung zur Darstellung des Stammbaums. Der Datentyp des Feldes ist der ID entsprechend integer, da sich hierauf die ID einer Person, die in der Tabelle Person gespeichert ist, bezieht. Die Tabelle Titel besitzt vier Attribute: Das erste, PersonID , besitzt den Wertebereich Integer. Dieses Attribut ist ein Fremdschlüssel, in dem die ID der betreffenden Person eingetragen wird. Die weiteren drei Spalten sind Titel , von und bis . Hier wird vermerkt, wann ein Titel verliehen wurde und, sollte er aberkannt oder nur zeitlich begrenzt vergeben worden sein, so wird dieser entsprechende Zeitpunkt in der bis -Spalte eingefügt. Auch hier ist der Wertebereich aller drei Attribute vom Typ Text. Lebensdaten ist die letzte Tabelle, die Informationen zu einer Person liefert; die zwei übrigen Tabellen Verheiratet und Kind geben lediglich Beziehungen zwischen Datensätze in der Person -Tabelle an. PersonID stellt wieder einen Schlüssel der Tabelle Lebensdaten dar: Hier wird die ID einer Person eingetragen, auf die sich das Tupel bezieht. Die restlichen 63 vier Attribute, die Spalten Geburtsort , Geburtstag , Todesort und Todestag , haben den Wert Text und geben Informationen zu Geburts- und Todesdaten. In der Tabelle Kind werden drei IDs gespeichert: in Mutter die ID der Mutter, in Vater die ID des Vaters und in Kind entsprechend die ID des Kindes. Das Attribut Kind ist hier der Schlüssel dieser Tabelle: Jedes Kind kann nur einmal als Kind eingetragen sein, wogegen jede Person mehrfach Vater oder Mutter werden kann. In der letzten Tabelle, verheiratet , wird die Heirat eines Paares vermerkt. In der Spalte Mann wird dabei die ID des Mannes, in Frau die ID der Frau eingetragen. Diese beiden Attribute sind vom Typ Integer. Die weiteren Attribute von/seit und geschieden , in denen das Heiratsdatum- bzw. das Scheidungsdatum eingetragen werden, sind vom Typ Text. Diese verheiratet-Tabelle besitzt kein Attribut als Schlüssel, da es selbst unter den gleichen Personen mehrere Heiraten geben kann. Somit ist hier das gesamte Tupel der Schlüssel. 6.3 Ausgewählte Aspekte der Implementierung 6.3.1 Datenbank-Kopplung Java kommuniziert mit Access über die ODBC-JDBC-Bridge. Um dies zu ermöglichen, müssen zunächst die ODBC-Treiber installiert werden. Dies geschieht bei Microsoft Access schon parallel zur Programminstallation. Eine Datenbank, auf die mit ODBC zugegriffen werden soll, muß beim ODBC-Treiber unter dem jeweiligen Betriebssystem registriert werden, damit der Zugriff über ODBC freigegeben wird. Soll unter Windows XP bei Verwendung von Microsoft Access auf eine Datenbank zugegriffen werden, so muß diese Datenbank vorab erst erstellt werden. Die in dieser Arbeit verwendete Datenbank trägt den Namen Königshaus England.mdb ; ihre genaue Struktur wurde bereits im vorigen Kapitel beschrieben. Zur Registrierung der ODBC-Schnittstelle ist in der Systemsteuerung unter dem Punkt Leistung und Wartung der Menüpunkt Verwaltung zu wählen. Hier ist es nun unter Datenquellen (ODBC) möglich, eine Datenbank unter System-DSN zu registrieren: Man wählt Hinzufügen und wird im folgenden zunächst zur Auswahl eines Treibers aufgefordert. Da Königshaus England.mdb eine Access-Datei ist, findet in diesem speziellen Fall der Microsoft Access-Treiber Verwendung. Im nächsten Punkt sind Datenquellenname und Datenbank zu wählen. Zum Datenquellennamen wird england bestimmt und die Datenbank Königshaus England.mdb zugewiesen. Nach Bestätigung ist Königshaus England.mdb somit unter dem Namen england über die ODBC-Schnittstelle zu erreichen. Optional ist es möglich, einen Benutzernamen und ein Kennwort anzugeben, falls die Datenbank paßwortgeschützt ist. Nach dieser Registrierung der Datenbank unter Windows als ODBC-Datenquelle ist es nun möglich, mit einer ODBC-unterstützenden Anwendung, wie z.B. im vorliegenden Fall einem Java-Programm, direkt auf die Datenbank zuzugreifen. In Java gestaltet sich der Zugriff auf die Datenbank folgendermaßen: Die Datenbankanbindung sowie alle Anfragen und Befehle an die Datenbank sind in einem try-catch-Block unterzubringen, damit es in Fehlersituationen nicht zu unkontrollierbaren Abstürzen kommt. Bevor tatsächlich Anfragen an die Datenbank gestellt werden können, ist eine Datenbankanbindung erforderlich. Dazu wird zunächst der Datenbanktreiber für die JDBC-ODBC-Bridge geladen. Ist dies geschehen, wird eine Verbindung zur Datenbank hergestellt. Diese Verbindung bleibt geöffnet, bis sie mit dem Befehl .close() wieder geschlossen wird. Die Verbindung zur Da64 tenbank ist in der Klasse DBAnbindung geregelt. In dem folgenden Codeausschnitt ist die Datenbankanbindung dargestellt. try { Class.forName( sun.jdbc.odbc.JdbcOdbcDriver ); //Datenbanktreiber }catch(Exception e) { (Reaktion auf Ausnahmen ) } try { Connection verbindung = DriverManager.getConnection(DB,user,pass); }catch(Exception e) { (Reaktion auf Ausnahmen ) } Der erste try-catch-Block zeigt, wie die ODBC-Treiber für die JDBC-ODBC-Bridge geladen werden, da das Programm über diese Windows-Bridge mit Access kommuniziert. Alternativ würde für ein MySQL-System der Treiber org.gjt.mm.mysql.Driver geladen werden; bei Oracle-Systemen wäre dagegen der Treiber oracle.jdbc.driver.OracleDriver nötig. Im zweiten try-catch-Block wird mit Connection eine Verbindung definiert, über die später Befehle und Anfragen an die Datenbank weitergegeben werden. Es werden drei Stringwerte als Parameter übergeben: Die DB ist der Datenquellenname, d.h. der Name, unter dem die Datenbank (in diesem speziellen Fall Königshaus England.mdb ) im Betriebssystem dem ODBCTreiber zugeordnet wurde (wie bereits erklärt, ist dieser Name im Rahmen dieser Arbeit england ). Die Strings user und pass stellen Username bzw. Paßwort bei einer paßwortgeschützten Datenbank dar. Existieren keine Benutzer und kein Paßwort, ist ein leerer String zu übergeben. In ViMaGe wird die Verbindung in der Variablen verbindung , die in MenuGenealogy als statisch definiert wird, geöffnet und bei Beendigung des Programms oder des Benutzers getrennt. Statisch ist diese Verbindung, weil mehrere Klassen auf sie zugreifen: Die Klasse Person fragt alle Personendaten aus der Datenbank ab, DBDateneingabe benutzt die Verbindung zum Einfügen oder Ändern von Daten, DBAnbindung stellt die Verbindung her, MenuGenealogy gibt die Metadaten der Datenbank aus und beendet auf Wunsch des Benutzers die Verbindung. DBAbfrage stellt die Beziehungsanfragen zwischen Personen an die ODBC-Schnittstelle und markiert sodann die Ergebnisse im dem Datensatz und der Darstellung in ViMaGe. Nach Herstellung der Verbindung werden nun Anfragen über die JDBC-ODBC-Bridge an die Datenbank gesendet. Die Anfragen und Befehle an die Datenbank werden dabei ebenfalls in einem try-catch-Block gestellt. Die Anfrage selbst gestaltet sich folgendermaßen: Es wird zunächst ein Statement definiert, das in dem Programm immer als query benannt wird. Dem Statement wird die offene Verbindung zugewiesen, über die dann die Anfragen an die JDBCODBC-Bridge weitergeleitet werden. Zusätzlich wird ein ResultSet erzeugt, welches die Ergebnisse der SQL-Anfrage an die Datenbank als Antwort erhält. Dem ResultSet wird die Anfrage zugeordnet, in der die SQL-Anweisung als Parameter in Stringform übergeben wird. Das Ergebnis wird in einer while-Schleife durchlaufen. 65 In dem folgenden Codeausschnitt ist die Anfrage nach den Personendaten gezeigt, die in die Java-Objekte eingetragen werden. In einem Person -Objekt werden folgende Informationen gespeichert: die ID (so, wie sie von der Datenbank vergeben ist); Vor- und Nachname; Geschlecht; ob die Person noch lebt oder bereits verstorben ist; Vektoren, in denen die Partner und Kinder gespeichert sind; ein Objekt topologie , in dem die bereits weiter oben beschriebenen Informationen zu finden sind; das Elternteil, welches einen direkten Nachkommen in dem Stammbaum darstellt und also keine angeheiratete Person; und schließlich die Sterbe- und Geburtsdaten. try { String anfrage= "SELECT * FROM Person P,Lebensdaten L WHERE L.PersonID=P.ID AND P.ID= " +idv; Statement query = MenuGenealogy.verbindung.createStatement(); ResultSet ergebnisse = query.executeQuery(anfrage); while(ergebnisse.next()) { idinput = ergebnisse.getString(ergebnisse.findColumn("ID")); vnameinput=ergebnisse.getString(ergebnisse.findColumn("Vorname")); nameinput=ergebnisse.getString(ergebnisse.findColumn("Nachname")); geschlechtinput=ergebnisse.getString(ergebnisse.findColumn("Geschlecht")); inputlebendig=ergebnisse.getString(ergebnisse.findColumn("Lebendig")); gebdatuminput=ergebnisse.getString(ergebnisse.findColumn("Geburtstag")); todesdatuminput=ergebnisse.getString(ergebnisse.findColumn("Todestag")); Person peintrag = new Person(idinput, nameinput, vnameinput, geschlechtinput, tmpp, tmpk, gebdatuminput, todesdatuminput); MenuGenealogy.vid.addElement(peintrag); partner(idinput,geschlechtinput,y); } }catch (Exception e) { } 6.3.2 Einlesen von Personendaten Das Einlesen der Personendaten und das Erzeugen von Objekten zur Darstellung im System ViMaGe beginnt, sobald der Benutzer die Stammbaumausgabe startet. Bevor dies möglich ist, wird mit der Wahl des Stammvaters die Startposition, ab der alle Daten ausgelesen werden sollen, spezifiziert. Diese Auswahl des Stammvaters bewirkt, daß seine ID in der Variablen stammvaterid eingetragen wird. Wird nun im Menü die Ausgabe des Stammbaumes ausgewählt, werden in der Klasse Person alle Nachfahren von diesem Stammvater eingelesen. Für jede Person wird ein Person-Objekt angelegt und im Vektor vid gespeichert. Dazu werden die Personen, abhängig von ihren Beziehungen untereinander, in einer bestimmten Rei66 henfolge (siehe Abb. 6.3.2.1) gespeichert. Diese Reihenfolge dient der späteren Layoutberechnung als Grundlage. Zum Importieren der Personendaten in das System werden fünf Methoden und die zwei temporären Vektoren vektortemp und kindvektortemp verwendet. In diesen beiden Vektoren werden mit einer der Methoden die einzulesenden Personendaten bestimmt. Das Einlesen beginnt bei Stammvater. Dazu wird dessen ID in den Vektor vektortemp eingefügt. Mit der Methode Personeneinlesen (int y) wird der Import begonnen. Der übergebene Parameter dient zur Layoutberechnung. Dies wird in Kapitel 6.3.3 genauer erläutert. Zu Beginn wird für jede ID, die in dem Vektor vektortemp gespeichert ist, in einer Schleife die Methode Personeinlesen(String id, int y) aufgerufen. Diese zweite Methode generiert für jede ID, die in vektortemp gespeichert ist, ein Person-Objekt und fügt sie dem Vektor vid an. Desweiteren ermittelt sie alle Nachkommen für die Personen, deren ID in dem Vektor vektortemp gespeichert sind, und trägt sie in kindvektortemp ein. Wurde der Vektor vektortemp vollständig durchlaufen, wird dieser geleert. Der zweite Schritt in dieser ersten Methode ist die Übertragung aller Elemente aus kindvektortemp in vektortemp und das Löschen aller Einträge aus kindvektortemp . Hatte(n) die Person(en), deren Referenz zuvor in vektortemp gespeichert war(en), keine Kinder, so bleibt kindvektortemp leer und seine Größe somit gleich null. Dann ist das Einlesen der Personendaten aus der Datenbank beendet. Falls aber Kinder existiert haben, ruft sich diese Methode solange selbständig auf, bis sämtliche Nachkommen eingelesen wurden. Die Methode Personeinlesen (String id, int y) wird, wie eben erwähnt, aufgerufen. Dabei wird ihr die ID der auszulesenden Person übergebenen. Anhand dieser ID wird eine Anfrage an die Datenbank gestellt, um die nötigen Informationen zum Erstellen eines Person-Objektes zu erhalten. Diese Informationen sind die schon bekannte ID, Vor- und Nachname, Geschlecht, Geburts- und Todesdatum und zwei Vektoren. Ein Vektor beinhaltet die IDs aller Partner und der zweite Vektor die IDs alle Kindern einer Person. Diese beiden letzteren Vektoren werden jeweils mit der Methode kindvonvec (String id, String geschlecht) für die Kinder und partnervonvec (String id, String geschlecht) für die Partner gefüllt. Die Kinder werden an den Vektor kindvektortemp angehangen, und für jeden Partner einer Person wird in der Methode Partner (String id, String geschlecht, int y) ein Person-Objekt erzeugt. Diese Methode ist mit der vorherigen Methode, in der die Personen-Objekte angelegt wurden, nahezu identisch; der einzige Unterschied liegt darin, daß hier die Kinder nicht an kindvektortemp angehangen und für die Partner dieser Personen keine neuen Objekte erzeugt werden, da sie selbst der Partner sind. In der Methode Partner (String id, String geschlecht, int y) werden die Personen eingelesen, die durch eine Heirat in die Familie aufgenommen wurden. In den beiden Methoden zum Einlesen der Partner und Kinder wird neben der ID und dem yWert, der zur Topologieberechnung benötigt wird, ebenfalls noch das Geschlecht der Person, deren Kinder bzw. Partner zurückgegeben werden sollen, übergeben. Dies ist wichtig, da beide Methoden eine SQL-Anfrage an die Datenbank senden, um die gewünschte Information zu erhalten, und je nach Geschlecht eine unterschiedliche Anfrage gesendet werden muß. Im Falle der Kinder, die ebenfalls an kindvektortemp zur weiteren Abarbeitung weitergegeben werden, gestaltet sich die SQL-Anweisung, die an die Datenbank gesendet wird, folgendermaßen: if(geschlechtvor.equalsIgnoreCase("w")) { 67 anfrage = "SELECT * FROM Person P,Kind K WHERE K.Kind=P.ID AND K.Mutter="; }else if(geschlechtvor.equalsIgnoreCase("m")) { anfrageteil1 = "SELECT * FROM Person P,Kind K WHERE K.Kind=P.ID AND K.Vater="; } Abhängig vom Geschlecht der Person, deren Kinder angefragt werden, muß diese Person als Vater oder Mutter in der SQL-Anfrage eingetragen werden. Der zweite neben dem Geschlecht übergebene Wert ist y, was dem y-Wert für die Darstellung im Stammbaum entspricht. Er wird für die Layoutberechnung benötigt. Stammeltern SV P1 SV Px Kn KmPn Erste Generation Pn K1 K1P1 K1Pn K2 Stammvater Partner x Kind n n-ter partner von m-ten Kind K2P1 K11 K12 Zweite Generation KnPn K11 K11P1 .. K12 erstes Kind von Kind 1 zweites Kind von Kind 1 Abb. 6.3.2.1 Anordnung der Person-Objekte im Vektor vid 6.3.3 Layoutberechnung Die Layoutberechnung wird in vier Schritten durchgeführt. Als erstes wird während des Einleseprozesses der Daten allen Personen der y-Wert für die vertikale Plazierung zugewiesen, die damit schon abgeschlossen ist, und ein erster x-Wert für die horizontale Plazierung. Der letztere Wert ordnet die Personen für jede Generation mit einem Abstand von 20 Pixeln nebeneinander an. In diesem ersten Schritt werden auch die Partner einer Person unter den Personen plaziert. Darauf folgt als zweiter Schritt eine Zuordnung der Kinder einer Person mittig unter dieser. Im anschließenden dritten Schritt werden Überschneidungen, die durch das Anordnen der Kinder unter ihren Eltern entstehen, aufgelöst. Die Optimierung wird mit dem Berechnen der Linien beendet. Vertikale Anordnung beim einlesen y-Werte berechnen Kinder den Eltern zuordnen Linien berechnen Überschneidungen auflösen Abb. 6.3.2.2 Ablauf der Layout-Optimierung 68 6.3.3.1 Vertikale Anordnung Der erste Schritt der Layoutberechnung wird bereits während des Einlesevorgangs der Personendaten gestartet. Da mit der Wahl des Stammvaters festgelegt wird, von welcher Person ausgehend die Ausgabe des Stammbaums beginnen soll, wird somit gleichzeitig bestimmt, an welchem Punkt die Layoutberechnung beginnt. Zu Beginn der Layoutberechnung wird ein Startwert für den y-Wert von 50 festgelegt, damit die Stammeltern, die ja auch die ersten Personen im Stammbaum sind, nicht unmittelbar am Fensterrand angeordnet werden. Es wurde hierzu ein Wert von 50 Pixeln gewählt, dies ist die Höhe eines Rechtecks. Bei dem Einlesen der Personendaten wird für jede Person einer Generation ein aktueller y-Wert geführt, der dieser Person zugewiesen wird. Sobald zu einer Person die Partner mit der Methode partner (String personid, String geschlechtpartner,int y) eingetragen werden, geschieht dies in einer Schleife, in der der maximale y-Wert dieser Ebene ermittelt wird. Jeder Partner einer Person besitzt denselben x-Wert, aber für jeden Partner wird der yWert um 50 erhöht. Der größte y-Wert in einer Generation wird als Maximalwert gespeichert, von dem aus der yWert für alle direkten Nachfahren der nächsten Generation errechnet wird: Dazu wird zum erhaltenen maximalen y-Wert 90 hinzuaddiert. Somit ist die nächste Generation 90 Pixel vom letzten Ehepartner der Person entfernt, die die meisten Ehen eingegangen ist. Der nach dem Einlesen aller existierenden Daten der Nachkommen eines Stammvaters ermittelte y-Wert wird nun noch um 100 Pixel erhöht, da somit jede dargestellte Person der letzten Generation einen Abstand von mindestens 50 Pixel zum unteren Rand des Zeichnungsbereiches besitzt. Ohne diese Erhöhung um 100 Pixel würde für mindestens eine Person mit diesem maximalen y-Wert ein Platzhalter erzeugt werden, der nicht sichtbar ist, da er außerhalb des Darstellungsbereiches gezeichnet wird (denn das Rechteck wird ja vom maximalen y-Wert ausgehend um 50 Pixel nach unten gezeichnet). Diese y-Werte ändern sich im folgenden auch in der weiteren Optimierung des Layouts nicht mehr. Der x-Wert zu einer Person wird folgendermaßen berechnet. Da alle Personen generationsweise eingelesen werden, wird bei jeder Generation mit einem x-Wert von null begonnen. In dem Vektor vektortemp befinden sich die IDs für alle Personen der aktuell einzulesenden Generation. Es wird bei der ersten ID begonnen; dem dieser Person entsprechenden PersonObjekt wird ein x-Wert von null zugeordnet. Nun wird, bevor der x-Wert für die nächste Person um 120 Pixel erhöht wird, geprüft, ob Partner für die aktuell bearbeitete Person existieren. Ist dies der Fall, wird der x-Wert beibehalten und wie weiter oben beschrieben der yWert für die eventuell vorhandenen Partner berechnet. Die Person-Objekte für die Partner werden mit denselben x-Werten erzeugt, da ein Partner bündig unter der dazugehörigen Person plaziert wird. Wenn aber die aktuell ausgelesene Person aus der Datenbank keine Partner besitzt und noch eine Person im Vektor vorhanden ist, wird für diese Person der x-Wert um 120 erhöht. Nachdem alle Personen eingelesen wurden, entspricht die Reihenfolge, die sie im Vektor einnehmen, folgendem Muster: Die erste Person ist der Stammvater selbst, die nächste(n) Person(en) sein(e) Partner bzw. seine Partnerin(nen), und darauf folgen die Kinder des Stammvaters sowie deren Partner. Dabei folgt bzw. folgen auf das erste Kind direkt dessen Partner, und erst danach das zweite Kind mit Partner etc. Somit schließt sich der kompletten ersten Generation die vollständige zweite Generation an usw. Ausgehend von dieser Anordnung im vid wird nun die Berechnung des Layouts begonnen. Im ersten Schritt wird für jede Person, be69 ginnend mit dem Stammvater, eine Verschiebung von deren Kindern durchgeführt, so daß sich die Eltern mittig über ihren Kindern befinden. D.h. also, daß die Kinder des Elternteils, welcher ein direkter Nachkomme ist, mittig unter diesem mit all seinen Partnern plaziert werden. Mit den anfänglichen x- und y-Werten würde die Ausgabe des Stammbaums sich wie unter Abb. 6.3.1 gezeigt gestalten. Diese ursprünglichen Werte für die Koordinaten ergeben sich direkt nach Einlesen der Personendaten, ohne daß eine Optimierung begonnen wurde. Lediglich die gezeigten Linien sind nicht auf diese Weise berechnet worden; sie würden jedoch wie vorliegend dargestellt werden, wenn keine Optimierung der zur Anordnung der Personen im Stammbaum durchgeführt werden würde. Die Zahlen in der Abbildung bezeichnen die Reihenfolge der einzelnen Personen im Vektor, was auch der Reihenfolge ihres Einlesevorgangs entspricht. 1 2 3 5 4 6 7 9 10 11 12 13 15 8 16 14 17 19 20 18 21 24 22 25 26 27 23 Abb. 6.3.1 Stammbaum vor Optimierung 6.3.3.2 Plazierung der Kinder Der zweite Teil der Layout-Berechnung erfolgt in mehreren Schritten. Im ersten Schritt wird die Methode balance() gestartet, die den Vektor vid mit allen Personenobjekten einmal durchläuft. Dabei wird mit der ersten Person im Vektor, also dem Stammvater, begonnen. Ob eine Person ein direkter Nachkomme ist und somit deren Kinder bezüglich ihrer Position angeordnet werden müssen, wird daran erkannt, daß alle Personen beim Einlesen einen boolschen Wert zugewiesen bekommen, nämlich getwahl . Werden Personen als Nachkommen oder als Stammvater eingelesen, erhalten sie den Wert false . Alle angeheirateten Personen, d.h. die Partner von direkten Nachkommen, werden mit true markiert. Bei der Topologieberechnung wird nun für alle Personen mit getwahl=false die Anzahl ihrer Kinder abgefragt. Zur Berechnung der Positionen der Kinder muß lediglich ein neuer x-Wert berechnet werden, da alle y-Werte durch den Einlesevorgang schon korrekt berechnet worden sind. Um alle Kinder symmetrisch unter die Eltern zu plazieren, wird der x-Wert für das erste Kind ermittelt. Dieser Wert wird als Parameter zusammen mit der ID des Elternteils, der Position im Personenvektor und allen Kindern dieses Elternteils an die Methode elternteileintragen 70 übergeben, in der jedem Kind der Elternteil, welcher ein direkter Nachkomme im Stammbaum ist, und der entsprechende x-Wert zugewiesen wird. Um den Wert des ersten Kindes zu ermitteln, wird der x-Wert des Elternteils ausgelesen. Für eine Plazierung mittig unter den Eltern muß das erste Kind um die Hälfte der gesamten Länge aller Kinder nach links verschoben werden, was einer Subtraktion von (#Kinder-1)*60 vom x-Wert der Eltern entspricht. Der errechnete Wert wird mit den drei anderen Parametern an die Methode elternteileintragen übergeben. In dieser Methode wird der Vektor ausgehend von der übergebenen Position in einer Schleife mit den IDs der Kinder verglichen. Sobald das erste Kind erreicht wird, wird ihm die errechnete x-Position zugewiesen und die aktuelle x-Position um 120 erhöht. Gleichzeitig wird dem Kind der Elternteil zugewiesen. Die Schleife wird abgebrochen, sobald dies für alle Kinder geschehen ist. Bei jeder Berechnung des x-Wertes für die Kinder einer Person, die im Stammbaum direkte Nachkommen besitzt, wird dieser x-Wert beginnend mit null verglichen und der kleinste Wert gespeichert. Nach abgeschlossener Plazierung der Kinder existiert ein minimaler Wert, der gleich null oder negativ ist. Das Panel, in dem der Stammbaum dargestellt wird, beginnt bei der Position x = 0 und y = 0; dadurch liegen alle Darstellungen, die im negativen Wertebereich für x oder y beginnen, außerhalb des Darstellungsbereichs. Infolgedessen wird für jede Person der x-Wert um den Betrag dieses minimalen x-Wertes erhöht, was in einer Verschiebung des Stammbaums um diesen Pixelwert nach rechts resultiert. if(p.topologie.getwahl()==true) { }else if(p.topologie.getwahl()==false) { parts=p.partner.size(); kidv=p.getkind(); kinds=kidv.size(); xpos=p.topologie.getxpos(); help1=xpos-(kinds*60)+60; elternteileintragen(p.getid(),kidv,i,help1); }else{} Berechnung des x-Wertes für die Kinder Nachdem diese Prozedur durchlaufen wurde, ergibt sich eine Anordnung wie in Abb. 6.3.2 dargestellt, wobei sich mittig unter jeder Person ihre Kinder befinden. Die Verschiebung hat jedoch zur Folge, daß es zu Überschneidungen in der Stammbaumdarstellung kommt, was aber durch die Methode veschiebegeschwister behoben wird (dritter Schritt der Layoutberechnung). Nun wird der gesamte Vektor erneut durchlaufen und jeder x-Wert um den Betrag des kleinsten existierenden x-Wert erhöht, um den Baum gegebenenfalls aus dem negativen Bereich, der nicht dargestellt wird, wieder in den positiven zu verschieben. Dadurch kann sich der maximale x-Wert wieder erhöhen, was parallel überprüft werden muß, um das Panel nach dieser Verschiebung ausreichend groß zu wählen. 71 X=0 1 2 9 10 3 5 4 6 7 11 12 8 16 17 21 18 22 14 15 13 19 24 20 26 27 25 23 Abb. 6.3.2 Erster Optimierungsschritt 6.3.3.3 Auflösen von Überschneidungen Mit der Methode veschiebegeschwister wird die dritte Phase der Layoutberechnung eingeleitet. Der Vektor vid mit den Person -Objekten wird noch einmal durchlaufen, und zwar geschieht dies jeweils generationsweise. Für jede Generationsebene wird geprüft, ob sich Überschneidungen ergeben, indem folgende Prozedur durchlaufen wird: while(i<anzahlpersonen-1) { xposrechts=p.topologie.getxpos(); ypostest=p.topologie.getypos(); ebene=p.topologie.getebene(); i++; p=(Person)(vid.elementAt(i)); xposrechts2=p.topologie.getxpos(); ypostest2=p.topologie.getypos(); ebene2=p.topologie.getebene(); abort=false; while((ebene==ebene2)&&(i<anzahlpersonen)&&(abort==false)) { if ((ypostest2==ypostest)) { abort=true; }else { i++; p=(Person)(MenuGenealogy.vid.elementAt(i)); ebene2=p.topologie.getebene(); ypostest2=p.topologie.getypos(); id2 = (String)p.getid(); xposrechts2=p.topologie.getxpos(); } } if((ebene2==ebene)&&(xposrechts2<xposrechts+119)&&(testvectorempty==f alse)) { xwert=xposrechts-xposrechts2+120; elternverschieben(p.getelternteil(),xwert,ebene-1); }else{} } 72 Bei diesem Verfahren wird mit dem ersten Eintrag im Vektor vid begonnen. Das erste Objekt wird ausgelesen und dessen x- und y-Wert und sowie seine Ebene in der Stammbaumdarstellung ermittelt. Ausgehend von dieser Ebene wird das nächste Objekt auf der gleichen Ebene mit identischem x-Wert gesucht. Um zu überprüfen, ob es hier nun zu einer Überschneidung kommt, wird der x-Wert von zwei aufeinander folgenden Personen, die direkte Nachkommen im Stammbaum sind, verglichen. Alle angeheirateten Personen auf der gleichen Ebene haben einen größeren y-Wert, so daß mit diesem ersten Test jeder Partner einer Person übersprungen und stattdessen der nächste direkte Nachbar (bei dem es sich nur um ein Geschwisterteil oder ein Cousin bzw. eine Cousine handeln kann) im Stammbaum ermittelt wird. Besitzt eine Person keine Verwandten auf derselben Generationsebene, folgt nach dem/den Partner(n) der erste Eintrag für ein Individuum der nächsten Generation. Diese wird daraufhin als aktuelle Generation markiert, und der Vergleich wird in dieser Generation weitergeführt, bis alle Ebenen abgearbeitet wurden. Sollte eine Person einen direkten Nachbarn haben, gibt es zwei mögliche Fälle. Im ersten Fall tritt keine Überschneidung auf und sodann wird die zweite dieser Personen als Vergleichsposition eingesetzt und mit dem nächsten direkten Nachbarn im Stammbaum verglichen. Im zweiten Fall kommt es zu einer Überschneidung. Da alle Geschwister in der Methode veschiebegeschwister mittig unter den Eltern plaziert wurden, kann es sich dabei nur um eine Überschneidung zwischen Cousinen und Cousins handeln. Diese wird aufgelöst, indem die Person, die im Vektor die hintere Position einnimmt, einschließlich ihrer Partner verschoben wird. Um das errechnete Layout überall dort, wo keine Überschneidungen auftreten, zu erhalten, werden die Eltern mitsamt allen ihren Nachkommen und, wenn nötig, den direkten Nachbarn , verschoben. Die direkten Nachbarn der Eltern werden dabei nur dann verschoben, wenn es zu einer neuen Überschneidung auf dieser Generationsebene kommen sollte. Überschneidungen, die durch eine Verschiebung auf tieferen Ebenen entstehen, bleiben unberücksichtigt und werden erst korrigiert, wenn die betreffende Ebene erreicht wird. Der x-Wert, um den solch eine Verschiebung durchgeführt werden muß, errechnet sich aus dem x-Wert der beiden Personen, die auf eine Überschneidung hin überprüft werden. Für Personen auf der gleichen Ebene, die direkte Nachfahren im Stammbaum sind, gilt dabei folgendes: Die im Vektor vor der anderen stehende Person (im folgenden als Person 1 bezeichnet) muß einen kleineren x-Wert besitzen als die nachstehende Person (im folgenden als Person 2 bezeichnet). Der x-Wert muß mindestens um den Wert von 120 kleiner sein, da er den Beginn des Rechtecks, in dem die Person dargestellt wird, bezeichnet, und von diesem Startpunkt ausgehend um 100 Pixel nach rechts abgebildet wird. Die 20 zusätzlichen Pixel bezeichnen den Mindestabstand zwischen zwei Rechtecken innerhalb des Stammbaums. Hieraus ergibt sich also, daß der x-Wert von Person 1, um 120 erhöht (xposrechts), kleiner sein muß als der x-Wert von Person 2 (xposrechts2). Die Differenz xpos = xposrechts - xposrechts2 dieser beiden Werte stellt somit den Wert dar, um den die Eltern von Person 2 inklusive aller Nachkommen und Nachbarn verschoben werden müssen. Dieser Wert wird zusammen mit der Ebene, auf der die Eltern zu finden sind, und der ID des Elternteils, welcher ein direkter Nachkomme im Stammbaum ist, der Methode elternverschieben übergeben. Die Position des betreffenden Elternteils wird im Vektor vid gesucht und gemeinsam mit dem zu verschiebenden x-Wert der Methode nachkommenverschieben übergeben. In dieser Methode werden alle x-Werte der direkten Nachkommen der Eltern, inklusive aller Partner, um den Wert xpos erhöht. Dadurch wird der entsprechende Ast im Stammbaum, an dem Position der Eltern beginnend, um den Wert xpos nach recht verschoben. Das Verrücken der Eltern könnte dabei zwar zu einer neuen Über73 schneidung auf deren Ebene führen, doch diese kann nur mit einem direkten Nachbarn , also einem Geschwisterteil oder einem/einer Cousin/Cousine, stattfinden. Um dies zu prüfen, wird in der Methode elternverschieben , nachdem die Methode nachkommenverschieben aufgerufen wurde, mit dem neuen x-Wert des verschobenen Elternteils kontrolliert, ob eine solche Überschneidung entstanden ist. Ist es zu keiner Überschneidung gekommen, wird diese Prozedur abgebrochen und das Verfahren an den Stellen in der Methode verschiebegeschwister fortgesetzt, wo zuvor auftretende Überschneidungen anfänglich den Aufruf der beiden Methoden ausgelöst hatten. Mit den neuen Werten von Person 2 werden die restlichen Einträge auf Überschneidungen hin überprüft. Sollte nun aber, verursacht durch die Verschiebung, eine Überschneidung auf der Ebene der Eltern erzeugt worden sein (was analog zur Methode verschiebegeschwister geprüft wird), kommt es hier zur Verschiebung der betroffenen Person mit allen Nachkommen und Partnern an der Stelle, wo sie auftritt, und nicht zur Verschiebung ab der Stelle ihrer Eltern. Diese Überprüfung läuft solange weiter, bis mit der nächsten Generation begonnen wird. Nachdem die Topologieberechnung abgeschlossen ist, sind alle Personen korrekt im Stammbaum angeordnet und die Verbindungen zwischen den Individuen können im folgenden anhand dieser Anordnung berechnet werden. Dies geschieht in der Methode countline() im letzten Schritt zur Layoutoptimierung. 1 2 3 5 4 6 7 9 10 11 12 8 16 17 18 14 15 13 19 20 21 24 22 25 23 X=0 Abb. 6.2.4 74 26 27 6.3.3.4 Linienberechnung Um die Layoutberechnung abzuschließen, sind noch die Linien, welche die Verbindungen zwischen Kindern und Eltern darstellen, zu berechnen. Es existieren drei Linientypen, von denen zwei in countline() errechnet werden. Der dritte Typ wird bei der Zeichnung des Stammbaums ausgegeben und an dieser Stelle auch errechnet. Der erste der drei Linientypen ist die waagerechte Verbindung zwischen Geschwistern. Der zweite Typ ist die von den Eltern, genauer gesagt vom letzten Partner des Elternteils, der ein direkter Nachkomme ist, ausgehende Linie, die sich bis zu der Stelle fortsetzt, an der bei mehreren Nachkommen die waagerechte Linie berechnet wird. Der dritte und letzte Linientyp ist die Verbindung von den Nachkommen zu der waagerechten Linie. Besitzt eine Person keine Geschwister, tritt keine waagerechte Linie auf, und die Linien der Eltern treffen sich mit der ihres Kindes an der Stelle, an der sich andernfalls eine waagerechte Linie befinden würde. Die Berechnung der Linien wird wie folgt vorgenommen. Jeder direkte Nachfahre im Stammbaum ist an dem Eintrag false im Wert getwahl zu erkennen. Dies bedeutet, daß an dieser Stelle eine senkrechte Linie von der Mitte des Rechtecks, das die Person repräsentiert, um 22 Pixel nach oben gezeichnet werden muß. Alle waagerechten Linien werden nun auf der gleichen Höhe, und zwar 22 Pixel oberhalb der Personen, die sie als Geschwister verbinden, gezeichnet. Somit ist der Treffpunkt der Linien als diese Stelle definiert. Für die von den Eltern zu einem 22 Pixel oberhalb der Kinder gelegenen Punkt führende Linie wird zuerst nur der yWert berechnet, bei dem die Linie bei den Eltern beginnt. Zu diesem Zweck wird bei der Vektor vid durchlaufen und bei jeder Person, für die getwahl den Wert false hat, der y-Wert der Linie von dem letzten Partner aus errechnet. Dieser Wert ist der um 50 multiplizierte und mit der Anzahl der Partner erhöhte y-Wert des Partners. Beispielsweise würden im Falle von zwei Ehen 50 x 2 = 100 Pixel addiert werden. Anschließend werden im Vektor alle Kinder der Person gesucht und von diesen der y-Wert sowie der kleinste und der größte x-Wert ermittelt. Aus diesen Werten errechnen sich dann die beiden Verbindungslinien. Die waagerechte Linie zur Verbindung aller Kinder beginnt bei dem kleinsten, um 50 erhöhten x-Wert und setzt sich, jeweils mit dem um 22 erniedrigten yWert des Kindes, fort bis zum größten, um 50 erhöhten x-Wert. Es werden 50 Pixel zum ersten Kind addiert und vom letzten Kind abgezogen, damit die Linie in der Mitte der Kinder endet. Die wagerechte Linie wird 22 Pixel über den Kindern gezeichnet, damit sie näher an den Kindern als an den Eltern ist, da sie alle Kinder miteinander verbindet. Mit diesen Angaben stehen die beiden y-Werte für die Eltern der betreffenden Kinder ebenfalls fest. Der zuvor errechnete y-Wert kennzeichnet nämlich den Beginn der Linie und der y-Wert der Kinder ihr Ende. Um die Linie in der Mitte des Rechtecks beginnen zu lassen, bildet die um 50 Pixel erhöhte x-Position der Eltern die Startposition für den x-Wert der Eltern. Im allgemeinen wird die Linie senkrecht nach unten gezeichnet, allerdings kann ein Sonderfall eintreten, der noch berücksichtigt werden muß. Durch das Verschieben der Personen kann es passieren, daß an manchen Stellen im Stammbaum alle Kinder eines Paares, gemessen am x-Wert, weiter rechts plaziert werden, so daß eine senkrechte Linie die Eltern nicht mit den Kindern verbinden würde. Um dem vorzubeugen wird, bevor die Verbindungslinie zwischen Eltern und Kindern eingetragen wird, kontrolliert, ob der kleinste x-Wert der Kinder kleiner oder gleich dem der Eltern ist. Ist dies der Fall, treten keine Schwierigkeiten auf, und die Linie wird senkrecht eingetragen. Andernfalls wird der kleinste x-Wert der Kinder plus 50 zur Endposition der Linie bestimmt, und die Verbindung wird somit in diesem Sonderfall bei sehr vielen Verschiebungen schräg eingezeichnet, um eine weitere Verschiebung des ganzen Stammbaums zu vermeiden. 75 7 Zusammenfassung und Ausblick 7.1 Zusammenfassung und Bewertung Es wurde ein System zur Darstellung genealogischer Daten entwickelt, an dem interaktiv Manipulation vorgenommen werden können. Das System erlaubt anhand deduktiver Regeln die Herleitung von Daten, die nicht in der Datenbank gespeichert, aber daraus ableitbar sind. Darüber hinaus ist die Änderung- und Erweiterung des Datensatzes über das System anhand der Darstellung möglich. Im vergleich zu den schon existierenden Anwendungen zur Visualisierung genealogischer Daten ist eine übersichtlichere und intuitiv verständlichere Darstellung der Daten gelungen. Jedoch ist die graphische Ausschmückung der Hauptfenster und Funktionalitäten wie zusätzlicher Bedienungskomfort nicht so weit fortgeschritten. Während in ViMaGe der Schwerpunkt auf die Darstellung der Daten und mögliche Anfragen zum herleiten von nicht gespeicherten Daten gelegt wurde, sind die meisten Programme mit genealogischem Hintergrund darauf ausgelegt Daten zu Speichern, oder einen optisch guten Eindruck in der Bedienung herzugeben. Besonders gut ist meiner Meinung nach die Aufteilung des Darstellungsbereiches in zwei Fenster, in dem das eine zur Visualisierung und Manipulation der Daten herangezogen werden kann. Der zweite Bereich zeigt dahingegen eine Übersicht des Stammbaumes. Durch die räumliche Nähe der Antworten auf eine Anfrage an die Datenbank, ist im Allgemeinen die gesamte Visualisierung dieser Antworten, wenigstens im Übersichtfenster überblickbar. Die bisher existierenden genealogische Programme zeigen keine Übersicht, es sind Programme vorhanden, die ein Zoomen erlauben, doch wird dadurch entweder die Darstellung so klein, daß die Daten nicht mehr lesbar sind, oder die Daten sind lesbar aber der Baum kann nicht mehr überblickt werden. Ein weiterer Pluspunkt die erweiterte Anzeige, der nicht im Stammbaum gespeicherten Daten. Es ist Möglich die erweiterte Anzeige für mehrere Personen gleichzeitig zu öffnen. In der erweiterten Anzeige stehen Informationen, die aufgrund der Größe des Platzhalters für eine Person, nicht angezeigt werden können. Diese Funktion erlaubt es, daß bei einer deduktiven Anfrage an die Datenbank, die erweiterte Anzeige für alle Personen die anhand der Antwortmenge markiert werden, gleichzeitig geöffnet werden kann. So ist eine genauere Analyse der Antwortmenge möglich. Abhängig von der Größe des Stammbaums und damit abhängig von der Menge der Daten, die dargestellt werden, sind im oberen Bereich der Darstellung nur sehr wenige Personen angeordnet. In der ersten Generation finden sich hier nur die Stammeltern. Dadurch kommt es in der linken und rechten oberen Ecke zu ungenutztem Raum, in dem jedoch ein Scrollen möglich ist. Es ist durchaus möglich, sich als Benutzer darin regelrecht zu verlieren. Dies ist zwar kein Fehler, jedoch schadet es der Übersichtlichkeit. In Abb. 7.1 ist ein Beispielstammbaum gezeigt, bei dem der obere rechte Teil nahezu ein ganzes Viertel des Bildschirms ausmacht. Aufgrund dieses Effektes wurde bei der Darstellung auch auf die Plazierung der Stammeltern in der Mitte des Bildschirms verzichtet. Eine mittige Plazierung hätte zusätzlichen ungenutzten Platz zur folge. 76 Abb. 7.1.1 Stammbaum 7.2 Ausblick Als erster in Frage kommender technischer Verbesserungsvorschlag ist die Optimierung der Liniendarstellung zu nennen. An einigen Stellen sind die Nachkommen einer Person nicht unter diese plaziert, was durch das Verschieben von Personen hervorgerufen wird. Aus diesem Grund müßte die Linienberechnung in der Darstellung noch weiter verbessert werden. Zu diesem Zweck könnte unter anderem das System um eine Schnittstelle erweitert werden, die dem Benutzer verschiedene vorgegebene Layouts der Darstellung zur Auswahl stellt. Weiterhin wäre auch eine Verbesserung der Laufzeit erstrebenswert, denn sobald andere ressourcenverbrauchende Programme im Hintergrund laufen, treten beim Multitasking Laufzeitprobleme auf. In diesem Fall wird das Scrollen verlangsamt, und beim Überzeichnen des Darstellungsbereichs ist in manchen Fällen das zuvor gezeichnete Bild zu sehen, und das Neuzeichnen wird kurzzeitig verzögert. ViMaGe bietet einige Anfragen an die genealogische Datenbank zur Herleitung nicht gespeicherter Daten. Sollten weitere Anfragen hinzugefügt werden, ist ein abändern das System notwendig. In einer Weiterführung dieser Diplomarbeit, könnten die SQL-Anfragen in einer Datei gespeichert werden, und über eine Funktion im Hauptprogramm erweitert werden. So könnten beliebige, formulierbare SQL-Anfragen, ohne Änderung des Quellcodes, den deduktiven Regeln hinzugefügt werden. Hierbei werden vom Benutzer SQL-Kenntnisse erwartet. Eine wünschenswerte Erweiterung des Systems wäre die Möglichkeit, einen GEDCOMDatensatz aus den Daten in der genealogischen Datenbank oder den in das Programm importierten Daten zu erstellen. Weiterhin sollte es möglich sein, eine GEDCOM-Datei mit Hilfe des Systems zu importieren, so daß für bestehende im GEDCOM-Format gespeicherte Datensätze nicht eine erneute manuelle Eingabe der Daten erfolgen muß. Damit wäre es möglich, Datensätze aus existierenden Genealogieprogrammen, die den Exports in eine GEDCOMDatei ermöglichen, über diesen Umweg wieder einzulesen. Die dabei bestehende Schwierigkeit liegt in dem nicht einheitlichen GEDCOM-Standard. Obwohl GEDCOM als einheitliches Format zum Austausch von genealogischen Daten entwickelt wurde, haben viele Entwickler geringe Änderungen in die GEDCOM-Struktur eingebracht, so daß der Export einer GEDCOM-Datei oft auf verschiede Arten verwirklicht wird. Dadurch sind diese inkompatibel zu anderen Anwendungen, die selbst GEDCOM-Daten exportieren und/oder importieren können. 77 Eine weitere Schwierigkeit besteht in der Existenz mehrerer Versionen von GEDCOM. Daher muß eine Entscheidung getroffen werden im Hinblick darauf, ob es möglich sein sollte, jede Version zu importieren oder nur die aktuelle Version 5.5. Eine andere mögliche Erweiterung wäre die Darstellung der Ahnentafel einer Person. Dies sollte gegebenenfalls auch interaktiv aus der Darstellung des Stammbaums erfolgen. Dabei sollte die Ahnentafel in einem separaten Fenster geöffnet werden, ähnlich wie die erweiterte Darstellung der Personendaten. Es wäre denkbar, in der Ahnentafel die gleichen Informationen wie im Stammbaum darzustellen und dort ebenfalls eine Auswahl von weiteren Informationen einzublenden. Diese Darstellung wäre damit einheitlich und könnte ohne Berechnungsprobleme erstellt werden. Es ist lediglich zu überlegen, ob eine beliebig weit in die Vergangenheit zurückführende Ahnentafel zugelassen wird, oder diese auf beispielsweise fünf bis zehn Generationen beschränkt wird. Viele Datensätze reichen nur bis etwa zum 17. Jahrhundert zurück, so daß keine großen Generationsebenen zu erwarten sind. Ausnahmen bilden nur historisch interessante Familien, die schon vor den Zivilstandsangelegenheiten Ahnenchroniken geführt haben. Im Bezug auf alternative Darstellungen der genealogischen Daten könnte eine von der Anwendung abhängige Darstellung gewählt werden, in der andere abgeleitete Daten relevant sind, aber auch die Auswahl der in den Stammbaum aufgenommenen Personen von verschiedenen Kriterien abhängt. So ist für eine genetisch orientierte Anwendung, die genealogische Daten anhand von biologischen Kriterien analysiert, eine andere Datenmenge aus den genealogischen Daten einer Familie von Bedeutung als für die Darstellung des Familienstammbaums. Im genetisch motivierten Beispiel werden ausschließlich die Daten von Blutsverwandten als relevant betrachtet, während ein Familienstammbaum auch Affinialverwandte umfaßt. Um aus genealogischen Daten das Erbe der einzelnen Verwandten zu ermitteln, sind wiederum andere Bedingungen an die Daten gestellt. Das System könnte unter Einbeziehung des aktuellen Erbschaftsrecht und der Vererbungstheorie um weiter Darstellungsmöglichkeiten der gleichen genealogischen Datenmenge für verschieden Anwendungsmöglichkeiten erweitert werden. Auf die verschiedenen Darstellungen könnten anwendungsabhängig Anfragen ausgeführt und die Antworten wie gewohnt visualisiert werden. In dieser vorliegenden Version von ViMaGe ist es nicht möglich, den Stammbaum irgendeiner Person aus der gerade aktiven Darstellung auszugeben, während zur gleichen Zeit die erstere Darstellung erhalten bleibt. Eine weitere Entwicklung könnte so aussehen, daß mehrere Stammbäume zur gleichen Zeit gezeichnet werden können, so ist es möglich den Stammbaum von beiden Großvätern gleichzeitig zu betrachten, falls alle Daten in der genealogischen Datenbank gespeichert sind. In einem Stammbaum sind die Vorfahren mütterlicher Seite nicht gespeichert, deshalb wäre die soeben erwähnte Darstellung nur mit zwei nebeneinander existierenden Stammbäumen möglich. Da alle Daten in einer gemeinsamen genealogischen Datenbank gespeichert wären, ist es dadurch auch möglich übergreifende Anfragen an die Daten zu stellen, die dann simultan in beiden Stammbäumen visualisiert werden. Z.B. können dann alle Onkel einer Person dargestellt werden. In einem einzigen Stammbaum, werden nur die Onkel von einer Elternseite erfaßt, da die des anderen Elternteils in einem anderen Stammbaum dargestellt werden. Es können Personen interaktiv in die Datenbank eingefügt werden. Die geänderten Personendaten werden sofort gespeichert und sind auch abrufbar; lediglich bei Einfügen von neuen Personen, sei es ein Kind oder ein Partner, ist ein Programmneustart aufgrund der gewählten Darstellungs- und Einlesemethoden für die genealogischen Daten nötig. 78 Denkt man in die Richtung von Transaktionsverwaltung nach, könnte das ViMaGe auf ein Mehrbenutzersystem ausgeweitet werden. Dazu wäre eine Mehrbenutzersynchronisation notwendig. In der vorliegenden Version könnten zwar verschieden Exemplare dieser Software in einem Netzwerk auf eine gemeinsame genealogische Datenbank zugreifen, da ViMaGe über die JDBC-ODBC-Bridge auf die Datenbank zugreift, jedoch gibt es keine Regeln die den Zugriff steuern. 79 Erklärung: Hiermit erkläre ich, diese Diplomarbeit selbständig durchgeführt zu haben. Alle Quellen und Hilfsmittel, die ich verwendet habe, sind angegeben. Zitate habe ich als solche kenntlich gemacht. Bonn, 19. April 2004, Marijan Gjoreski 80 Literaturverzeichnis [AGLS00] A. Austermann, J. Gallenbacher, Ch. Lange, M. Spörl: Java 2 mit Methode , C&L Computer und Literaturverlag, Böblingen, 2000 [AeiGe] Österreich-Lexikon: Genealogie, http://www.aeiou.at/aeiou.encyclop.g/g235218.tm [Ber91a] Bertelsmann Universal Lexikon in 20 Bänden, Band 1 A-Aso, Verlagsgruppe Bertelsmann GmbH/Bertelsmann Lexikon Verlag GmbH, Gütersloh, 1991 [Ber91b] Bertelsmann Universal Lexikon in 20 Bänden, Band 6 Feu-Gier, Verlagsgruppe Bertelsmann GmbH/Bertelsmann Lexikon Verlag GmbH, Gütersloh, 1991 [Ber91c] Bertelsmann Universal Lexikon in 20 Bänden, Band 12 Met-Nizo, Verlagsgruppe Bertelsmann GmbH/Bertelsmann Lexikon Verlag GmbH, Gütersloh, 1991 [Bün96] Karl-Dieter Bünting: Deutsches Wörterbuch , Isis Verlag AG , Chur, 1996 [Bis00] Judy Bishop: Java lernen , Addison-Wesley Verlag, München, 2000 [Com02] Computergenealogie, http://www.familiengeschichte.de/computer [Chu96] The Church of Jesus Christ of Latter-day Saints: The Gedcom Standard Release 5.5, http://homepages.rootsweb.com/~pmcbride/gedcom/55gctoc.htm [Dad01] P. Dadam: Skript Datenbaksysteme WS 00/01, http://www.informatik.uni-ulm.de/dbis/f&l/lehre/WS00_01/Skript_DBMS/ [Dud93] Lektorat des B.I.-Wissenschaftsverlags unter Leitung von Hermann Enesser: Duden Informatik, 2. Auflage Dudenverlag, Mannheim, Leipzig, Wien, Zürich, 1993 [Eck01] Eckhard Henkel: Ahnenforschung, Tools, Mormonen , http://www.eckhard-henkel.de/ahnen/genealog.htm [Enz] Encyclopedia: Begriffe der Genealogie , http://ahnenforschungen.de/famnet/ modules.php?name=Encyclopedia&op=terms&eid=5&1tr=A [EthT04] Tagung am Max-Planck-Institut für Ethnologie: Verwandtschaft und Freundschaft, http://www.freundschaft-und-verwandtschaft.de/tagung_halle_2004.rtf, 2004 [Fla00] David Flanagan: Java Foundation Classes in a Nutshell , 1. Auflage, O'Reilly Verlag, 2000 [Fok01] FOKO - Allgemeine Informationen, http://foko.genealogy.net/doc/ 81 [GHGRBa] Genealogisch-Heraldische Gesellschaft der Region Basel: Fachwörter/Glossar, http://www.ghgrb.ch/genealogicalIntroduction/glossary.html [GHGRBb] Genealogisch-Heraldische Gesellschaft der Region Basel: GEDCOM, http://www.ghgrb.ch/genealogicalIntroduction/gedcom.html [GHGRBc] Genealogisch-Heraldische Gesellschaft der Region Basel: Verwandtschaft, http://www.ghgrb.ch/genealogicalIntroduction/verwandtschaft.html [GHGRBd] Genealogisch-Heraldische Gesellschaft der Region Basel: Alte Schrift - aus Pfarrbüchern, http://www.ghgrb.ch/genealogicalIntroduction/Schrift_pfarrbuch1.html, 2003 [GHGRBe] Genealogisch-Heraldische Gesellschaft der Region Basel: Geschichte der Genealogie , http://www.ghgrb.ch/genealogicalIntroduction/history.html [GYJ97a] James Gosling, Frank Yellin, Java-Team : JavaTM API Band 1: Die Basispakete , 1. Auflage, Addison Wesley Longman Verlag GmbH, 1997 [GYJ97b] James Gosling, Frank Yellin, Java-Team : JavaTM API Band 2: Das Window Toolkit und Applets , 1. Auflage, Addison Wesley Longman Verlag GmbH, 1997 [Hag96] Sven Hage: ODBC , http://wwwbs.informatik.htw-dresden.de/svortrag/ai93/ hage/odbc.html, 1996 [Her00] Rainer Herman: Genealogische Zeichen und Abkürzungen , http://www.genealogienetz.de/misc/ [HiKo] Hill, P.B. und Kopp: Anthropologische und historische Aspekte der Familie , http://infosoc.uni-koeln.de/fs-soziologie/texte/Makro_WS9899/Hill.html [IEG] IEG Systems: Einsatzgebiete von Access, Vorteile und Nachteile http://www.iegsystems.com/ [Job02] Fritz Jobst: Programmieren in Java , 4., überarbeitete Auflage, Hanser Verlag, München/Wien, 2002 [KBLa] Kanton Basel Landschaft: Verzeichnis der Zivilstandsregister aus französischer Zeit (1792-1815) , http://www.baselland.ch/docs/archive/main.htm [KBLb] Kanton Basel Landschaft: Kirchenbücher: Übersicht und Ortsregister , http://www.baselland.ch/docs/archive/main.htm [Kei_a] Ewald Keil: GEDCOM, http://www.geocities.com/ekeilde/d-ged.htm [Kei_b] Ewald Keil: GEDCOM, http://www.uni-hohenheim.de/~keil/d-ged.htm [Kei_c] Ewald Keil: FOKO, http://www.geocities.com/ekeilde/d-fok.htm 82 [KeEi97] Alfons Kemper, André Eickler: Datenbanksysteme , 2., aktualisierte und erweiterte Auflage, R. Oldenbourg-Verlag, München, Wien, 1997 [Krü00] Guido Krüger: Go To Java 2 , Zweite Auflage, Addison Wesley,2000 [Lec93] Fremdwörterbuch , Lechner Verlag, 1993 [Lex90a] Neues großes Lexikon in Farbe 1 A-L, o.A. des Verlags, 1990 [Lex90b] Neues großes Lexikon in Farbe 1 M-Z, o.A. des Verlags, 1990 [Liwa] Klaus Liwowsky: Grundlagen zu Personenstandsregistern / Kirchenbüchern in Schlesien , www.boehm-chronik.com.verwandtschafts.htm [Liwb] Klaus Liwowsky: Kirchenbücher der Gnadenkirche in Landeshut , www.boehm-chronik.com/verwandtschafts.htm [Lug01] Hannes Lugert: Foko Kennziffern , http://www.genealogienetz.de/vereine VSFF/fokoid.htm, 2001 [Mül] Gerd Müllenheim: Einträge in Kirchenbüchern , www.boehm-chronik.com.verwandtschafts.htm [Man98] Rainer Manthey: Skript zur Vorlesung Informationssysteme WS 98/99, Rheinische-Friedrich-Wilhelms-Universität Bonn Institut für Informatik III [Man99] Rainer Manthey: Skript zur Vorlesung Deduktive Datenbanken I SS 1999, Rheinische-Friedrich-Wilhelms-Universität Bonn Institut für Informatik III [MSH02] Stefan Middendorf, Reiner Singer, Jörn Heid: Programmierhandbuch und Referenz , 3. Auflage, http://www.dpunkt.de/java/index.html, 2002 [Msa96] Microsoft Press: Microsoft Access 97 , Microsoft Press, 1996 [Mag] Mager: Nummerierungsmethoden , http://home.t-online.de/home/MagerAuW/nummer.htm [Nie03] Alexander Niemann: Objektorientierte Programmierung in Java , 3., überarbeitete Auflage, bhv Verlag moderne industrie Buch AG & Co. KG, 2003 [Mcd97] Microsoft Press Computer Dictionary, 3rd. Edition, Microsoft Press, Washington, 1997 [NL_1] Net-Lexikon: Familie, http://www.net-lexikon.de/Familie.html [NL_2] Net-Lexikon: Genealogie, http://www.net-lexikon.de/Genealogie.html [NL_3] Net-Lexikon: Microsoft Access, http://www.net-lexikon.de/Microsoft-Access.html 83 [NL_4] Net-Lexikon: Stephan Kekulé von Stradonitz, http://www.net-lexikon.de/Stephan_ Kekule_von_Stradonitz.html [NL_5] Net-Lexikon: SQL Allgemein, http://www.net-lexikon.de/SQL.html [ODBCa] http://www.net-lexikon.de/ODBC.html [Bos] Bosssoftware: ODBC Unterstüzung , http://www.bossoftware.com/web/ deutsch/Html/tca_Odbc.html [Pay97] Margarete Payer, Alois Payer: Skript Datenbankaufbau, http://www.payer.de/dbaufbau/dbaufbau01.html, 1997 [Rau] Heribert Rau: Genealogische Methodik , http://www.heribert-rau.de/ Ahnenseite_von_Heribert_Rau/Genealogie/body_genealogie.html [Reu01a] Doris Reuter: Aufbau einer Ahnentafel , http://www.genealogie-forum.de/allgemein/ahnentafel.htm [Reu01b] Doris Reuter: Was ist GEDCOM? , http://www.genealogie-forum.de/allgemein/gedcom/gedcom01.htm, 2001 [Ric87] Arndt Richter: Die 64 (autosomalen) Verwandschaftswege der Verwandtehe von Gregor Mendels Eltern, http://www.genetalogie.de/artikel/pdf/Mendel64.pdf , 1987 [Roo02] RootsWeb: GEDCOM TAGS, http://helpdesk.rootsweb.com/FAQ/Gedcom_tags.htm, 2002 [Rud] Karsten Rudorf: Grundlagen der Familienforschung, http://www.t-online.de/home/Karsten Rudorf/vhskurs2.htm [Sch00] Brit Schröder: Data Beckers Kompaktreferenz Java2 , 1. Auflage, Data Becker Gmbh & Co. KG, 2000 [Sch] Juergen Schadnik: Verwandschaftsgrade , www.boehm-chronik.com.verwandtschafts.htm [SO01] Herbert Schildt, Joe O`Neil: Java2 Ge-Packt , mitp-Verlag, 2001 [Sch97] Frank Schnell: Verwandtschaftsgrade , http://www.frank-schnell.de [Sch01] Schmid Wolfgang: Rezension über Genealogie als Denkform in Mittelalter und Früher Neuzeit , http://www.sehepunkte.historicum.net/2001/01/2981.htm, 2001 [Sei00] Winfrid Seimert: Access 2000 , bhv Verlag, 2000 [Sin98] Detlef Singer: Die Vögel Mitteleuropas , 3. Auflage, Franckh-KosmosVerlags-GmbH & Co., Stuttgart, 1998 84 [Ste02] Ralph Steyer: Java2 , Markt+Technik-Verlag, 2002 [See_a] Stiftung Seeau: Lexikon-Genealogie , http://members.kabsi.at/seeau/Encyclopedia/Kompendien/LexikonGenealogie.html [See_b] Stiftung Seeau: Genealogische Modelle , http://members.kabsi.at/seeau/Encyclopedia/Kompendien/Medienmodelle.html [See_c] Stiftung Seeau: Monografie Genealogieplan , http://members.kabsi.at/seeau/Encyclopedia/Kompendien/MonografieGenealogie.html [SQLa] SQL, http://www.net-lexikon.de/SQL.html [SQLb] SQL, http://www.net-jcc.com/sqlpages/jccs_sql.htm [Tra03] Enzo Traverso, Kontinuität und Bruch, Sozialistische Zeitung , http://members.aol.com/sozrst/030824.htm, 2003 [Ull03] Ullenboom Christian: Java ist auch eine Insel , 2., aktualisierte und erweiterte Auflage, Galileo Computing, 2003 [VC] Verein für Computergenealogie: Vorlagen , http://www.genealogienetz.de/ vorlagen [Vos99] Gottfried Vossen: Datenbankmodelle, Datenbanksprachen und Datenmanagement-Systeme , 3., vollständig überarbeitete Auflage, R. OldenbourgVerlag, München, Wien, 1999 [Web03] Tobias Weber, Einführung in die Genealogie , http://www.vilstal.net/users/tobiasweber/einführung.htm [Wei03] Volkmar Weiß: Nationalsozialismus, Wissenschaftsgeschichte , http://www.volkmar-weiss.de/pub17.html, 2003 [Wei03] Illona Weinreich: Skript zur Vorlesung Datenbanken WS 03/04, Rhein-AhrCampus Remagen [Wen04] Birgit Wendt: Internet für Familienforscher , http://tipps.ahnenforschung.net/internet, 2004 [Wik_1] Wikipedia: Ahnenpass, http://de.wikipedia.org/wiki/Ahnenpass [Wik_2] Wikipedia: Ahnentafel, http://de.wikipedia.org/wiki/Ahnentafel [Wik_3] Wikipedia: Ariernachweis, http://de.wikipedia.org/wiki/Arische_Abstammung [Wik_4] Wikipedia: Familienstambaum, http://de.wikipedia.org/wiki/Familienstammbaum 85 [Wik_5] Wikipedia: Darstellung, http://de.wikipedia.org/wiki/Darstellung [Wik_6] Wikipedia: Genealogie, http://de.wikipedia.org/wiki/Genealogie [Wik_7] Wikipedia: Stephan Kekulé von Stardonitz , http://de.wikipedia.org/wiki/Stephan_Kekulé_von_Stradonitz [Wik_8] Wikipedia: Microsoft Access, http://de.wikipedia.org/wiki/MS_Access [Wik_9] Wikipedia: Nachkommenliste, http://de.wikipedia.org/wiki/Nachkommenliste [Wik_10] Wikipedia: Stammbaum, http://de.wikipedia.org/wiki/Stammbaum [Wit_a] Thomas Wittek: JDBC Grundlagen , http://computer.freepage.de/cgi- bin/ feets/freepage_ext/41030x030A/rewrite/wittek/Java/JDBC_Grdlg.htm [Wit_b] Thomas Wittek: JDBC für Fortgeschritene , http://computer.freepage.de/ cgi- bin/feets/freepage_ext/41030x030A/rewrite/wittek/Java/JDBC_Profi.htm 86