Jump to content
  • entries
    69
  • comments
    18
  • views
    6047

Une histoire X - 3e partie

Sign in to follow this  
David Julot

376 views

Lors de mes deux précédentes chroniques vous avez eu droit à un petit cours théorique sur XML et une description du fichier de description de formats d’étiquettes de FileMaker, pour illustrer la personnalisation des applications.

Cette semaine, encore un petit cours théorique, cette fois-ci concernant un principe fondamental de XML : la transformation.

La puissance de XML réside dans le fait qu’il est possible de transformer une arborescence XML a en une arborescence XML b. Ceci s’effectue par l’intermédiaire d’un « parser » et d’une feuille de style de transformation.

Il existe deux catégories de transformation :

  • La transformation, via XSL-T, pour eXtensible Stylesheet Language Transformation ;
  • Le formatage, via XSL-FO, pour eXtensible Stylesheet Language Formating Objects.

FileMaker Pro intègre le parseur Xalan, réalisé par le groupe Apache (www.apache.org).  C’est un parseur de type XSL-T. On ne décrira donc pas la transformation XLS-FO.

 

Principe d’une transformation

Imaginer qu’une transformation via une feuille de style XSL-T reviendrait à changer un sapin en fougère. Le parser transforme une arborescence en une autre et c’est la feuille de style XSL-T qui lui donne les directives.

xslt01.jpg

 

Ossature minimale d’un fichier XSL-T

Une feuille de style de transformation XSL-T est toujours contenue dans un fichier. La feuille de style est évidemment au format XML. Voici donc le fichier contenant l’ossature minimale d’une feuille de style :

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform"></xsl:stylesheet>

 

Principe de modèle

Le principe de base d’une transformation est le modèle. Pour simplifier, on peut dire qu’à une balise donnée peut correspondre un modèle de correspondance.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
    <xsl:template match="Livre">Un livre</xsl:template>
</xsl:stylesheet>

Dans cet exemple, à chaque balise Livre du document XML à transformer correspondra au texte Un livre dans le document XML final.

C’est l’utilisation de l’instruction xsl:template qui permet de créer un modèle. L’attribut match permet de spécifier à quelle balise le modèle doit s’appliquer.

 

Création d’un modèle

On peut, au sein d’une feuille de style, créer des modèles qui seront appelés à tout moment au moment de la transformation.

La création d’un modèle utilise l’instruction xsl:template. L’attribut name permet de nommer le modèle pour être appelé par l’instruction xsl:call-template.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
  <xsl:template match="Livre">
    <xsl:call-template name="Ouvrage" />
  </xsl:template>
  <xsl:template name="Ouvrage">
    <Ouvrage>
      <xsl:value-of select="Livre" />
    </Ouvrage>
  </xsl:template>
</xsl:stylesheet>

 

Récupération d’une valeur d’une balise

Si l’on souhaite transformer les balises Livre en balise Ouvrage, il suffit d’utiliser la feuille de style suivante :

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
  <xsl:template match="Livre">
    <Ouvrage>
      <xsl:value-of select="Livre" />
    </Ouvrage>
  </xsl:template>
</xsl:stylesheet>

Dans cet exemple, à chaque balise Livre du document XML à transformer correspondra une balise Ouvrage avec la valeur contenue de la balise initiale.

C’est l’instruction xsl:value-of qui permet de récupérer une valeur de la balise en cours de traitement. L’attribut select permet de spécifier à quelle balise on souhaite récupérer la valeur.

 

Instruction de boucle

Il est possible dans une feuille de style XSL-T d’utiliser une instruction de boucle, tout comme en programmation.

L’instruction de boucle est xsl:for-each, son attribut select permet de spécifier la balise à traiter.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
  <xsl:for-each select="Livre">
    <Ouvrage>
      <xsl:value-of select="Livre" />
    </Ouvrage>
  </xsl:for-each>
</xsl:stylesheet>

Dans cet exemple, à chaque fois que la balise Livre est rencontrée, alors une balise Ouvrage avec la valeur de la balise initiale est créée.

 

Instruction conditionnelle

Comme dans tout langage de programmation, il existe une instruction conditionnelle : xsl:if, dont l’attribut test contient la condition à tester.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
  <xsl:if test="Livre!=’Livre 1’">
    <Ouvrage>
      <xsl:value-of select="Livre" />
    </Ouvrage>
  </xsl:if>
</xsl:stylesheet>

Dans cet exemple, si la balise Livre n’est pas égale à la valeur Livre 1 alors la balise Ouvrage est générée.

 

Instruction de choix

L’instruction de condition xsl:if n’intègre pas de traitement au cas où la condition serait fausse, équivalent à une instruction THEN ou ALORS en programmation.

On peut faire appel à l’instruction xsl:choose qui se construit comme suit :

<xsl:choose>
  <xsl:when test="condition">
    …
    traitement si le test est vrai
    …
  </xsl:when>
  <xsl:otherwise>
    …
    traitement par défaut
    …
  </xsl:otherwise>
</xsl:choose>

Cette instruction remplace avantageusement l’instruction xsl:if. Il faut savoir que le bloc constitué par l’instruction xsl:when peut être répété autant de fois que nécessaire.

 

Opérateurs de condition

Pour les besoins des tests des instructions xsl:if et xsl:when, on a à disposition des opérations d’inégalités pour les conditions. Ils font partie du langage XPATH.

  • = : égal à
  • != : différent de
  • < : inférieur à
  • <= : inférieur ou égal à
  • > : supérieur à
  • >= : supérieur ou égal à


Sortie de texte

Dès que la transformation doit générer un texte, il faut utiliser l’instruction xsl:text.

<xsl:text>Ceci est un exemple de texte</xsl:text>

Dans cet exemple, le texte Ceci est un exemple de texte est généré dans le document XML de sortie à l’emplacement même de l’instruction.

 

Instruction de formatage de sortie

Il est important de spécifier le format de sortie que doit générer le parser. Pour cela on utilise l’instruction xsl:output. Cette instruction doit se placer immédiatement après l’instruction xsl:stylesheet.

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSLT/Transform">
  <xsl:output method="xml" encoding="UTF-8" indent="yes" />
</xsl:stylesheet>

Dans cet exemple, le parser devra générer un document de type XML, encodé avec le jeu UNICODE UTF-8, et les balises seront indentées, pour une meilleure lisibilité.

Voici la liste des attributs et de leurs valeurs possibles pour l’instruction xsl:output :

  • method
    • xml : génère un document XML
    • html : génère un document HTML
    • text : génère un document TEXTE
  • version
    • textuelle : n'a aucun effet sur le document de sortie
  • encoding
    • ISO-8859-1 : jeux de caractère Latin-1 (windows)
    • UTF-8 : codage UNICODE par défaut
    • UTF-16 : codage UNICODE sur deux octets (ex.:japonais)
  • omit-xml-declaration
    • yes : une déclaration XML sera incluse
    • no : aucune déclaration XML ne sera incluse
  • standalone
    • yes : pas de document DTD externe associé
    • no : document DTD externe associé
  • indent
    • yes : le document sera indenté
    • no : le document ne sera pas indenté

Cette liste n’est pas exhaustive.

 

C’est tout pour aujourd’hui

Après ce petit cours théorique, nous verrons la semaine prochaine notre première transformation à partir d’une base FileMaker Pro, la mise en pratique quoi !

En attendant, je vous souhaite une excellente semaine à toutes et à tous.

Sign in to follow this  


0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...