[MacUser-L] MacFamilyTree7 Daten

Moin,

wollte mit euch nur mal kurz meine „Entdeckung“ bzgl. der Datenhaltung von MacFamilyTree 7 teilen. Vielleicht kann es ja der ein oder andere gebrauchen.

Ich weiß nicht mehr den Grund, aber ich hatte mich auf die Suche nach den Backup gemacht. Diese liegen, wenn nicht anders angegeben in:

/Users/{eigenerUsername}/Library/Containers/com.syniumsoftware.macfamilytree7/Data/Backups/{Stammbaumname}

Darunter finden sich entsprechende Ordner "{Stammbaumname} (Automatic Backup) ----- 27.01.2015 20-12-01.mftpkg“

Die produktive Daten finden sich, je nachdem ob sie in der iCloud oder lokal gespeichert werden in folgenden Ordner:

iCloud:
/Users/{eigenerUsernname}/Library/Mobile Documents/LWL9XTYF8Q~com~syniumsoftware~macfamilytree7/Documents/{Stammbaumname}.mftpkg

Ich vermute der kryptische Teile „LWL9XTYF8Q“ wird bei jedem anders aussehen.

Lokal:
/Users/{eigenerUsername}/Library/Containers/com.syniumsoftware.macfamilytree7/Data/Documents/{Stammbaumname}.mftpkg

Jeweils darunter finden sich 2 Dateien und ein Verzeichnis:

-rw-r-----@ 1 christian staff 2273280 27 Jan 20:12 database
-rw-r-----@ 1 christian staff 601295 25 Jan 00:27 metadata
drwxr-xr-x 3 christian staff 102 15 Nov 22:12 resources

In resources finden sich die Bilder und ich vermute auch alle anderen externen Dateien wie Videos etc. Hab nur keine bei mir…

Die Datei „metadata“ enthält wenn ich das richtig sehe die Standardeinstellungen wie Datumsformat und andere dinge und die verbunden mobilen Devices - Hab mich mit der aber nicht auseinander gesetzt.

Interessant finde ich aber die Datei „database“ denn die wurde mir bei meinen Versuch das Backup zu finden als sqlite Datei im Finder angezeigt. Auf diese kann man also leicht mit sqlite Befehlen im Terminal zugreifen:

$ sqlite3 database
SQLite version 3.8.5 2014-08-15 22:37:57
Enter ".help" for usage hints.

.tables

ZADDITIONALNAME
ZASSOCIATERELATION
ZBASEMEDIARELATIONASSIGNMENT
ZBASEOBJECT
ZCHILDRELATION
ZCOORDINATE
ZFAMILYSEARCHKNOWNBADFURTHERINFORMATIONMATCH
ZFAMILYSEARCHKNOWNBADPERSONMATCH
ZLABEL
ZMEDIARELATION
ZPLACE
ZRESEARCHASSISTANTQUESTIONINFO
ZSAVEDVIEW
ZTODO
Z_5LABELS
Z_5TODOS
Z_METADATA
Z_PRIMARYKEY

select * from ZBASEOBJECT where ZFIRSTNAME="Johann";

431|13|4||-1||||||||0|0|0||||||||||||||430689762.486724|||-13062776008|-11231355208||||64580740|||||||||||||22.01.1587|03.02.1645|Johann Hager|johann hager|Johann|j500|Hager|h260|||||||||||||||||||||||||
545|13|4||-1||||||||0|0|0||||||||||||||430689762.486663|352152552.058725|||||||46906117|||||||||||||||Johann Unger|johann unger|Johann|j500|Unger|u526|||||||||||||||||||||||||

.schema ZBASEOBJECT

