Principe
Les modèles (templates en anglais) ont pour but de simplifier la mise en page des données en séparant les éléments de mise en forme des procédures de récupération des données. Concrètement, le concepteur écrit son fichier de mise en page en utilisant des balises spéciales indiquant que telle ou telle donnée doit être insérée à tel ou tel endroit. L’exemple suivant indique l’endroit où insérer le nom de l’auteur qui se retrouvera affiché en gras (du fait de la balise <strong>).
<p>Auteur de l'ouvrage : <strong>{propriete_auteur}</strong></p>
Les symboles d’accolades { et } servent de balises pour indiquer les endroits où insérer les données. Le choix des accolades est traditionnel dans les modèles de mise en page HTML car ce sont des caractères rarement utilisés dans les textes et qu’ils n’ont pas de signification particulière dans les langages HTML et XML (contrairement à < et >). Autrement dit, un modèle HTML affiché tel quel avec les balises d’insertion aura un rendu très proche du résultat final. Par ailleurs, les accolades sont utilisés dans le langage XSLT mais dans un seul cas très précis (l’insertion d’une valeur au sein d’un attribut), on est loin de l’utilisation intensive du crochet et de la parenthèse dans le langage XPATH et des moyens de contournement existent.
Le processus d’un modèle comprend trois acteurs :
le modèle proprement dit qui est un fichier texte que modifie le concepteur en fonction des besoins de mise en forme
l’analyseur syntaxique qui va lire le fichier texte, repérer les balises d’insertion, signaler d’éventuelles erreurs de syntaxe qui font que l’interprétation du modèle n’est pas possible, etc.
un interpréteur, à qui l’analyseur syntaxique transmet les informations tirées du modèle et qui va réaliser les instructions indiquées par le modèle.
Les interpréteurs peuvent avoir des fonctions très diverses : un contrôleur peut par exemple permettre de construire une feuille de style XSLT ou bien construire une URL en insérant l’identifiant d’une fiche. Chaque interpréteur dispose de son propre jeu d’instructions.
Pour réaliser un modèle, il faut donc à la fois respecter la syntaxe de l’analyseur, syntaxe dont la description, fait l’objet de cette fiche et le jeu d’instruction de l’interpréteur auquel on fait appel.
Syntaxe de l’analyseur
La syntaxe de l’analyseur est relativement simple, comme indiqué au chapitre précédent, elle repose sur les accolades. À la lecture, tant que l’analyseur ne rencontre pas une accolade ouvrante {, il transmet les caractères tels quels à l’interpréteur.
Si et seulement si, l’accolade ouvrante est suivie d’un des caractères suivants ! "_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ, alors l’analyseur considère qu’il va maintenant traiter une suite d’instructions à destination de l’interpréteur. Dans tous les autres cas (accolade suivie d’un saut de ligne, d’un espace, d’un caractère spécial, etc.), l’analyseur continue son chemin en transmettant les caractères tel quel à l’interpréteur. Cette contrainte forte permet de continuer à utiliser l’accolade dans des définitions d’attributs CSS ou XSLT sans risque de les voir interpréter comme des instructions.
La suite d’instructions qui suit une accolade est appelée une insertion et se termine à la première accolade fermante } rencontrée. Le texte du modèle est donc traité comme une suite de textes bruts et d’insertion déterminée par des instructions.
La rédaction d’instructions suit les règles suivantes :
http://www.basedefiches.net/fiches/{corpus}-{idcorpus}.html
Exemple avec deux insertions ; {corpus} et {idcorpus}
Construction d’une insertion
Si un concepteur est complètement libre d’écrire ce qu’il veut dans le texte de son modèle, il doit suivre quelques règles dans la rédaction d’une isnertion. Les règles ci-après sont les règles générales, le contrôleur utilisé imposant la plupart du temps des règles de rédaction complémentaires (souvent en simplifiant la règle générale).
Une insertion est une suite d’instructions, séparées par un point-virgule ;. Les blancs (espace, tabulation, passage à la ligne sont ignorés entre les instructions (la seule exception est la première instruction qui doit être collé à l’accolade ouvrante, sous peine d’être ignorée).
Ensuite, chaque instruction est composée d’une suite d’arguments séparés par des virgules ; un argument est composé d’une clé et d’une valeur ; la valeur n’est pas obligatoire et c’est le signe égal qui marque la séparation de la clé et d’une valeur.
Il est possible d’utiliser les guillemets doubles " aussi bien pour la clé ou la valeur afin de les composer avec les caractères de son choix. Sinon, sans les guillemets, seuls les caractères alphanumériques ASCII (A à Z, a ) z, 0 à 9 et !#$%'*+-./?:@_|~[]) sont autorisés pour une clé.
Pour une valeur, il n’y a aucune restriction, à ceci près que des blancs successifs (espace, tabulation, saut de ligne) sont réduits à une seule espace et que les blancs en début et en fin sont supprimés. L’utilisation des guillemets doubles " est donc indispensables pour une valeurs si elle contiennent les caractères ,;} (qui signifierait sinon la fin de la valeur) ou si on veut conserver les blancs.
Une valeur peut être de longueur nulle et il y a une différence entre une absence de valeur et une valeur de longueur nulle (autrement dit cle= et cle ne sont pas équivalents).
Afin de spécifier n’importe quel caractère à l’intérieur d’une clé et d’une valeur (même une accolade fermante, une virgule et un point virgule, un simple espace), il est possible d’encadrer cette clé et cette valeur par des guillemet double " (pour inclure des guillemets doubles à l’intérieur de la clé ou de la valeur, il faut les précéder du caractère \. Il est toujours interdit d’avoir une clé de longueur nulle. Autrement dit, "" n’est pas valide. En outre, pour utiliser les guillemets, il faut commencer par ce caractère cle" test" n’est pas valide.
cle | valide |
clé | non valide : e accentué |
"clé" | valide |
cl"é" | non valide : ne commence pas par " |
cle deschamps | non valide pour une clé, valide pour une valeur (espace entre cle et deschamps |
"" | non valide pour une clé, valide pour une valeur |
Clause
{IF}
{ELIF}
{ELSE}
{FI}