# Table Schema

Table Schema est un standard (opens new window) qui permet de décrire le schéma de données tabulaires.

Nous utilisons ce standard pour décrire le schéma formel du SNDS (opens new window).

# Spécification

Une table est décrite principalement par

Un field est principalement décrit par

  • un name (seul champ obligatoire)
  • un title plus lisible
  • une description
  • un type, parmi une liste extensible [string, number, integer, boolean, date, etc.]
  • un format, qui précise le type (ex : format de la date)
  • des constraints, telles que valeurs min et max, listes de modalités autorisées, etc.

Cette spécification est extensible librement. Ils est donc possible d'ajouter des catégories d'informations spécifiques aux données considérées.

Un schema qui suit la spécification Table Schema est enregistré au format json (opens new window).

# Intérêts

La spécification Table Schema est facilement lisible par des humains, et manipulable informatiquement.

Ce standard est indépendant de tout logiciel ou langage, il est donc extrêmement portable.

Des librairies existent pour manipuler les schémas suivant cette spécification, par exemple

Nous avons développé la librairie tsfaker (opens new window) pour générer des données synthétiques à partir de fichiers Table Schémas.

Il est également possible de

Plus généralement, l'adoption de la spécification Table Schema est encouragée pour améliorer la qualité des données publiées en open-data et leur documentation.

Etalab (opens new window) référence ainsi les schemas de données publiques sur le site schema.data.gouv.fr (opens new window), avec des services associés de validation de données ou de génération manuelle de données conformes (opens new window).

# Descripteur type d'une table

{
  // 'fields' est une liste ordonnée de descripteurs de colonnes
  "fields": [ 
    {
      "name": "Nom de la colonne", // OBLIGATOIRE 
      "title": "Titre plus lisible",
      "description": "Description de la colonne",
      "type": "Chaîne de caractères spécifiant le type",
      "format": "Chaîne de caratères spécifiant le format",
      "constraints": {
        // descripteurs de contraintes sur la colonne (ex: unicité des valeurs)
      }
    }
    // Autres descripteurs de colonnes
  ],
  // Spécification (optionnelle) de la clé primaire
  "primaryKey": "Nom de la colonne, ou liste de nom de colonnes séparées par des virgules",
  // Spécification (optionnelle) des clés étrangères
  "foreignKeys": [
    {
      "fields": "Nom (ou liste) de la colonne  de la table",
      "reference": {
        "resource": "Nom de la table référencée",
        "fields": "Nom (ou liste) de la colonne de la table référencée"
      }
    }
  ]
}