Templating pour datatype data
Problématique
Dans le cas des mesures physiques du sol par exemple, il existe un grand nombre de combinaisons datatype_profondeur_repétition. Ecrire les informations pour toutes ces colonnes est long et fastidieux alors même qu'il s'agit de copier coller, et cela ne garantit pas la soumission de fichier avec un pattern non déclaré. De plus, la multiplication de sections semblables rend le yaml de description peu lisible.
Proposition
Pour des colonnes avec un pattern répétitif il pourrait être utile de rajouter un templating. Lors de la lecture de l'en-tête, on peut vérifier si la colonne a été déclarée. Dans le cas contraire, et en présence de templates déclarés, on peut alors chercher si le nom de la colonne matche un pattern de template. On créé alors à la volée les sections correspondantes dans data, authorization et format.
Modalités
Dans une section template, on déclare les templates. Le nom du template correspond au pattern, sous la forme d'un expression régulière, du nom de la colonne.
Dans un tableau variables, on indique le nom de chacun des groupes [variable, profondeur, répétition]. Le premier élément correspondant au nom de la colonne ($0) et les autres aux groupes $1, $2 ...
On précise dans la section dataGroups le template du dataGroups auquel appartient cette variable. Il sera créé et/ou remplis avec les variable créées.
Ensuite on déclare la section data en utilisant des ${variable} ${profondeur} ${répétition} qui seront remplacés par les valeurs parsées dans le nom de la colonne. Ces sections seront mergées aux sections existantes.
La section format sera mise à jour avec cette colonne liée à ce data.
template:
TS_([0-9]*)_([0-9]*):
variables:
- variable
- profondeur
- répétition
boundToComponent : value
dataGroups:
TS:
label: "variables"
data:
- ${variable}
data:
${variable}:
components:
value:
checker:
name: Float
params:
required: false
unit:
defaultValue: return "degre celcius"
checker:
name: Reference
params:
refType: unites
required: true
codify: true
profondeur:
defaultValue: return "${profondeur}"
checker:
name: Float
params:
required: false
repetition:
defaultValue: return "${répétition}"
checker:
name: Integer
params:
required: false