[XML] Importation via un filtre XSLT
-
- Webmestre
- Messages : 505
- Enregistré le : lun. mai 21, 2007 2:08 pm
[XML] Importation via un filtre XSLT
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.
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.
-
- Webmestre
- Messages : 505
- Enregistré le : lun. mai 21, 2007 2:08 pm
Les données XML à traiter
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.
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 :
On peut également mettre des commentaires :
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.
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>
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.
-
- Webmestre
- Messages : 505
- Enregistré le : lun. mai 21, 2007 2:08 pm
Le gabarit du filtre
Un filtre XSLT doit contenir un certain nombre d'informations.
Il est lui même un fichier XML.
La déclaration :
A l'intérieur, nous allons avoir la définition du contenu :
Assez indigeste mais nécessaire
Puis dans le contenu, nous aurons deux sections :
La définition des styles afin de pouvoir paramétrer par exemple, la taille des colonnes.
Le descriptif des colonnes qui recevront les données.
Pour résumer, nous avons un gabarit qui aura la structure suivante :
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
![Confused :?](./images/smilies/icon_confused.gif)
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
-
- Webmestre
- Messages : 505
- Enregistré le : lun. mai 21, 2007 2:08 pm
Description des styles
Nous commençons par spécifier la largeur des colonnes :
Puis le formatage des données que l'on souhaite :
Et enfin le style de cellule :
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"/>
-
- Webmestre
- Messages : 505
- Enregistré le : lun. mai 21, 2007 2:08 pm
Description des colonnes
Nous commençons par spécifier qu'il s'agit du tableur :
A l'intérieur, nous allons décrire les 4 colonnes et les attacher à un style
Notez qu'il y a pour chacune des colonnes, un style de feuille et un style de cellule.
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.
Qui est en ligne
Utilisateurs parcourant ce forum : claudebot [Crawler] et 0 invité