Architecture
Ce document présente l'architecture de Djehooty et certains concepts techniques qui ne sont pas exposés dans le guide d'utilisation. Comprendre ces concepts est essentiel pour contribuer efficacement au projet et naviguer dans le code source.
Architecture
TODO
Concepts
Entité
Une entité (Entity) est un concept générique qui englobe les individus, les événements, les lieux et les organisations. Elle permet de représenter toute donnée à caractère généalogique ou contextuel, à laquelle un identifiant unique est attribué.
Couche
La couche (Layer) est un concept générique regroupant les fichiers, les instances de fichiers, les documents et les sélections. Elle permet de représenter toute donnée documentaire, à laquelle un identifiant unique est également attribué.
Pointeur
Le pointeur (Pointer) est un concept interne qui généralise la notion d'entité et de couche. Il permet de référencer de manière abstraite aussi bien des entités que des couches, facilitant ainsi la gestion des liens et des associations dans l'application.
Identification
L'identification désigne l'association entre une entité et une couche. Par exemple, il est possible d'identifier un individu sur un document, un individu sur une instance de fichier, ou encore un lieu sur un document. Ce mécanisme permet de lier précisément des informations contextuelles ou généalogiques à des éléments documentaires, enrichissant ainsi la structure des données et la recherche d'informations.
Sélection
Une sélection désigne une zone rectangulaire définie au sein d'une image donnée.
Elle est caractérisée par les coordonnées de deux points (coin supérieur gauche et coin inférieur droit) délimitant le rectangle de sélection. Un index permet de préciser, par exemple, la page dans un PDF ou la seconde dans une vidéo.
Les coordonnées sont toujours exprimées par rapport à l'image originale du fichier sélectionné. En cas de rotation de l'image, les coordonnées de la sélection restent inchangées.
Une sélection peut être modifiée (ajustement des coordonnées), mais pour changer le fichier ou l'index associé, il est nécessaire de créer une nouvelle sélection.
Vignette
Une vignette est une image de résolution réduite, générée à partir d'un fichier source. Elle est utilisée pour fournir un aperçu visuel rapide du contenu du fichier, facilitant ainsi la navigation et la sélection dans l'interface utilisateur. Les vignettes diffèrent donc des fichiers originaux, qui conservent leur résolution et qualité initiales.
La vignette est une image carrée générée au format .webp afin d'optimiser la taille des fichiers. Elle est stockée dans le dossier thumbnails au sein du User Directory. Chaque vignette est identifiée par un UUID.
On distingue deux types de vignettes :
- Vignette de fichier : Générée à partir d'un fichier (Ex: une image ou la première page d'un PDF). Elle est générée automatiquement lors de l'import du fichier dans Djehooty.
- Vignette de sélection : Générée à partir d'une sélection spécifique au sein d'un fichier (Ex: une zone plus rapprochée autour du visage d'un individu, une signature, un extrait de texte, une mention marginale, etc.). Elle est générée sur initiative de l'utilisateur et permet la mise en avant d'une partie spécifique du contenu d'un fichier.
Une vignette est toujours associée à son fichier source, afin de pouvoir être regénérée si nécessaire. La table files_thumbnails dans la base de données permet de gérer cette association.
Modèle de base de données
Djehooty créé une base de données relationnelle de type SQLite djehooty.db, locale, située dans le dossier User Directory.
La structure détaillée de la base et les données de base qui sont injectées à lors de l'installation peuvent être consultées sur le dépôt Git de djehooty-backend.
| Table | Description |
|---|---|
| documents | La table documents représente l'unité documentaire de base manipulée par les utilisateurs dans Djehooty : elle regroupe un ou plusieurs fichiers (via files_instances) avec des métadonnées comme un titre, une description, etc. |
| entities | Permet de référencer de manière unifiée n'importe quel type d'entité (individu, événement, lieu, organisation) via un identifiant unique, facilitant ainsi les associations polymorphes comme les identifications sur des documents. |
| entities_types | Table de référence qui définit les types d'entités autorisés dans le système (individual, event, place, organization) et sert de contrainte de validation pour la colonne type_id de la table entities. |
| files | Table stockant touts les informations sur les fichiers stockés (uuid, type de média, sha256, taille). Les données stockées sont relatives au contenu de chaque fichier. |
| files_instances | Cette table représente les instances de fichiers, c'est-à-dire les différentes occurrences d'un même fichier (identifié par son hash SHA-256) avec leurs métadonnées spécifiques (issues du système de fichier d'origine) comme le nom de fichier original, la date de modification, et leur position dans un document. |
| files_thumbnails | Cette table d'association fait le lien entre un fichier et sa vignette (thumbnail) en associant l'ID du fichier avec l'ID de la vignette correspondante |
| identifications | Permet d'associer une entité (personne, événement, lieu, organisation) à une couche (document, instance de fichier, fichier ou sélection), par exemple pour identifier un individu présent sur une photo ou mentionné dans un document. |
| individuals | Liste des individus avec leurs informations |
| layers | Permet de référencer de manière unifiée n'importe quel type de couche documentaire (document, instance de fichier, fichier, sélection) via un identifiant unique, facilitant ainsi les associations polymorphes comme les identifications d'entités sur ces éléments. |
| layers_types | Table de référence qui définit les types de couches documentaires autorisés dans le système (document, file_instance, file, selection) et sert de contrainte de validation pour la colonne type_id de la table layers. |
| selections | La table selections stocke les coordonnées rectangulaires (points de départ et de fin) définissant une zone d'intérêt au sein d'une image, permettant d'identifier précisément une portion d'un fichier visuel. |
| thumbnails | La table thumbnails stocke les informations sur les images de taille réduite générées pour prévisualiser les fichiers, incluant leur UUID, leur extension, si elles ont été redimensionnées, et leur date de création |
| users | Utilisateurs de Djehooty. Par défaut il n'en existe qu'un seul pour le moment |