openadom
  • Accueil
  • Installation
  • Fichier d’example
  • Lexique
  • A propos
  1. Exemples
  2. Composantes
  3. Example d’utilisation des composants
  • Introduction
    • Introduction
    • Vocabulaire
    • Fichier d’échange
  • Fichiers d’échange
    • Aide fichier
    • Application (OA_application)
    • Etiquettes (OA_tags)
    • Données (OA_data)
      • Components
        • introduction
        • Basic Components
        • Computed Components
        • Dynamic Components
        • Constant Components
        • Pattern Components
        • Paramétrage des composants
        • Verificateurs
        • Validations
        • Dépôt de fichier (OA_submission)
        • Autorisations (OA_autorisations)
      • Fichier additionnels
      • Formulaire de demande de droits
  • Pour aller plus loin
    • Glossaire
    • Authorization
    • Component Qualifiers
    • Expression Groovy
    • Internationalisation i18n
    • Submission
  • Base de données
    • Introduction
  • En réflexion
    • Verificateurs
    • Clefs étrangères
  • Exemples
    • Fichier de configuration minimale
    • Composantes
      • Example d’utilisation des composants
      • Example d’utilisation des composantes dynamiques(sites)
      • Example d’utilisation des composantes dynamiques (taxons)
      • Example d’utilisation des composantes basiques

Sur cette page

  • Description
  • Configuration
  • Rendu
  • Stockage en base
  • Modifier cette page
  • Voir la source
  • Faire part d'un problème
  1. Exemples
  2. Composantes
  3. Example d’utilisation des composants

Example de desciption d’un domaine

Météorologie

Date de publication

07 mai 2025

Résumé
Cet exemple permet de montrer comment définir une configuration pour des données de météorologie.

Description

Nous avons des données de météorologie

tr_data_dat.csv
Région FR-CVL
Période 06/2004
Date de mesure Site Précipitation Température moyenne Température minimale Température maximale
01/06/2004 Os1 30 20 10 24
07/06/2004 Os1 2 22 14 27
07/06/2004 Os2 0 21 9 28

Cartouche

Ce fichier fichier possède un cartouche.

  • l’en-tête est à la ligne 3
  • la première ligne de données à la ligne 4

Constantes du fichier

Ce sont des valeurs qui s’appliquent à toutes les lignes du fichier

Dans le “pre-header” on trouve - une information de localisation (la région). C’est une clef étrangère vers le référentiel tr_regions_reg - une information de temporalité (la période de mesure).

En-tête

Ce sont les noms des colonnes - Date de mesure : une information de temporalité au foramt dd/MM/yyyy correspondant un une période de 1 jour (moyenne de calcul) - Site: une inforamtion de localisation qui permettra en l’associant à une région à identifier un site. C’est une clef étrangère. C’est à dire qu’on retrouvera l’information du site dans le référentiel tr_sites_sit. La combinaison région - site fera référence à une ligne de ce référentiel. - Précipitation : c’est une variable (valeur flottante) que l’on mesure en mm. - Température : une variable de température déclinée en trois composante et mesurée en degré Celsius. Date de mesure;Site;Précipitation;Température moyenne;Température minimale;Température maximale

Les unités feront référence au référentiel tr_unites_uni. Elle ne sont pas présentes dans le fichier mais on peut les fournir directement dans la configuration.

Référentiels

Il s’agit des informations permettant de comprendre les données du fichier tr_data_dat.csv

tr_regions_reg
Régions
code nom
FR-ARA Auvergne-Rhône-Alpes
FR-BFC Bourgogne-Franche-Comté
FR-BRE Bretagne
FR-CVL Centre-Val de Loire
FR-COR Corse
FR-GES Grand Est
FR-HDF Hauts-de-France
FR-IDF Île-de-France
FR-NOR Normandie
FR-NAQ Nouvelle-Aquitaine
FR-OCC Occitanie
FR-PDL Pays de la Loire
FR-PAC Provence-Alpes-Côte d’Azur
tr_sites_sit
Sites
nom Date.de.création region
Os1 01/01/2000 FR-CVL
Os2 01/01/2000 FR-CVL
tr_unites_uni
Unités
nom nom_fr nom_en code
temperature Température Temperature °C
precipitation Précipitation Precipitation mm

Configuration

On doit d’abord décrire l’application

  • déclaration de la version du moteur
