Home - Olivier-Ultragreen/ugml GitHub Wiki
UGML pour UltraGreen Markup Language. Au départ (1999) conçu (par moi-même et par Romain Georges) comme un language à balise générique, conçu pour pouvoir être interprété par des programme dans plusiseurs languages de programmation.
Si ça intéresse quelqu'un je pourrai vous faire un historique plus complet et un point sur la philosophie qui à conduit à ce développement.
A l'heure actuelle le projet n'est plus suivi et maintenu que par moi-même en PHP. Les projets de parseur en Ruby/C ayant été abandonné faute de temps. Et se limite dans à ses applications Web.
Très rapidement UGML peut-être comparé aux short tags de Wordpress. Le parseur remplace une chaine par une autre. Parlons Web. UGML vous permet de placer un "tag UGML" dans votre page HTML, lorsque le parseur rencontre ce tag, il le remplace par la chaine de retournée par la fonction PHP à laquelle vous avez associé le TAG.
Prenons l'exemple d'un fichier UGML fourni en standard avec l'extension bckffc (pour backoffice).
[HEADER ugd=|ug-bckffc.ugd| type=|root| lang=|fr| country=|FR| nav=|ok| title=|gestion des accès| position=|00| group=|root|/] [include file=|../templates/bckffc/bckffc-start.ugml|/][bckffcStd table=|bckffc_user| globalActions=|add,import,export| itemActions=|edit,copy,delete| groupActions=|delete| limit=|10| /][include file=|../templates/bckffc/bckffc-stop.ugml|/]
On y distingue plusieurs choses, un [HEADER /], 2 tags [include /], un tag [bckffcStd /] et un peu de HTML. Commençons par le plus simple.
De façon très intuitive les [include /] permettent (dans leur définition classique, mais nous y reviendrons) d'inclure à l'endroit ou ils se trouvent le contenu du fichier défini via le paramètre file=||. Notons que, toujours dans cette utilisation classique du tag, les fichiers bckffc-start.ugml, et bckffc-stop.ugml seront interprétés par le parseur avant de remplacer les tags correspondants.
Le parseur fonctionne de façon récursive, il est donc possible même si cela n'est pas recommandé de faire des include dans des includes jusqu'à epuisement des ressources mémoire ou CPU et même de créer un boucle infinie, donc attention à ce que vous faites :).
Comme le tag [bckffcStd /] n'est pas lui de compréhension intuitive il faut d'abord le [HEADER /]
Le [HEADER /] est un tag particulier qui se trouve forcemment sur la première ligne du fichier UGML. Il défini un certain nombre de paires clé/valeurs qui pourrons être exploités plus tard. La seule paire clé qu'il est indispensable de définir pour tout fichier UGML est la clé ugd=||. Celle-ci permet au parseur de savoir comment interprêter les tags présents dans le fichier UGML. La valeur de cette clé indique au parseur quel fichier UGD contient le mappage des tags. C'est donc dans le fichier ug-bckffc.ugd qu'est défini ce que le parseur doit faire du tag [bckffcStd /] et même des tags [include /].
Allons donc voir à quoi ressemble ce fichier UGD.
Prenons l'exemple du fichier ug-bckffc.ugd vu précédemment et regardons ce qui nous intéresse plus particulièrement c'est à dire le mappage des tags [include /] et [bckffcStd /] présent dans le fichier UGML que nous étudions. Voici à quoi il ressemble.
DEFEXT=include=> parseUgml| DEFEXT=Services::makeInstance=> Services::makeInstance|public/ug-services-css.php DEFEXT=UGServicesCSSInjector=> UGServicesCSSInjector::call|public/ug-services-css.php DEFEXT=login=> bckffcActionLogin|public/ug-bckffc-mysql.php DEFEXT=checkSession=> bckffcActionCheckSession|public/ug-bckffc-mysql.php DEFEXT=rubrique=> bckffcActionACLRestrictedNav|public/ug-bckffc-mysql.php DEFEXT=bckffcStd=> bckffcInterface|public/ug-bckffc-mysql.php DEFEXT=selectRawData=> selectRawData|public/ug-pages-mysql.php DEFEXT=selectQueryToTpl=> selectQueryToTpl|public/ug-pages-mysql.php
Examinons pour commencer la première ligne. On y trouve la définition du tag [include /] et son mappage vers la fonction parseUgml. Cette fonction se trouvant dans le fichier scripts/php/core/api.php au coeur l'API UGML et chargé automatiquement par le parseur il n'est pas nécessaire de le préciser.
En revanche à la ligne 9 on constate qu'en plus du mappage du tag [bckffcStd /] vers la fonction bckffcInterface, il est fait mention du fichier public/ug-bckffc-mysql.php (en fait scripts/php/ext/public/ug-bckffc-mysql.php) contenant la dîte fonction qui sera inclus par le parseur qui en fera un require_once.
Pour modifier les définitions de tags et les mappage vous pouvez donc soit modifier directement le fichier, ou bien en créer un nouveau, et modifier le fichier la valeur du fichier ugd défini dans le [HEADER /].
NOTA BENE : le fichier UGD sert également au séquencage des traitements. Dans notre exemple LES DEUX [include /] seront interprétés AVANT le [bckffcStd /].