# Table Schema

Table Schema est un standard 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.

# 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.

# 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 pour générer des données synthétiques à partir de fichiers Table Schémas.

Il est également possible de

  • créer des tables vides correspondants dans des bases relationnelles, avec la librairie tableschema-sql
  • créer des diagrammes relationels entre tables, en utilisant la brique précédente + schemacrawler

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 référence ainsi les schemas de données publiques sur le site schema.data.gouv.fr, avec des services associés de validation de données ou de génération manuelle de données conformes.

# 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"
      }
    }
  ]
}