UXML


But du système

UXML est un "parser" permettant de contrôler la syntaxe de document XML. Il comprend également un "moteur" de transformation XSL.

Son but est principalement de générer des documents interactifs en format HTML dans une perspective de formation.

A cette fin des "templates" seront préparés qui reprendront les interactions proposées par UTOPIA et, ultérieurement celles de PROF'EXPERT. Dès 1999, il sert de base au projet Ermitage.

Le module de génération est également disponible sous la forme d'un programme CGI.

[ Manuel pour UXML ] [ DTD pour le projet pédagogique ]


Etat

Version alpha 1.0

Fonctionnement général: les rubriques des menus ne sont pas encore ni complètes, ni définitives.

DTD parser: les déclarations ENTITY et NOTATION n'ont pas encore été testées complètement.

XML parser : il est possible de contrôler soit la forme du document (well formed) soit la validité du document dans le cas où une DTD existe.

XLS: la DTD xls.dtd permet de voir les fonctions actuellement prises en compte:

<!ELEMENT XSL:STYLESHEET (XSL:OUTPUT*,XSL:TEMPLATE+)>
<!ELEMENT XSL:TEMPLATE (#PCDATA|XSL:APPLY-TEMPLATES|XSL:OUTPUT|XSL:VALUE-OF)*>
<!ELEMENT XSL:APPLY-TEMPLATES EMPTY>
<!ELEMENT XSL:OUTPUT EMPTY>
<!ELEMENT XSL:VALUE-OF EMPTY>
<!ATTLIST XSL:STYLESHEET 
	VERSION CDATA #IMPLIED>
<!ATTLIST XSL:TEMPLATE 
	MATCH CDATA #IMPLIED>
<!ATTLIST XSL:OUTPUT 
	METHOD CDATA #IMPLIED
	DOCTYPE-SYSTEM CDATA #IMPLIED
	DOCTYPE-PUBLIC CDATA #IMPLIED
	CDATA-SECTION-ELEMENTS CDATA #IMPLIED>
<!ATTLIST XSL:VALUE-OF 
	SELECT CDATA #REQUIRED>

VALUE-OF ne fonctionne qu'avec SELECT="."

Version alpha 1.01 à 1.05

Correction des premiers bugs, notamment de l'absence de signalisation de certaines erreurs dans la DTD et de problèmes dans la gestion des différents éditeurs.

Il a été ajouté au moteur XSL l'élément:

<!ELEMENT XSL:TEXT (#PCDATA)>
<!ATTLIST XSL:TEXT 
	DISABLE-OUTPUT-ESCAPING (yes|no) "no">

Qui permet d'afficher du texte contenant des caractères < > &, par exemple: l'élément

<XSL:TEXT DISABLE-OUTPUT-ESCAPING="yes">&lt;BR&gt;</XSL:TEXT>

permettra d'afficher <BR> (qui n'est pas un élément valide en XML)

L'attribut SELECT de l'élément XSL:VALUE-OF admet de nouveaux XSLPattern: <nom d'un élément>, @<nom d'un attribut>, de même que text(), id('<idref>'), etc.

L'élément XSL:FOR-EACH a été ajouté

La règle traitant par défaut les noeuds "texte" a été activée.

<XSL:TEMPLATE MATCH="text()">
<XSL:VALUE-OF SELECT="."/>
</XSL:TEMPLATE>

Si on ne la souhaite pas il faut la redéfinir, par exemple de la manière suivante:

<XSL:TEMPLATE MATCH="text()"> 
</XSL:TEMPLATE> 

Petits conseils pratiques:

Version 1.06

L'élément XSL:CALL-TEMPLATE a été ajouté et donc l'attribut NAME à XSL:TEMPLATE de même que la possibilité d'insérer des attributs par évaluation : <ATOM N_ATOMIC={NUMBER}/>

En plus des templates nommés ont été ajoutés des variables (XSL:VARIABLE), l'attribut MODE qui permet de faire des classes de templates est actif et la fonction XSL:CHOOSE (qui comprend XSL:WHEN et XSL:OTHERWISE)

Un élément non standard XSL:INCLUDE-TEXT a été introduit qui place le contenu d'un fichier sans parsing.

Il est également possible de faire des règles s'appliquant à des éléments en dehors du flux courant (MATCH="//ATOM").

Il n'est pas toujours évident de juger si un attribut est un XSL pattern avec une erreur de syntaxe ou du CDATA un peu particulier. La solution adoptée actuellement est de traiter ce cas sous la forme d'un "warning" (optionnel).

Commentaires:

Version 1.07

Quelques corrections de détail et ajout de la déclaration XSL:NUMBER

<!ELEMENT XSL:NUMBER EMPTY>
<!ATTLIST XSL:NUMBER VALUE CDATA #REQUIRED FORMAT #IMPLIED>

Exemple: <XSL:NUMBER VALUE="position()" FORMAT="1"/>

La fonction position retourne la position de l'élément et le format donne la valeur initiale (défaut: 0). Autres possibilités: FORMAT="a" ou "A".

Version alpha 1.08

Ajout de la déclaration XSL:IF.

Correction de petits bugs de présentation. Le moteur a été réorganisé afin de permettre une intégration plus facile des multiples écritures "de XPath".

Commentaire: Dans les recommendations "officielles" XSL:APPLY-TEMPLATES est déclaré pouvoir contenir XSL:SORT (entres autres) et utilisé comme telle mais aussi comme élément vide. XML permet-il cette "ubiquité" (la question a été posée au W3C).

Version beta 1.0 & 1.1

Réponse de Vincent Quint (W3C) au commentaire précédent:

Please, read section 3.1 of the XML Recommendation: 
http://www.w3.org/TR/REC-xml#sec-starttags 

Excerpt: 
  "If an element is empty, it must be represented either by a start-tag 
   immediately followed by an end-tag or by an empty-element tag... Empty-element 
   tags may be used for any element which has no content, whether or not it is 
   declared using the keyword EMPTY." 

This is followed by: 
  "For interoperability, 
   the empty-element tag must be used, and can only be used, for elements which 
   are declared EMPTY." 

But this later statement is a non-binding recommendation 
(see the definition of interoperability) which is provided for compatibility 
with old SGML tools. In the case of XSLT, it's very unlikely that such a tool 
be used. Hence the frequent use of this Empty-element tag in XSLT. 

Vincent.

Cette version est basée, en ce qui concerne XSLT sur une version plus proche de celle proposée par W3C. En particulier en ce qui concerne la remarque précédente. Les balises seront notées en minuscules. Le type d'attribut XPATH a été introduit (cf idées en cours No 8). Un nouvelle organisation interne a été adoptée pour ces pattern (donc les fichiers xsl sont à recompiler).

Des options rendent également possibles de vérifier du HTML et de générer du HTML. Il est également possible de réaliser des "macros" (comparable au make de UNIX). Ces macros permettront de réaliser des opérations répétitives comme par exemple de transformer tous les fichiers d'un répertoire. C'est également à l'aide de macro que le lien avec UTOPIA sera fait.

L'élément xsl:copy-of a été introduit, de même que l'attribut mode (pour xsl:template et xsl:apply-templates). Des corrections ont été apportées à l'évaluation des variables (mais tous les cas de figure possibles ne sont pas encore disponibles). Seules les variables "vides" (dont la valeur est donnée par l'attribut "select") sont utilisables.

