Sujet : Hoa_Xyl vient d'apparaître dans le tronc
Hey
,
Une bonne nouvelle, Hoa_Xyl vient d'apparaître dans le tronc de Hoa.
Qu'est-ce que ça signifie ? Bah que j'ai passé 3 semaines à me casser les dents à pondre la théorie, que j'ai passé 2 semaines à me casser celles qui restaient pour passer à la pratique avec beaucoup de difficulté. Au final, le principe de XYL est déjà fonctionnel. Il reste beaucoup à faire, c'est évident, mais le plus dur est fait, j'ai le squelette !
XYL sans injection de données : une face XSLT
XYL peut s'utiliser sans injection de données, c'est à dire sans donner provenant de PHP, on écrit notre bazar en brut, comme si on écrivait de l'HTML, du XML, du Docbook peu importe. Dans ce cas, tout fonctionne bien, on est capable de transformer XYL vers ce qu'on veut : HTML, PDF, texte etc. Pour l'instant, j'ai créé deux balises : <page> et <p>, et elles savent se transformer en HTML5. Hyper simple, pas de soucis, c'est juste pour tester le mécanisme.
XYL avec injection de données : ça devient magique …
Je vulgarise le principe de XYL : on a un gros seau de données, des tableaux de tableaux de tableaux dans tous les sens. On le manipule comme on veut, on y ajoute des données etc. XYL va traiter ça en plusieurs phases. Je dirais en fait en 2 phases.
Phase 1 : on lie toutes les données aux éléments. Lier = faire une référence ici, donc légèreté et rapidité. Pas de copie. Et modification des données propagées, donc si ajout, ajout partout. Je ne sais pas si ça vous cause mais j'ai beaucoup galéré à faire ça … Exemple :
% Data bucket
array(
'main' => array(
'foo' => 'bar'
)
)
% Test.xyl
<page value="?main">
<p value="?foo" />
</page>
% Après rendu HTML5
<!DOCTYPE html>
<html>
<body>
<p>bar</p>
</body>
</html> Ça peut paraître bidon pour l'instant, mais ça montre que l'ensemble du mécanisme est en place. <p> travaille sur un sous-ensemble de données hérité de son plus proche parent (parent, grand-parent ou n-grand-parent). Je n'explique pas toute la théorie maintenant car je serai sûrement brouillon et je ne veux pas vous affoler. Vous savez, dans ma tête c'est jamais hyper clair, il me faut du temps pour formuler les choses
.
Phase 2 : maintenant que toutes les données sont liées et qu'on a fini dans ajouter ou d'en modifier, alors on passe au rendu. On choisit son format de sortie et on passe le tout à la moulinette.
Pourquoi est-ce important de lier les données aux éléments ? Imaginer qu'un élément en fin de document veuille ajouter un lien vers un fichier Javascript dans le cas d'un document HTML ? Et bin on sélectionne notre sceau de données, on ajoute le nom du fichier là où il faut et c'est fini. Comme tout est lié avec des références, la donnée sera immédiatement ajoutée sur notre bon élément qui lit la liste des fichiers par exemple (imaginons un élément <head>). Vous me suivez ? Pas vraiment hyper clair mon histoire …
Conclusion
Une petite conclusion allé.
XYL a déjà le mécanisme en place. Le plus dur est fait : répartir les tâches, les objets, le mécanisme, les charges, les performances, bref faire un squelette.
Techniquement ce n'était pas simple, vraiment pas. Hoa_Xml a dû subir quelques modifications pour être plus facilement extensible.
XYL sans données fonctionne comme XSLT, il sait transformer un document XML (XYL en fait, mais on peut créer tous les éléments XML que l'on souhaite) vers n'importe quelle sortie.
XYL avec données est en cours de construction. Encore beauucoup de chemin, mais on a une base très solide, croyez-moi
.
Pour les curieux, regarder les sources de Framework/Library/Xyl/, vous allez les trouver ridiculement petites, mais incroyablement compliquées …