modifs.mineures sans commentaires
This commit is contained in:
parent
932da9e00b
commit
205a922792
199
doc/schema.md
199
doc/schema.md
|
@ -6,17 +6,73 @@ formulaire web, résultat d'une requête SQL, flux CSV, etc. mais en définitive
|
|||
les données qui sont traitées par du code PHP sont du bon type et au bon
|
||||
format, ou une erreur est levée.
|
||||
|
||||
## Schéma d'une valeur simple
|
||||
les données dont on peut modéliser le schéma sont de 3 types:
|
||||
* scalaire
|
||||
* liste (tableau séquentiel)
|
||||
* tableau associatif
|
||||
|
||||
chaque type de données a une syntaxe spécifique pour la définition du schéma.
|
||||
|
||||
## Nature de schéma
|
||||
|
||||
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
|
||||
~~~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
|
||||
const SCALAR_SCHEMA = [
|
||||
"" => ["scalar"],
|
||||
...
|
||||
];
|
||||
~~~
|
||||
* nature liste: modélise une liste de valeurs du même type
|
||||
~~~php
|
||||
const LIST_SCHEMA = [
|
||||
"" => ["list",
|
||||
"title" => "libellé de la valeur",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
"desc" => description de la valeur,
|
||||
],
|
||||
ITEM_SCHEMA,
|
||||
];
|
||||
~~~
|
||||
les champs required, nullable, title et desc ne sont considérés que s'ils ne
|
||||
sont pas déjà définis dans un schéma parent.
|
||||
* nature tableau associatif: modélise un tableau associatif
|
||||
~~~php
|
||||
const ASSOC_SCHEMA = [
|
||||
"" => [assoc",
|
||||
"title" => "libellé de la valeur",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
"desc" => description de la valeur,
|
||||
],
|
||||
KEY => VALUE_SCHEMA,
|
||||
...
|
||||
];
|
||||
~~~
|
||||
les champs required, nullable, title et desc ne sont considérés que s'ils ne
|
||||
sont pas déjà définis dans un schéma parent.
|
||||
|
||||
## Schéma d'une valeur scalaire
|
||||
|
||||
Une valeur scalaire est modélisée de cette manière:
|
||||
~~~php
|
||||
const SIMPLE_SCHEMA = [
|
||||
const SCALAR_SCHEMA = [
|
||||
"type" => "types autorisés de la valeur",
|
||||
"default" => "valeur par défaut si la valeur n'existe pas",
|
||||
"title" => "libellé de la valeur, utilisable par exemple dans un formulaire",
|
||||
"desc" => "description de la valeur",
|
||||
"required" => "la valeur est-elle requise? si oui, elle doit exister",
|
||||
"nullable" => "si la valeur existe, peut-elle être nulle?",
|
||||
"desc" => "description de la valeur",
|
||||
"checker_func" => "une fonction qui vérifie une valeur et la classifie",
|
||||
"parser_func" => "une fonction qui analyse une chaine pour produire la valeur",
|
||||
"messages" => "messages à afficher en cas d'erreur d'analyse",
|
||||
|
@ -26,65 +82,126 @@ const SIMPLE_SCHEMA = [
|
|||
];
|
||||
~~~
|
||||
|
||||
Le schéma d'une valeur simple peut avoir les formes suivantes:
|
||||
- la forme normalisée contient la nature de schéma qui vaut `scalar` et toutes
|
||||
les autres clés spécifiées ci-dessus
|
||||
- la forme habituelle qui a au moins une valeur de type chaine et d'index 0 pour le type
|
||||
|
||||
par exemple, les deux schémas suivants sont équivalents:
|
||||
L'ordre des clés du schéma indique la clé associé à une valeur si elle fournie
|
||||
dans un tableau séquentiel. Par exemple, les deux schéma suivants sont équivalents:
|
||||
~~~php
|
||||
const NORMALIZED = [
|
||||
"" => ["scalar"],
|
||||
const SCALAR_SCHEMA1 = [
|
||||
"string", null, "une valeur chaine",
|
||||
];
|
||||
const SCALAR_SCHEMA2 = [
|
||||
"type" => "string",
|
||||
"default" => null,
|
||||
"title" => "valeur chaine",
|
||||
"desc" => "une description plus longue",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
...
|
||||
];
|
||||
const SIMPLE = [
|
||||
"?string", null, "valeur chaine",
|
||||
"desc" => "une valeur chaine quelconque",
|
||||
...
|
||||
"title" => "une valeur chaine",
|
||||
];
|
||||
~~~
|
||||
|
||||
## Schéma d'une liste séquentielle
|
||||
Si le schéma n'est pas dans sa forme normalisée, et que sa nature n'est pas
|
||||
spécifiée, on considère que c'est un schéma de nature scalaire si:
|
||||
* c'est une chaine, qui représente alors le type, e.g `"string"`
|
||||
* c'est un tableau avec un unique élément à l'index 0 de type chaine, qui est
|
||||
aussi le type, e.g `["string"]`
|
||||
* c'est un tableau avec un élément à l'index 0, ainsi que d'autres éléments,
|
||||
e.g `["string", null, "required" => true]`
|
||||
|
||||
Une liste séquentielle est modélisée de cette manière:
|
||||
message 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 qu'analysés
|
||||
par `checker_func`
|
||||
~~~php
|
||||
const LIST_SCHEMA = [SIMPLE_SCHEMA];
|
||||
const MESSAGE_SCHEMA = [
|
||||
"absent" => "message si la valeur n'existe pas et qu'elle est requise",
|
||||
"null" => "message si la valeur est nulle et qu'elle n'est pas nullable",
|
||||
"empty" => "message si la valeur est une chaine vide et que ce n'est pas autorisé",
|
||||
"invalid" => "message si la valeur est invalide",
|
||||
];
|
||||
~~~
|
||||
|
||||
Ce schéma a un unique élément d'index 0, qui représente le schéma de chaque
|
||||
élément de la liste
|
||||
## Schéma d'une liste (tableau séquentiel)
|
||||
|
||||
Une liste est modélisée de cette manière:
|
||||
~~~php
|
||||
const NORMALIZED = [
|
||||
"" => ["list",
|
||||
"title" => "liste de valeurs chaines",
|
||||
"desc" => "une description plus longue",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
],
|
||||
const LIST_SCHEMA = [
|
||||
ITEM_SCHEMA,
|
||||
"" => "nature du schéma: list",
|
||||
];
|
||||
~~~
|
||||
où ITEM_SCHEMA est le schéma des éléments de la liste
|
||||
|
||||
Si le schéma n'est pas dans sa forme normalisée, et que sa nature 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]]`
|
||||
|
||||
## Schéma d'un tableau associatif
|
||||
|
||||
|
||||
Un tableau associatif est modélisée de cette manière:
|
||||
~~~php
|
||||
const NORMALIZED = [
|
||||
"" => ["assoc",
|
||||
"title" => "liste de valeurs chaines",
|
||||
"desc" => "une description plus longue",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
],
|
||||
const LIST_SCHEMA = [
|
||||
KEY => VALUE_SCHEMA,
|
||||
...
|
||||
"" => "nature du schéma: assoc",
|
||||
];
|
||||
~~~
|
||||
où l'ensemble des occurrences de `KEY => VALUE_SCHEMA` définit le schéma de la
|
||||
valeur dont la clé est `KEY`
|
||||
|
||||
Si le schéma n'est pas dans sa forme normalisée, et que sa nature 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
|
||||
`["name" => "string", "age" => "int"]`
|
||||
|
||||
VALUE_SCHEMA peut-être un schéma de nature scalaire, liste ou associative.
|
||||
|
||||
S'il s'agit d'une valeur scalaire, il y a quelques clés de définitions
|
||||
supplémentaires:
|
||||
~~~php
|
||||
const VALUE_SCHEMA = [
|
||||
# recopié de SCALAR_SCHEMA
|
||||
"type" => "types autorisés de la valeur",
|
||||
"default" => "valeur par défaut si la valeur n'existe pas",
|
||||
"title" => "libellé de la valeur, utilisable par exemple dans un formulaire",
|
||||
"required" => "la valeur est-elle requise? si oui, elle doit exister",
|
||||
"nullable" => "si la valeur existe, peut-elle être nulle?",
|
||||
"desc" => "description de la valeur",
|
||||
"checker_func" => "une fonction qui vérifie une valeur et la classifie",
|
||||
"parser_func" => "une fonction qui analyse une chaine pour produire la valeur",
|
||||
"messages" => "messages à afficher en cas d'erreur d'analyse",
|
||||
"formatter_func" => "une fonction qui formatte la valeur pour affichage",
|
||||
"format" => "format à utiliser pour l'affichage",
|
||||
"" => "nature du schéma: scalar",
|
||||
# spécifique à VALUE_SCHEMA
|
||||
"key" => "clé de la valeur dans le tableau associatif",
|
||||
"header" => "nom de l'en-tête s'il faut présenter cette donnée dans un tableau",
|
||||
"composite" => "ce champ fait-il partie d'une valeur composite?",
|
||||
];
|
||||
~~~
|
||||
|
||||
Pour une liste, il y a quelques clés de définitions supplémentaires:
|
||||
~~~php
|
||||
const VALUE_SCHEMA = [
|
||||
"" => ["list",
|
||||
# recopié de LIST_SCHEMA
|
||||
"title" => "libellé de la valeur",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
"desc" => description de la valeur,
|
||||
# spécifique à VALUE_SCHEMA
|
||||
"key" => "clé de la valeur dans le tableau associatif",
|
||||
],
|
||||
];
|
||||
~~~
|
||||
|
||||
Pour une tableau associatif, il y a quelques clés de définitions supplémentaires:
|
||||
~~~php
|
||||
const VALUE_SCHEMA = [
|
||||
"" => ["assoc",
|
||||
# recopié de ASSOC_SCHEMA
|
||||
"title" => "libellé de la valeur",
|
||||
"required" => false,
|
||||
"nullable" => true,
|
||||
"desc" => description de la valeur,
|
||||
# spécifique à VALUE_SCHEMA
|
||||
"key" => "clé de la valeur dans le tableau associatif",
|
||||
],
|
||||
];
|
||||
~~~
|
||||
|
||||
|
|
Loading…
Reference in New Issue