Version beta 1.1.1

Implémentation de l'attribut "disable-output-escaping" pour l'élément xsl:value-of. Cela permet, entre autres, de mettre des attributs produisant du HTML. Par exemple: <REF VALUE="nom&lt;I&gt;titre&lt;/I&gt;"/>

Version beta 1.1.2

Poursuite de l'implémentation des macros

L'attribut strip-space (valeur yes ou no) a été ajouté à l'élément xsl:value-of. Cela permet de supprimer des sauts de ligne indésirables si une valeur doit devenir un argument de fonction !

Ajout des éléments xsl:attribut et xsl:element. Le premier permet d'ajouter des attributs à un élment, le deuxième à fabriquer un élément vide.

Version beta 1.2 (mars 2001)

Il semble y avoir plusieurs philosophies en ce qui concerne le mode de fonctionnement du moteur XSLT (qui pourraient se résumer par profondeur ou largeur d'abord). Cette version tente de coller au plus prêt de la recommandation du W3C avec une présélection des règles (sans toutefois gérer les conflits ni les priorités comme cela est prévu dans les spécification du W3C).

Quelques XSL-PATTERN supplémentaires sont pris en compte !

Le système n'acceptait pas les DTD déclarant des attributs ayant le nom de type (par exemple IDREF). Cette version corrige ce défaut pour IDREF (à titre de test).

Version beta 1.3 (janvier 2002)

Ajout de nouveaux PATH. Correction de bug liés au répertoire de travail. Les sections CDATA inclus dans la feuille XSL sont sorties comme du texte (ceci pour inclure des scripts et par le fait que les sections CDATA ne sont pas traitées dans les navigateurs).

Version 1.4 (février 2003)

Le sélecteur math admet des choses du type ELEM[@ATTR] ou ELEM[@ATTR=VAL]

Idées en cours

1) Mettre à tous les éléments un pointeur sur l'élément parent (pour l'utilisation de pattern .., par exemple). (fait de même que la numérotation (à partir de 0) des éléments fils du même type).

