Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente |
database:import-formats [2024/10/23 14:19] – [Description du format DATASET] jpmilcent | database:import-formats [2025/01/03 08:14] (Version actuelle) – ancienne révision (2024/12/20 10:14) restaurée choarau |
---|
| |
**Objectif** : proposer un format d'échange de données **simple** (autant que possible), bien **documenté**, **pratique**, **facilitant l'intégration des données sous GeoNature** et respectant le **standard OccTax** du SINP. | **Objectif** : proposer un format d'échange de données **simple** (autant que possible), bien **documenté**, **pratique**, **facilitant l'intégration des données sous GeoNature** et respectant le **standard OccTax** du SINP. |
| |
===== Processus d'importation ===== | ===== Processus d'importation ===== |
<note warning> | <note warning> |
À utiliser seulement lors de la phase de conception." | À utiliser seulement lors de la phase de conception." |
</code> | </code> |
| |
| |
==== Format des fichiers d'import ===== | ==== Format des fichiers d'import ===== |
* les caractères **tabulation verticale** (Vertical tab, ASCII 11) sont à supprimer ou à remplacer par ''\v'' | * les caractères **tabulation verticale** (Vertical tab, ASCII 11) sont à supprimer ou à remplacer par ''\v'' |
<note warning>Ce mécanisme de remplacement des caractères ''\n'', ''\r''... dans la base n'est pas fonctionnel pour l'instant. L'utilisation du mode ''CSV'' désactive ce mécanisme [[https://www.postgresql.org/docs/8.3/sql-copy.html#AEN51445|comme indiqué ici]] dans la doc de Postgresql.</note> | <note warning>Ce mécanisme de remplacement des caractères ''\n'', ''\r''... dans la base n'est pas fonctionnel pour l'instant. L'utilisation du mode ''CSV'' désactive ce mécanisme [[https://www.postgresql.org/docs/8.3/sql-copy.html#AEN51445|comme indiqué ici]] dans la doc de Postgresql.</note> |
| |
==== Notes diverses ==== | ==== Notes diverses ==== |
* Les champs contenant des dates au format ''[DATE(YYYY-MM-DD HH:MM:SS)]'' peuvent éventuellement contenir aussi les microsecondes séparées des secondes par un point. Ex. : ''2019-03-07 12:09:14.451907''. C'est le cas pour les champs ''meta_create_date'' et ''meta_update_date''. L'ajout de cette information peut servir à indiquer la nécessité de mise à jour d'un enregistrement en cas de modification très rapprochées réalisées par un outil automatique par exemple. La plupart du temps, cette information est inutile et alourdit le fichier CSV. | * Les champs contenant des dates au format ''[DATE(YYYY-MM-DD HH:MM:SS)]'' peuvent éventuellement contenir aussi les microsecondes séparées des secondes par un point. Ex. : ''2019-03-07 12:09:14.451907''. C'est le cas pour les champs ''meta_create_date'' et ''meta_update_date''. L'ajout de cette information peut servir à indiquer la nécessité de mise à jour d'un enregistrement en cas de modification très rapprochées réalisées par un outil automatique par exemple. La plupart du temps, cette information est inutile et alourdit le fichier CSV. |
* Les champs de type UUID, INT, JSON ou DATE ne devrait pas contenir de valeur vide mais la chaine indiquant l'utilisation de la valeur NULL (''\N''). Si les fichiers transmis contiennent des valeurs vides pour les champs de ces types, elle sera transformé en NULL par le parser (script Python) lors de l'intégration. | * Les champs de type UUID, INT, JSON ou DATE ne devrait pas contenir de valeur vide mais la chaine indiquant l'utilisation de la valeur NULL (''\N''). Si les fichiers transmis contiennent des valeurs vides pour les champs de ces types, elle sera transformé en NULL par le parser (script Python) lors de l'intégration. Pour les champs ''meta_create_date'' et ''meta_update_date'', ça prendra la valeur par défaut ''now()'' (date d'import en base GN). |
| |
==== Champs additionnels ==== | ==== Champs additionnels ==== |
Le standard prévoit la transmission de champs additionnels. | Le standard prévoit la transmission de champs additionnels. |
| |
==== À faire / Améliorations ==== | ==== À faire / Améliorations ==== |
* Modifier le nom du champ //determiner// de la ressource //SYNTHESE// en //determiner**s**// | * <todo>Trouer une solution au problème du remplacement des caractères \n, \r… qui ne fonctionne pas lors de l'import dans la base</todo> |
* Intégrer si nécessaire les nouveaux champs de GeoNature v2.6.0 aux formats (-- @jpmilcent 2021-02-21) : | * <todo>Modifier le nom du champ //determiner// de la ressource //SYNTHESE// en //determiner**s**//</todo> |
| * <todo>Intégrer si nécessaire les nouveaux champs de GeoNature v2.6.0 aux formats (-- @jpmilcent 2021-02-21) :</todo> |
* ACQUISITION_FRAMEWORK : opened, id_digitizer, initial_closing_date | * ACQUISITION_FRAMEWORK : opened, id_digitizer, initial_closing_date |
* DATASET : id_nomenclature_resource_type, active, validable, id_digitizer | * DATASET : id_nomenclature_resource_type, active, validable, id_digitizer |
* SYNTHESE : sample_number_proof, | * SYNTHESE : sample_number_proof, |
* Revoir le format des champs "cor_actors_organism" et "cor_actors_user" du format ACQUISITION_FRAMEWORK. La récupération des valeurs de tableaux imbriqués nécessite de passer par du JSON (idem pour les champs de type ARRAY du DATASET). Il serait donc plus efficace d'utiliser directement le format JSON pour ces champs.-- @jpmilcent 2021-02-21. | * <todo>Revoir le format des champs "cor_actors_organism" et "cor_actors_user" du format ACQUISITION_FRAMEWORK. La récupération des valeurs de tableaux imbriqués nécessite de passer par du JSON (idem pour les champs de type ARRAY du DATASET). Il serait donc plus efficace d'utiliser directement le format JSON pour ces champs.-- @jpmilcent 2021-02-21.</todo> |
* <del>Dans le format DATASET, indiquer les valeurs par défaut des nomenclatures à utiliser. Les champs correspondant dans la table GeoNature étant obligatoire ! Les nomenclatures ne sont pas obligatoires pour les cadres d'acquisition et la synthese.</del> | * <todo #jpmilcent:2024-10-23>Dans le format DATASET, indiquer les valeurs par défaut des nomenclatures à utiliser. Les champs correspondant dans la table GeoNature étant obligatoire ! Les nomenclatures ne sont pas obligatoires pour les cadres d'acquisition et la synthese.</todo> |
* Pour le format USER, trouver un solution pour éviter les doublons d'email et d'identifiant => se baser sur l'email => trouver une solution pour la mise à jour de l'email => ajouter un champ "new_email" + champ "email" (= ancien email) + "meta_last_action" = "U". | * <todo #jpmilcent:2024-10-23>Pour le format USER, trouver un solution pour éviter les doublons d'email et d'identifiant => se baser sur l'email => trouver une solution pour la mise à jour de l'email => ajouter un champ "new_email" + champ "email" (= ancien email) + "meta_last_action" = "U".</todo> => ajout d'index unique à la base de données. |
* Pour le format ORGANISM, trouver une solution pour éviter les doublon inter-fournisseur => se baser sur l'UUID du [[http://standards-sinp.mnhn.fr/referentiel-des-organismes/|référentiel national SINP des organismes]]. | * <todo #jpmilcent:2024-10-23>Pour le format ORGANISM, trouver une solution pour éviter les doublon inter-fournisseur => se baser sur l'UUID du [[http://standards-sinp.mnhn.fr/referentiel-des-organismes/|référentiel national SINP des organismes]].</todo> |
* Pour les formats ACQUISITION_FRAMEWORK et DATASET, trouver une solution pour éviter les doublon inter-fournisseur => se baser sur le site "[[https://inpn.mnhn.fr/docs-web/docs/download/263010|Référentiel National SINP - Métadonnées]]". | * <todo #jpmilcent:2024-10-23>Pour les formats ACQUISITION_FRAMEWORK et DATASET, trouver une solution pour éviter les doublon inter-fournisseur => se baser sur le site "[[https://inpn.mnhn.fr/docs-web/docs/download/263010|Référentiel National SINP - Métadonnées]]". </todo> |
| |
==== Évolutions ==== | ==== Évolutions ==== |
| * 2024-10-23 : |
| * Nous privilégions maintenant l'utilisation des UUID comme identifiant de lien entre les ressources à la place des codes ou noms. |
| * Le champ //unique_id// devient obligatoire pour les ressources ACQUISITION FRAMEWORK et DATASET. |
| * Le champ //parent_code// de la ressource ACQUISITION FRAMEWORK doit maintenant indiquer l'UUID du cadre d'acquisition parent. |
| * Le champ //code_acquisition_framework// de la ressource DATASET doit maintenant indiquer l'UUID du cadre d'acquisition. |
| * Le champ //cor_actors_organism// des ressources ACQUISITION FRAMEWORK et DATASET doit contenir l'UUID de l'organisme et non plus son nom. |
| * Le champ //code_dataset// de la ressource SYNTHESE doit contenir l'UUID du jeu de données correspondant. |
| * Le champ //code_organism// de la ressource USER doit contenir l'UUID de l'organisme correspondant. |
* 2023-07-03 : | * 2023-07-03 : |
* Ajout de l'UUID au format à plat permettant de stocker les infos sur les observateurs (//observers//) et les déterminateurs (//determiner//). | * Ajout de l'UUID au format à plat d'un "utilisateur" (=//user//) permettant de stocker les infos sur les observateurs (//observers//) et les déterminateurs (//determiner//). |
* Utilisation de l'UUID (champ //unique_id// de la ressource //USER//) à la place de l'//identifier// pour le champ //code_digitiser// de la ressource //SYNTHESE//. | * Utilisation de l'UUID (champ //unique_id// de la ressource //USER//) à la place de l'//identifier// pour le champ //code_digitiser// de la ressource //SYNTHESE//. |
===== Format SYNTHESE d'import ===== | ===== Format SYNTHESE d'import ===== |
* cor_objectifs [TEXT(ARRAY)] : champ de type tableau de textes. Le tableau contiendra une succession de codes de nomenclature correspondant au champ "//id_nomenclature_objectif//" (="CA_OBJECTIFS" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010/|ObjectifsValue|page24]]) de la table "//gn_meta.cor_acquisition_framework_objectif//". Exemple : <code> "{""4"",""5"",""6""}" </code> | * cor_objectifs [TEXT(ARRAY)] : champ de type tableau de textes. Le tableau contiendra une succession de codes de nomenclature correspondant au champ "//id_nomenclature_objectif//" (="CA_OBJECTIFS" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010/|ObjectifsValue|page24]]) de la table "//gn_meta.cor_acquisition_framework_objectif//". Exemple : <code> "{""4"",""5"",""6""}" </code> |
* cor_voletsinp [TEXT(ARRAY)] : champ de type tableau de textes. Le tableau contiendra une succession de codes de nomenclature correspondant au champ "//id_nomenclature_voletsinp//" (="VOLET_SINP " / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|VoletSINPValue|90|page29]]) de la table "//gn_meta.cor_acquisition_framework_voletsinp//". Exemple : <code> "{""1""}" </code> | * cor_voletsinp [TEXT(ARRAY)] : champ de type tableau de textes. Le tableau contiendra une succession de codes de nomenclature correspondant au champ "//id_nomenclature_voletsinp//" (="VOLET_SINP " / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|VoletSINPValue|90|page29]]) de la table "//gn_meta.cor_acquisition_framework_voletsinp//". Exemple : <code> "{""1""}" </code> |
* cor_actors_organism [TEXT(ARRAY-ARRAY)] : champ de type tableau de tableau de textes. Les tableaux de textes du plus bas niveau contiendront comme première valeur le nom de l'organisme et comme seconde valeur le code de nomenclature correspondant au champ "//id_nomenclature_actor_role//" (="ROLE_ACTEUR" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|RoleActeurValue|86|page25]]) de la table "//gn_meta.cor_acquisition_framework_actor//". Exemple : <code> "{{""CBN-Alpin"",""1""},{""PNE"",""5""}}" </code> **Note** : Au moins un organisme (ce champ) ou un utilisateur (le champ //cor_actors_user//) doit être renseigné par cadre d'acquisition. | * cor_actors_organism [TEXT(ARRAY-ARRAY)] : champ de type tableau de tableau de textes. Les tableaux de textes du plus bas niveau contiendront comme première valeur l'UUID de l'organisme et comme seconde valeur le code de nomenclature correspondant au champ "//id_nomenclature_actor_role//" (="ROLE_ACTEUR" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|RoleActeurValue|86|page25]]) de la table "//gn_meta.cor_acquisition_framework_actor//". Exemple : <code> "{{""5a433bd0-1fc0-25d9-e053-2614a8c026f8"", ""1""},{""5a433bd0-1ffc-25d9-e053-2614a8c026f8"",""5""}}" </code> **Note** : Au moins un organisme (ce champ) ou un utilisateur (le champ //cor_actors_user//) doit être renseigné par cadre d'acquisition. |
* cor_actors_user [TEXT(ARRAY-ARRAY)] : champ de type tableau de tableau de textes. Les tableaux de textes du plus bas niveau contiendront comme première valeur l'identifiant de l'utilisateur/personne et comme seconde valeur le code de nomenclature correspondant au champ "//id_nomenclature_actor_role//" (="ROLE_ACTEUR" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|RoleActeurValue|86|page25]]) de la table "//gn_meta.cor_acquisition_framework_actor//". Exemple : <code> "{{""jpmilcent"",""1""},{""pmartin"",""5""}}" </code> **Note** : Au moins un utilisateur (ce champ) ou un organisme (le champ //cor_actors_organism//) doit être renseigné par cadre d'acquisition. | * cor_actors_user [TEXT(ARRAY-ARRAY)] : champ de type tableau de tableau de textes. Les tableaux de textes du plus bas niveau contiendront comme première valeur l'identifiant de l'utilisateur/personne et comme seconde valeur le code de nomenclature correspondant au champ "//id_nomenclature_actor_role//" (="ROLE_ACTEUR" / [[https://inpn.mnhn.fr/docs-web/docs/download/263010|RoleActeurValue|86|page25]]) de la table "//gn_meta.cor_acquisition_framework_actor//". Exemple : <code> "{{""jpmilcent"",""1""},{""pmartin"",""5""}}" </code> **Note** : Au moins un utilisateur (ce champ) ou un organisme (le champ //cor_actors_organism//) doit être renseigné par cadre d'acquisition. |
* cor_publications [JSON] : champ contenant un tableau d'objets [[https://www.json.org/json-fr.html|au format JSON]] [[https://jsonformatter.curiousconcept.com/|valide]]. Ce champ correspond à la table //cor_acquisition_framework_publication// de GeoNature. Ne pas mettre de valeur vide dans ce champ mais une valeur NULL. Chaque objet du JSON représentera une publication avec les attributs suivant : | * cor_publications [JSON] : champ contenant un tableau d'objets [[https://www.json.org/json-fr.html|au format JSON]] [[https://jsonformatter.curiousconcept.com/|valide]]. Ce champ correspond à la table //cor_acquisition_framework_publication// de GeoNature. Ne pas mettre de valeur vide dans ce champ mais une valeur NULL. Chaque objet du JSON représentera une publication avec les attributs suivant : |
* name [VARCHAR(50)] (=//nom_role//) : nom de famille. | * name [VARCHAR(50)] (=//nom_role//) : nom de famille. |
* email [VARCHAR(250)] : courriel. | * email [VARCHAR(250)] : courriel. |
* code_organism [VARCHAR(100)] (=//id_organisme//) : code alphanumérique ou UUID permettant d'identifier l'organisme de l'utilisateur (voir ORGANISM). Sert de le lien avec la ressource ORGANISM et son champ "name" ou "unique_id". | * code_organism [VARCHAR(100)] (=//id_organisme//) : UUID permettant d'identifier l'organisme de l'utilisateur (voir ORGANISM) ou éventuellement son code alphanumérique. Sert de le lien avec la ressource ORGANISM et son "unique_id" ou éventuellement "name". |
* comment [TEXT] (=//remarques//) : contient des éventuelles informations internes (date d'importation, par exemple). | * comment [TEXT] (=//remarques//) : contient des éventuelles informations internes (date d'importation, par exemple). |
* enable [BOOL] (=//active//) : indique si l'utilisateur est actif (=true) et donc peut se connecter ou pas (=false). Par défaut, "True". | * enable [BOOL] (=//active//) : indique si l'utilisateur est actif (=true) et donc peut se connecter ou pas (=false). Par défaut, "True". |