A propos de G-Net
G-Net (prononcez "Ginette") est un petit logiciel généalogique que je développe à mes heures perdues, pour avoir l'occasion de faire encore un peu de développement, mais aussi pour approfondir mes connaissances généalogiques...
1. Eléments de spécification
1.1. Objectifs de conception
Par rapport aux logiciels de généalogie compatibles GEDCOM ou GENEANET, développer un logiciel :
- reposant un peu plus sur les techniques utilisées dans les systèmes de gestion de bases de données relationnelles
- multi lingue (français et anglais pour l'instant, mais d'autres langues (espagnol, vietnamien) seraient faciles à mettre en œuvre)
- ayant notamment l'avantage de permettre l'utilisation de données libres présentées au format HTML, pratiques pour l'inclusion de photos et autres documents
- dont les résultats soient consultables hors-ligne, sans utilisation de programme particulier
1.2. Reste à faire
Développer l'accès aux données par :
- le calendrier des événements à venir
- l'index des lieux d'enregistrement d'actes (de naissance, de mariage, de divorce, de décès, etc.)
A partir de la fiche généalogique d'une personne, développer :
- la navigation dans ses relations familiales "latérales" :
- frères et soeurs
- oncles et tantes
- cousins (germains et issus de germains)
Autres tâches fonctionnelles (si le besoin apparaît) :
- rédiger un paragraphe sur les aspects légaux (notamment Loi Informatique et Libertés)
- gérer différents ordres d'affichages du nom (par exemple, "nom prénom" pour les vietnamiens)
- remplacer les codes de pays par l'intitulé correspondant dans les fiches de personnes
- gérer les naissances sous X
- distinguer les mariages civils, religieux, PACS
- gérer les annulations de mariages
- gérer les unions entre homosexuels
- gérer les remariages avec un ancien conjoint
- gérer les adoptions
- gérer les relations entre personnes sans lien de parenté (concubin - quand il n'y a pas d'enfants -, témoin, parrain, etc.)
- gérer les événements ne donnant pas nécessairement lieu à un acte (rencontre, baptème, etc.) pour la fonction de calendrier des événements à venir
2. Structures de données
2.1. Types de données
Une clé est une valeur numérique positive ou nulle.
Une date est une chaîne de caractères de la forme "AAAAMMJJ", où "AAAA" représente l'année sur 4 positions, "MM" le mois sur 2 positions, "JJ" le jour sur deux positions.
Il est possible de remplacer une position inconnue par le caractère "?".
Il est possible de remplacer une date inconnue par la chaîne de caractères "?".
Un lieu est une chaîne de caractères de la forme "VILLE (CODE_PAYS-CODE_POSTAL)", où "VILLE" représente la ville d'enregistrement d'un acte, "CODE_PAYS" le code du pays correspondant (voir la table des codes de pays) et "CODE_POSTAL" le code postal correspondant.
La partie "-CODE_POSTAL" peut être omise si le code postal n'est pas connu.
Il est possible de remplacer un lieu inconnu par la chaîne de caractères "?".
2.2. Les personnes
2.2.1. Table des personnes
Cette table regroupe les principales informations relatives à un individu.
Elle est gérée dans le fichier "personnes.tbl".
| Nom du champ | Description | Type | Valeur |
| ClePersonne | L'identifiant de l'individu | clé | Non nulle |
| ClePere | L'identifiant du père de l'individu | clé | La valeur "0" indique un parent non référencé dans la base de données |
| CleMere | L'identifiant de la mère de l'individu | clé | La valeur "0" indique un parent non référencé dans la base de données |
| Nom | Le nom patronymique de l'individu | chaîne | "?" s'il n'est pas connu Par convention, mettre l'initiale en majuscule |
| PrenomPrincipal | Le prénom principal de l'individu | chaîne | "?" s'il n'est pas connu La partie "facultative" d'un prénom (notamment Vietnamien) peut-être précisée entre parenthèses Par convention, mettre l'initiale en majuscule |
| AutresPrenoms | Le(s) prénom(s) secondaire(s) de l'individu | chaîne | Séparés par la chaîne de caractères ", " Ou vide s'il n'y en a aucun Par convention, mettre l'initiale en majuscule |
| Surnom | Le surnom ou le nom d'usage de l'individu | chaîne | Ou vide s'il n'y en a pas Par convention, mettre l'initiale en majuscule |
| DateNaissance | La date de naissance de l'individu | date | |
| LieuNaissance | Le lieu de naissance de l'individu | lieu | |
| DateDeces | La date de décès de l'individu | date | Vide pour un individu présumé vivant |
| LieuDeces | Le lieu de décès de l'individu | lieu | Vide pour un individu présumé vivant |
| Sexe | Le sexe de l'individu | caractère | Le caractère "H" pour les hommes et "F" pour les femmes |
Le cas suivants ne sont pas encore gérés, faute de s'être présentés :
2.2.2. Dossier des portraits de personnes
Ce dossier regroupe les éventuels portraits d'individus.
Il est géré dans le répertoire "PHOTOS".
Ce répertoire peut contenir des fichiers nommés :
- "CLE_PERSONNE.jpg"
- "CLE_PERSONNE.html"
- "CLE_PERSONNE.html.CODE_LANGUE"
où CLE_PERSONNE est l'identifiant de l'individu et CODE_LANGUE désigne la langue (auto-)sélectionnée dans le navigateur Web de l'utilisateur.
Les fichiers .jpg peuvent contenir des images de résolution arbitraire au format JPEG.
Les fichiers .html peuvent contenir des éléments HTML de type "WIDTH=X HEIGHT=Y", afin d'afficher une image dans un format redimensionné ne dépassant 320 par 256 pixels.
En plus de cela, les fichiers .html.CODE_LANGUE peuvent contenir l'élément HTML "TITLE="commentaire"", afin d'afficher un commentaire lors du survol de l'image, précisant notamment la date du cliché et éventuellement les circonstances dans lesquelles il a été pris.
Par convention - et dans la mesure du possible -, on privilégiera :
- pour les personnes vivantes un portrait le plus actuel possible
- pour les personnes décédées un portrait pris lors d'un temps fort de leur vie (mariage par exemple)
2.2.3. Dossier des autres informations sur une personne
Ce dossier regroupe d'autres informations relatives à un individu.
Il est géré dans le répertoire "INFOS".
Ce répertoire peut contenir des fichiers nommés :
- "CLE_PERSONNE.html"
- "CLE_PERSONNE.html.CODE_LANGUE"
où CLE_PERSONNE est l'identifiant de l'individu et CODE_LANGUE désigne la langue (auto-)sélectionnée dans le navigateur Web de l'utilisateur (la première forme, sans précision de langue, est à éviter dans la mesure du possible).
Ces fichiers peuvent contenir tout élément HTML susceptible d'apparaître entre une balise <BODY> et une balise </BODY>.
Ils peuvent également référencer des fichiers supplémentaires, tels que des images à afficher, des documents à télécharger, d'autres pages Web, etc.
2.2.4. Dossier des meta-informations sur une personne
Ce dossier regroupe des informations sur les recherches généalogiques relatives à un individu, telles que les informations manquantes, les informations douteuses ou à vérifier, les pistes de progrès, etc.
Il est géré dans le répertoire "META".
Ce répertoire peut contenir des fichiers nommés :
- "CLE_PERSONNE.html"
- "CLE_PERSONNE.html.CODE_LANGUE"
où CLE_PERSONNE est l'identifiant de l'individu et CODE_LANGUE désigne la langue (auto-)sélectionnée dans le navigateur Web de l'utilisateur (la première forme, sans précision de langue, est à éviter dans la mesure du possible).
Ces fichiers peuvent contenir tout élément HTML susceptible d'apparaître entre une balise <BODY> et une balise </BODY>.
Ils peuvent également référencer d'autres pages Web, etc.
2.3. Table des unions (et séparations)
Cette table regroupe les informations relatives aux unions et éventuelles séparations entre individus.
Elle est gérée dans le fichier "unions.tbl".
| Nom du champ | Description | Type | Valeur |
| CleConjoint1 | L'identifiant du premier conjoint (typiquement le mari) | clé | |
| CleConjoint2 | L'identifiant du second conjoint (typiquement l'épouse) | clé | |
| DateUnion | La date de l'union | date | |
| LieuUnion | Le lieu de l'union | lieu | |
| TypeUnion | Le type d'union | caractère | "C" pour un mariage civil "R" pour un mariage religieux "P" pour un PACS "?" dans le doute (pour les vieux mariages) |
| DateSeparation | La date de l'éventuelle séparation | date | Vide pour une union non échue |
| LieuSeparation | Le lieu de l'éventuelle séparation | lieu | Vide pour une union non échue |
| TypeSeparation | Le type de l'éventuelle séparation | caractère | Vide pour une union non échue "D" pour un divorce civil "A" pour un mariage annulé |
Les différents types d'unions et de séparations ne sont pas encore gérés, faute de s'être présentés :
- les unions sont considérées comme de type mariage civil ("C")
- les séparations sont considérées comme de type divorce civil ("D")
Le cas suivants ne sont pas encore gérés, faute de s'être présentés :
- union homosexuelle
- nouvelle union avec un ancien conjoint
2.4. Table des adoptions
Cette table regroupe les informations relatives aux adoptions d'individus.
Elle est gérée dans le fichier "adoptions.tbl".
| Nom du champ | Description | Type | Valeur |
| CleEnfantAdopte | L'identifiant de l'individu adopté | clé | |
| ClePereAdoptif | L'identifiant du père adoptif de l'individu | clé | |
| CleMereAdoptive | L'identifiant de la mère adoptive de l'individu | clé | |
| DateAdoption | La date de l'adoption | date | |
| LieuAdoption | Le lieu de l'adoption | lieu | |
Le cas ne s'étant pas encore présenté, les fonctionnalités correspondantes ne sont pas encore implémentées.
2.5. Table des autres relations
Cette table regroupe les informations relatives aux autres types de relations entre individus, et notamment pour ceux sans relation de parenté.
Elle se lit de la façon suivante "[CleSource] [TypeRelation] de [CleDestination]", par exemple : "Alice marraine de Bernard".
Elle est gérée dans le fichier "relations.tbl".
| Nom du champ | Description | Type | Valeur |
| CleSource | L'identifiant de l'individu source (voir ci-dessus) | clé | |
| CleDestination | L'identifiant de l'individu destination (voir ci-dessus) | clé | |
| TypeRelation | Le type de relation entre les individus | caractère | "C" pour concubin(e) "T" pour témoin "P" pour parrain/marraine |
| DateDebutRelation | La date du début de la relation | date | |
| LieuDebutRelation | Le lieu du début de la relation | lieu | |
| DateFinRelation | La date de fin de la relation, si cela a un sens | date | Vide pour une relation non échue |
| LieuFinRelation | Le lieu de fin de la relation, si cela a un sens | lieu | Vide pour une relation non échue |
Le besoin ne s'étant pas encore présenté, les fonctionnalités correspondantes ne sont pas encore implémentées.
Les concubins avec enfant(s) apparaissent néanmoins dans l'implémentation actuelle.
2.6. Table des codes de pays
Cette table permet d'obtenir la correspondance entre un code de pays et son intitulé.
Elle est gérée dans un fichier "pays.tbl.CODE_LANGUE", où CODE_LANGUE désigne la langue (auto-)sélectionnée dans le navigateur Web de l'utilisateur.
| Nom du champ | Description | Type | Valeur |
| CodePays | Le code du pays | chaîne | Sur 2 caractères, sur le modèle des noms de domaines Internet |
| LibellePays | L'intitulé du pays | chaîne | |
| LibelleHabitant | L'intitulé d'un habitant du pays | chaîne | |
| LibelleHabitante | L'intitulé d'une habitante du pays | chaîne | |
2.7. Implémentation physique
G-Net est implémenté par un ensemble de scripts écrits en (Bourne) Shell, tirant avantage des utilitaires de traitement de données présents en standard sur les systèmes Unix et de fonctions évoluées du serveur Web Apache (auto-négociation de la langue, réécriture d'URL, etc.).
Sauf mention contraire, les tables de sa base de données sont gérées dans des fichiers "plats" avec un enregistrement par ligne et un séparateur de champ représenté par le caractère "|".
Cette approche "poids plume" s'explique par les caractéristiques du serveur Internet pour lequel il a été initialement développé en 1999 : un compatible PC de récupération, équipé d'un processeur 386, de 8 Mo de RAM et de 200 Mo de disque dur, fonctionnant sous FreeBSD v2.x ! Pas de quoi utiliser un véritable SGBD relationnel donc, d'autant que ce serveur, en plus du Web gérait déjà une multitude d'autres services réseau...
2.8. Logiciels requis
Sous FreeBSD, l'application dépend des ports/packages suivants :
- archivers/zip / zip-2.3_1 : Create/update ZIP files compatible with pkzip
- converters/i18ntools / i18ntools-1.0 : Tools for the conversion to and from UTF-8 Unicode encoding
2.9. Logiciels complémentaires
L'application peut également utiliser les ports/packages suivants :
- misc/lifelines / lifelines-3.0.37.2 : An advanced genealogical system
Ainsi que les éléments suivants :
- ... générateurs de rapports LifeLines ...
3. Documentation support
3.1. Autres formats de données généalogiques
3.2. Affichage d'arbres généalogiques
3.3. Jeux de caractères "exotiques"
3.4. Paramétrage de serveur Web
|