CREATE TABLE ZBASEOBJECT ( Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER, ZISPRIVATE INTEGER, ZRESEARCHASSISTANTCOMPLETEDQUESTIONSMASK INTEGER, ZOBJECT INTEGER, Z7_OBJECT INTEGER, ZISBOOKMARKED INTEGER, ZSOURCEREPOSITORY INTEGER, ZISBOOKMARKED1 INTEGER, ZMAN INTEGER, ZWOMAN INTEGER, ZISBOOKMARKED2 INTEGER, ZISFEMALE INTEGER, ZISSTARTPERSON INTEGER, ZKEKULE INTEGER, ZISBOOKMARKED3 INTEGER, ZLDSSTATUS INTEGER, ZTYPE INTEGER, ZASSIGNEDPLACE INTEGER, ZFAMILY INTEGER, ZPERSON INTEGER, ZTYPE1 INTEGER, ZPERSON1 INTEGER, ZCERTAINTY INTEGER, ZSOURCE INTEGER, ZSOURCECONTAINER INTEGER, Z10_SOURCECONTAINER INTEGER, ZCHANGEDATE TIMESTAMP, ZCREATIONDATE TIMESTAMP, ZCACHED_MARRIAGEDATEASDATE TIMESTAMP, ZCACHED_BIRTHDATEASDATE TIMESTAMP, ZCACHED_DEATHDATEASDATE TIMESTAMP, ZCACHED_DATEASDATE TIMESTAMP, ZFAMILYSEARCHID VARCHAR, ZFAMILYSEARCHVERSIONCOMPAREINFO VARCHAR, ZGEDCOMID VARCHAR, ZTEXT VARCHAR, ZABBREVIATION VARCHAR, ZAGENCY VARCHAR, ZAUTHOR VARCHAR, ZDATE VARCHAR, ZPLACE VARCHAR, ZPUBLICATION VARCHAR, ZREFERENCENUMBER VARCHAR, ZREFERENCETYPE VARCHAR, ZTEXT1 VARCHAR, ZTITLE VARCHAR, ZCACHED_MARRIAGEDATE VARCHAR, ZCACHED_BIRTHDATE VARCHAR, ZCACHED_DEATHDATE VARCHAR, ZCACHED_FULLNAME VARCHAR, ZCACHED_FULLNAMEFORSORTING VARCHAR, ZFIRSTNAME VARCHAR, ZFIRSTNAMESOUNDEX VARCHAR, ZLASTNAME VARCHAR, ZLASTNAMESOUNDEX VARCHAR, ZNAMEMIDDLE VARCHAR, ZNAMEMIDDLESOUNDEX VARCHAR, ZNAMEPREFIX VARCHAR, ZNAMEPREFIXSOUNDEX VARCHAR, ZNAMESUFFIX VARCHAR, ZNAMESUFFIXSOUNDEX VARCHAR, ZTITLE1 VARCHAR, ZAUDIOFILEIDENTIFIER VARCHAR, ZPDFFILEIDENTIFIER VARCHAR, ZTHUMBNAILFILEIDENTIFIER VARCHAR, ZPICTUREFILEIDENTIFIER VARCHAR, ZTHUMBNAILFILEIDENTIFIER1 VARCHAR, ZURL VARCHAR, ZTHUMBNAILFILEIDENTIFIER2 VARCHAR, ZVIDEOFILEIDENTIFIER VARCHAR, ZADDRESS VARCHAR, ZAGENCY1 VARCHAR, ZCAUSE VARCHAR, ZDATE1 VARCHAR, ZLDSTEMPLECODE VARCHAR, ZUSERDESCRIPTION VARCHAR, ZVALUE VARCHAR, ZADDRESS1 VARCHAR, ZNAME VARCHAR, ZPAGE VARCHAR );
CREATE INDEX ZBASEOBJECT_ZGEDCOMID_INDEX ON ZBASEOBJECT (ZGEDCOMID);
CREATE INDEX ZBASEOBJECT_ZRESEARCHASSISTANTCOMPLETEDQUESTIONSMASK_INDEX ON ZBASEOBJECT (ZRESEARCHASSISTANTCOMPLETEDQUESTIONSMASK);
CREATE INDEX ZBASEOBJECT_ZOBJECT_INDEX ON ZBASEOBJECT (ZOBJECT);
CREATE INDEX ZBASEOBJECT_ZISBOOKMARKED_INDEX ON ZBASEOBJECT (ZISBOOKMARKED);
CREATE INDEX ZBASEOBJECT_ZSOURCEREPOSITORY_INDEX ON ZBASEOBJECT (ZSOURCEREPOSITORY);
CREATE INDEX ZBASEOBJECT_ZISBOOKMARKED1_INDEX ON ZBASEOBJECT (ZISBOOKMARKED1);
CREATE INDEX ZBASEOBJECT_ZMAN_INDEX ON ZBASEOBJECT (ZMAN);
CREATE INDEX ZBASEOBJECT_ZWOMAN_INDEX ON ZBASEOBJECT (ZWOMAN);
CREATE INDEX ZBASEOBJECT_ZCACHED_BIRTHDATE_INDEX ON ZBASEOBJECT (ZCACHED_BIRTHDATE);
CREATE INDEX ZBASEOBJECT_ZCACHED_BIRTHDATEASDATE_INDEX ON ZBASEOBJECT (ZCACHED_BIRTHDATEASDATE);
CREATE INDEX ZBASEOBJECT_ZCACHED_DEATHDATE_INDEX ON ZBASEOBJECT (ZCACHED_DEATHDATE);
CREATE INDEX ZBASEOBJECT_ZCACHED_DEATHDATEASDATE_INDEX ON ZBASEOBJECT (ZCACHED_DEATHDATEASDATE);
CREATE INDEX ZBASEOBJECT_ZCACHED_FULLNAME_INDEX ON ZBASEOBJECT (ZCACHED_FULLNAME);
CREATE INDEX ZBASEOBJECT_ZCACHED_FULLNAMEFORSORTING_INDEX ON ZBASEOBJECT (ZCACHED_FULLNAMEFORSORTING);
CREATE INDEX ZBASEOBJECT_ZFIRSTNAMESOUNDEX_INDEX ON ZBASEOBJECT (ZFIRSTNAMESOUNDEX);
CREATE INDEX ZBASEOBJECT_ZISBOOKMARKED2_INDEX ON ZBASEOBJECT (ZISBOOKMARKED2);
CREATE INDEX ZBASEOBJECT_ZISFEMALE_INDEX ON ZBASEOBJECT (ZISFEMALE);
CREATE INDEX ZBASEOBJECT_ZISSTARTPERSON_INDEX ON ZBASEOBJECT (ZISSTARTPERSON);
CREATE INDEX ZBASEOBJECT_ZLASTNAMESOUNDEX_INDEX ON ZBASEOBJECT (ZLASTNAMESOUNDEX);
CREATE INDEX ZBASEOBJECT_ZNAMEMIDDLESOUNDEX_INDEX ON ZBASEOBJECT (ZNAMEMIDDLESOUNDEX);
CREATE INDEX ZBASEOBJECT_ZNAMEPREFIXSOUNDEX_INDEX ON ZBASEOBJECT (ZNAMEPREFIXSOUNDEX);
CREATE INDEX ZBASEOBJECT_ZNAMESUFFIXSOUNDEX_INDEX ON ZBASEOBJECT (ZNAMESUFFIXSOUNDEX);
CREATE INDEX ZBASEOBJECT_ZCACHED_DATEASDATE_INDEX ON ZBASEOBJECT (ZCACHED_DATEASDATE);
CREATE INDEX ZBASEOBJECT_ZTYPE_INDEX ON ZBASEOBJECT (ZTYPE);
CREATE INDEX ZBASEOBJECT_ZASSIGNEDPLACE_INDEX ON ZBASEOBJECT (ZASSIGNEDPLACE);
CREATE INDEX ZBASEOBJECT_ZFAMILY_INDEX ON ZBASEOBJECT (ZFAMILY);
CREATE INDEX ZBASEOBJECT_ZPERSON_INDEX ON ZBASEOBJECT (ZPERSON);
CREATE INDEX ZBASEOBJECT_ZPERSON1_INDEX ON ZBASEOBJECT (ZPERSON1);
CREATE INDEX ZBASEOBJECT_ZSOURCE_INDEX ON ZBASEOBJECT (ZSOURCE);
CREATE INDEX ZBASEOBJECT_ZSOURCECONTAINER_INDEX ON ZBASEOBJECT (ZSOURCECONTAINER);
CREATE INDEX ZBASEOBJECT_Z_ENT_INDEX ON ZBASEOBJECT (Z_ENT);