OA_version
OA_version: 2.0.1
  • déclaration de l’application
OA_application
OA_application:
  OA_name: meteorologie
  OA_i18n: # optional
    OA_title:
      fr: Example de définition de données de météorologie
      en: Definition of meterologic data
    OA_description:
      fr: Cet exemple montre comment déclarer une données et ses référentiels associés.
      en: This example shows how to declare a data and its associated repositories.
  OA_version: 1.0.7
  OA_defaultLanguage: fr  # optional par défaut fr
  OA_comment: Données météorologiques

On déclare le référentiel tr_region_reg

region
OA_data: 
  tr_regions_reg: 
    OA_tags: [ __ORDER_1__ ]
    OA_dataHeaderLine: 1
    OA_dataFirstLine: 2
    OA_naturalKey: 
      - reg_code    
    OA_i18nDisplayPattern:
      OA_title:
        fr: '{reg_nom}'
        en: '{reg_nom}'
      OA_description:
        fr: '{reg_nom} ({reg_code})'
        en: '{reg_nom} ({reg_code})'
    OA_i18n: 
      OA_title:
        fr: Régions
        en: Region
    OA_basicComponents: 
      reg_code: 
        OA_required: true
        OA_importHeader: code
        OA_tags: [ __ORDER_1__ ]
        OA_checker:
          OA_name: OA_string
          OA_params:
            OA_pattern: FR-[A-Z]{3}
        OA_exportHeader:
          OA_title:
            fr: Code
            en: Code
          OA_description:
            fr: Code de la région
            en: Region code
      reg_nom: 
        OA_required: false
        OA_importHeader: nom
        OA_tags: [ __ORDER_2__ ]
        OA_exportHeader:
          OA_title:
            fr: Nom
            en: Name
          OA_description:
            fr: Nom de la région
            en: Region name

…

  • On déclare code comme clef naturelle.
  • On ajoute un Identificateurs pour le code.
  • On surcharge l’affichage de ce code en rajoutant la section OA_i18nDisplayPattern.
  • on rajoute des OA_exportHeader pour l’affichage des en-tête à l’extraction
  • On rajoute des OA_tags __ORDER_ pour ordonner les types de données et les composantes à l’extraction.

On déclare le référentiel tr_sites_sit

Site
OA_data: 

…

  tr_sites_sit: 
    OA_dataHeaderLine: 1
    OA_dataFirstLine: 2
    OA_naturalKey: 
      - reg_code
      - sit_nom
    OA_i18nDisplayPattern:
      OA_title:
        fr: '{sit_nom} ({reg_code})'
        en: '{sit_nom} ({reg_code})'
      OA_description:
        fr: 'Nom du site: {sit_nom}; Nom de la région: ({reg_code})'
        en: 'Site name: {sit_nom}; région name ({reg_code})'
    OA_i18n: 
      OA_title:
        fr: Sites
        en: Sites
    OA_basicComponents: 
      sit_nom: 
        OA_required: true
        OA_importHeader: nom
        OA_tags: [ __ORDER_3__ ]
        OA_exportHeader:
          OA_title:
            fr: Nom
            en: Name
          OA_description:
            fr: Nom du site
            en: Site name
      sit_date : 
        OA_required: true
        OA_importHeader: "Date de création"
        OA_tags: [ __ORDER_1__ ]
        OA_checker:
          OA_name: OA_date
          OA_params:
            OA_pattern: dd/MM/yyyy
        OA_exportHeader:
          OA_title:
            fr: Date de création
            en: Creation date
          OA_description:
            fr: Date de création du site
            en: Site creation date
      reg_code: 
        OA_required: true
        OA_importHeader: region
        OA_tags: [ __ORDER_2__ ]
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_regions_reg
              OA_isParent: true
        OA_exportHeader:
          OA_title:
            fr: Code
            en: Code
          OA_description:
            fr: Code de la région
            en: Region code

…

  • On déclare une clef composite pour sites (sit_nom, reg_code)
  • On surcharge l’affichage de ce code en rajoutant la section OA_i18nDisplayPattern.
  • On rajoute un Identificateurs de type date sur sit_date.
  • On rajoute un Identificateurs de type clef étrangère pour la composante région. De plus on ajoute OA_isParent: true pour indiquer que tr_regions_reg est le parent de tr_sites_sit.
  • on rajoute des OA_exportHeader pour l’affichage des en-tête à l’extraction
  • On rajoute des OA_tags __ORDER_ pour ordonner les types de données et les composantes à l’extraction.

