Jörn,
schönen Dank, dass Du die unterschiedlichen ID-Kategorien
"auseinandergepflückt" hast.
Ich will mal mit meinen Worten die Dinge kommentieren - entweder sehe ich die
Dinge in gleicher Sichtweise aber mit anderen Worten oder ich erhoffe mir
konstruktiven Widerspruch.
> 1. Cross-reference IDs.
>
> Das sind die "@I1234@" Nummern. [... snip]
Diese Programm-interne Numerierung ist notwendig und wichtig, aber wie Du
sagst: Programm-intern.
Solange man sich innerhalb eines Programms bewegt, sind die Nummern eindeutig.
Sobald man aber die Daten exportiert und weiter gibt, verlieren sie ihren
"Wert" - sie dienen bei einem importierenden Programm der Erstellung der
Verknüpungen.
Nach dem Import wird das importierende Programm eine eigene Meinung haben, wie
die Datensätze zu organisieren und zu verknüpfen sind und wie es diese IDs bei
einem Export definieren wird.
Die "Cross-reference IDs" sorgen für die Integrität einer GEDCOM-Datei. Nicht
mehr und nicht weniger.
Sie gewährleisten keine Programm- oder Installations-übergreifende Identität
eines Datensatzes.
Selbst wenn 2 Anwender dasselbe Programm benutzen und gegenseitig Daten
austauschen, können sie sich nicht darauf verlassen, dass sie ein-und-dieselbe
Person anhand dieser Nummer identifizieren.
Absolut korrekt.
Genau diese Problem scheint mir der Anlaß gewesen zu sein, dass die Entwickler
von PAF das Konzept des "_UID"-tags eingeführt haben.
Die Funktion der _UIDs unterscheidet sich von den Cross-reference IDs
insofern, als daß diese nicht Datei-intern eindeutig ist, sondern
weltweit. Man könnte UIDs für Datei-interne aber auch Datei-
übergreifende Querverweise (cross-references) benutzen. Das sieht der
GEDCOM Standard jedoch nicht vor. Daher bleibt es bei der
Unterscheidung zwischen den GEDCOM-Kompatiblen Cross-reference IDs,
und der GEDCOM-Erweiterung _UID.
> 2. Der IDNO tag
> Personen können ID-Nummern gegeben werden. [... snip]
Dieser "tag" erscheint mir für die weitere Diskussion uninteressant zu sein.
Es ist halt ein wenig spezifizierter "tag" (engl. "tag" = deutsch "Etikett,
Namensschild, Marke, Kennzeichen, Schild, ...), der ganz nach Gusto vom
Anwender gepflegt werden kann.
Sofern diese diskussion auf UIDs zielt, ist das richtig. ID-Nummern
können ja frei vergeben werden, und müssen sogar innerhalb einder Datei
nicht notwendiger Weise eindeutig sein.
> 3. Der _UID tag
>
> PAF5 führt diese "Unique Record Identifiers" ein. Diese sind mit
> einer extrem hohen Wahrscheinlichkeit weltweit eindeutig für einen
> Datensatz. Außer PAF5 unterstützt meines Erachtens nur Ages! ab
> V1.20 diesen Tag. Für eine benutzer-definierte Datensatznummer sollte
> diese BITTE NICHT benutzt werden, da sie dann mit Sicherheit nicht
> weltweit eindeutig ist!
Ich habe mich jetzt nicht durch die GEDCOM-5.5-Spezifikationen gewühlt.
Nach meinem Verständnis erlaubt GEDCOM proprietäre "tags", wenn deren Name mit
einem Unterstrich beginnt.
Demnach wäre "_UID" eine mögliche Variante der Spezifikation - mit der Freiheit
des Programms, diesen selbstdefinierten "tag" nach eigenem Geschmack zu
definierien und zu belegen.
Ich lasse mich da gerne eines Besseren belehren.
Das ist korrekt. Alle GEDCOM-Tags, die mit "_" beginnen sind
programmspezifische Erweiterungen. Was natürlich einen anderen
Programmierer nicht davon abhalten muß, diese mit einzulesen, und
auszuwerten.
Fast alle Programme tun dies auch in der einen oder anderen Form.
Beispielsweise werten einige Programme die "_MSTAT"-Tags aus, obwohl
der GEDCOM-Standard dazu nichts aussagt.
Nur, wenn dem so sei, wie kann dann Dein "Ages!" in vermeintlich gleichem Sinne
diesen "tag" benutzen?
Ich hoffe, auf einem gedanklichen Irrweg zu sein ...
Gruß,
Eckhard
Ich zitiere jetzt einmal aus Deiner anderen Mail:
*** Zitat Anfang ***
Unverwechselbare Datensatz-Seriennummer.
Das Programm weist jetzt jedem Datensatz in der .paf-Datei eine
unverwechselbare Datensatz-Seriennummer zu.
Wie die Datensatznummer (RIN) hilft die unverwechselbare
Datensatz-Seriennummer, jede Person in der Datenbank erkennen. Anders als die
RIN gibt es jede Datensatz-Seriennummer weltweit jedoch nur einmal. Jede Person
in einer
.paf-Datei unterscheidet sich durch ihre Nummer von jeder anderen Person in
allen anderen .paf-Dateien, die weltweit erstellt werden. Die unverwechselbare
Datensatz-Seriennummer ändert sich auch nicht, wenn man eine GEDCOM-Datei
exportiert und an andere verschickt. Sie können also eine GEDCOM-Datei
verschicken, der Betreffende kann sie in Personal Ancestral File importieren,
Änderungen vornehmen, eine neue GEDCOM-Datei erstellen und sie Ihnen
zurückschicken.
Mit Hilfe der Funktion Vergleichen/Verschmelzen können Sie erkennen, welche
Datensätze Sie ursprünglich angelegt haben, welche Änderungen vorgenommen
wurden, können bestimmen, welche Angaben Sie behalten wollen und dann die
Datensätze verschmelzen. Die unverwechselbare Datensatz-Seriennummer können Sie
im Fenster Person weder sehen noch bearbeiten."
*** Zitat Ende ***
Die Nummer wird im Programm nicht sichtbar, erst beim GEDCOM-Export sieht man,
dass jeder Personen-Datensatz mit einer solchen Nummer versehen wird.
Daß die Nummer nicht sichtbar ist, ist PAF-spezifisch. Allerdings
zeigt auch "Ages!" diese nicht am Bildschirm an. Ein Nutzwert durch
dessen Anzeige ist aber auch nicht zu erzielen.
Das Format ist eine hexadezimale Kodierung von 18 Bytes.
Demnach ergibt sich ein Wertebereich von 0 bis 256 ^ 18 = 2,23 x 10 ^ 43, d.h.
bei dezimaler Darstellung wäre das eine Zahl mit 43 Stellen.
Korrekt.
Die Wahrscheinlichkeit, bei "zufälliger" Generierung einer Zahl in dieser
Größenordnung eine "weltweit eindeutige" Nummer zu erzielen, dürfte sehr hoch
liegen.
Die Wahrscheinlichkeit liegt so extrem hoch, daß alle
nicht-Mathematiker einfach davon ausgehen können, daß niemals eine
Nummer doppelt vergeben wird. Die Methoden zur Erzeugung solcher
GUIDs (Globally Unique IDentifiers) sind zudem so ausgearbeitet, daß
dieser statistischen Sicherheit noch eine faktische hinzukommt. Die
Diskussion, wie diese Nummern generiert werden, führt den Anwender
jedoch nicht weiter. Der interessierte Progrmmierer mag sich die
Windows-Dokumentation zu den Funktionen CoCreateGuid() und
UuidCreate() ansehen.
Im Übrigen wird hierfür eine zentrale Vergabestelle genausowenig
gebraucht wie eine eindeutige Nummernzuordnung durch die IANA.
(Genaugenommen wird die IANA doch gebraucht, schließlich fließt
die Hardware-adresse der Ethernetkarte mit in die Berechnung ein,
und dessen Eindeutigkeit wird durch die IANA sichergestellt)
Spannend dürfte die Frage sein (wie anfangs von Jesper Zedlitz gestellt), ob
andere Programme diese Nummer ("_UID tag") auch unterstützen, also bei Import
und Export beibehalten.
Ich kann hierzu nur Aussagen über unser Produkt "Ages!" machen. Es
läßt bestehende _UIDs unverändert, und generiert neue UIDs für neue
Datensätze. Beim Verschmelzen von Personen erzeugt es Datensätze mit
zwei UIDs. Dieses Verfahren ist nach unseren Tests PAF5-kompatibel.
Grüße
Jörn Daub