Surveiller ce forum | Commencer une nouvelle discussion Commencer une nouvelle discussion
RE: alternatives génération flux XML [ Répondre ]
Par : Grégory Picavet on 2008-03-05 11:07
[forum:53203]
Effectivement c'est une alternative valable sur un projet JEE. Cela dit, si on développe avec lise PHP, on peut simplement générer le xml via un script PHP et non XSLT.

Dans le monde JEE, je doute que XSLT soit mieux connu que JSP ou Freemarker (qui sont les technos utilisées par Struts 1&2, webwork, ...). Quant à la documentation : JSP possède des spécifications normées, une librairie standard de tags de présentation (JSTL) + des librairies spécifiques (ex : Struts-UI)
. De même la documentation de Freemarker est très complète (voir le site) et dispose de fonctionnalités de langage + évoluées que JSP (macro notamment).

Par contre XSL-FO est sans doute plus approprié pour générer du PDF que des JSP.
Mais là encore ce n'est pas l'ultime solution pour le reporting (BIRT ou itext peuvent être plus productifs)

Certes XSLT est une solution indépendante de la plateforme, mais cela se paye par rapport aux autres solutions de template :
- productivité (mieux intégrés aux IDE, apprentissage + rapide, on voit + clairement le flux généré car syntaxe moins lourde)
- performance
- ouverture : XSLT nous restreint à la génération de flux XML alors qu'AJAX comprend également JSON


*remarque sur les performances : j'ai réalisé une série de tests dont les résultats étaient assez prévisibles :

Freemarker est en moyenne 2 à 3 fois plus rapide que XSLT (selon la taille du flux), en consommant 4 fois moins de mémoire.

RE: alternatives génération flux XML [ Répondre ]
Par : Thierry RIGAL on 2008-03-05 10:21
[forum:53200]
Les deux alternatives citées (FreeMarker et JSP) font appel à une JVM alors que ce n'est pas nécessairement le cas de XSLT qui présente en outre l'avantage d'être mieux connu et d'avoir une documentation plus abondante. D'autre part la mise en page avec XSL-FO par exemple est assez précise.

alternatives génération flux XML [ Répondre ]
Par : Grégory Picavet on 2008-02-04 15:56
[forum:53144]
L'utilisation de XSLT pour la génération de flux xml manque parfois de productivité.
Les causes : peu de vérifications faites par l'ide, debuggage difficile, langage fonctionnel et trop verbeux,...)

Aussi il serait intéressant d'étudier qq solutions alternatives, rendues possibles avec l'utilisation de framework comme Struts 2 ou Spring MVC

Parmis les plus courantes :
- jsp
- velocity http://velocity.apache.org/
- freemarker http://freemarker.org

Les principaux avantages communs de ces technos par rapport à XSLT :
- plus lisibles !
- langage impératif plutôt que fonctionnel, donc déroute moins les développeurs (au risque d'énerver les inconditionnels du Camel et du lisp!)
- mieux intégrées à Eclipse (coloration syntaxique, validation des propriétés des beans), donc meilleure productivité.
- bénéficient des taglib (tags de logique comme les iterateurs, tags de présentation comme les messages & le formatage suivant la localisation, ...)
- on peut générer autre-chose que du XML (json par ex)
- plus performantes en terme de mémoire & cpu (pas de sérialisation XML ni transfo XSLT)

- Freemarker est visiblement une alternative XSLT voulu par ses concepteur : http://freemarker.org/fmVsXSLT.html, notament via la capacité à accéder à un arbre DOM
- Freemarker génère des rapports d'erreurs assez précis / velocity ou jsp, ce qui facilite le débuggage

Inconvénients communs par rapport à XSLT :
- ne garantie pas la génération de XML bien formé (oubli d'une balise fermante possible)
- pour la génération des flux pdf, doc, xsl, XSLT est peut être mieux adapté (XSL-FO notamment), bien que Freemarker a généré un xmlDocBook avec succès

Inconvénient des JSP :
- on est libre d'écrire du code java avec le risque de faire autre chose que du rendu de flux XML.

** Exemple simple de génération de flux


** XSLT :

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="/result">
<ARTICLES>
<xsl:apply-templates select="list/item" />
</ARTICLES>
</xsl:template>
<xsl:template match="item">
<ARTICLE>
<ID>
<xsl:value-of select="id" />
</ID>
<LABEL>
<xsl:value-of select="label" />
</LABEL>
<PRICE>
<xsl:value-of select="price" />
</PRICE>
<DATE>
<xsl:value-of select="dateString" />
</DATE>
</ARTICLE>
</xsl:template>
</xsl:stylesheet>

NB : Il est nécessaire ici de préformater les propriétés de type date (ici dateString) Ou alors il faut écrire un template XSLT pour le formatage (assez lourd et peu maintenable)


** Exemple avec JSP :

<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page contentType="text/xml; charset=ISO-8859-1" %>
<ARTICLES>
<s:iterator value="list">
<ARTICLE>
<ID>
<s:property value="id" />
</ID>
<LABEL>
<s:property value="label" />
</LABEL>
<PRICE>
<s:property value="price" />
</PRICE>
<DATE>
<s:date name="date" format="dd/MM/yyyy"/>
</DATE>
</ARTICLE>
</s:iterator>
</ARTICLES>

** Exemple avec Freemarker :

<ARTICLES>
<#list list as a>
<ARTICLE>
<ID>
${a.id}
</ID>
<LABEL>
${a.label}
</LABEL>
<PRICE>
${a.price}
</PRICE>
<DATE>
${a.date?string("dd/MM/yyyy")}
</DATE>
</ARTICLE>
</#list>
</ARTICLES>

NB : le choix du content-type (text/xml) est spécifié lors du choix du rendu

FEDER Powered By FusionForge Collaborative Development Environment Charte d'utilisation / Nous contacter / Mentions légales Haut de page