On déclare le référentiel tr_unites_uni

Unité
OA_data: 

…

  tr_unites_uni:
    OA_dataHeaderLine: 1
    OA_dataFirstLine: 2
    OA_tags: [ __ORDER_1__ ]
    OA_naturalKey: 
      - uni_nom
    OA_i18n: 
      OA_title:
        fr: Unités
        en: Units
    OA_i18nDisplayPattern:
      OA_title:
        fr: '{uni_code}'
        en: '{uni_code}'
      OA_description:
        fr: '{uni_nom_fr} ({uni_code})'
        en: '{uni_nom_en} ({uni_code})'
    OA_basicComponents: 
      uni_nom:
        OA_required: true
        OA_importHeader: nom
        OA_tags: [ __HIDDEN__ ]
      uni_nom_fr:
        OA_required: false
        OA_importHeader: nom_fr
        OA_exportHeader:
          OA_title:
            fr: Nom
          OA_description:
            fr: Nom de l'unité
        OA_tags: [ __ORDER_2__ ]
        OA_langRestrictions:
          - fr  
      uni_nom_en:
        OA_required: false
        OA_importHeader: nom_en
        OA_exportHeader:
          OA_title:
            en: Name
          OA_description:
            en: Unit name
        OA_tags: [ __ORDER_2__ ]
        OA_langRestrictions:
          - en  
      uni_code:
        OA_required: true
        OA_importHeader: code
        OA_tags: [ __ORDER_1__ ]

…

  • On déclare une clef naturelle uni_nom
  • On surcharge l’affichage de ce code en rajoutant la section OA_i18nDisplayPattern.
  • on rajoute des OA_exportHeader pour l’affichage des en-tête à l’extraction
  • On rajoute des OA_tags __ORDER_ pour ordonner les types de données et les composantes à l’extraction.
  • Pour internationnaliser l’affichage de la colonne nom on utilise un OA_tags HIDDEN et une section OA_langRestrictions

Déclaration de la donnée t_data_dat

Météorologie
OA_data: 

