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

  1. Installer l'outil sur son poste.
  2. Préparer le tableau et l'enregistrer en CSV.
  3. Remplir la fiche dataset.yml.
  4. Vérifier avec ./lexicon contribute, corriger, recommencer.
  5. 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 --tabular

La 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
id,insee_code,measured_on,value
r1,17387,2026-09-01,12.5
r2,28085,2026-09-02,
r3,33063,2026-09-02,14

3. 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
RubriqueCe qu'elle dit
descriptionUne phrase qui dit ce que contient le jeu. Elle est affichée au catalogue.
authorQui propose le jeu : une personne et son organisme. Ce nom figure dans les crédits.
source.name, source.url, source.providerLe nom du jeu de données d'origine, l'adresse où on le trouve, et qui le publie.
source.licence, source.licence_urlLa 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.dateLa 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.
tablesUne 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_.
fileLe nom du fichier CSV, placé dans le même dossier.
keyLa colonne qui identifie chaque ligne : jamais vide, jamais deux fois la même valeur.
columnsChaque colonne du fichier, avec son type.
pivotsLes 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

TypeCe que contient la colonne
textUn texte quelconque.
integerUn nombre entier, sans espace ni décimale : 30
numberUn nombre, avec un point pour les décimales : 12.5
dateUne date écrite AAAA-MM-JJ : 2026-09-30
datetimeUne date et une heure : 2025-12-04T17:00:53+01:00
booleantrue ou false
pointUn 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
communeCode INSEE de la commune : 17387
commune_postal_code + commune_nameSans 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é.
departmentCode du département : 17
sirenNuméro SIREN de l'entreprise, neuf chiffres
siretNuméro SIRET de l'établissement, quatorze chiffres
cadastral_parcelIdentifiant de la parcelle cadastrale
cap_crop_codeCode culture de la PAC : BTH
taxonNom de référence du taxon dans la taxonomie du Lexicon
productionNom de référence de la production dans le Lexicon
weather_stationNom de référence de la station météorologique
ammNuméro d'autorisation de mise sur le marché d'un produit phytosanitaire
variantNom de référence de l'article dans le référentiel des variantes

4. Vérifier

./lexicon contribute releves_sol

Chaque 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_sol

Dans 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 --web

Ouvrir 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épondCe 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épondCe 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 falseRemplacer 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épondCe 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

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.