2) Actuellement les remplacements des entities se font après "parsage". Ce qui ajoute des niveaux d'analyse et de simplification. A voir si cela ne serait pas plus judicieux de la faire avant au niveau des chaînes de caractères. Dans ce cas attention au problème de parenthèsage (parenthèses avec les groupes, mais pas avec les attributs énumérés, ...). (fait)

3) A voir le problème des elements empty dans la sélection.

4) Actuellement tout les éléments et noms d'attributs sont "case sensitive". A voir si dans certains cas prédéfinis (XSL: ...) les autres cas pourraient être admis.

5) Le pattern MATCH=//<name of element> pose quelques problèmes (et semble contraire à l'esprit de la chose). A voir si tous les problèmes de remontées ne pourrait pas se régler au niveau du SELECT. (comme cela se fait déjà pour SELECT="../<element>").

6) Problème des attributs représentant des fonctions (par exemple: position()) : actuellement une option du menu permet de "parser" certains attributs (MATCH, SELECT, TEST). Il serait plus judicieux de commander cela à partir des types introduits dans la DTD (extension des types définis par XML, ce que fait le W3C dans sa recommendation de novembre 1999). (fait beta 1.1)

7) A noter que de nombreux projets importants existent. Un travail de diplôme mené à l'ESNIG a permis de montrer que les conventions adoptées par UXML étaient "presque" standard. A voir la possibilité d'utiliser les bibliothèques SAX.

Les exemples à disposition

(Voir le manuel)

Module wwwxml

Un module permettant la transformation XSL "à la volée" existe (pour serveurs IIS ou PWS ou Apache/Linux).

Mode d'emploi:

  1. Mettre le fichier xml compilé (<nom>.pml) dans un répertoire "exécutable" (par exemple: /scripts/xml) de même que la feuille de style (.xsl)
  2. Associer à l'aide de la base de registres l'extension .xml au programme wwwxml.exe
  3. La requête à effectuer est http://.../scripts/xml/<nom>.xml

Note: l'utilisation du fichier pml (semi-cache) en lieu et place du fichier xml évite de trop charger le serveur inutilement. Une "moulinette" permettant de faire les mises à jour xml -> pml sera disponible.


Références


Archive: uxml.zip (beta 1.1) wwwxml.zip

Version Linux

Merci de transmettre vos remarques, suggestions, questions. Vous pouvez également participer au projet, soit du point de vue technique (sources prolog disponibles) soit pour les applications pédagogiques.