…

  t_data_dat:
    OA_tags: [ __ORDER_1__ , __DATA__]
    OA_dataHeaderLine: 3
    OA_dataFirstLine: 4
    OA_naturalKey: 
      - sit_site
      - dat_date   
    OA_i18n: 
      OA_title:
        fr: Données de météorologie
        en: Meteorologic data
      OA_description:
        fr: Données de précipitation et de température
        en: Precipitation and temperature data
    OA_basicComponents: 
      dat_date:
        OA_tags: [__ORDER_2__]
        OA_importHeader: Date de mesure
        OA_exportHeader:
          OA_title:
            fr: Date de mesure
            en: Measurement date
          OA_description:
            fr: Date de la mesure
            en: Measurement date
      sit_nom: 
        OA_required: true
        OA_importHeader: Site
        OA_tags: [ __HIDDEN__ ]
      dat_precipitation:
        OA_tags: [__ORDER_3__]
        OA_importHeader: "Précipitation"
        OA_exportHeader:
          OA_title:
            fr: Précipitations
            en: Precipitations    
    OA_constantComponents:
      reg_region:
        OA_tags: [ __HIDDEN__ ]
        OA_required: true
        OA_importHeaderTarget:   
          OA_rowNumber: 1
          OA_columnNumber: 2
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_regions_reg
      dat_periode:
        OA_tags: [ __HIDDEN__ ]
        OA_required: true
        OA_importHeaderTarget:   
          OA_rowNumber: 2
          OA_columnNumber: 2
        OA_checker:
          OA_name: OA_date
          OA_params:
            OA_pattern: MM/yyyy
            OA_duration: 1 month
    OA_computedComponents:
      sit_site: # la clef de site étant comosée on la calcule en utilisant OA_withNaturalKeyComponents
        OA_tags: [__ORDER_1__]
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_sites_sit
        OA_withNaturalKeyComponents:
          - reg_region
          - sit_nom      
      dat_precipitation_unit:
        OA_tags: [__ORDER_4__]
        OA_computation:
          OA_expression: >
            return "precipitation";
        OA_exportHeader:
          OA_title:
            fr: Précipitations (unité)
            en: Precipitations (unit)
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_unites_uni    
    OA_patternComponents:
      dat_temperature_moyenne:
        OA_tags: [__ORDER_5__]
        OA_patternForComponents: "(Température) moyenne"
        OA_required: false
        OA_exportHeader:
          OA_title:
            fr: "Température moyenne"
            en: "Average temperature"
          OA_description:
            fr: "valeur de la variable"
            en: "variable value"
        OA_checker:
          OA_name: OA_float
          OA_params:
            OA_min: -15.0
            OA_max: 45.0
        OA_componentQualifiers:
          - dat_unit: #$1
              OA_tags: [__ORDER_1__]
              OA_exportHeader:
                OA_title:
                  fr: "unité"
                  en: "unit"
              OA_checker:
                OA_name: OA_reference
                OA_params:
                  OA_reference:
                    OA_name: "tr_unites_uni"
        OA_componentAdjacents:
            - dat_temperature_minimale:   
                OA_tags: [__ORDER_2__]
                OA_importHeaderPattern: "{$1} minimale"  
                OA_exportHeader:   
                  OA_title:   
                    fr: Température minimale
                    en: Minimal temperature 
                OA_required: false  
                OA_mandatory: false  
                OA_checker:
                  OA_name: OA_float
                  OA_params:
                    OA_min: -15.0
                    OA_max: 45.0
            - dat_temperature_maximale:    
                OA_tags: [__ORDER_2__] 
                OA_importHeaderPattern: "{$1} maximale"  
                OA_exportHeader:   
                  OA_title:   
                    fr: Température maximale
                    en: Maximal temperature 
                OA_required: false  
                OA_mandatory: false  
                OA_checker:
                  OA_name: OA_float
                  OA_params:
                    OA_min: -15.0
                    OA_max: 45.0
  • On déclare une clef composite pour data (sit_site, dat_date)
  • On rajoute un Identificateurs de type date sur dat_date, dat_periode.
  • On rajoute un Identificateurs de type clef étrangère pour les composantes sit_site, reg_region, dat_precipitation_unit et dat_unit.
  • On rajoute un Identificateurs de type valeur flottante pour les composantes dat_precipitation, dat_temperature_moyenne, dat_temperature_minimale, dat_temperature_maximale.
  • on rajoute des OA_exportHeader pour l’affichage des en-tête à l’extraction
  • On rajoute des OA_tags DATA sur le type t_data_dat pour indiquer qu’il s’agit de données et __ORDER_ pour ordonner les types de données et les composantes à l’extraction.

Pour récupérer le site qui est une clef composite sur le nom du site et le code de la région: - on récupère d’abord le code de la région comme une constante de ficher dans une section OA_constantComponents avec une OA_tags HIDDEN pour ne pas l’afficher en sortie.

constant component: reg_region
    OA_constantComponents:
      reg_region:
        OA_tags: [ __HIDDEN__ ]
        OA_required: true
        OA_importHeaderTarget:   
          OA_rowNumber: 1
          OA_columnNumber: 2
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_regions_reg
  • on récupère le nom du site comme composante basique dans une section OA_basicComponents avec une OA_tags HIDDEN pour ne pas l’afficher en sortie.
basic component : sit_nom
    OA_basicComponents: 
      sit_nom: 
        OA_required: true
        OA_importHeader: Site
        OA_tags: [ __HIDDEN__ ]
  • On calcule la clef composite comme composante calculée dans une section OA_computedComponents
computed component: sit_site
      sit_site: # la clef de site étant comosée on la calcule en utilisant OA_withNaturalKeyComponents
        OA_tags: [__ORDER_1__]
        OA_checker:
          OA_name: OA_reference
          OA_params:
            OA_reference:
              OA_name: tr_sites_sit
        OA_withNaturalKeyComponents:
          - reg_region
          - sit_nom      

OA_withNaturalKeyComponents permet de construire la clef naturelle qui sera validée par le vérificateur.

Pour les variables et leurs unités nous utilisons deux stratégies:

  • Pour les précipitation la valeur est récupéré comme une composante basique OA_basicComponents et l’unité comme une composante calculée OA_computedComponents

  • Pour les températures nous décrivons une composante pattern:

    • OA_patternForComponents donne un pattern qui capture la colonne Température moyenne.
