Objectifs :

L'objectif que je me suis fixé dans cet exercice était de créé une XML pouvant contenir toute les définitions d'un travail de groupe, ceci incluant les commentaires de chaque section, l'historique des changements et les auteurs de chaque nouvelle déclaration.

# Objectifs DTD: Elle sert à quoi ?

L'utilité de la DTD se démontre par la déclaration des balises et de leurs propriétés. Afin de valider notre document XML.

Dans cet exercice, j'avais l'intention de déclarer un arbre XML dans lequel je pourrais insérer toutes les balises déclarées conformes pour le XHTML 1.1 .

# Objectifs XSLT: Comment avez-vous pensé la mise en page ?

L'idée soutenue ici était de pouvoir offrir différents modes de visionnement selon les choix de l'utilisateur (2 modèles ont été retenues : mode plan et en tableau)


La production :

J'ai d'abord commencé par la définition de mon arbre XML, partant d'une logique de travail de groupe et des prérequis que cela suppose. Quels étaient les définitions nécessaires à chaque élément, etc. J'ai donc construit cet arbre en prenant soin de ne pas avoir à re-déclarer des balises redondantes à plusieurs éléments (dates, auteur, etc.).

Pour la 2ème XML, je l'ai créé à partir d'un PHP, il va tout simplement redéclarer la XSLT associée et recopier l'intégralité du contenu de la XML principale.

Vient ensuite la définition de la DTD. D'un look très classique avec ses éléments déclarés et les composantes nécessaires déclarées, je lui ai réservé une entité qui devait pouvoir contenir n'importe quelle balise XHTML (que je n'allais pas m'amuser à réécrire). Pour ce faire, j'ai usé d'une méthode toute simple, j'ai lancé un fetch de la DTD officielle du XHTML 1.1 et l'ai activé au sein de ma propre DTD.

J'ai ensuite permis à ma balise "content" de contenir n'importe quel type de balise (déclaré dans ma DTD ou celle du XHTML) ou PCDATA grâce à la règle de combinaison "ANY".

<!ENTITY % xhtml PUBLIC "-//W3C//DTD XHTML 1.1//EN"
	"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" >
%xhtml;

<!ELEMENT content ANY>

Je l'avoue, la règle de combinaison ANY est un raccourci qui m'a permis de bâcler proprement ;-)

Est ensuite venu le moment d'écrire les XSLT.... Quelle galère!! Le plus difficile était de me convaincre de ne pas utiliser le PHP:SimpleXML pour parser le XML et de tricher en simulant la création d'un XSLT :P

Je me suis donc plié à l'exercice et les XSLT sont somme toute ressemblante à ce que nous avons fait en classe. La seule différence notable en est l'emploi de la déclaration

<xsl:copy-of select="content" />

afin que les balises qui pourraient être incluse dans cet élément n'aient pas à être traitées individuellement et quelles ressortent tel quel dans le document final.

Pour finir, j'ai fait une CSS des plus simples pour aller avec le tout.


Difficultés, auto-évaluation, remarques :

Très intéressant comme exercice, mais je ne perçois pas l'avantage d'utiliser XSLT pour traiter du (X)HTML alors qu'il existe des outils PHP tellement plus simple et dynamique (et qui ne nécessite pas de réapprendre un nouveau langage). Je perçois par contre son utilité lors du traitement de fichier SVG (encore que.. PHP pourrait aussi le faire :P ).

Donc, voilà ma principale difficulté, une appréhension certaine au language XSLT : Je n'en perçois pas l'utilité.

Sinon, somme toute, je suis bien content, j'ai bien progressé, être capable de bidouiller de la DTD, ça peut s'avérer vachement pratique !

Le mot de la fin... Je ne suis pas allé très loin dans ce projet, l'interface est vraiment sommaire, mais le concept me paraît vraiment intéressant, ceci dit, c'est un projet qui prendrait de 1 à 4 mois minimum de programmation en solo pour en faire un truc relativement potable et réutilisable. Pour aller plus loin, j'irais le mettre en relation avec les outils Google Documents grâce qux API qu'ils fournissent. De cette façon, l'idée serait de lui combiner un outil de révision et de visualisation... A réfléchir...


Ressources utilisées, bibliographie :

Ouf! par où commencer...

Bon, les transparents de cours m'ont été très utiles, je n'ai trouvé leur équivalent pédagogique nul part ailleurs sur le web.