Les filtres XML sous OpenOffice (OOo)
Fichier XSL d'import
1 - Préambule
Ce fichier permet au filtre de faire la correspondance entre les balises du fichier XML et les styles à appliquer au contenu de ce dernier. Ce document au format XSL permet donc parser le fichier source afin de le transformer en un fichier OOo. Il est donc nécessaire de connaître les rudiments du langage XSL pour créer un fichier de ce type. Je vous conseille le site suivant sur ce sujet : http://www.w3schools.com/xsl/.
2 - Structure du document
Le document se présente comme un fichier XSL standard. Il suffit simplement de préciser la méthode de sortie (xml) ainsi que le type mime du fichier résultat (application/vnd.sun.xml.writer).
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="iso-8859-1" indent="yes"
media-type="application/vnd.sun.xml.writer" />
<xsl:template match="/">
<xsl:element name="office:document">
<office:meta>
<dc:title>
<xsl:value-of select="//titre"/>
</dc:title>
</office:meta>
<office:automatic-styles> </office:automatic-styles>
<office:master-styles>
<style:master-page style:name="Standard"
style:page-master-name="Nom de la page"/>
</office:master-styles>
<office:body>
<xsl:apply-templates/>
</office:body>
</xsl:element>
</xsl:template>
...
</xsl:stylesheet>
Dans cet exemple les styles automatiques ne sont pas traités. Seul le titre du document est traité pour la partie commentaire (meta). Il est possible d'en gérer d'avantage. Ils servent par exemple à définir les attributs d'un document OOo (l'auteur, le titre, etc.).
Voici une liste non exhaustive des commentaires intéressants à gérer :
- dc:date : défini la date de création du document ;
- dc:title : défini le titre du document ;
- dc:description : défini la description du document ;
- dc:subject : défini le sujet du document ;
- dc:creator : défini le créateur du document ;
- dc:keywords : défini les mots clés du document.
Pour obtenir la liste complète des noms des balises utilisées dans les documents OpenOffice, se référer à la spécification du format XML sous OOo à la page suivante, section informations générales : http://xml.openoffice.org/.
Grâce à ces quelques lignes, le document XML sera ouvert sous OpenOffice dans une nouvelle page utilisant le style de page prédéfini Standard.
Pour la suite du fichier d'import, il suffit de respecter un template. Ce template permet de créer une partie spécifique du fichier de sortie (section, paragraphe, etc.). Ce template à la forme suivante :
- Identification d'une balise du fichier XML ;
- Création d'un élément XSL ayant pour nom une partie du fichier de sortie (par ex. text:section) ;
- Création de l'attribut text:style-name de cet élément ayant pour valeur le style OOo à lui appliquer.
<xsl:template match="Balise">
<xsl:element name="Type de partie">
<xsl:attribute name="text:style-name">Nom du style</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
3 - Liste des parties d'un fichier
Voici la liste des différentes parties d'un fichier OOo qu'il est possible de créer lors de l'import (vous trouverez la liste complète dans le fichier de spécification XML d'OpenOffice) :
Nom de la balise | Description |
---|---|
text:section |
Permet de créer une section. |
text:p |
Permet de créer un paragraphe. |
text:span |
Permet de créer une portion de texte (plusieurs mots). |
text:unordered-list |
Permet de créer une liste non ordonnée. |
text:ordered-list |
Permet de créer une liste ordonnée. |
4 - Création d'une section
OpenOffice utilise des sections pour séparer plusieurs parties d'un document. J'utilise des sections lorsqu'il y a plusieurs balises d'imbriquées. Voici un exemple de template pour en créer une à chaque fois qu'une balise portera la nom de bloc dans le fichier XML. Cette section aura pour style Bloc. OpenOffice n'autorise qu'une seule section du même nom. Afin de palier à ce problème, j'ai ajouté une fonction XSL qui compte le nombre de balise du même nom. Son résultat est concaténé au nom de la section créée.
<xsl:template match="bloc">
<xsl:element name="text:section">
<xsl:attribute name="text:style-name">Bloc</xsl:attribute>
<xsl:attribute name="text:name">
<xsl:text>Bloc_</xsl:text>
<xsl:value-of select="count(preceding::bloc)"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Le style Bloc doit être présent parmi la liste des styles de paragraphe de votre document template.
5 - Création d'un paragraphe
Un document OOo est essentiellement composé de paragraphes. Pour en créer, il suffit d'ajouter un élément XSL portant le nom text:p. Dans cet exemple, le style Annee sera appliqué à tout le contenu de la balise annee. Bien entendu, cela implique que ce style existe dans le fichier template de styles. Afin d'améliorer la lisibilité finale du document, j'ajoute des informations non présentes dans le fichier source. Par exemple ici je récupère le numéro d'année de la promotion, pour plus de clarté, j'y ajoute le nom de la filière (IR).
<xsl:template match="annee">
<xsl:element name="text:p">
<xsl:attribute name="text:style-name">Annee</xsl:attribute>
<xsl:text disable-output-escaping="yes">IR </xsl:text>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Le style Annee doit être présent parmi la liste des styles de paragraphe de votre document template.
6 - Création d'une portion de texte
Une portion de texte permet de mettre en valeur un mot d'une phrase par exemple. Pour en créer, il suffit d'ajouter un élément XSL portant le nom text:span. Dans cet exemple, le style Underline est appliqué au contenu de la balise underline.
<xsl:template match="underline">
<xsl:element name="text:span">
<xsl:attribute name="text:style-name">Underline</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
Le style Underline doit être présent parmi la liste des styles de caractère de votre document template.
7 - Validation du fichier
Il est conseillé de valider des fichiers XSL grâce à un processeur XSL afin l'import d'un fichier
sous OOo. En effet en cas de problème sur le fichier, OpenOffice affiche un message d'erreur ne comportant
aucune information quant à l'origine de l'erreur :
8 - Import du fichier
Une fois les filtres configurés pour l'import, il faut ouvrir le fichier XML avec OOo.