Imports dans ChainEdit 3
Principes
Un import consiste à prendre le contenu d'un fichier (en format zip) pour le transformer dans un format reconnu par Chainedit. Par exemple, transformer un fichier OpenOffice (utilisant une feuille de style spécifique) en projet ChainEdit dans le format Opus. Un import a donc un format d'entrée et un format de sortie. Le paramétrage des imports a changé avec ChainEdit 3. Un import est constitué d'un ensemble d'instructions de copie de répertoires et/ou de fichiers, et d'un ensemble de fichiers XSL de traitement de données.
Processus
Après avoir sélectionner un import et donné à ChainEdit un fichier Zip à traiter. La séquence de traitement sera la suivante :
Création d'un répertoire temporaire ici appelé TMP
Dézip du fichier dans le répertoire temporaire
Création d'un répertoire cible ici appelé PROCESS
Lancement des traitements de BEFOREPROCESS (copie des médias dans PROCESS)
Lancement des traitements XSL (le résultat du traitement doit se retrouver dans le répertoire PROCESS à la fin)
Lancement des traitements de AFTERPROCESS (déplacement du fichier XML produit par le traitement XSL dans PROCESS par exemple)
En cas d'erreur les répertoires TMP et PROCESS sont supprimés et le répertoire du projet reste à l'état initial.
En cas de succès le répertoire PROCESS va remplacer le répertoire du projet, le fichier xml contenu dans ce répertoire (il ne doit y en avoir qu'un à la racine) est renommé avec l'identifiant du projet. Le répertoire TMP est supprimé. Le contenu initial est donc supprimé.
Paramétrage
Un import est constitué d'un fichier XML de paramétrage qui se présente comme suit (ici un import odf to opus):
<IMPORT id=“ODFTOOPUS” label=“ODFTOOPUS” chainEditVersion=“3” version=“1.0.0”>
<TARGETSCHEMA id="OPUS"/>
<ORIGINALSCHEMA id="ODF"/>
<BEFOREPROCESS>
<COPYDIR ordre="0" frompath="\Pictures" topath="\ressources\images"/>
</BEFOREPROCESS>
<IMPORTXSL>
<XMLFILE path="content.xml"/>
<XSLFILE ordre="0" path="\xsl\ODF_TO_XML_LANCEUR.xsl"/>
<XSLFILE ordre="1" path="\xsl\ODF_TO_XML_LANCEUR2.xsl"/>
<XSLFILE ordre="2" path="\xsl\ODF_TO_XML_LANCEUR3.xsl"/>
<XSLFILE ordre="3" path="\xsl\ODF_TO_XML_LANCEUR4.xsl"/>
<XSLFILE ordre="4" path="\xsl\ODF_TO_XML_LANCEUR5.xsl"/>
<XSLFILE ordre="5" path="\xsl\ODF_TO_XML_LANCEUR6.xsl"/>
</IMPORTXSL>
<AFTERPROCESS>
<COPYFILE ordre="0" frompathwithfilename="\Projet\newprojet.xml" topathwithfilename="\project.xml"/>
</AFTERPROCESS>
</IMPORT>
Explications
Un import a un identifiant (id), un label (label) et une version (version) pour information. Il y a aussi un attribut chainEditVersion qui permet de vérifier si cet import est compatible avec ChainEdit à partir de la version indiquée (ici la 3)
TARGETSCHEMA et ORIGINALSCHEMA donnent des informations sur les formats pour lesquels cet import a été conçu, mais ces informations ne sont pas contraignantes (ChainEdit ne les vérifient pas).
la séquence BEFOREPROCESS est exécutée avant le lancement du parsing XSL . Elle permet de copier des répertoires ou des fichiers (voir plus loin). Ici il y a une copie d'un répertoire /Pictures contenant les images sous OpenOffice dans un répertoire /ressouces/images conforme au modèle OPUS (bien entendu le traitement XSL devra assurer la transformation du chemin d'accès aux images vers ce nouveau répertoire).
la séquence IMPORTXSL va exécuter la liste des fichiers XSL (dans l'ordre des attributs “order”)sur le fichier XMLFILE passé en paramètre. Si le paramètre XMLFILE est omit, le premier fichier xml trouvé dans le répertoire /TMP sera traité(Ici transformation du fichier openOffice content.xml dans le format OPUS de ChainEdit).
la séquence AFTERPROCESS est exécutée après le lancement du parsing XSL . Elle permet de copier des répertoires ou des fichiers (voir plus loin). Ici le fichier newproject issu du traitement XSL est copié dans le répertoire /PROCESS pour être ensuite renommé par ChainEdit avec l'identifiant du projet conformément aux conventions de nommage de ChainEdit.
BEFOREPROCESS et AFTERPROCESS peuvent avoir comme traitements :
MKDIR pour créer un répertoire <MKDIR order=“0” path=“\nomDuRépertoireQuiSeraCrééDansPROCESS” />
COPYCONTENTDIR pour copier les répertoires contenus dans un répertoire parent <COPYDIR ordre=“0” frompath=“\nomDuRépertoireDansTMP” topath=“\nomDuRépertoireQuiSeraCrééDansPROCESS”/> (Si un répertoire A contient des répertoires B et C et un fichier D.xml, cette commande copiera B et C dans le répertoire cible)
COPYDIR pour copier un répertoire <COPYDIR ordre=“0” frompath=“\nomDuRépertoireDansTMP” topath=“\nomDuRépertoireQuiSeraCrééDansPROCESS”/>
COPYFILE pour copier un fichier <COPYDIR ordre=“0” frompathwithfilename=“\nomDuRépertoireDansTMP\NomDuFichier” topathwithfilename=“\nomDuRépertoireQuiSeraCrééDansPROCESS\NomDuFichier”/>