Ich kenne mich mit sqlite nicht wirklich aus, kann daher nur die Kleinigkeit wiedergeben, die ich mir bis jetzt angesehen habe. Die Tabelle ZBASEOBJECT enthält zumindest die eigentlichen Personen Daten. Ob man die Ausgabe mit sqlite3 Befehlen formatieren kann, weiß ich nicht. „.help“ gibt die Hilfe aus. „.extit“ - is klar oder?

So weit, ich hoffe der ein oder andere findet es nützlich. Könnte mir z.B. vorstellen darauf aufsetzend einen WEbfrontend mit Hilfe von PHP aufsetzen kann und damit auf der Webseite immer aktuelle Daten sieht.

Gruß Christian

Moin Christian.

wollte mit euch nur mal kurz meine „Entdeckung“ bzgl. der Datenhaltung von MacFamilyTree 7 teilen. Vielleicht kann es ja der ein oder andere gebrauchen.
Ich kenne mich mit sqlite nicht wirklich aus, kann daher nur die Kleinigkeit wiedergeben, die ich mir bis jetzt angesehen habe. Die Tabelle ZBASEOBJECT enthält zumindest die eigentlichen Personen Daten. Ob man die Ausgabe mit sqlite3 Befehlen formatieren kann, weiß ich nicht. „.help“ gibt die Hilfe aus. „.extit“ - is klar oder?

Die Frage ist, ob die Tabelle die Daten tatsächlich "enthält".
Der Ausschnitt, den Du postest ist ja "nur" die Folge von SQL Anweisungen zur Erstellung der Tabelle und der darin existierenden Indizes.
Die Daten sind imho in der .mftpkg gespeichert.

Wenn ich mal Zeit hab, schau ich mir das genauer an.

Jedenfalls herzlichen Dank für Deine Informationen hier.

Freundlichen Gruß
Hans-Christian (Scherzer)

Moin Hans-Christian,

jep die Daten sind da drin. Mit „.schema“ bekommst du die Anweisung zum erstellen der Tabelle, was dir aber auch eine Aussage ist darüber welche Felder es gibt.
Den „select“ hast du wohl übersehen… :wink:
Und die ".mftpkg“ ist lediglich ein Container bzw. Verzeichnis. Zumindest stellt diese sich im Terminal als Verzeichnis dar. Im Finder als Paket ( Rechte Maustaste -> Paketinhalt zeigen )
darin die 2 Dateien und der Ordner.

Gruß Christian