Google Chercher dans diml.org
[ english ]

Table des matières
Les grandes parties du document
Analyse sommaire de l'exemple 3
Les prédéclarations
La séquence principale
La carcasse DIML
Discussion
Les bibliothèques de templates DIML
Résumé  Dernières infos
 Une application du composant  WCT_NEWS  
>> Haut de la page

Structure type d'une page Web

Cette étape ne prétend pas vous donner un modèle absolu d'une page Web. Il existe bien trop de variantes et de cas particuliers... autant que de sites.

Par contre, il est plus facile de vous faire profiter ici de mon expérience, et de celle des développeurs DIML. Cette étape expose quelques bons réflexes d'organisation du code d'une page DIML.

Les grandes parties du document

En général, une page DIML comporte du HTML réparti dans une séquence principale ou dans des templates. Puis on y trouvera trois formes de création de variables :

  • des importations de templates externes (par exemple des templates généraux) nécessaires à la construction du fichier
  • des déclarations de variables par l'instruction <%set
  • des appels à des scripts complémentaires appelés "scripts utilisateur" ou "scripts d'alimentation"

Le plus souvent, on réserve la partie initiale du fichier à la déclaration des variables, aux imports et aux invocations de scripts d'alimentation. Le principe de tout cela est que le maximum de variables soient en place avant de commencer à construire le document. Ceci permet aussi, par exemple, de pouvoir changer complètement l'apparence du résultat par un choix initial, lorsque les données attendues pour fabriquer normalement le document ne peuvent être obtenues.

Puis viendra la séquence principale du document. Celle-ci peut être un corps HTML linéaire si le document a une structure simple, dans laquelle des templates peuvent être appelés. On utilisera plutôt une carcasse d'appels DIML si le document est plus complexe et très paramétré. Ce document ci, ainsi que tous les documents du tutorial sont du premier type.

le fichier ex3.dim (exemple 3) montre un exemple du deuxième type. Ce fichier correspond à la carcasse type des fiches d'exercices et de trucs et astuces présentes dans ce site. On y remarquera la fonction principale du DIML qui est de décrire la logique de construction de la fiche, un peu comme du XML, mais sans la complexité du XSL, et sans le formalisme d'une DTD.

Vous pouvez également consulter le code source de cette même page pour voir un fichier caractéristique du premier type.

Analyse sommaire de l'exemple 3

