Transformations XML avec XSLT
=============================

### Présentation

La séparation du contenu et de la présentation est l'une des caractéristiques principale du XML. La structure d'un document XML est conçue pour refléter et clarifier les relations entre les différents aspects du contenu lui-même, sans l'obsurcir par la nécessité d'y intégrer des indications sur la présentation qui lui sera appliquée ensuite. Cette structure intelligente est particulièrement importante, car de plus en plus de transferts de données sont automatisés et se font entre des machines très hétérogènes reliées par un réseau.

Mais au bout du compte, la plus grande partie du contenu des documents XML devra être présentée à des lecteurs humains. Parce qu'un navigateur possède une interface familière et extrêmement flexible, c'est un moyen idéal pour afficher une version du contenu XML remise en forme spécifiquement pour être présentée. Conçu dès ses débuts pour s'appuyer sur un large éventail de technologies XML, Mozilla intègre tous les mécanismes nécessaires au traitement des documents XML originaux, et des feuilles de styles spécialisées utilisées pour définir le traitement à leur appliquer pour un affichage en HTML. En déplaçant le processus de transformation du côté client, on réduit ainsi la charge serveur.

Actuellement, Gecko (le moteur de rendu de Mozilla et Firefox) supporte deux formats de feuilles de styles XML. Pour le contrôle basique de l'apparence — fontes, couleurs, position, etc. — Gecko utilise CSS, tiré du DHTML. Toutes les spécifications CSS1 et la majorité des CSS2 sont supportées, le support du tout récent CSS3 est en développement. Pour plus d'information à propos de CSS, consultez le site Eric Meyer's CSS pages.

Nous nous intéressons ici au second type de feuilles de styles supporté par Gecko : la feuille de style XSLT. XSLT signifie *eXtensible Stylesheet Language/Transform*. XSLT permet à un concepteur de feuilles de styles de transformer un document XML de départ de deux façons significatives : manipuler et réordonner le contenu (une réorganisation complète de celui-ci est possible si on le désire), et le transférer dans un autre format (dans le cas de Mozilla, on se concentre sur sa conversion à la volée en HTML pour permettre son affichage dans le navigateur).

### Référence XSLT/XPath

#### Éléments

* xsl:apply-imports *(supporté)*
* xsl:apply-templates *(supporté)*
* xsl:attribute *(supporté)*
* xsl:attribute-set *(supporté)*
* xsl:call-template *(supporté)*
* xsl:choose *(supporté)*
* xsl:comment *(supporté)*
* xsl:copy *(supporté)*
* xsl:copy-of *(supporté)*
* xsl:decimal-format *(supporté)*
* xsl:element *(supporté)*
* xsl:fallback *(non supporté)*
* xsl:for-each *(supporté)*
* xsl:if *(supporté)*
* xsl:import *(mostly supported)*
* xsl:include *(supporté)*
* xsl:key *(supporté)*
* xsl:message *(supporté)*
* xsl:namespace-alias *(non supporté)*
* xsl:number *(partiellement supporté)*
* xsl:otherwise *(supporté)*
* xsl:output *(partiellement supporté)*
* xsl:param *(supporté)*
* xsl:preserve-space *(supporté)*
* xsl:processing-instruction
* xsl:sort *(supporté)*
* xsl:strip-space *(supporté)*
* xsl:stylesheet *(partiellement supporté)*
* xsl:template *(supporté)*
* xsl:text *(partially supported)*
* xsl:transform *(supporté)*
* xsl:value-of *(partiellement supporté)*
* xsl:variable *(supporté)*
* xsl:when *(supporté)*
* xsl:with-param *(supporté)*

#### Axes

* ancestor
* ancestor-or-self
* attribute
* child
* descendant
* descendant-or-self
* following
* following-sibling
* namespace *(non supporté)*
* parent
* preceding
* preceding-sibling
* self

#### Fonctions

* boolean() *(supporté)*
* ceiling() *(supporté)*
* concat() *(supporté)*
* contains() *(supporté)*
* count() *(supporté)*
* current() *(supporté)*
* document() *(supporté)*
* element-available() *(supporté)*
* false() *(supporté)*
* floor() *(supporté)*
* format-number() *(supporté)*
* function-available() *(supporté)*
* generate-id() *(supporté)*
* id() *(partiellement supporté)*
* key() *(supporté)*
* lang() *(supporté)*
* last() *(supporté)*
* local-name() *(supporté)*
* name() *(supporté)*
* namespace-uri() *(supporté)*
* normalize-space() *(supporté)*
* not() *(supporté)*
* number() *(supporté)*
* position() *(supporté)*
* round() *(supporté)*
* starts-with() *(supporté)*
* string() *(supporté)*
* string-length() *(supporté)*
* substring() *(supporté)*
* substring-after() *(supporté)*
* substring-before() *(supporté)*
* sum() *(supporté)*
* system-property() *(supporté)*
* translate() *(supporté)*
* true() *(supporté)*
* unparsed-entity-url() *(non supporté)*
### Autres ressources

* Livres
* En ligne
    + Le World Wide Web Consortium
    + Portails
    + Articles
    + Tutoriels/Exemples
    + Mailing Lists/Newsgroups
* Extensions