Proposer un jeu de données
Un jeu de données qui tient dans un ou plusieurs tableaux entre au Lexicon sans une ligne de code : un dossier, une fiche qui le décrit, et les tableaux en CSV. La commande ./lexicon contribute relit ce dossier comme le fera un mainteneur d'OSFarm et dit, en français et ligne à l'appui, ce qui reste à corriger.
La commande ne publie rien et n'envoie rien : elle lit vos fichiers sur votre poste. Rien n'est mis en service sans la relecture d'un mainteneur.
Sans rien installer : avec une clé d'API du Lexicon, l'outil de contribution en ligne fait la même relecture dans le navigateur. On y dépose son tableau (CSV, Excel ou LibreOffice), on remplit la fiche dans un formulaire, puis on propose le jeu d'un bouton.
En bref
- Installer l'outil sur son poste.
- Préparer le tableau et l'enregistrer en CSV.
- Remplir la fiche
dataset.yml. - Vérifier avec
./lexicon contribute, corriger, recommencer. - Proposer le dossier une fois la réponse
[ OK ]obtenue.
1. Installer l'outil
Il faut Git et Docker. L'outil est le dépôt du Lexicon lui-même ; son premier lancement construit une image, ce qui prend quelques minutes.
git clone https://github.com/osfarm/lexicon.git
cd lexicon
cp .env.dist .env
./lexicon new releves_sol --tabularLa dernière commande affiche le modèle de fiche pour un jeu nommé releves_sol. Le nom du jeu est en minuscules, sans accent ni espace.
2. Préparer le tableau
Créer le dossier du jeu dans data/contributions/ et y enregistrer le tableau depuis le tableur : « Enregistrer sous », format CSV, encodage UTF-8, séparateur virgule.
data/contributions/releves_sol/
├── dataset.yml la fiche
└── releves.csv le tableau- La première ligne donne le nom des colonnes, en minuscules, sans accent ni espace :
insee_code, pas « Code INSEE ». - Une colonne identifie chaque ligne : jamais vide, jamais deux fois la même valeur.
- Les dates s'écrivent
2026-09-30, les nombres avec un point (12.5), les oui/nontrueoufalse. - Une case vide veut dire « pas de valeur » : elle est acceptée partout, sauf dans la colonne qui identifie les lignes.
id,insee_code,measured_on,value
r1,17387,2026-09-01,12.5
r2,28085,2026-09-02,
r3,33063,2026-09-02,143. Remplir la fiche
Enregistrer le modèle sous data/contributions/releves_sol/dataset.yml, puis remplacer chaque texte d'exemple. La fiche dit ce qu'est le jeu, d'où il vient, sous quelle licence, et ce que contient chaque colonne.
description: Relevés d'humidité des sols par commune
author: Camille Martin, GAEC des Prés
source:
name: Relevés de sondes capacitives
url: https://exemple.org/sondes
provider: GAEC des Prés
licence: Licence Ouverte 2.0
licence_url: https://www.etalab.gouv.fr/wp-content/uploads/2017/04/ETALAB-Licence-Ouverte-v2.0.pdf
date: 2026-09-30
tables:
- file: releves.csv
key: id
columns:
id: text
insee_code: text
measured_on: date
value: number
pivots:
insee_code: commune| Rubrique | Ce qu'elle dit |
|---|---|
description | Une phrase qui dit ce que contient le jeu. Elle est affichée au catalogue. |
author | Qui propose le jeu : une personne et son organisme. Ce nom figure dans les crédits. |
source.name, source.url, source.provider | Le nom du jeu de données d'origine, l'adresse où on le trouve, et qui le publie. |
source.licence, source.licence_url | La licence de la source et l'adresse de son texte. Une licence ouverte est attendue : Licence Ouverte, CC0, CC-BY, CC-BY-SA, ODbL. Sinon, ajouter « scope: members ». |
source.date | La date des données, écrite AAAA-MM-JJ. Pas celle du dépôt. |
scope: members | À écrire seulement pour réserver le jeu aux adhérents d'OSFarm. Sans cette ligne, le jeu est ouvert à tous. |
tables | Une entrée par fichier CSV. Avec plusieurs fichiers, chacun devient une table registered_(jeu)_(fichier) ; « table: » permet de choisir un autre nom, qui commence par registered_. |
file | Le nom du fichier CSV, placé dans le même dossier. |
key | La colonne qui identifie chaque ligne : jamais vide, jamais deux fois la même valeur. |
columns | Chaque colonne du fichier, avec son type. |
pivots | Les colonnes qui portent un identifiant que le Lexicon connaît déjà. C'est ce qui relie le jeu aux autres. |
personal_data | À remplir seulement si une colonne ressemble à une donnée personnelle (nom, prénom, courriel, téléphone, date de naissance, IBAN) : dire pourquoi elle peut être publiée. |
Les types de colonnes
| Type | Ce que contient la colonne |
|---|---|
text | Un texte quelconque. |
integer | Un nombre entier, sans espace ni décimale : 30 |
number | Un nombre, avec un point pour les décimales : 12.5 |
date | Une date écrite AAAA-MM-JJ : 2026-09-30 |
datetime | Une date et une heure : 2025-12-04T17:00:53+01:00 |
boolean | true ou false |
point | Un point géographique, latitude puis longitude : 48.811873,2.211849 |
Les liens avec les autres jeux
Sous pivots, on dit qu'une colonne porte un identifiant partagé : insee_code: commune. Le jeu est alors relié aux autres, par exemple sur la page d'une commune.
| Clé | Ce que porte la colonne |
|---|---|
commune | Code INSEE de la commune : 17387 |
commune_postal_code + commune_name | Sans code INSEE : désigner la colonne du code postal et celle du nom de la commune. Le Lexicon ajoute une colonne insee_code avec le code trouvé. |
department | Code du département : 17 |
siren | Numéro SIREN de l'entreprise, neuf chiffres |
siret | Numéro SIRET de l'établissement, quatorze chiffres |
cadastral_parcel | Identifiant de la parcelle cadastrale |
cap_crop_code | Code culture de la PAC : BTH |
taxon | Nom de référence du taxon dans la taxonomie du Lexicon |
production | Nom de référence de la production dans le Lexicon |
weather_station | Nom de référence de la station météorologique |
amm | Numéro d'autorisation de mise sur le marché d'un produit phytosanitaire |
variant | Nom de référence de l'article dans le référentiel des variantes |
4. Vérifier
./lexicon contribute releves_solChaque ligne « à corriger » nomme le fichier, la colonne et les cases en cause. Les lignes « à savoir » ne bloquent pas. La commande compte ce qui reste :
à corriger : La fiche garde pour « author » le texte du modèle, « Prénom Nom, organisme » : le remplacer.
à corriger : « releves.csv », colonne « value » : 2 valeurs ne sont pas un nombre, avec un point pour les
décimales (ligne 2 « 12,5 », ligne 5 « abc »).
à corriger : « releves.csv » : 1 valeur de « id » revient plusieurs fois (r2).
[ NOK ] releves_sol : 3 points à corriger avant de proposer le jeu.Corriger, relancer la commande, jusqu'à cette réponse :
[ OK ] releves_sol peut être proposé (releves.csv → registered_releves_sol). Un mainteneur le construit
et le publie avec ./lexicon ship releves_solDans un navigateur
Le plus simple est de passer par la page web, sur votre poste : on y dépose son tableau tel qu'il est (CSV, Excel ou LibreOffice) et la fiche se remplit toute seule. Les colonnes sont reconnues et renommées, leur type est deviné, les dates et les nombres sont remis en forme, la colonne qui identifie chaque ligne est choisie. Il reste à vérifier ce qui a été reconnu et à dire d'où vient le jeu.
./lexicon contribute --webOuvrir ensuite http://localhost:8787. La page ne répond que sur votre poste et n'envoie rien ; Ctrl-C l'arrête.
Ce que la commande dit de la fiche
| La commande répond | Ce qu'il faut faire |
|---|---|
| Pas de fiche dataset.yml dans… | Le dossier n'existe pas sous ce nom, ou sa fiche ne s'appelle pas dataset.yml. Vérifier le nom donné à la commande. |
| La fiche ne se lit pas : … | La fiche n'est pas un YAML valide : le plus souvent un retrait (des espaces, jamais de tabulation) ou un deux-points sans espace après lui. Repartir du modèle aide. |
| Le dossier s'appelle « Relevés Sol » : son nom doit être en minuscules… | Renommer le dossier : releves_sol. |
| La fiche ne renseigne pas « source.url ». | Remplir la rubrique nommée. Toutes celles de « source » sont attendues. |
| La fiche garde pour « author » le texte du modèle… | Remplacer le texte d'exemple du modèle par le vôtre. |
| La licence « … » n'est pas une licence ouverte. | Écrire le nom d'une licence ouverte si c'est bien celle de la source. Sinon ajouter « scope: members » : le jeu est alors réservé aux adhérents. |
| La date de la source, « 30/09/2026 », doit être écrite AAAA-MM-JJ. | Écrire 2026-09-30. |
| La fiche ne décrit aucun fichier… | Ajouter sous « tables » une entrée par fichier CSV. |
| la fiche ne décrit aucune colonne. | Lister sous « columns » chaque colonne du fichier et son type. |
| la colonne « Code INSEE » doit être en minuscules, sans accent ni espace. | Renommer la colonne, dans la fiche et dans le fichier : insee_code. |
| la colonne « value » a le type « decimal », inconnu. | Choisir un des cinq types : text, integer, number, date, boolean. |
| la fiche doit nommer sous « key » la colonne qui identifie chaque ligne. | Écrire sous « key » le nom d'une colonne décrite sous « columns ». |
| le lien « insee_code: village » ne se comprend pas. | Sous « pivots », la colonne doit exister et la clé être une de celles que le Lexicon connaît (liste plus haut). |
| la colonne email ressemble à des données personnelles. | Retirer la colonne, ou dire sous « personal_data » pourquoi elle peut être publiée. |
| La table « … » doit s'appeler registered_… en minuscules. | Corriger le nom donné sous « table: », ou retirer cette ligne ; avec plusieurs fichiers, leur donner des noms en minuscules, sans accent ni espace. |
Ce qu'elle dit d'un tableau
| La commande répond | Ce qu'il faut faire |
|---|---|
| Le fichier « releves.csv » n'est pas dans le dossier. | Placer le fichier à côté de la fiche, sous le nom exact écrit sous « file ». |
| ne se lit pas comme un CSV en UTF-8, séparé par des virgules. | Enregistrer de nouveau depuis le tableur : format CSV, encodage UTF-8, séparateur virgule (pas le point-virgule). |
| est vide. / n'a que sa ligne de titres. | Le fichier doit porter une ligne de titres, puis au moins une ligne. |
| il manque la colonne depth, annoncée par la fiche. | Ajouter la colonne au fichier, ou la retirer de la fiche. |
| la colonne note n'est pas décrite dans la fiche. | Décrire la colonne sous « columns », ou la retirer du fichier. |
| colonne « value » : 2 valeurs ne sont pas un nombre… (ligne 2 « 12,5 ») | Corriger les cases citées : un point pour les décimales, pas d'unité ni d'espace. Les numéros de ligne sont ceux du tableur ; trois lignes au plus sont citées. |
| 1 valeur n'est pas une date écrite AAAA-MM-JJ (ligne 3 « 01/10/2026 ») | Écrire 2026-10-01. Dans un tableur, donner à la colonne le format AAAA-MM-JJ avant d'enregistrer. |
| 1 valeur n'est pas true ou false | Remplacer oui, non, 1, 0 ou x par true ou false. |
| 2 lignes n'ont pas de valeur dans « id », qui doit identifier chaque ligne. | Donner un identifiant à chaque ligne. |
| 1 valeur de « id » revient plusieurs fois (r2). | Deux lignes portent le même identifiant : en changer un, ou retirer le doublon. |
Ce qu'elle signale sans bloquer
| La commande répond | Ce qu'il faut faire |
|---|---|
| La licence « CC-BY-SA 4.0 » impose le partage à l'identique… | Rien à corriger : ce qui est tiré du jeu devra garder cette licence. Elle est rappelée au catalogue. |
Ce qu'elle ne vérifie pas
- Que les identifiants des colonnes de lien existent : un code de commune inconnu n'est vu qu'à la construction du jeu, par le mainteneur.
- Que les valeurs sont justes : elle lit leur forme, pas leur sens.
- Que la licence écrite est bien celle de la source : c'est à vous de le dire.
5. Proposer
Quand la commande répond [ OK ], envoyer le dossier par une demande de fusion sur le dépôt du Lexicon, ou le transmettre à un mainteneur d'OSFarm. Le mainteneur relit le jeu, le construit et le publie ; il apparaît alors au catalogue, avec votre nom dans les crédits.
Ce qu'un tableau ne sait pas faire
Télécharger sa source, transformer les données, porter une géométrie, se lier à un autre jeu par une clé étrangère. Pour cela il faut écrire une source de données en Ruby : voir le guide du dépôt.