/trunk/scripts/modules/tests/Tests.php |
---|
89,18 → 89,58 |
Debug::printr('Nbre noms :'.count($this->noms)); |
} |
public function lancerTestsAuto() { |
$resultats = array(); |
// Lancement des tests unitaires |
foreach (array_keys($this->tests) as $numero) { |
$info = $this->getInfosTest($numero); |
if ($numero < 5) { |
// Tests spéciaux vérifiant la structure de la table |
$resultats[] = $this->lancerTestUnitaire($info); |
} else if ($numero >= 5 && $this->verifierResultats($resultats)) { |
// Si la structure est bonne nous lançons les autres tests |
} |
} |
} |
public function lancerTestUnitaire($info) { |
$methodeDeTest = $info['methode']; |
$erreurs = $this->$methodeDeTest; |
// Analyse des résultats |
if (isset($erreurs['special'])) { |
$info = $erreurs; |
} else { |
if (count($erreurs) > 0) { |
$info['message']['entete'] = explode(',', $info['entete']); |
$info['message']['lignes'] = $erreurs; |
} else { |
$info['resultat'] = true; |
} |
} |
$this->traiterResultatTest($info); |
if ($info['numero'] < 5) { |
return ($info['resultat'] ? '1' : '0'); |
} |
} |
public function lancerTests() { |
// Lancement des tests unitaires |
$resultats = array(); |
$resultats[] = $this->testerNombreDeChamps($this->colonnes); |
$resultats[] = $this->testerNomDesChamps($this->colonnes); |
$resultats[] = $this->testerTypeDesChamps($this->colonnes); |
$resultats[] = $this->testerNumNomClePrimaire($this->colonnes); |
$resultats[] = $this->testerNombreDeChamps(); |
$resultats[] = $this->testerNomDesChamps(); |
$resultats[] = $this->testerTypeDesChamps(); |
$resultats[] = $this->testerNumNomClePrimaire(); |
// Si la structure est bonne nous lançons les autres tests |
Debug::printr($resultats); |
if ($this->verifierResultats($resultats)) { |
$this->testerTailleDesChamps($this->colonnes, $this->analyses); |
$this->testerTailleDesChamps(); |
$this->testerNumNomSuperieurAZero(); |
187,6 → 227,7 |
$this->testerExclureTaxRefSyntaxe(); |
} |
} |
private function verifierResultats($resultats) { |
$ok = true; |
foreach ($resultats as $resultat) { |
219,27 → 260,29 |
/** |
* Test #01 |
*/ |
private function testerNombreDeChamps($colonnes) { |
private function testerNombreDeChamps() { |
$info = $this->getInfosTest(1); |
$info['special'] = true; |
$nbre_colonnes = count($colonnes); |
$nbre_colonnes = count($this->colonnes); |
$info['message'] = $nbre_colonnes; |
if ($nbre_colonnes >= 35) { |
$info['resultat'] = true; |
} |
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $info; |
} |
/** |
* Test #02 |
*/ |
private function testerNomDesChamps($colonnes) { |
private function testerNomDesChamps() { |
$info = $this->getInfosTest(2); |
$info['special'] = true; |
$champs_attendus = explode(',', $this->manuel['champs']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne; |
} |
251,24 → 294,22 |
$ok = false; |
} |
} |
$info['resultat'] = $ok; |
if (!$ok) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_manquant)); |
} |
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $info; |
} |
/** |
* Test #03 |
*/ |
private function testerTypeDesChamps($colonnes) { |
$info = $this->getInfosTest(3); |
private function testerTypeDesChamps() { |
$champs_attendus = explode(',', $this->manuel['champs_type']); |
$champs_presents = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
$champs_presents[$colonne['Field']] = $colonne['Type']; |
} |
285,36 → 326,26 |
|| ($champ_attendu_type == 'TEXT' && strstr($champs_present_type, 'text') === false) |
|| ($champ_attendu_type == 'INT' && strstr($champs_present_type, 'int') === false) |
|| ($champ_attendu_type == 'BOOL' && preg_match('/(?:bool|boolean|tinyint\(1\))/i', $champs_present_type) === false)) { |
$champs_erreur[] = $champ_attendu." vaut ".$champs_present_type; |
$champs_erreur[] = array($champ_attendu, $champ_attendu_type, $champs_present_type); |
} |
} |
} |
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $champs_erreur; |
} |
/** |
* Test #04 |
*/ |
private function testerNumNomClePrimaire($colonnes) { |
private function testerNumNomClePrimaire() { |
$info = $this->getInfosTest(4); |
$info['special'] = true; |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
if ($colonne['Field'] == 'num_nom' && $colonne['Key'] == 'PRI') { |
$info['resultat'] = true; |
} |
} |
$this->traiterResultatTest($info); |
return ($info['resultat'] ? '1' : '0'); |
return $info; |
} |
321,11 → 352,9 |
/** |
* Test #05 |
*/ |
private function testerTailleDesChamps($colonnes, $analyses) { |
$info = $this->getInfosTest(5); |
private function testerTailleDesChamps() { |
$tailles_champs_maxi = array(); |
foreach ($colonnes as $colonne) { |
foreach ($this->colonnes as $colonne) { |
if (preg_match('/^varchar\(([0-9]+)\)$/', $colonne['Type'], $match)) { |
$tailles_champs_maxi[$colonne['Field']] = $match[1]; |
} |
332,7 → 361,7 |
} |
$tailles_trouvees = array(); |
foreach ($analyses as $analyse) { |
foreach ($this->analyses as $analyse) { |
if (preg_match('/\.([^.]+)$/', $analyse['Field_name'], $match)) { |
$tailles_trouvees[$match[1]] = $analyse['Max_length']; |
} |
343,19 → 372,11 |
foreach ($champs_attendus as $champ_attendu) { |
if (isset($tailles_champs_maxi[$champ_attendu]) && isset($tailles_trouvees[$champ_attendu])) { |
if ($tailles_champs_maxi[$champ_attendu] == $tailles_trouvees[$champ_attendu]) { |
$champs_erreur[] = $champ_attendu; |
$champs_erreur[] = array($champ_attendu, $tailles_champs_maxi[$champ_attendu], $tailles_trouvees[$champ_attendu]); |
} |
} |
} |
// Analyse des résultats |
if (count($champs_erreur) > 0) { |
$info['message'] = sprintf($info['message'], implode(', ', $champs_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$this->traiterResultatTest($info); |
return $champs_erreur; |
} |
/** |
362,24 → 383,14 |
* Test #06 |
*/ |
private function testerNumNomSuperieurAZero() { |
$info = $this->getInfosTest(6); |
// Réalisation du test |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom']); |
} |
} |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur)); |
} else { |
$info['resultat'] = true; |
} |
$this->traiterResultatTest($info); |
return $noms_erreur; |
} |
/** |
392,13 → 403,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != '' && $nom['num_nom_retenu'] <= 0) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_nom_retenu']); |
} |
} |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_nom_retenu'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
416,13 → 428,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (preg_match('/^0$/', $nom['num_tax_sup'])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
// Analyse des résultats |
if (count($noms_erreur) > 1) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
440,13 → 453,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] != $nom['num_nom'] && $nom['num_tax_sup'] != '') { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
465,7 → 479,7 |
foreach ($this->noms as &$nom) { |
if ($nom['num_nom_retenu'] == $nom['num_nom']) { |
if ($nom['num_tax_sup'] != 0 && !isset($this->noms[$nom['num_tax_sup']])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['num_tax_sup']); |
} |
} |
} |
472,7 → 486,8 |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'num_tax_sup'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
495,7 → 510,7 |
if ($nom_sup['rang'] >= $nom['rang']) { |
// Prise en compte de l'exception des clades |
if (! ($nom_sup['rang'] == 70 && $nom['rang'] == 70)) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['rang'], $nom_sup['num_nom'], $nom_sup['rang']); |
} |
} |
} |
504,7 → 519,8 |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'rang', 'Taxon supérieur num_nom', 'Taxon supérieur rang'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
530,10 → 546,10 |
$classif_ok = $this->remonterClassif($nom); |
unset($this->detection_boucle_infini); |
if ($classif_ok === false) { |
$noms_erreur[] = $nom['num_nom']; |
if ($classif_ok === true) { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
} else { |
$this->noms_ok[$nom['num_nom']] = $classif_ok; |
$noms_erreur[] = array($nom['num_nom'], $classif_ok); |
} |
} |
} |
542,7 → 558,8 |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'Message du problème'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
560,9 → 577,9 |
$this->noms_ok[$nom['num_nom']] = true; |
return true; |
} else if (!isset($this->noms[$nom['num_tax_sup']]) && $nom['num_tax_sup'] != '0') { |
return false; |
return 'Hiérarchie avec le taxon #'.$nom['num_nom'].' ayant un taxon superieur #'.$nom['num_tax_sup'].' inexistant'; |
} else if (isset($this->detection_boucle_infini[$nom['num_tax_sup']])) { |
return false; |
return 'Boucle infinie pour le taxon #'.$nom['num_tax_sup']; |
} else { |
$retour = $this->remonterClassif($this->noms[$nom['num_tax_sup']]); |
if ($retour === true) { |
571,7 → 588,7 |
return $retour; |
} |
} else { |
return false; |
return 'Valeur num_tax_sup incorrecte : '.$nom['num_tax_sup']; |
} |
} |
587,13 → 604,14 |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
if (!isset($rangs[$nom['rang']])) { |
$noms_erreur[] = $nom['num_nom']; |
$noms_erreur[] = array($nom['num_nom'], $nom['rang']); |
} |
} |
// Analyse des résultats |
if (count($noms_erreur) > 0) { |
$info['message'] = sprintf($info['message'], count($noms_erreur), implode(', ', $noms_erreur)); |
$info['message']['entete'] = array('num_nom', 'Rang'); |
$info['message']['lignes'] = $noms_erreur; |
} else { |
$info['resultat'] = true; |
} |
1714,10 → 1732,7 |
* Test #51 |
*/ |
private function testerSynonymeProparteExistence() { |
$info = array('nom' => 'synonyme_proparte -> existence', |
'description' => "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux ". |
"doit correspondre à une valeur du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(51); |
// Réalisation du test |
$noms_erreur = array(); |
1752,11 → 1767,7 |
* Test #52 |
*/ |
private function testerSynonymeDouteuxSyntaxe() { |
$info = array('nom' => 'synonyme_douteux -> syntaxe', |
'description' => "Le champ synonyme_douteux contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
$info = $this->getInfosTest(52); |
// Réalisation du test |
$noms_erreur = array(); |
1784,9 → 1795,7 |
* Test #53 |
*/ |
private function testerSynonymeDouteuxNumNomRetenu() { |
$info = array('nom' => 'synonyme_douteux -> présence num_nom_retenu', |
'description' => "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide.", |
'resultat' => false); |
$info = $this->getInfosTest(53); |
// Réalisation du test |
$noms_erreur = array(); |
1811,11 → 1820,7 |
* Test #54 |
*/ |
private function testerSynonymeMalAppliqueSyntaxe() { |
$info = array('nom' => 'synonyme_mal_applique -> syntaxe', |
'description' => "Le champ synonyme_mal_applique contient soit :\n". |
" - une valeur vide,\n". |
" - le chiffre 1.", |
'resultat' => false); |
$info = $this->getInfosTest(54); |
// Réalisation du test |
$noms_erreur = array(); |
1843,11 → 1848,7 |
* Test #55 |
*/ |
private function testerSynonymeOrthographiqueSyntaxe() { |
$info = array('nom' => 'synonyme_orthographique -> syntaxe', |
'description' => "Le champ synonyme_orthographique contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(55); |
// Réalisation du test |
$noms_erreur = array(); |
1875,10 → 1876,7 |
* Test #56 |
*/ |
private function testerSynonymeOrthographiqueExistence() { |
$info = array('nom' => 'synonyme_orthographique -> existence', |
'description' => "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre ". |
"à une valeur du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(56); |
// Réalisation du test |
$noms_erreur = array(); |
1906,11 → 1904,7 |
* Test #57 |
*/ |
private function testerHybrideParent01Syntaxe() { |
$info = array('nom' => 'hybride_parent_01 -> syntaxe', |
'description' => "Le champ hybride_parent_01 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(57); |
// Réalisation du test |
$noms_erreur = array(); |
1938,10 → 1932,7 |
* Test #58 |
*/ |
private function testerHybrideParent01Existence() { |
$info = array('nom' => 'hybride_parent_01 -> existence', |
'description' => "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(58); |
// Réalisation du test |
$noms_erreur = array(); |
1969,11 → 1960,7 |
* Test #59 |
*/ |
private function testerHybrideParent02Syntaxe() { |
$info = array('nom' => 'hybride_parent_02 -> syntaxe', |
'description' => "Le champ hybride_parent_02 contient soit :\n". |
" - une valeur vide,\n". |
" - un nombre.", |
'resultat' => false); |
$info = $this->getInfosTest(59); |
// Réalisation du test |
$noms_erreur = array(); |
2001,10 → 1988,7 |
* Test #60 |
*/ |
private function testerHybrideParent02Existence() { |
$info = array('nom' => 'hybride_parent_02 -> existence', |
'description' => "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur ". |
"du champ num_nom.", |
'resultat' => false); |
$info = $this->getInfosTest(60); |
// Réalisation du test |
$noms_erreur = array(); |
2032,13 → 2016,7 |
* Test #61 |
*/ |
private function testerPresenceSyntaxe() { |
$info = array('nom' => 'presence -> syntaxe', |
'description' => "Le champ presence contient soit :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(61); |
// Réalisation du test |
$noms_erreur = array(); |
2066,13 → 2044,7 |
* Test #62 |
*/ |
private function testerStatutOrigineSyntaxe() { |
$info = array('nom' => 'statut_origine -> syntaxe', |
'description' => "Le champ statut_origine peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon.\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(62); |
// Réalisation du test |
$noms_erreur = array(); |
2100,13 → 2072,7 |
* Test #63 |
*/ |
private function testerStatutIntroductionSyntaxe() { |
$info = array('nom' => 'statut_introduction -> syntaxe', |
'description' => "Le champ statut_introduction peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(63); |
// Réalisation du test |
$noms_erreur = array(); |
2134,13 → 2100,7 |
* Test #64 |
*/ |
private function testerStatutCultureSyntaxe() { |
$info = array('nom' => 'statut_culture -> syntaxe', |
'description' => "Le champ statut_culture peut contenir :\n". |
" - le symbole tiret «-» précédant une autre information non référencée...\n". |
" - une première lettre en majuscule indiquant le code standard attribué à ce taxon,\n". |
" - éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant ". |
"un code de présence spécifique au référentiel.", |
'resultat' => false); |
$info = $this->getInfosTest(64); |
// Réalisation du test |
$noms_erreur = array(); |
2169,14 → 2129,7 |
*/ |
private function testerExclureTaxRefSyntaxe() { |
$info = $this->getInfosTest(65); |
$info = array('nom' => 'exclure_taxref -> syntaxe', |
'description' => "Le champ exclure_taxref contient soit :\n". |
" - une valeur vide.\n". |
" - une valeur null.\n". |
" - le chiffre 0.\n". |
" - le chiffre 1", |
'resultat' => false); |
// Réalisation du testCe n'est pas programmé. |
$noms_erreur = array(); |
foreach ($this->noms as &$nom) { |
2481,6 → 2434,7 |
private function getInfosTest($numero) { |
$info = $this->tests[$numero]; |
$info['methode'] = 'tester'.implode('', explode(' ', ucwords($info['abr']))); |
$info['numero'] = $numero; |
$info['resultat'] = false; |
return $info; |
/trunk/scripts/modules/tests/configurations/tests.ini |
---|
1,7 → 1,8 |
[1] |
abr = "Nombre De Champs" |
nom = "Structure -> nombre de champs : %s" |
nom = "Structure -> nombre de champs" |
description = "Le nombre de champs présent dans la table doit être supérieur ou égal à 35." |
message = "Le nombre de colonnes est de %s alors qu'il doit être supérieur ou égal à 35." |
[2] |
abr = "Nom Des Champs" |
nom = "Structure -> noms des champs" |
11,7 → 12,7 |
abr = "Type Des Champs" |
nom = "Structure -> types des champs" |
description = "Les types des champs de la table contenant le référentiel doivent être conformes à ceux définis par le manuel technique." |
message = "Champs n'ayant pas un type conforme : %s." |
entete = "Champ,Type attendu,Type présent" |
[4] |
abr = "Num Nom Cle Primaire" |
nom = "Structure -> num_nom est clé primaire" |
19,48 → 20,49 |
[5] |
abr = "Taille Des Champs" |
nom = "Structure -> champs tronqués" |
description = "Evalue le risque que des données de type texte aient pu être tronquées lors de leur insertion. Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur sur un problème éventuel." |
message = "Champs possédant des enregistrements qui atteignent la taille maximum autorisée : %s." |
description = "Évalue le risque que des données de type texte aient pu être tronquées lors de leur insertion. Un résultat de type KO ne signifie pas forcément un problème à résoudre mais attire l'attention du coordinateur sur un problème éventuel." |
entete="Champ,Taille attendu,Taille présente" |
[6] |
abr = "Num Nom Superieur A Zero" |
nom = "num_nom -> supérieur à 0" |
description = "Le champ num_nom doit contenir des nombres entiers supérieurs à 0." |
message = "%s enregistrements contiennent dans le champ num_nom une valeur inférieure ou égale à 0." |
entete="num_nom" |
[7] |
abr = "Num Nom Retenu Superieur A Zero" |
nom = "num_nom_retenu -> supérieur à 0" |
description = "Le champ num_nom_retenu doit contenir des nombres entiers supérieurs à 0 ou être vide." |
message = "%s enregistrements dont le champ num_nom_retenu est inférieur ou égal à 0 : %s." |
entete="num_nom,num_nom_retenu" |
[8] |
abr = "Num Tax Sup Egal Zero Unique" |
nom = "num_tax_sup -> égal à 0 unique" |
description = "Un seul enregistrement doit posséder la valeur 0 dans le champ num_tax_sup. Il correspond au premier taxon de la classification." |
message = "%s enregistrements ont une valeur de 0 dans le champ num_tax_sup : %s." |
entete = "num_nom,num_tax_sup" |
[9] |
abr = "Tax Sup Pour Taxon" |
nom = "Classification -> uniquement pour les taxons" |
description = "Seuls les enregistrements représentant un taxon doivent posséder une valeur dans le champ num_tax_sup.\n Si num_nom_retenu est différent de num_nom (= nom synonyme) alors num_tax_sup doit être vide." |
message = "%s enregistrements ne sont pas des taxons et possèdent une valeur dans num_tax_sup : %s." |
description = "Seuls les enregistrements représentant un taxon doivent posséder une valeur dans le champ num_tax_sup. |
Si num_nom_retenu est différent de num_nom (= nom synonyme) alors num_tax_sup doit être vide." |
entete = "num_nom,num_tax_sup" |
[10] |
abr = "Exitence Taxon Superieur" |
nom = "Classification -> existence du taxon supérieur" |
description = "Chaque enregistrement représentant un taxon doit posséder un taxon supérieur sauf la racine de la classification." |
message = "%s enregistrements dont le taxon supérieur n'existe pas : %s." |
entete = "num_nom,num_tax_sup" |
[11] |
abr = "Classification Rang" |
nom = "Classification -> taxon supérieur avec rang inférieur" |
description = "Pour chaque enregistrement représentant un taxon, le taxon supérieur doit avoir un rang inférieur au taxon courant (à l'exception des noms ayant le rang de Clade)." |
message = "%s enregistrements avec un problème : %s." |
entete = "num_nom,rang,Taxon supérieur num_nom,Taxon supérieur rang" |
[12] |
abr = "Classification" |
nom = "Classification -> racine liée à chaque noeud" |
description = "Pour chaque enregistrement, la classification doit pouvoir être remontée jusqu'à un nom unique possédant une valeur num_tax_sup de 0." |
message = "%s taxons dont la classification n'est pas bonne : %s." |
entete = "num_nom,Message du problème" |
[13] |
abr = "Rang" |
nom = "rang" |
description = "Le rang doit correspondre à un valeur numérique définit dans le manuel." |
message = "%s noms dont le rang n'est pas bon : %s." |
entete = "num_nom,Rang" |
[14] |
abr ="" |
nom = "nom_sci -> noms supra-génériques" |
76,17 → 78,24 |
[16] |
abr = "Nom Complet Infra Genre" |
nom = "nom_sci -> noms infra-génériques" |
description = "Si le rang est > à %s et < à %s, le nom_sci doit correspondre à une des formules suivantes :\n genre + ' ' + type_epithete + ' ' + epithete_infra_generique\n genre + ' ' + epithete_infra_generique + ' ' + type_epithete=agg.\n Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
description = "Si le rang est > à %s et < à %s, le nom_sci doit correspondre à une des formules suivantes : |
genre + ' ' + type_epithete + ' ' + epithete_infra_generique |
genre + ' ' + epithete_infra_generique + ' ' + type_epithete=agg. |
Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
entete = "num_nom,nom_sci,nom_sci corrigé" |
[17] |
abr = "Nom Complet Espece" |
nom = "nom_sci -> noms d'espèce" |
description = "Si le rang est = à %s, le nom_sci doit correspondre à la formule : \n genre + ' ' + epithete_sp \n Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
description = "Si le rang est = à %s, le nom_sci doit correspondre à la formule : |
genre + ' ' + epithete_sp |
Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
entete = "num_nom,nom_sci,nom_sci corrigé" |
[18] |
abr = "Nom Complet Infra Specifique" |
nom = "nom_sci -> noms infra-spécifiques" |
description = "Si le rang est > à %s, le nom_sci doit correspondre à la formule : \n genre + ' ' + epithete_sp + ' ' + type_epithete + ' ' + epithete_infra_generique\n Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
description = "Si le rang est > à %s, le nom_sci doit correspondre à la formule : |
genre + ' ' + epithete_sp + ' ' + type_epithete + ' ' + epithete_infra_generique |
Les valeurs des champs cultivar_groupe, cultivar et nom_commercial peuvent s'y ajouter." |
entete = "num_nom,nom_sci,nom_sci corrigé" |
[19] |
abr = "Nom Supra Generique Espaces" |
96,7 → 105,8 |
[20] |
abr = "Nom Supra Generique Syntaxe" |
nom = "nom_supra_generique -> syntaxe" |
description = "Le champ nom_supra_generique contient un mot composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-).\n La première lettre (avec ou sans tréma) du mot doit être en majuscule." |
description = "Le champ nom_supra_generique contient un mot composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). |
La première lettre (avec ou sans tréma) du mot doit être en majuscule." |
entete = "num_nom,nom_supra_generique erroné" |
[21] |
abr = "Nom Supra Generique Rang" |
106,12 → 116,17 |
[22] |
abr = "Genre Espaces" |
nom = "genre -> espaces en trop" |
description = "Le champ genre ne doit pas contenir d'espace avant ou après le nom.\n Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
description = "Le champ genre ne doit pas contenir d'espace avant ou après le nom. |
Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
entete = "num_nom,genre erroné" |
[23] |
abr = "Genre Syntaxe" |
nom = "genre -> syntaxe" |
description = "Le champ genre peut contenir :\n - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n Il commence par une lettre majuscule (avec ou sans tréma) et peut être précédé par \n le signe + ou la lettre x suivi d'un espace.\n - une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés\n entre eux par la lettre x entourée de caractères espaces." |
description = "Le champ genre peut contenir : |
- un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). |
Il commence par une lettre majuscule (avec ou sans tréma) et peut être précédé par le signe + ou la lettre x suivi d'un espace. |
- une formule d'hybridité composée d'une série de noms de genre (au moins 2) séparés |
entre eux par la lettre x entourée de caractères espaces." |
entete = "num_nom,genre erroné" |
[24] |
abr = "Genre Rang" |
121,7 → 136,8 |
[25] |
abr = "Epithete Infra Generique Syntaxe" |
nom = "epithete_infra_generique -> syntaxe" |
description = "Le champ epithete_infra_generique est composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-).\n La première lettre (avec ou sans tréma) doit être en majuscule." |
description = "Le champ epithete_infra_generique est composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). |
La première lettre (avec ou sans tréma) doit être en majuscule." |
entete = "num_nom,epithete_infra_generique erroné" |
[26] |
abr = "Epithete Infra Generique Rang" |
136,12 → 152,20 |
[28] |
abr = "Epithete Sp Espaces" |
nom = "epithete_sp -> espaces en trop" |
description = "Le champ epithete_sp ne doit pas contenir d'espace avant ou après le nom.\n Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
description = "Le champ epithete_sp ne doit pas contenir d'espace avant ou après le nom. |
Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
entete = "num_nom,epithete_sp erroné" |
[29] |
abr = "Epithete Sp Syntaxe" |
nom = "epithete_sp -> syntaxe" |
description = "Le champ epithete_sp peut contenir :\n - un mot unique composé de lettres minuscules [a-z] incluant les caractères [ëï-]. \n Il commence par une lettre minuscule [a-zëï].\n Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n - un mot contenant sp. suivi d'un ou plusieurs caractères numériques (1-9) \n ou d'un seul caractère majuscule (A-Z) \n - une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) \n séparés entre eux par la lettre x entourée de caractères espaces." |
description = "Le champ epithete_sp peut contenir : |
- un mot unique composé de lettres minuscules [a-z] incluant les caractères [ëï-]. |
Il commence par une lettre minuscule [a-zëï]. |
Il peut être précédé par le signe + ou la lettre x suivi d'un espace. |
- un mot contenant sp. suivi d'un ou plusieurs caractères numériques (1-9) |
ou d'un seul caractère majuscule (A-Z) |
- une formule d'hybridité composée d'une série de noms d'espèce (au moins 2) |
séparés entre eux par la lettre x entourée de caractères espaces." |
entete = "num_nom,epithete_sp erroné" |
[30] |
abr = "Epithete Sp Rang" |
161,17 → 185,25 |
[33] |
abr = "Type Epithete Hybridite" |
nom = "type_epithete -> hybridité" |
description = "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : \n - «n-» \n - «notho-»" |
description = "Le champ type_epithete ne doit pas contenir de préfixe indiquant l'hybridité comme : |
- «n-» |
- «notho-»" |
entete = "num_nom,type_epithete erroné" |
[34] |
abr = "Epithete Infra Sp Espaces" |
nom = "epithete_infra_sp -> espaces en trop" |
description = "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou après le nom.\nSi des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
description = "Le champ epithete_infra_sp ne doit pas contenir d'espace avant ou après le nom. |
Si des espaces sont compris dans la valeur du champ, il ne doit pas en avoir plusieurs consécutifs." |
entete = "num_nom,epithete_infra_sp erroné" |
[35] |
abr = "Epithete Infra Sp Syntaxe" |
nom = "epithete_infra_sp -> syntaxe" |
description = "Le champ epithete_infra_sp peut contenir :\n - un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). \n Il commence par une lettre minuscule (avec ou sans tréma).\n Il peut être précédé par le signe + ou la lettre x suivi d'un espace.\n - une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce \n (au moins 2) séparés entre eux par la lettre x entourée de caractères espaces." |
description = "Le champ epithete_infra_sp peut contenir : |
- un mot unique composé de lettres minuscules, avec ou sans tréma (¨), et de tirets (-). |
Il commence par une lettre minuscule (avec ou sans tréma). |
Il peut être précédé par le signe + ou la lettre x suivi d'un espace. |
- une formule d'hybridité composée d'une série de noms d'espèce ou d'infra espèce |
(au moins 2) séparés entre eux par la lettre x entourée de caractères espaces." |
entete = "num_nom,epithete_infra_sp erroné" |
[36] |
abr = "Epithete Infra Sp Rang" |
191,7 → 223,16 |
[39] |
abr = "Cultivar Syntaxe" |
nom = "cultivar -> syntaxe" |
description = "Le champ cultivar_groupe doit contenir :\n - un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature \n des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques \n (A-Z,a-z et 0-9) incluant signes diacritiques et marques de ponctuations.\n - un nom en alphabet latin, ce qui implique une translittération des noms d'alphabet \n cyrillique, arabe, chinois...\n - une lettre majuscule obligatoire pour le premier caractère du premier mot et pour \n les autres mots importants mais pas pour les mots mineurs.\nNe doit pas contenir :\n - cv., convar. ou de guillemets simples (')." |
description = "Le champ cultivar_groupe doit contenir : |
- un nom de cultivar conforme aux règles du Code Internationnal de Nomenclature |
des Plantes Cultivées (CINPC), c.-à-d. composer de caractères alphanumériques |
(A-Z,a-z et 0-9) incluant signes diacritiques et marques de ponctuations. |
- un nom en alphabet latin, ce qui implique une translittération des noms d'alphabet |
cyrillique, arabe, chinois... |
- une lettre majuscule obligatoire pour le premier caractère du premier mot et pour |
les autres mots importants mais pas pour les mots mineurs. |
Ne doit pas contenir : |
- cv., convar. ou de guillemets simples (')." |
entete = "num_nom,cultivar erroné" |
[40] |
abr = "Cultivar Rang" |
275,77 → 316,103 |
- une suite de nombres séparés par des virgules." |
entete = "num_nom,synonyme_proparte erroné" |
[51] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Proparte Existence" |
nom = "synonyme_proparte -> existence" |
description = "Si le champ synonyme_proparte contient un ou plusieurs nombres alors chacun d'entre eux doit correspondre à une valeur du champ num_nom." |
entete = "num_nom, synonyme_proparte introuvable" |
[52] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Douteux Syntaxe" |
nom = "synonyme_douteux -> syntaxe" |
description = "Le champ synonyme_douteux contient soit : |
- une valeur vide, |
- le chiffre 1." |
entete = "num_nom,synonyme_douteux erroné" |
[53] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Douteux Num Nom Retenu" |
nom = "synonyme_douteux -> présence num_nom_retenu" |
description = "Si le nom est un synonyme douteux, le champs num_nom_retenu doit être vide." |
entete = "num_nom,synonyme_douteux,num_nom_retenu" |
[54] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Mal Applique Syntaxe" |
nom = "synonyme_mal_applique -> syntaxe" |
description = "Le champ synonyme_mal_applique contient soit : |
- une valeur vide, |
- le chiffre 1." |
entete = "num_nom,synonyme_mal_applique erroné" |
[55] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Orthographique Syntaxe" |
nom = "synonyme_orthographique -> syntaxe" |
description = "Le champ synonyme_orthographique contient soit : |
- une valeur vide, |
- un nombre." |
entete = "num_nom,synonyme_orthographique erroné" |
[56] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Synonyme Orthographique Existence" |
nom = "synonyme_orthographique -> existence" |
description = "Si le champ synonyme_orthographique contient un nombre alors il doit correspondre à une valeur du champ num_nom." |
entete = "num_nom,synonyme_orthographique introuvable" |
[57] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Hybride Parent01 Syntaxe" |
nom = "hybride_parent_01 -> syntaxe" |
description = "Le champ hybride_parent_01 contient soit : |
- une valeur vide, |
- un nombre." |
entete = "num_nom,hybride_parent_01 erroné" |
[58] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Hybride Parent01 Existence" |
nom = "hybride_parent_01 -> existence" |
description = "Si le champ hybride_parent_01 contient un nombre alors il doit correspondre à une valeur du champ num_nom." |
entete = "num_nom,hybride_parent_01 introuvable" |
[59] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Hybride Parent02 Syntaxe" |
nom = "hybride_parent_02 -> syntaxe" |
description = "Le champ hybride_parent_02 contient soit : |
- une valeur vide, |
- un nombre." |
entete = "num_nom,hybride_parent_02 erroné" |
[60] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Hybride Parent02 Existence" |
nom = "hybride_parent_02 -> existence" |
description = "Si le champ hybride_parent_02 contient un nombre alors il doit correspondre à une valeur du champ num_nom." |
entete = "num_nom,hybride_parent_02 introuvable" |
[61] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Presence Syntaxe" |
nom = "presence -> syntaxe" |
description = "Le champ presence contient soit : |
- le symbole tiret «-» précédant une autre information non référencée... |
- une première lettre en majuscule indiquant le code standard attribué à ce taxon, |
- éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant un code de présence spécifique au référentiel." |
entete = "num_nom,presence erroné" |
[62] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Statut Origine Syntaxe" |
nom = "statut_origine -> syntaxe" |
description = "Le champ statut_origine peut contenir : |
- le symbole tiret «-» précédant une autre information non référencée... |
- une première lettre en majuscule indiquant le code standard attribué à ce taxon. |
- éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant un code de présence spécifique au référentiel." |
entete = "num_nom,statut_origine erroné" |
[63] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Statut Introduction Syntaxe" |
nom = "statut_introduction -> syntaxe" |
description = "Le champ statut_introduction peut contenir : |
- le symbole tiret «-» précédant une autre information non référencée... |
- une première lettre en majuscule indiquant le code standard attribué à ce taxon, |
- éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant un code de présence spécifique au référentiel." |
entete = "num_nom,statut_introduction erroné" |
[64] |
abr = "" |
nom = "" |
description = "" |
entete = "" |
abr = "Statut Culture Syntaxe" |
nom = "statut_culture -> syntaxe" |
description = "Le champ statut_culture peut contenir : |
- le symbole tiret «-» précédant une autre information non référencée... |
- une première lettre en majuscule indiquant le code standard attribué à ce taxon, |
- éventuellement suivie d'un tiret puis d'une deuxième lettre en majuscule indiquant un code de présence spécifique au référentiel." |
entete = "num_nom,statut_culture erroné" |
[65] |
abr = "Exclure Tax Ref Syntaxe" |
nom = "exclure_taxref -> syntaxe" |
description = "Le champ exclure_taxref contient soit :\n - une valeur vide ou NULL.\n - le chiffre 0 : si le nom n'a pas à être exclu de TaxRef.\n - le chiffre 1 : pour exclure le nom de TaxRef - le chiffre 9 : quand la décision sur l'exclusion reste à prendre (le nom sera malgré tout exclu)." |
description = "Le champ exclure_taxref contient soit : |
- une valeur vide ou NULL. |
- le chiffre 0 : si le nom n'a pas à être exclu de TaxRef. |
- le chiffre 1 : pour exclure le nom de TaxRef |
- le chiffre 9 : quand la décision sur l'exclusion reste à prendre (le nom sera malgré tout exclu)." |
entete = "num_nom,exclure_taxref erroné" |