Retour à la page d'accueilPlan du siteen françaisin english

MaXOpenInfo

OpenOffice.org

Filtres XSLT
Fusion XML
Export XML
Formulaire XML
Syntaxe XPath
Traitement par lots

Applications

Téléchargement

Contact
Formulaire contact
Questions/réponses

Liens

 
Fusion XML 
 
Fonctionnalités

Ce filtre permet d'effectuer une fusion de données issues d'un document XML personnalisé dans un document OpenOffice.org (actuellement Writer) (Calc, Draw et Impress seront supportés ultérieurement).
 
Le document XML contenant les données à fusionner peut être généré par une application externe (PGI, GPAO, CAO, service web, extraction d'une base de données SQL, ...) ou éventuellement par un "Export XML personnalisé" à partir d'un document OOo.

Le document texte OpenOffice.org utilisé comme modèle de fusion, doit être paramètré pour recevoir les données à fusionner. Les paramètres de fusion sont balisés par les caractères { et }.

Sous Writer, chaque élément XML à fusionner doit être paramètré sous la forme d'une section texte :
 
  • Pour créer une nouvelle section, positionnez le curseur à l'endroit souhaité dans le document, puis : 
    Menu / Insertion / Section 
     
  • Le nom de la section doit être un chemin d'accès aux données source.
    ex: {//client}
      
  • Si l'on souhaite conserver cet élément sous la forme de section dans le document généré, le chemin d'accès aux données doit être complété par un texte qui sera le nom de la section après fusion.
    ex: {//client}CLIENT
      
  • Le nom peut éventuellement être lui aussi construit à l'aide d'une expression.
    ex: {//client}{@nom} {@prenom}
      
  • Dans ce cas, toutes les sections générées dans le document résultat seront nommées comme par exemple dans la copie du navigateur ci contre.

A l'intérieur de la section, il est possible de placer des champs de fusion XML (portions de textes variables) :
 
  • Ces champs de fusion sont également des chemins d'accès aux données source qui ont pour référence le chemin associé à la section courante
    ex: {adresse/@code_postal}
  • Dans cet exemple, ce sont donc des attributs de l'élément 'adresse' fils de l'élément 'client'. 
    (le caractère @ indique qu'il s'agit d'attributs xml, mais on peut également faire référence à la valeur textuelle d'un élément xml).
  • Ces champs de fusion peuvent être insèrés n'importe où dans les paragraphes.

Les lignes de tableaux peuvent également être alimentés par des données de fusion.
 
  • Un nouveau tableau est créé par : 
    Menu / Insertion / Tableau
  • Le nom du tableau doit être un chemin d'accès aux données source.
    ex: {//evenement}
  • Des champs de fusion xml doivent être entrés dans les cellules concernées par la fusion.
    ex : {@date}
  • Les lignes contenant des cellules avec champ de fusion sont répétées autant de fois qu'il y a d'éléments xml à fusionner.

Les objets dessin peuvent également être alimentés par des données de fusion :
 
  • Le nom de l'objet doit être un chemin d'accès aux données source.
    ex: {adresse}
  • Dans le document généré, les groupes d'objets résultant de la fusion sont ancrés comme défini dans le modèle. 
    Si plusieurs objets doivent résulter de la fusion, l'ancrage doit être défini "comme caractère", sinon, les objets seront superposés.
  • A l'intérieur du groupe d'objet, il est possible de placer des objets textes variables :
    ex: {@ville}

 Les paramètres ci-dessus permettent de réaliser des fusions simples. Les fonctionnalitées qui suivent permettent encore d'aller plus loin dans l'automatisation de la fusion.

La fonctionnalité OOo "Champ texte conditionnel" peut également être exploitée pour la fusion XML.
  • Menu / insertion / Champ /  Autres... / Texte conditionnel
  • Une condition (sur les données source) doit être saisie dans la zône Condition.
    ex : {@genre='F'}
  • Les textes conditionnels doivent être saisis dans les zônes "Alors" et "Sinon".
    ex : Alors Madame Sinon Monsieur
    (Actuellement les expressions XPath sont interdites dans ces zônes)

La fonctionnalité OOo "Champ texte masqué" peut également être exploitée pour la fusion XML.
  • Menu / insertion / Champ /  Autres... / Texte masqué
  • Une condition (sur les données source) doit être saisie dans la zône Condition.
    ex : {@urgence>'2'}
  • Le texte doit être saisis dans la zône "Texte masqué".
    ex : LIVRAISON AVANT 10H
    (Actuellement les expressions XPath sont interdites dans ces zônes)

La fonctionnalité OOo "Champ paragraphe masqué" peut également être exploitée pour la fusion XML.
  • Menu / insertion / Champ /  Autres... / Paragraphe masqué
  • Une condition (sur les données source) doit être saisie dans la zône Condition.
    ex : {@nb_cmde>'1'}

 Plusieurs sections peuvent-être paramètrées dans le même modèle de fusion.

Le paramètrage des sections peut également faire appel à des prédicats.
par exemple :
{//client[@nb_cmde>'1']}
permettra de générer des courriers standards pour les clients habituels
{//client[@nb_cmde='1']}
permettra de générer des courriers différents pour les nouveaux clients.
 
La génération de courriers personnalisés et dans la langue du destinataire peut également être généré en un seul traitement et dans le même document.
par exemple en nommant chacune des sections :
{//client[@lang='fr']}
{//client[@lang='en']}
{//client[@lang='de']}
{//client[@lang='es']}


 L'imbrication de sections, permet de générer des documents complexes impossibles à réaliser avec les outils de fusion classiques.

L'exemple fourni avec ce filtre vous donnera un aperçu des possibilités offertes par la fusion xml. Vous y trouverez des exemples de chemins d'accès simples aux données comme :
{@nom}, pour inserrer le nom du client,
 
ou beaucoup plus complexe comme :
{//evenement[
contains(@departements,
substring(current()/adresse/@codepostal,1,2)
)
]}, pour afficher la liste des évènements se déroulant dans la zône géographique du client.
 
rmq: la fonction current() désigne l'élément courant, c'est à dire "client courant" dans cet exemple.


Pour plus de détail sur les possibilités de filtrage offertes par le langage XPath qui est utilisé pour les chemins d'accès aux données et pour les conditions, reportez vous à "Syntaxe XPath"


Licence
Ce filtre XSLT vous est fourni sous licence LGPL ce qui signifie que vous pouvez l'utiliser librement comme extension à Sun StarOffice ou OpenOffice.org au sein de votre entreprise, de votre association ou chez vous. 
Vous pouvez également en modifier le code pour corriger des erreurs, en améliorer le fonctionnement ou l'adapter à des besoins spécifiques.

Reportez vous au texte contenu en entête du fichier MaXOOoFusion.xsl pour plus de détail sur la licence.


Téléchargement
Le fichier MaXOOoFusion.zip peut être téléchargé dans la rubrique "Téléchargement".


Procédure d'installation
  1. Assurez vous que le support des filtres XSLT a bien été installé sur votre poste. Pour cela, vérifiez la présence par exemple du filtre XHTML dans "Fichier / Exporter" du module traitement de texte. Un environnement Java doit également être installé sur votre machine. Pour vérifier, vous pouvez lancer à nouveau l'installation d'OOo en mode réparation.
    Pour plus d'information sur l'installation de Java : http://fr.openoffice.org/docs/java.htm
     
  2. Décompressez le fichier MaxOOoFusion.zip
    Il contient les 4 fichiers suivants :
    - MaxOOoFusionWriter.jar
    - source_fusion.xml
    - LogoOOo11.bmp
    - ExempleFusionXML.sxw
     
  3. Sélectionnez dans le menu de OOo :
    Outils / Paramètrage du filtre XSLT
     
  4. Cliquez sur le bouton "Ouvrir le paquetage .."
     
  5. Sélectionnez le paquetage MaXOOoFusionWriter.jar
    Après clic sur le bouton "Ouvrir", le message suivant doit s'afficher :
    "Installation du filtre terminé"
     
  6. Sélectionnez le filtre "Fusion MaXOpenInfo (Writer)" dans la liste puis cliquez sur le bouton "Editer"
     
  7. Cliquez sur l'onglet "Transformation". Vérifiez que les chemins d'installation "XSLT pour import" et "XSLT pour export" sont bien :
    ..\OpenOffice.org1.1.x\user\xslt\Fusion MaXOpenInfo (writer)
     
  8. Votre filtre de fusion texte est prêt à fonctionner. Vous pouvez le tester avec l'exemple composé des deux fichiers "ExempleFusionXML.sxw" et "source_fusion.xml".
     
  9. Si le logo en haut à gauche de la page n'apparait pas, vous devez rétablir le lien avec le fichier image "LogoOOo11.bmp".


Performances
La durée du traitement est principalement fonction du nombre de champs à fusionner. Sur Pentium4 2GHz Win 2000 elle peut varier de 0.1s à 1s par page générée.

Si vous utilisez cette même feuille de transformation MaXOOoFusion.xsl pour générer des fichiers OOo par lots avec un processeur XSLT externe comme Saxon, les temps de traitement peuvent être divisés par 2 (voir même par 5).
Pour plus d'info, reportez vous à "Traitement par lots"


Limites
  • Les caractères { et } sont utilisés pour baliser les paramètres de fusion, ce qui interdit leur utilisation normale dans le document
      
  • Cet outil de fusion permet de générer des documents de plusieurs centaines de pages. Il est en général plus sage, si vous souhaitez exploiter régulièrement avec OOo les documents résultant de la fusion de créer plusieurs documents de plus petite taille et de les rattacher à un document maître.


Problèmes connus
  • Les objets (OOo ou OLE) encapsulés dans le document de fusion ne sont pas reproduits dans le document généré.
     
  • Aucun contrôle n'est effectué sur la syntaxe des expressions XPath saisies dans le modèle de fusion. Il est donc vivement conseillé de tester le bon fonctionnement après toute modification de paramètrage. 
    Une erreur se traduit par l'affichage d'un message d'erreur "Erreur lors du chargement du document" sans être plus explicite sur l'origine de l'erreur. Un outil de contrôle de syntaxe sera donc ajouté dans une prochaine version des filtres de fusion. 
     


Améliorations prévues
  • Un test de la syntaxe des expressions XPath sera effectué avant l'enregistrement du XSLT de fusion afin de prévenir plus proprement toute erreur de syntaxe dans le paramètrage. 
    Un message indiquera clairement l'origine de l'erreur et en simplifiera la correction. 
    Pour être plus générique, l'idéal serait de réaliser ce contrôle de syntaxe en XSLT. (Peut être que ce code existe déja quelque part, mais où ? ;-))
     
  • Il sera possible de définir des variables à l'intérieur des sections, afin de simplifier l'écriture de prédicats complexes.
     
  • Les éléments pourront être triés. Une instruction "Sorted by" sera ajoutée au paramètrage des sections. 
    Actuellement, l'ordre des éléments générés est celui du fichier XML source. Le tri doit donc être effectué en amont.
     
  • Une boite de dialogue (ou formulaire) permettant de filtrer et de trier les données à fusionner sera ajoutée. 
    Cette fonctionnalité permettra d'utiliser cet outil comme requêteur xml. 
     
  • Les tables pourront être construites à partir de styles différents pour les lignes paires / impaires.


    © 2004 BOBICIEL INFORMATIQUE - Tous droits réservés
Mentions Légales