Le fichier de l'exemple 3 montre comment le DIML peut être utilisé pour factoriser une carcasse, c'est à dire une règle de construction sommaire d'un document. Ce document suit les préceptes énoncés ici, c'est à dire : une première section réservée aux importations (il n'y a pas d'appel de script d'alimentation et les déclarations des variables %TITRE% et %SHOW_CONTROL% ont été reléguées plus loin), puis le début d'une séquence HTML réduite à l'en-tête, et enfin une structure d'appels DIML.

Les prédéclarations

Deux lignes importent respectivement les templates de contenu de la fiche, définie par un paramètre CGI %FORM::Nam%, ainsi que les templates généraux du site diml.net.

Un peu plus loin, deux variables %TITRE% et %SHOW_CONTROL% sont définies. On notera ici l'utilisation de la commande <%eval qui permet d'interpréter le DIML contenu dans la valeur affectée à la variable %TITRE%

La séquence principale

Elle est réduite ici à la portion congrue, mais s'étend tout de même du <html> initial à la fin du document. Cependant, on ne peut réellement parler ici de séquence principale vu le peu de HTML littéral qui y est présent.

La carcasse DIML

Le document utilise un concept de "carcasse de structure", dans lequel la structure de construction est décrite, et ordonnace l'appel de templates qui sont sensés exister au moment de l'appel. La logique de construction en est la suivante :

Le document est organisé en paragraphes formatés dont la "glue" est répartie en deux templates %Paragraphe% et %FINParagraphe% définis dans le fichier temp_tut.dim.

A y regarder de plus près, voilà le code de ces deux templates :

<TEMPLATE ID="Paragraphe">
<table border=0 width=708>
   <tr>
      <td >
         <FONT face=Verdana,Helvetica size=-1>
         <dir><B> <% %TITREPARA% %></B></dir>
         </FONT>
      </td>
   </tr>
   <%if (%CONTENU% ne "")%>
      <tr>
      <td>
         <FONT face=Verdana,Helvetica size=-1>
         <dir>   <% %CONTENU% %></dir>
         </FONT>
      </td>
      </tr>
   <%endif%>
</TEMPLATE>
 
<TEMPLATE ID="FINParagraphe">
</table>
</TEMPLATE>

(La séparation en deux templates est due à l'existance d'autres types de paragraphes que nous ne détaillons pas ici).

La construction d'une instance de paragraphe suppose un appel au template %Paragraphe% non sans avoir préparé des valeurs légitimes pour les variables %TITREPARA% et %CONTENU%

La carcasse DIML précemment écrite utilise cette logique voulue par le concepteur et appelle quatre paragraphes standards et les alimente avec les contenus importés en début de fichier.

Discussion

Quel est l'avantage d'une telle construction ?

La structure ci-avant a été construite en quelques minutes et est hautement réutilisable. Il suffit de l'alimenter avec du contenu présentant les quatre templates standards demandés (%objectif%, %cours%, %exemple%, %usages%) par le biais d'un paramètre CGI de clef "Nam" (pour simplifier).

Pourquoi ne pas utiliser une base de données ?

Parce que la base de données ne s'utilise pas systématiquement et encore moins :

  • Lorsque le nombre de fiches est relativement faible
  • Lorsque les données stockées sont des corpus de texte, auquel cas il est nécessaire de manipuler des BLOBS ou des variables de grande taille.
  • Lorsque les données sont très statiques, c'est à dire qu'il y a peu de mouvement
  • Lorsque la mise en oeuvre doit rester fiable et la disponibilité grande.
  • Lorsque le temps d'accès doit être rapide, bien que le processus dynamique lui-même consomme une partie du gain obtenu par l'emploi de fichiers plutôt qu'une connexion à un SGBD.

Quel gain par rapport à XML ?

XML est très rigoureux dans son approche bien que cette rigueur puisse être assouplie par l'omission de la DTD. Le DIML n'est pas rigoureux et n'effectue pas de vérification du bien fondé des appels de variable. C'est un outil pratique et rapide de mise en structure.

Le XML reste malgré tout statique dans sa description du document. Même si le document est filtré par du XSL pour obtenir une mise en forme finale en HTML, ou pour remplir un certain contenu, le concept du document reste statique au contraire du DIML qui permet une approche aussi dynamique que du PHP ou du perl natif.

Malgré tout, sur le point de vue organisationnel, le XML est bien plus puissant et général que le DIML, et nul n'est l'idée ici de concurrencer ce dernier là où il a été jugé bon de l'utiliser.

Les bibliothèques de templates DIML

Il existe des cas dans lequels on souhaite pouvoir rassembler les templates DIML dans une même unité fichier, en général parce qu'ils sont les variantes d'une même sémantique (base de données fichiers) ou qu'ils constituent des briques complémentaires d'un mécanisme.

Le DIML permet d'utiliser le concept de bibliothèques sous la forme de fichiers DIML ne comportant que des définitions de templates. Une requête sur un tel fichier ne produit pas de contenu puisque sa séquence principale est vide. Il est en général utilisé comme cible d'un import de templates.

Un exemple communément utilisé d'une bibliothèque DIML est le fichier globals.dim utilisé en racine de site pour donner les variables globales à tous les fichiers DIML.

Résumé

Un document DIML peut contenir

  • Une page Web dynamique DIML
  • Une bibliothèque de templates DIML

Une page Web écrite en DIML est le plus souvent composée :

  • D'une première partie pour construire les données, par des importations, des définitions, ou des invocations de scripts d'alimentation
  • D'un corps principal de document qui peut être
    • une séquence de HTML paramétrée,
    • une carcasse d'appels DIML
  • D'une succession de définition de templates
précédent sommaire suivant


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