Google Chercher dans diml.org
[ english ]

Table des matières
Principes
Imbrications dangereuses
Résumé  Dernières infos
 Une application du composant  WCT_NEWS  
>> Haut de la page

Imbrications multiples

Principes

Le DIML est avant tout un mécanisme de remplacement de variables par des fragments de contenus, ces contenus pouvant à leur tour contenir des séquences d'appel DIML, instaurant ainsi une récursivité d'imbrication. Ce processus s'arrête lorsque aucun appel DIML n'est identifiable dans la variable remplacée.

En ce sens, le DIML ressemble au XML, dans lequel un document peut être construit sous une forme hiérarchique arborescente. Par exemple, considérons les deux portions de document suivantes :


ESSI_Resource : Script file "/home/groups/d/di/diml/htdocs/cgi-bin/tutorial/viewsource.pl" does not exist here at 7

ESSI_Resource : Script file "/home/groups/d/di/diml/htdocs/cgi-bin/tutorial/viewxml.pl" does not exist here at 13

La partie XML (à droite) présente une structure arborescente explicite au travers des imbrications d'éléments SGML. Dans la partie DIML, cette structure prend la forme d'une imbrication de chapitres.

Mais cette comparaison s'arrête rapidement :

  • si le document est un document final, sa structure est linéaire, le XML permet alors de "qualifier sémantiquement" les éléments.
  • s'il s'agit d'une liste de constituants d'un document (bibliothèque de chapitres) devant être recomposée dans un ordre probablement différent. Des informations supplémentaires (transformation XSL) sont alors nécessaires pour achever la construction du document final.

A l'inverse, par l'imbrication récursives des définitions, le document DIML contient simultanément la définition des éléments et sa "notice de montage". Cette méthode générique de construction par substitution permet des organisations très diverses pour un même document.

Ainsi pour le document précédent, on pourrait utiliser une forme ayant un niveau d'imbrication de moins :


ESSI_Resource : Script file "/home/groups/d/di/diml/htdocs/cgi-bin/tutorial/viewsource.pl" does not exist here at 21

La répartition des données à travers les différents niveaux d'imbrication est à la discrétion du programmeur, la mutltiplication du nombre de niveaux dans un document est cependant déconseillée, surtout pour des super-éléments.

En général, les documents DIML sont architecturés sur trois niveaux de définitions :

  1. La "notice de montage" : une succession d'appels, potentiellement conditionnelle.
  2. Les blocs-éléments : des unités de HTML déplaçables sous forme de blocs. Leur découpage est en général lié à la sémantique du contenu.
  3. Les variables : des séquences courtes de HTML dont l'usage est répétitif dans le document (adresse de base, couleurs d'éléments, valeurs de styles, etc.).

Une utilisation plus poussée du DIML conduit à une disctinction plus fine et à ajouter un quatrième niveau :

  1. La "notice de montage",
  2. Les blocs-éléments,
  3. Les métas de "glue",
  4. Les variables,

dissociant alors :

  • "variables", comprises comme des "valeurs variables" utiles pour paramétrer apparence ou construction de la page,

    <TEMPLATE ID="LIGHT_YELLOW">#FFFF00</TEMPLATE>
    

    ou de façon équivalente :

    <%set %LIGHT_YELLOW% = "#FFFF00" %>
    
  • "glues", ou séquences de code invariantes, comme la séquence standard d'ouverture d'un tableau :

    <TEMPLATE ID="TABLE_OPEN">
    <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR="<%%LIGHT_YELLOW%%>"> 
    <TR HEIGHT=16>
    <TD VALIGN=top ALIGN=left>
    </TEMPLATE>
    

Vous trouverez une discussion complémentaire dans le document Organisation d'une page Web.

Imbrications dangereuses

Comme tout mécanisme récursif, certaines écritures doivent absolument être évitées pour ne pas "planter" le serveur.
Ainsi l'écriture :

<TEMPLATE ID="A">
<%%A%%>
</TEMPLATE>

est licite, mais extrêmement dangereuse pour tout document appellant ce template. Sans contrôle, le processeur bouclerait récursivement à l'infini, jusqu'à épuiser la mémoire disponible du serveur.

Ce type de formes étant parfois nécessaire, leur interdiction n'est pas possible, il faut donc vérifier la présence d'une condition d'arrêt, ainsi pour stopper une auto-récursion après dix instances :

<TEMPLATE ID="A">
<%if (%COUNT§I% < 10) %>
<%%A%%><%%COUNT[]%%>
<%endif %>
</TEMPLATE>

NOTE : Les versions actuelles du processeur ESSI disposent d'un dispositif de limitation de profondeur de récursion qui évite un tel plantage.

Résumé

Les templates scalaires peuvent être considérés comme des éléments d'un document hiérarchique.

Les instructions DIML forment une "notice de montage" en combinant des éléments dans une séquence d'imbrication.

précédent sommaire suivant


All material is copyleft V.G. FREMAUX (EISTI France) 1999 to 2003 except explicitly mentioned