Jusqu'a maintenant les contraintes suivaient la syntaxe suivante:
(| signifie ou; * signifie 0 ou plusieurs occurences; + signifie 1 ou plusieurs occurences; [] sont utilises pour un element facultatif)Jusqu'a present, dans la syntaxe, un axe etait identifie par la valeur de son UCD. En realite, il est tout a fait possible que ce champs soit mal ou pas renseigne, rendant impossible l'application des contraintes. Par exemple, un axe dit "observable" pourrait etre identifie a coup sur par le fait qu'il s'agit d'un axe dont le champs independantAxis egal a false. Ainsi, un axe ne peut etre identifie que par un ensemble de contraintes.
Par consequent, il faut changer la syntaxe courante. Dans la syntaxe de {ensProperty} et de {singleProperty}, il faut remplacer ucd par Charac[{logicOperation}] (ou {logicOperation} est une contrainte simple du genre "ucd='pos'" ou un ensemble de contraintes concatenees par des AND ou OR).
Exemple: au lieu de: 1:pos.numBins, on aurrait: 1:Charac[ucd="pos"].numBins.
Neanmoins, cette syntaxe peut rendre la lecture et/ou l'ecriture des contraintes assez difficile: s'il faut au moins 3 contraintes pour identifier un axe, et qu'il y a plusieurs contraintes (voir toutes) a ecrire sur cette axe, leur ecriture risque de s'averer longue et repetitive (compensee par le copier/coller) tandis que la lecture risque d'etre beaucoup plus difficile. C'est pourquoi, il pourrait etre utile de definir des alias pour les axes les plus utilises. Ces alias peuvent etre definis a deux niveaux: au niveau des UTypes (pour les axes les plus courants) et au niveau du fichier de contraintes (pour les moins courants en general mais surtout pour les plus utilises dans CE fichier de contraintes).
Les alias definis au niveau de la definition des UTypes devront etre remplaces par la syntaxe Charac[{logicOperation}] juste avant que le fichier ne soit interprete par Aida.
Les alias definis dans le fichier de contraintes sont definis par la personne qui redige les contraintes de ce fichier, et ne peuvent etre utilises que dans ce fichier. C'est comme une variable locale ou un "define" (en C).
Il est possible que certaines proprietes/meta-donnees d'un fichier Characterisation ne soient pas renseignees bien qu'obligatoires ! Dans ce cas, l'utilisateur mettra la valeur 'unknown'.
Du point de vue de l'evaluation des contraintes, les contraintes qui portent sur une propriete dont la valeur est 'unknown' ne devraient pas etre evaluees (et dans ce cas, on passe a la contrainte suivante sans relever l'erreur) ou alors elles devraient stoper la validation des contraintes (toutes les contraintes suivantes ne seront pas evaluees). Pour le moment, on passe a la contrainte suivante mais une erreur de validation est affichee.
Par consequent, il faudrait que le traitement par defaut de cette valeur particuliere soit de passer a la suivante sans envoyer de message d'erreur. Neanmoins, si l'utilisateur juge cette valeur comme problematique pour la validation des contraintes suivantes, il doit avoir la possibilite de stoper la validation du fichier de contraintes. Pour cela, on peut envisager 2 manieres (non exclusives) de realiser ceci: soit un mot clef ( STOP_AT_UNKNOWN({logicOperation}) ) soit un bloc STOP_AT_UNKNOWN dont chaque contrainte serait susceptible de stoper la validation du bloc si la valeur 'unknown' est rencontree.
On pourrait egalement ajouter une valeur particuliere a la syntaxe courante: la valeur UNKNOWN. Ainsi, l'utilisateur pourrait faire une contrainte qui imposerait qu'une propriete est soit differente de 'unknown soit egale a 'unknown'.
Le deuxieme parametre de la contrainte NEAR doit etre une valeur absolue (difference maximale) et non relative aux valeurs comparees.
L'inconvenient de la syntaxe actuelle de la contrainte WARNING est qu'elle impose que la contrainte a verifiee soit un de ses parametres. Si la contrainte est longue et/ou complexe, la lecture, tout comme l'ecriture, de la contrainte WARNING peut etre difficile.
C'est pourquoi, il serait mieux de changer la syntaxe de WARNING. Au lieu de deux parametres, il n'y en aurait qu'un seul: le message a afficher si la contrainte n'est pas verifiee. Cette derniere contrainte serait la condition d'un IF. Ainsi, un WARNING ne pourrait etre utilise que juste apres la ligne IF (condition).
Exemple: Au lieu de WARNING(EXISTS("3"), "L'entree 3 n'existe pas !"), on aurait: IF (EXISTS("3")) WARNING("L'entree 3 n'existe pas !") FI
Remarque: Certains mots (n'appartenant pas a la syntaxe des contraintes) sont en italiques car:
UType | Contrainte |
---|---|
Characterisation.SpatialAxis.Resolution.resolutionRefVal proches | NEAR(:SpatialAxis.Resolution.resolutionRefVal, diffMax) |
Characterisation.SpatialAxis.Resolution.unit egaux | EQUAL(:SpatialAxis.Resolution.unit) |
UType | Contrainte |
---|---|
Characterisation.SpatialAxis.numBins egaux | EQUAL(:SpatialAxis.numBins) OR [EQUAL(:SpatialAxis.numBins2.I1) AND EQUAL(:SpatialAxis.numBins2.I2)] OR [EQUAL(:SpatialAxis.numBins3.I1) AND EQUAL(:SpatialAxis.numBins3.I2) AND EQUAL(:SpatialAxis.numBins3.I3)] |
UType | Contrainte |
---|---|
Characterisation.SpatialAxis.Coverage.Location.unit egaux | EQUAL(:SpatialAxis.Coverage.Location.unit) |
Characterisation.SpatialAxis.Coverage.Location.coordSystem egaux | EQUAL(:SpatialAxis.Coverage.Location.coordSystem) |
UType | Contrainte |
---|---|
Characterisation.FluxAxis.Coverage.Bounds.unit egaux | EQUAL(:FluxAxis.Coverage.Bounds.unit) |
Characterisation.FluxAxis.Bounds.LimitHi - Characterisation.FluxAxis.Bounds.LimitLo >= 100 | IF (:FluxAxis.Bounds.LimitHi - :FluxAxis.Bounds.LimitLo >=100) WARNING(message) FI |
UType | Contrainte |
---|---|
Characterisation.CharacterisationAxis.ucd egaux | EQUAL(:Charac[independantAxis=FALSE].ucd) |
Characterisation.CharacterisationAxis.Bounds.Extent < 100 | :Charac[independantAxis=FALSE].Bounds.Extent < 100 |
Contrainte |
---|
EXISTS(maskId (cf .desc)) |
UType | Contrainte |
---|---|
Characterisation.CharacterisationAxis.ucd = meta.code.class | maskId:Charac[independantAxis=FALSE].ucd = meta.code.class |
Characterisation.CharacterisationAxis.Bounds.Extent = 2 | maskId:Charac[independantAxis=FALSE].Bounds.Extent = 2 |
UType | Contrainte |
---|---|
Characterisation.SpatialAxis.numBins egaux | (cf 2 ?) |
UType | Contrainte |
---|---|
Characterisation.CharacterisationAxis.ucd =meta.code.class | outputId?:Charac[contrainte].ucd = meta.code.class |
Characterisation.CharacterisationAxis.unit =unitless | outputId?:Charac[contrainte].unit = unitless? |
Characterisation.CharacterisationAxis.numBins egaux aux parametres d'entree | ? |