Nl:Een XML-bestand aanmaken
Gramps en XML
Gramps kan een XML-bestand importeren en exporteren. Dit XML-bestand bevat alle informatie van het gegevensbestand. Dit XML-bestand is zeer bruikbaar om gegevens van de ene computer naar te andere over te zetten of om XML-bewerkingen uit te voeren.
Aanmaken van het XML-bestand
De eenvoudigste manier om een XML-bestand aan te maken is de gegevens te exporteren. Dit kan je doen door gebruik te maken van het menu: Familiestambomen->Exporteren.... Zo wordt een bestand aangemaakt met een .gramps
extensie. Dit bestand is gewoonlijk een gezipt XML-bestand. Dit hangt echter af van een aantal systeeminstellingen. Zo kan het XML-bestand ook ongecomprimeerd opgeslagen worden.
Gramps drukt het bestand samen omdat XML-bestanden vrij groot kunnen worden. Voor grote gegevensbestanden kan de grootte oplopen tot méér dan 100 Mb. Gelukkig kunnen deze bestanden goed samengedrukt worden zodat de bestandsgrootte wel meevalt.
Hoe weet u of het XML-bestand samengedrukt is?
Het eenvoudigste is om de file
opdracht uit te voeren.
$ file data.gramps
Is het bestand samengedrukt, dan ziet u als resultaat iets in de zin van:
data.gramps: gzip compressed data, was "data.gramps", last modified: Sun Jul 8 17:05:09 2012, max compression
Is het bestand niet samengedrukt, dan ziet u:
data.xml: XML document text
Hoe een samengedrukt bestand herstellen?
Is het bestand samengedrukt, dan herstelt u het bestand naar zijn oorspronkelijke grootte door de gunzip opdracht.
$ gunzip < data.gramps > data.xml
Dit voorbeeld maakt een niet-samengedrukt bestand data.xml
aan van een samengedrukt data.gramps
bestand.
U dient de I/O operatoren (">" en "<") te gebruiken, omdat gzip
verwacht dat de bestanden een .gz
extensie hebben.
Ik ben in de war. Hoe bekom ik nu een aanpasbaar XML-bestand vanuit een .gramps bestand?
U kunt eenvoudig het volgende bestand ophalen en dan het script draaien gramps2xml
. Maak dit script eerst uitvoerbaar:
chmod +x gramps2xml
Draai het script met:
./gramps2xml bestand.gramps filename.xml
Waarom gebruikt Gramps niet gewoon een .gz extensie?
Gramps gebruikt het Shared Mime System opgesteld door het Free Desktop project. Dit is zo voor de meeste desktops met inbegrip van GNOME en KDE. Gramps gaat voort op het MIME-type om het bestandstype te bepalen.
Dit Share Mime systeem laat toe om het bestandstype te bepalen, ofwel door naar de bestandsextensie te kijken, ofwel door naar de inhoud van een klein deeltje van het bestand te kijken. Een eerste probleem is dat de bestandsnaam of het extensiepatroon voorrang hebben op de inhoud. Stel, een bestand noemt iets.jpg
, dan is het hoogstwaarschijnlijk een JPEG beeld en geen tekst.
Indien nu het Gramps-Xml-bestand een .gz
extensie zou bevatten, dan zou het 'Shared Mime system' ons zeggen dat het bestandstype application/x-gzip
is, i.p.v. de verwachte application/x-gramps-xml
.
Maar spijtig genoeg kan het systeem ons niet vertellen of we met een gezipt Gramps-Xml-bestand te maken hebben.
Het tweede probleem is dat wanneer we naar de inhoud van de bestanden kijken we ook geen verschil zien tussen een gezipt Gramps-Xml-bestand en een ander gezipt bestand. Wanneer we kijken naar een niet-samengedrukt bestand kunnen we ook hier nigeen verschil merken tussen een Gramps-Xml-bestand en een ander Xml-bestand. Dus hier ook kan het 'Shared Mime ' systeem ons niet verderhelpen.
Daarom moeten we ons baseren op de .gramps
extensie.
Zouden we dit niet doen dan kunnen we niet uitmaken of dit wel een geldig bestand is. Nog erger, het 'mime' application/x-gzip
type zou geassocieerd worden met andere toepassingen (zoals File Roller of Ark) i.p.v. met Gramps. Het 'mime' type application/xml
mag verbonden worden met XML-editors (Bluefish, Conglomerate, Emacs, enz.).
In dit geval zal door dubbelklikken op het bestand in een file-manager zoals Nautilus (of het uitvoeren van een standaard vastgelegde aktie met andere programma's) zal dus nooit Gramps opstarten met deze gegevens.
Niet enkel Gramps kampt met dit probleem. Bijvoorbeeld, het 'OpenDocument'-formaat dat gebruikt wordt door LibreOffice, OpenOffice, StarOffice, Calligra en AbiWord is eigenlijk een bestandsverzameling in een zip
archief.
Wanneer u unzip
uitvoert op een OpenDocument-bestand, ziet u het volgende:
$ unzip test.odt Archive: test.odt inflating: mimetype inflating: meta.xml inflating: settings.xml inflating: META-INF/manifest.xml inflating: styles.xml inflating: content.xml
Voorbeeld
tmg2gramps is een programma geschreven om een familiestamboom van 'The Master Genealogist V6' naar Gramps-Xml om te zetten.