computed component: sit_site
    OA_patternComponents:
      dat_temperature_moyenne:
        OA_tags: [__ORDER_5__]
        OA_patternForComponents: "(Température) moyenne"
        OA_required: false
        OA_exportHeader:
          OA_title:
            fr: "Température moyenne"
            en: "Average temperature"
          OA_description:
            fr: "valeur de la variable"
            en: "variable value"
        OA_checker:
          OA_name: OA_float
          OA_params:
            OA_min: -15.0
            OA_max: 45.0
  • Le seul groupe de capture de l’expression est le nom de l’unité -> c’est un qualifiant du pattern
computed component: sit_site
        OA_componentQualifiers:
          - dat_unit: #$1
              OA_tags: [__ORDER_1__]
              OA_exportHeader:
                OA_title:
                  fr: "unité"
                  en: "unit"
              OA_checker:
                OA_name: OA_reference
                OA_params:
                  OA_reference:
                    OA_name: "tr_unites_uni"
  • les autres colonnes température sont capturées comme colonne adjacente.
computed component: sit_site
        OA_componentAdjacents:
            - dat_temperature_minimale:   
                OA_tags: [__ORDER_2__]
                OA_importHeaderPattern: "{$1} minimale"  
                OA_exportHeader:   
                  OA_title:   
                    fr: Température minimale
                    en: Minimal temperature 
                OA_required: false  
                OA_mandatory: false  
                OA_checker:
                  OA_name: OA_float
                  OA_params:
                    OA_min: -15.0
                    OA_max: 45.0
            - dat_temperature_maximale:    
                OA_tags: [__ORDER_2__] 
                OA_importHeaderPattern: "{$1} maximale"  
                OA_exportHeader:   
                  OA_title:   
                    fr: Température maximale
                    en: Maximal temperature 
                OA_required: false  
                OA_mandatory: false  
                OA_checker:
                  OA_name: OA_float
                  OA_params:
                    OA_min: -15.0
                    OA_max: 45.0

Rendu

visualisation de la météorologie

visualisation de la météorologie

Stockage en base

tr_sites_sit

select  refvalues 
from meteorologie.referencevalue
where referencetype = 'tr_sites_sit' and 
naturalkey = 'frcvl__os1'::ltree
{
  "sit_nom": "Os1",
  "reg_code": "frcvl",
  "sit_date": "date:2000-01-01T00:00:00:dd/MM/yyyy",
  "__display_en": "Os1 (frcvl)",
  "__display_fr": "Os1 (frcvl)",
  "__display_default": "Nom du site: Os1; Nom de la région: (frcvl)",
  "__display_description_en": "Site name: Os1; région name (frcvl)",
  "__display_description_fr": "Nom du site: Os1; Nom de la région: (frcvl)"
}

On remarquera la surcharge de la clef naturelle __display_…

On peut récupérer la date

