mars
2007
La semaine dernière est sortie 8 nouvelles spécifications du W3C afin de définir XPath 2.0, XSLT 2.0 et XQuery 1.0. J’ai enfin pris le temps ce soir de voir un peu ces specs (enfin j’ai mis de côté dans ce billet XQuery et considère que vous connaissez XSLT1.0 et XPath1.0).
XPath2.0 et XSLT2.0 remplacent des normes (XPath1.0 et XSLT1.0) qui datent de 1999, autant dire qu’il y a pas mal de modifications qui ont été apportées! Voilà donc certaines d’entre elles considérées comme majeures.
- Tellement de changements que XSLT 2.0 utilise uniquement XPath 2.0 (pas possible de faire du XSLT 2 .0 avec du XPath 1.0 ou faire du XPath 2.0 dans du XSLT1.0)
- Typage fort en XPath (et donc dans les fonctions XSLT, des variables et des paramètres). Possibilité de déclarer les types au sein de la feuille XSLT ou bien via un schéma externe (xsl:import-schema)
- Les fonctions ne retournent plus le nœud courrant et ses enfants mais l’item « contextuelle », sa position et sa taille (après à nous d’aller chercher les item fils… d’où une empreinte mémoire bien plus faible si on n’a pas besoin d’extraire les items fils)
- Gestion d’erreur bien plus précis. Il y a des erreurs dites statiques (soulevées avant la transformation, une sorte de compilation de la XSLT qui n’arrivera donc normalement pas souvent si la XSLT n’est pas générée dynamiquement) et des erreurs dynamiques (erreurs soulevées pdt la transformation XSLT)
- La possibilité de faire un group by via xsl:for-each-group. Via les fonctions classiques il est possible d’opérer n’importe quel opérateur d’un group by (somme, moyenne, min, premier élément…)
- On peut créer une fonction en XSLT 2.0 que l’on pourra reutiliser à loisir.
<xsl:function name="str:maFonction" as="xs:num">
<!-- La transfo -->
</xsl:function>Ensuite on peut l’utiliser
<xsl:value-of select=" str:maFonction('Mon Parametre')"/> - On peut générer au sein d’une XSLT plusieurs sorties (plusieurs documents qui peuvent être de format et de contenu différent) via xsl:result-document
- Rechercher et éventuellement remplacer des chaînes dans un fragment via une expression régulière
<xsl:analyze-string select="résultat convertit en string" regex="une expression régulière">
<xsl:matching-substring>
<!- La regexp retourne des valeurs -->
</xsl:matching-substring>
<xsl:non-matching-substring>
<!- La regexp ne retourne rien -->
<xsl:non-matching-substring>
</xsl:analyze-string> - Modifier la sérialisation de certains caractères
L’exemple de la spec montre comment générer la ligne de jsp<jsp:setProperty name="user" property="id" value='<%= "id" + idValue %>'/>On va utiliser les jokers «, » et § pour pouvoir générer respectivement <%, " et %>
<xsl:character-map name="jsp">
<xsl:output-character character="«" string="<%"/>
<xsl:output-character character="»" string="%>"/>
<xsl:output-character character="§" string='"'/>
</xsl:character-map>
<jsp:setProperty name="user" property="id" value='«= §id§ + idValue »'/> - Beaucoup de nouvelles fonctions disponibles dans une spec séparée (car utilisable en XPath 2.0 mais également via XQuery 2.0) comme le formatage de date
Maintenant, il va falloir attendre que les parseurs se mettent à jour
Pour allez plus loin quelques pointeurs :
L’annonce de la sortie de ces spécifications traduite en français
Les huit recommandations publiées
- Langage XML Path (XPath 2.0)
- Transformations XSL (XSLT) Version 2.0
- XQuery 1.0 : un langage de requête XML
- Syntaxe XML pour XQuery 1.0 (XQueryX)
- Modèle de données (XDM) pour XQuery 1.0 et XPath 2.0
- Fonctions et opérateurs pour XQuery 1.0 et XPath 2.0
- Sémantique formelle pour XQuery 1.0 et XPath 2.0
- Sérialisation de XSLT 2.0 et XQuery 1.0
Commentaires récents
- Navigation multidimentionnelle avec JPivot/Mondrian dans
- Alimenter un cube Palo avec Talend Open Studio dans
- Participez aux Talend Awards et gagnez un iPodTouch dans
- Conférence gratuite SpagiBI 2.0 à Paris le mardi 27 janvier 2009 dans
- Conférence gratuite SpagiBI 2.0 à Paris le mardi 27 janvier 2009 dans
Archives
- décembre 2009
- août 2009
- juillet 2009
- juin 2009
- avril 2009
- mars 2009
- février 2009
- janvier 2009
- décembre 2008
- octobre 2008
- septembre 2008
- juin 2008
- mai 2008
- avril 2008
- mars 2008
- février 2008
- janvier 2008
- décembre 2007
- novembre 2007
- octobre 2007
- septembre 2007
- juin 2007
- mai 2007
- avril 2007
- mars 2007
- février 2007