modifs.mineures sans commentaires

This commit is contained in:
Jephté Clain 2025-03-10 04:31:35 +04:00
parent 4335a63d76
commit 08d5327afa
2 changed files with 52 additions and 71 deletions

View File

@ -4,67 +4,57 @@ les classes de ce package permettent de s'assurer que des données soit dans un
type particulier, en les convertissant si nécessaire. la source de ces données type particulier, en les convertissant si nécessaire. la source de ces données
peut-être diverse: formulaire web, résultat d'une requête SQL, flux CSV, etc. peut-être diverse: formulaire web, résultat d'une requête SQL, flux CSV, etc.
les données dont on peut modéliser le schéma sont de 3 types: les données dont on peut modéliser le schéma sont de 3 types: scalaire, tableau
* scalaire associatif ou liste. la nature du schéma (la valeur de la clé `"""`) indique le
* tableau associatif type de donnée modélisée
* liste (tableau séquentiel ou associatif d'éléments du même type) * donnée scalaire
chaque type de données a une syntaxe spécifique pour la définition du schéma. forme courante:
~~~php
## Nature de schéma const SCALAR_SCHEMA = [
$type, [$default, $title, ...]
Un schéma se présente sous la forme d'un tableau associatif avec des clés qui ];
dépendent de la nature du schéma. La nature du schéma est indiquée avec la clé ~~~
`""` (chaine vide), e.g forme normalisée:
~~~php
const SCHEMA = [
"" => NATURE,
];
~~~
La nature indique le type de données représenté par le schéma.
* nature scalaire: modélise une donnée scalaire
~~~php ~~~php
const SCALAR_SCHEMA = [ const SCALAR_SCHEMA = [
$type, [$default, $title, ...] $type, [$default, $title, ...]
"" => "scalar", "" => "scalar",
]; ];
~~~ ~~~
Si le type est "array" ou "?array", on peut préciser le schéma de la donnée * tableau associatif
~~~php le tableau modélisé peut avoir des clés numériques ou chaines --> seules les
const SCALAR_SCHEMA = [ clés décrites par le schéma sont validées
"?array", [$default, $title, ...]
"" => "scalar", forme courante:
"schema" => NAKED_SCHEMA,
];
~~~
* nature tableau associatif: modélise un tableau associatif (le tableau peut
avoir des clés numériques ou chaines --> seules les clés décrites par le
schéma sont validées)
~~~php ~~~php
const ASSOC_SCHEMA = [ const ASSOC_SCHEMA = [
KEY => VALUE_SCHEMA, KEY => VALUE_SCHEMA,
... ...
"" => "assoc",
]; ];
~~~ ~~~
la nature "tableau associatif" est du sucre syntaxique pour une valeur forme normalisée:
scalaire de type "?array" dont on précise le schéma
~~~php ~~~php
// la valeur ci-dessus est strictement équivalent à
const ASSOC_SCHEMA = [ const ASSOC_SCHEMA = [
"?array", "?array", [$default, $title, ...]
"" => "scalar", "" => "assoc",
"schema" => [ "schema" => [
KEY => VALUE_SCHEMA, KEY => VALUE_SCHEMA,
... ...
], ],
]; ];
~~~ ~~~
* liste (tableau d'éléments du même type)
le tableau modélisé peut avoir des clés numériques ou chaines --> on ne
modélise ni le type ni la valeur des clés
* nature liste: modélise une liste de valeurs du même type (le tableau peut forme courante:
avoir des clés numériques ou chaines --> on ne modélise ni le type ni la ~~~php
valeur des clés) const LIST_SCHEMA = [[
ITEM_SCHEMA,
]];
~~~
forme normalisée:
~~~php ~~~php
const LIST_SCHEMA = [ const LIST_SCHEMA = [
"?array", [$default, $title, ...] "?array", [$default, $title, ...]
@ -84,12 +74,9 @@ const SCALAR_SCHEMA = [
"title" => "libellé de la valeur, utilisable par exemple dans un formulaire", "title" => "libellé de la valeur, utilisable par exemple dans un formulaire",
"required" => "la valeur est-elle requise? si oui, elle doit exister", "required" => "la valeur est-elle requise? si oui, elle doit exister",
"nullable" => "si la valeur existe, peut-elle être nulle?", "nullable" => "si la valeur existe, peut-elle être nulle?",
"allow_null" => "si la valeur existe, peut-elle être nulle?", #XXX
"allow_empty" => "si la valeur existe, peut-elle être vide?", #XXX
"desc" => "description de la valeur", "desc" => "description de la valeur",
"analyzer_func" => "XXX", "analyzer_func" => "XXX",
"extractor_func" => "XXX", "extractor_func" => "XXX",
"checker_func" => "XXX une fonction qui vérifie une valeur et la classifie",
"parser_func" => "une fonction qui analyse une chaine pour produire la valeur", "parser_func" => "une fonction qui analyse une chaine pour produire la valeur",
"messages" => "messages à afficher en cas d'erreur d'analyse", "messages" => "messages à afficher en cas d'erreur d'analyse",
"formatter_func" => "une fonction qui formatte la valeur pour affichage", "formatter_func" => "une fonction qui formatte la valeur pour affichage",
@ -124,7 +111,7 @@ nature scalaire si:
`messages` indique les messages à afficher en cas d'erreur d'analyse. les clés `messages` indique les messages à afficher en cas d'erreur d'analyse. les clés
sont normalisées et correspondent à différents états de la valeur tels sont normalisées et correspondent à différents états de la valeur tels
qu'analysés par `checker_func` qu'analysés par `analyzer_func`
~~~php ~~~php
const MESSAGE_SCHEMA = [ const MESSAGE_SCHEMA = [
"missing" => "message si la valeur n'existe pas dans la source et qu'elle est requise", "missing" => "message si la valeur n'existe pas dans la source et qu'elle est requise",
@ -137,23 +124,27 @@ const MESSAGE_SCHEMA = [
## Schéma d'un tableau associatif ## Schéma d'un tableau associatif
Dans sa forme *non normalisée*, un tableau associatif est généralement modélisé Dans la forme courante, on considère que c'est un schéma de nature associative si:
de cette manière:
~~~php
const ASSOC_SCHEMA = [
KEY => VALUE_SCHEMA,
...
"" => "assoc",
];
~~~
où chaque occurrence de `KEY => VALUE_SCHEMA` définit le schéma de la valeur
dont la clé est `KEY`
Si la nature du schéma n'est pas spécifiée, on considère que c'est un schéma de
nature associative si:
* c'est un tableau uniquement associatif avec aucun élément séquentiel, e.g * c'est un tableau uniquement associatif avec aucun élément séquentiel, e.g
`["name" => "string", "age" => "int"]` `["name" => "string", "age" => "int"]`
La forme normalisée est
~~~php
const ASSOC_SCHEMA = [
"?array",
"" => "assoc",
"schema" => [
KEY => VALUE_SCHEMA,
...
],
];
~~~
le type "?array" ou "array" indique si la liste est nullable ou non. la valeur
par défaut est "?array"
chaque occurrence de `KEY => VALUE_SCHEMA` définit le schéma de la valeur dont
la clé est `KEY`
VALUE_SCHEMA peut-être n'importe quel schéma valide, qui sera analysé VALUE_SCHEMA peut-être n'importe quel schéma valide, qui sera analysé
récursivement, avec cependant l'ajout de quelques clés supplémentaires: récursivement, avec cependant l'ajout de quelques clés supplémentaires:
* description de la valeur dans le contexte du tableau * description de la valeur dans le contexte du tableau
@ -176,14 +167,11 @@ récursivement, avec cependant l'ajout de quelques clés supplémentaires:
## Schéma d'une liste (tableau séquentiel ou associatif d'éléments du même type) ## Schéma d'une liste (tableau séquentiel ou associatif d'éléments du même type)
Dans sa forme *non normalisée*, une liste est généralement modélisée de cette Dans la forme courante, on considère que c'est un schéma de nature liste si:
manière: * c'est un tableau avec un unique élément de type tableau à l'index 0, e.g
~~~php `[["string", null, "required" => true]]`
const LIST_SCHEMA = [ITEM_SCHEMA];
~~~
où ITEM_SCHEMA est le schéma des éléments de la liste
Pour information, la forme normalisée est plutôt de la forme La forme normalisée est
~~~php ~~~php
const LIST_SCHEMA = [ const LIST_SCHEMA = [
"?array", "?array",
@ -194,9 +182,4 @@ const LIST_SCHEMA = [
le type "?array" ou "array" indique si la liste est nullable ou non. la valeur le type "?array" ou "array" indique si la liste est nullable ou non. la valeur
par défaut est "?array" par défaut est "?array"
Si la nature du schéma n'est pas spécifiée, on considère que c'est un schéma de
nature liste si:
* c'est un tableau avec un unique élément de type tableau à l'index 0, e.g
`[["string", null, "required" => true]]`
-*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary -*- coding: utf-8 mode: markdown -*- vim:sw=4:sts=4:et:ai:si:sta:fenc=utf-8:noeol:binary

View File

@ -1,8 +1,6 @@
# nulib\schema # nulib\schema
* ScalarSchema::from_property() * ScalarSchema::from_property()
* AssocSchema === ScalarSchema(["array", "" => ["scalar", "subtype" => "assoc"]])
* ListSchema === ScalarSchema(["array", "" => ["scalar", "subtype" => "list"]])
* possibilité de spécifier un type via sa classe, e.g * possibilité de spécifier un type via sa classe, e.g
~~~php ~~~php
Schema::ns($schema, [ Schema::ns($schema, [