select  
  ((refvalues #>> '{sit_date}')::composite_date)::timestamp, 
  ((refvalues #>> '{sit_date}')::composite_date)::text 
from meteorologie.referencevalue
where referencetype = 'tr_sites_sit' and 
naturalkey = 'frcvl__os1'::ltree
visualisation de la météorologie

t_data_dat

select  refvalues 
from meteorologie.referencevalue
where referencetype = 't_data_dat' and 
naturalkey = 'frcvl__os1__01SOLIDUS06SOLIDUS2004'::ltree
{
  "sit_nom": "Os1",
  "dat_date": "01/06/2004",
  "sit_site": "frcvl__os1",
  "reg_region": "frcvl",
  "dat_periode": "date:1970-01-01T00:00:00:MM/yyyy",
  "__display_default": "frcvl__os1__01/06/2004",
  "dat_precipitation": "30",
  "dat_precipitation_unit": "precipitation",
  "dat_temperature_moyenne": {
    "dat_unit": "temperature",
    "__VALUE__": 20,
    "__COLUMN_NAME__": "dat_temperature_moyenne",
    "__ORIGINAL_COLUMN_NAME__": "Température moyenne",
    "dat_temperature_maximale": 24,
    "dat_temperature_minimale": 10
  }
}

On remarque la différence de stratégie de récupération des valeurs précipitation et température :

  • il n’y a pas de marquage de la proximité des variables dat_precipitation et dat_precipitation_unit
  • toutes les valeurs correspondant à la température sont regroupées dans un même objet json sous le label dat_temperature_moyenne qui est l’idendificateur du patternComponent
Retour au sommet
Fichier de configuration minimale
Example d’utilisation des composantes dynamiques(sites)
Code source
---
title: Example de desciption d'un domaine
subtitle: Météorologie
abstract: Cet exemple permet de montrer comment définir une configuration pour des données de météorologie.
---

## Description

Nous avons des données de météorologie

::: {.callout-important collapse="false" title="tr_data_dat.csv"}
```{r}
#| echo: false
#| label: tr_data_dat.csv
#| code-fold: show
library(knitr)

# Lecture du fichier sans en-tête
data <- read.csv("fichiers/t_data_dat.csv", 
                 sep = ";",
                 header = FALSE,  # Important : on lit sans en-tête
                 encoding = "UTF-8")

# Remplacement des NA
data[is.na(data)] <- ""

# Affichage avec kable
kable(data,
      col.names = c(rep("", ncol(data))),  # Crée autant de colonnes vides que nécessaire
      format = "html",
      table.attr = 'style="margin-top: 0px; width: auto;"')

```
:::

### Cartouche
Ce fichier fichier possède un {{<var page-refs.data.link-cartouche>}}.

- l'en-tête est à la ligne 3
- la première ligne de données à la ligne 4

### Constantes du  fichier

Ce sont des valeurs qui s'appliquent à toutes les lignes du fichier

Dans le "pre-header" on trouve 
- une information de localisation (la région). C'est une clef étrangère vers le référentiel tr_regions_reg
- une information de temporalité (la période de mesure).

### En-tête

Ce sont les noms des colonnes
- **Date de mesure** : une information de temporalité au foramt dd/MM/yyyy correspondant un une période de 1 jour (moyenne de calcul)
- **Site**: une inforamtion de localisation qui permettra en l'associant à une région à identifier un site. C'est une clef étrangère. C'est à dire qu'on retrouvera l'information du site dans le référentiel tr_sites_sit. La combinaison région - site fera référence à une ligne de ce référentiel.
- **Précipitation** : c'est une variable (valeur flottante) que l'on mesure en mm.
- **Température** : une variable de température déclinée en trois composante et mesurée en degré Celsius.
Date de mesure;Site;Précipitation;Température moyenne;Température minimale;Température maximale

Les unités feront référence au référentiel tr_unites_uni. Elle ne sont pas présentes dans le fichier mais on peut les fournir directement dans la configuration.

### Référentiels

Il s'agit des informations permettant de comprendre les données du fichier tr_data_dat.csv

::: {.callout-important collapse="false" title="tr_regions_reg"}
```{r}
#| echo: false
#| label: tr_regions_reg.csv
#| tbl-cap: "Régions"
#| code-fold: show
knitr::kable(read.csv("fichiers/tr_regions_reg.csv", header = TRUE,  sep = ';',  stringsAsFactors = FALSE))

```
:::


::: {.callout-important collapse="false" title="tr_sites_sit"}
```{r}
#| echo: false
#| label: tr_sites_sit.csv
#| tbl-cap: "Sites"
#| code-fold: show
knitr::kable(read.csv("fichiers/tr_sites_sit.csv", header = TRUE,  sep = ';',  stringsAsFactors = FALSE))

```
:::

::: {.callout-important collapse="false" title="tr_unites_uni"}
```{r}
#| echo: false
#| label: tr_unites_uni.csv
#| tbl-cap: "Unités"
#| code-fold: show
knitr::kable(read.csv("fichiers/tr_unites_uni.csv", header = TRUE,  sep = ';',  stringsAsFactors = FALSE))

```
:::

## Configuration

### On doit d'abord décrire l'application

- déclaration de la version du moteur

::: {.callout-important collapse="false" title="OA_version"}
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[0:1]
cat(yaml_content, sep = "\n")
```
:::

- déclaration de l'application

::: {.callout-important collapse="false" title="OA_application"}
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[2:13]
cat(yaml_content, sep = "\n")
```
:::

### On déclare le référentiel tr_region_reg


::: {.callout-important collapse="false" title="region"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[14:14]
cat(yaml_content, sep = "\n")
```

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[15:58]
cat(yaml_content, sep = "\n")
```
...
:::

- On déclare code comme clef naturelle.
- On ajoute un {{<var page-refs.vocab.link-identificateurs>}} pour le code.
- On surcharge l'affichage de ce code en rajoutant la section {{<var page-refs.data.oa-displayPattern>}}. 
- on rajoute des **OA_exportHeader** pour l'affichage des en-tête à l'extraction
- On rajoute des {{<var page-refs.etiquettes.oa>}} __ORDER_ pour ordonner les types de données et les composantes à l'extraction.

### On déclare le référentiel tr_sites_sit

::: {.callout-important collapse="false" title="Site"}
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[14:14]
cat(yaml_content, sep = "\n")
```
...
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[59:119]
cat(yaml_content, sep = "\n")
```
...
:::

- On déclare une clef composite pour sites (sit_nom, reg_code)
- On surcharge l'affichage de ce code en rajoutant la section {{<var page-refs.data.oa-displayPattern>}}. 
- On rajoute un {{<var page-refs.vocab.link-identificateurs>}} de type date sur sit_date.
- On rajoute un {{<var page-refs.vocab.link-identificateurs>}} de type clef étrangère pour la composante région. De plus on ajoute {{<var page-refs.checker.oa-isParent>}}: true pour indiquer que tr_regions_reg est le parent de tr_sites_sit.
- on rajoute des **OA_exportHeader** pour l'affichage des en-tête à l'extraction
- On rajoute des {{<var page-refs.etiquettes.oa>}} __ORDER_ pour ordonner les types de données et les composantes à l'extraction.



### On déclare le référentiel tr_unites_uni

::: {.callout-important collapse="false" title="Unité"}
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[14:14]
cat(yaml_content, sep = "\n")
```
...
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[120:167]
cat(yaml_content, sep = "\n")
```
...
:::

- On déclare une clef naturelle uni_nom
- On surcharge l'affichage de ce code en rajoutant la section {{<var page-refs.data.oa-displayPattern>}}. 
- on rajoute des **OA_exportHeader** pour l'affichage des en-tête à l'extraction
- On rajoute des {{<var page-refs.etiquettes.oa>}} __ORDER_ pour ordonner les types de données et les composantes à l'extraction.
- Pour internationnaliser l'affichage de la colonne nom on utilise un {{<var page-refs.etiquettes.oa>}} __HIDDEN__ et une section **OA_langRestrictions**

### Déclaration de la donnée t_data_dat


::: {.callout-important collapse="false" title="Météorologie"}
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[14:14]
cat(yaml_content, sep = "\n")
```
...
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[168:309]
cat(yaml_content, sep = "\n")
```
:::



- On déclare une clef composite pour data (sit_site, dat_date)
- On rajoute un {{<var page-refs.vocab.link-identificateurs>}} de type date sur dat_date, dat_periode.
- On rajoute un {{<var page-refs.vocab.link-identificateurs>}} de type clef étrangère pour les composantes sit_site, reg_region, dat_precipitation_unit et dat_unit.
- On rajoute un {{<var page-refs.vocab.link-identificateurs>}} de type valeur flottante pour les composantes dat_precipitation, dat_temperature_moyenne, dat_temperature_minimale, dat_temperature_maximale.
- on rajoute des **OA_exportHeader** pour l'affichage des en-tête à l'extraction
- On rajoute des {{<var page-refs.etiquettes.oa>}} __DATA__ sur le type t_data_dat pour indiquer qu'il s'agit de données et __ORDER_ pour ordonner les types de données et les composantes à l'extraction.

Pour récupérer le site qui est une clef composite sur le nom du site et le code de la région:
- on récupère d'abord le code de la région comme une constante de ficher dans une section {{<var page-refs.constant-comp.oa>}} avec une {{<var page-refs.etiquettes.oa>}} __HIDDEN__ pour ne pas l'afficher en sortie.

::: {.callout-important collapse="false" title="constant component: reg_region"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[204:215]
cat(yaml_content, sep = "\n")
```
:::
- on récupère le nom du site comme composante basique dans une section {{<var page-refs.basic-comp.oa>}} avec une {{<var page-refs.etiquettes.oa>}} __HIDDEN__ pour ne pas l'afficher en sortie.


::: {.callout-important collapse="false" title="basic component : sit_nom"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[182:182]
cat(yaml_content, sep = "\n")
```
``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[193:196]
cat(yaml_content, sep = "\n")
```
:::

- On calcule la clef composite comme composante calculée dans une section {{<var page-refs.computed-comp.oa>}}

::: {.callout-important collapse="false" title="computed component: sit_site"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[228:237]
cat(yaml_content, sep = "\n")
```
:::

**OA_withNaturalKeyComponents** permet de construire la clef naturelle qui sera validée par le vérificateur.

Pour les variables et leurs unités nous utilisons deux stratégies:

- Pour les précipitation la valeur est récupéré comme une composante basique {{<var page-refs.basic-comp.oa>}} et l'unité comme une composante calculée {{<var page-refs.computed-comp.oa>}}

- Pour les températures nous décrivons une composante pattern:

  - OA_patternForComponents donne un pattern qui capture la colonne Température moyenne. 
  
::: {.callout-important collapse="false" title="computed component: sit_site"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[252:268]
cat(yaml_content, sep = "\n")
```
:::

  - Le seul groupe de capture de l'expression est le nom de l'unité -> c'est un qualifiant du pattern

::: {.callout-important collapse="false" title="computed component: sit_site"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[269:280]
cat(yaml_content, sep = "\n")
```
:::
  - les autres colonnes température sont capturées comme colonne adjacente.

::: {.callout-important collapse="false" title="computed component: sit_site"}

``` {r}
#| echo: false
yaml_content <- suppressWarnings(readLines("configuration.yaml"))
yaml_content <- yaml_content[281:309]
cat(yaml_content, sep = "\n")
```
:::

## Rendu

::: {.callout-important collapse="false" title="visualisation de la météorologie"}
![](images/paste-1.png)
:::

::: {.callout-important collapse="false" title="visualisation de la météorologie"}
![](images/paste-2.png)
:::


## Stockage en base

### tr_sites_sit

``` sql
select  refvalues 
from meteorologie.referencevalue
where referencetype = 'tr_sites_sit' and 
naturalkey = 'frcvl__os1'::ltree
```

``` json
{
  "sit_nom": "Os1",
  "reg_code": "frcvl",
  "sit_date": "date:2000-01-01T00:00:00:dd/MM/yyyy",
  "__display_en": "Os1 (frcvl)",
  "__display_fr": "Os1 (frcvl)",
  "__display_default": "Nom du site: Os1; Nom de la région: (frcvl)",
  "__display_description_en": "Site name: Os1; région name (frcvl)",
  "__display_description_fr": "Nom du site: Os1; Nom de la région: (frcvl)"
}
```
On remarquera la surcharge de la clef naturelle __display_...

On peut récupérer la date

``` sql
select  
  ((refvalues #>> '{sit_date}')::composite_date)::timestamp, 
  ((refvalues #>> '{sit_date}')::composite_date)::text 
from meteorologie.referencevalue
where referencetype = 'tr_sites_sit' and 
naturalkey = 'frcvl__os1'::ltree
```

::: {.callout-important collapse="false" title="visualisation de la météorologie"}
![](images/date.png)
:::



### t_data_dat

``` sql
select  refvalues 
from meteorologie.referencevalue
where referencetype = 't_data_dat' and 
naturalkey = 'frcvl__os1__01SOLIDUS06SOLIDUS2004'::ltree
```

``` json
{
  "sit_nom": "Os1",
  "dat_date": "01/06/2004",
  "sit_site": "frcvl__os1",
  "reg_region": "frcvl",
  "dat_periode": "date:1970-01-01T00:00:00:MM/yyyy",
  "__display_default": "frcvl__os1__01/06/2004",
  "dat_precipitation": "30",
  "dat_precipitation_unit": "precipitation",
  "dat_temperature_moyenne": {
    "dat_unit": "temperature",
    "__VALUE__": 20,
    "__COLUMN_NAME__": "dat_temperature_moyenne",
    "__ORIGINAL_COLUMN_NAME__": "Température moyenne",
    "dat_temperature_maximale": 24,
    "dat_temperature_minimale": 10
  }
}

```

On remarque la différence de stratégie de récupération des valeurs précipitation et température : 

- il n'y a pas de marquage de la proximité des variables dat_precipitation et dat_precipitation_unit
- toutes les valeurs correspondant à la température sont regroupées dans un même objet json sous le label dat_temperature_moyenne qui est l'idendificateur du patternComponent

Copyright 2025, OpenADOM

 
  • Modifier cette page
  • Voir la source
  • Faire part d'un problème