[XML] Importation via un filtre XSLT

Quoi ? Vous ne connaissez pas cette suite bureautique libre et gratuite. Elle vous permet de faire ce que vous faîtes avec MS-Office sans avoir à pirater.
Bidouille
Webmestre
Messages : 388
Enregistré le : 21 mai 2007 16:08

[XML] Importation via un filtre XSLT

Messagepar Bidouille » 29 avr. 2014 15:58

Préambule
Cet article suppose que vous connaissez (au moins sommairement) XML. Il fera peut être l'objet d'un tutoriel plus étoffé suivant le temps, l'humeur et l'envie que j'aurai.
L'exemple XML utilisé n'est pas à considérer comme un modèle de structuration de données... Il est juste là pour illustrer une problématique sur l'import de données structurées dans le tableur Calc. Les informations qui suivent concernent OpenOffice 4 mais devraient être valables dans des versions antérieures.
Toute question ou suggestion devra faire l'objet d'une demande dans la section Contactez le webmestre.

Définition
XML est un acronyme anglais pour eXtensible Markup Language. C'est un standard défini par le W3C pour représenter des données dans des documents balisés.
La sémantique d'une balise est définie par l'auteur du fichier XML lui-même. Cela permet une grande souplesse dans la définition des données et des valeurs qui y sont associés. C'est dans ce sens que XML est un métalangage.
OpenOffice utilise pour son format de document ODF, des fichiers XML afin de définir leur contenu. Il est donc tout à fait logique qu'il soit pleinement apte à importer ou exporter des données.

Bidouille
Webmestre
Messages : 388
Enregistré le : 21 mai 2007 16:08

Les données XML à traiter

Messagepar Bidouille » 29 avr. 2014 17:02

Pour que l'import fonctionne, il faut bien sûr que le XML soit "bien formé".
Une balise annonce le nom de l'information. La valeur qui peut être du texte, un nombre ou une date, doit être encadré par deux balises portant le même nom.

Code : Tout sélectionner

<auteur>Bidouille</auteur>
L'information figurant entre la balise de début et la balise de fin est appelé contenu de l'élément.
Un document XML se doit de commencer par une déclaration qui précise la version de la norme utilisée.
La spécification du codage est facultative mais nécessaire si vous avez des problèmes d'accent lors de l'import.

Exemple :

Code : Tout sélectionner

<?xml version="1.0"?>
<stock>
  <article>
    <libelle>Clé USB - 4 Go</libelle>
    <prix>15</prix>
    <qte>23</qte>
    <date>2014-03-01</date>
  </article>
  <article>
    <libelle>Vidéo projecteur LCD</libelle>
    <prix>109,5</prix>
    <qte>8</qte>
    <date>2014-03-02</date>
  </article>
  <article>
    <libelle>Moniteur LED VGA</libelle>
    <prix>90,25</prix>
    <qte>12</qte>
    <date>2014-03-02</date>
  </article>
  <article>
    <libelle>Clavier filaire souple</libelle>
    <prix>8,35</prix>
    <qte>20</qte>
    <date>2014-03-03</date>
  </article>
</stock>

On peut également mettre des commentaires :

Code : Tout sélectionner

<!-- un commentaire -->


Je vous invite à utiliser un éditeur XML. Il vous permettra de vous assurer de la bonne tenue de votre fichier notamment au niveau des indentations.

Bidouille
Webmestre
Messages : 388
Enregistré le : 21 mai 2007 16:08

Le gabarit du filtre

Messagepar Bidouille » 29 avr. 2014 17:06

Un filtre XSLT doit contenir un certain nombre d'informations.
Il est lui même un fichier XML.

La déclaration :

Code : Tout sélectionner

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


A l'intérieur, nous allons avoir la définition du contenu :

Code : Tout sélectionner

<office:document-content
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
xmlns:math="http://www.w3.org/1998/Math/MathML"
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
xmlns:ooo="http://openoffice.org/2004/office"
xmlns:ooow="http://openoffice.org/2004/writer"
xmlns:oooc="http://openoffice.org/2004/calc"
xmlns:dom="http://www.w3.org/2001/xml-events"
xmlns:xforms="http://www.w3.org/2002/xforms"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
...
</office:document-content>

Assez indigeste mais nécessaire :?

Puis dans le contenu, nous aurons deux sections :

Code : Tout sélectionner

<office:automatic-styles>
...
</office:automatic-styles>

La définition des styles afin de pouvoir paramétrer par exemple, la taille des colonnes.

Code : Tout sélectionner

<office:body>
...
</office:body>

Le descriptif des colonnes qui recevront les données.

Pour résumer, nous avons un gabarit qui aura la structure suivante :

Code : Tout sélectionner

description XML
   |_ contenu
       |_  styles
       |_  entête des colonnes

Bidouille
Webmestre
Messages : 388
Enregistré le : 21 mai 2007 16:08

Description des styles

Messagepar Bidouille » 29 avr. 2014 18:40

Nous commençons par spécifier la largeur des colonnes :

Code : Tout sélectionner

<!-- col1 : 6 cm de large et col2 : 3,5 cm de large -->
<style:style style:name="col1" style:family="table-column">
   <style:table-column-properties fo:break-before="auto" style:column-width="6.0cm"/>
</style:style>
<style:style style:name="col2" style:family="table-column">
   <style:table-column-properties fo:break-before="auto" style:column-width="3.5cm"/>
</style:style>


Puis le formatage des données que l'on souhaite :

Code : Tout sélectionner

<!-- Format cellule (N36 : date JJ/MM/AAAA, N107 : Monétaire 0,00) -->
<number:date-style style:name="N36" number:automatic-order="true">
         <number:day number:style="long"/>
         <number:text>/</number:text>
         <number:month number:style="long"/>
         <number:text>/</number:text>
         <number:year number:style="long"/>
</number:date-style>
<number:number-style style:name="N107">
         <number:number number:decimal-places="2" number:min-integer-digits="1"/>
</number:number-style>


Et enfin le style de cellule :

Code : Tout sélectionner

<!-- cell1: aligné à droite, cell2: monétaire, cell3: date) -->
<style:style style:name="cell1" style:family="table-cell" style:parent-style-name="Default">
         <style:table-cell-properties style:text-align-source="fix" style:repeat-content="false"/>
         <style:paragraph-properties fo:text-align="end"/>
</style:style>
<style:style style:name="cell2" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N107"/>
<style:style style:name="cell3" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N36"/>

Bidouille
Webmestre
Messages : 388
Enregistré le : 21 mai 2007 16:08

Description des colonnes

Messagepar Bidouille » 29 avr. 2014 19:24

Nous commençons par spécifier qu'il s'agit du tableur :

Code : Tout sélectionner

<office:spreadsheet>
...
</office:spreadsheet>


A l'intérieur, nous allons décrire les 4 colonnes et les attacher à un style

Code : Tout sélectionner

<table:table-column table:style-name="col1" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="col2" table:default-cell-style-name="Default"/>
<table:table-column table:style-name="col2" table:default-cell-style-name="cell2"/>
<table:table-column table:style-name="col2" table:default-cell-style-name="cell3"/>

Notez qu'il y a pour chacune des colonnes, un style de feuille et un style de cellule.


Retourner vers « OpenOffice »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité