Skip to content

Instantly share code, notes, and snippets.

@nltesown
Last active February 2, 2023 09:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nltesown/8c9955d3c44859135e1c2045894b0e8c to your computer and use it in GitHub Desktop.
Save nltesown/8c9955d3c44859135e1c2045894b0e8c to your computer and use it in GitHub Desktop.
Utiliser XML dans InDesign : une recette

Utiliser XML dans InDesign : une recette

⚠ Ce document est en cours d'écriture (2023-02-02)

Réaliser une publication dans InDesign en séparant forme (la maquette) et contenu textuel (édité en dehors d'InDesign), avec mise à jour dynamique du contenu directement dans la maquette.

Le fichier XML

Voici un exemple de fichier XML préparé pour être importé dans un document InDesign :

<?xml version="1.0" encoding="UTF-8"?>
<cycle xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" title="Mario Monicelli">
    <film title="Caro Michele">
        <xTitre>Caro Michele&#xA;</xTitre>
        <xRealisateurs>Mario Monicelli&#xA;</xRealisateurs>
        <xInfosTechniques>Italie. 1976. 35&#x202F;mm. VOSTF&#xA;</xInfosTechniques>
        <xGenerique>Avec Mariangela Melato, Lou Castel, Alfonso Gatto, Aurore Clément, Delphine Seyrig.&#xA;</xGenerique>
        <xSynopsis>Après les émeutes étudiantes de 68, Michele quitte sa famille bourgeoise pour Londres, mais reste en contact avec sa mère et ses sœurs, dans une correspondance où il fait la lumière sur les différents personnages qui ont marqué sa vie, notamment Mara, qui prétend avoir eu un enfant de lui. Un jour, elles apprennent la mort de Michele.&#xA;</xSynopsis>
        <xInfosSeance>je 18 mai 20h30&#x202F;-&#x202F;HL&#xA;</xInfosSeance>
        <xInfosSeance>me 24 mai 15h30&#x202F;-&#x202F;JE&#xA;</xInfosSeance>
    </film>
    <film title="Nous voulons les colonels">
        <xTitre>Nous voulons les colonels&#xA;</xTitre>
        <xTitreVo>(Vogliamo i colonnelli)&#xA;</xTitreVo>
        <xRealisateurs>Mario Monicelli&#xA;</xRealisateurs>
        <xInfosTechniques>Italie. 1973. DCP. VOSTF&#xA;</xInfosTechniques>
        <xGenerique>Avec Ugo Tognazzi, Claude Dauphin, François Périer.&#xA;</xGenerique>
        <xSynopsis>Un député d’extrême droite fomente un coup d’État avec le concours d’un groupe de colonels et de généraux.&#xA;</xSynopsis>
        <xInfosSeance>di 07 mai 17h00&#x202F;-&#x202F;HL&#xA;</xInfosSeance>
        <xInfosSeance>di 28 mai 17h00&#x202F;-&#x202F;HL&#xA;</xInfosSeance>
    </film>
    <film title="Les Nouveaux Monstres">
        <xTitre>Les Nouveaux Monstres&#xA;</xTitre>
        <xTitreVo>(I Nuovi mostri)&#xA;</xTitreVo>
        <xRealisateurs>Dino Risi, Mario Monicelli, Ettore Scola&#xA;</xRealisateurs>
        <xInfosTechniques>Italie. 1977. 35&#x202F;mm. VOSTF&#xA;</xInfosTechniques>
        <xGenerique>Avec Alberto Sordi, Ugo Tognazzi, Vittorio Gassman.&#xA;</xGenerique>
        <xSynopsis>Douze sketches, tableaux sombres et amers qui, à la suite des <span aid:cstyle="Italic">Monstres</span> de 1963, mettent en scène l’évolution de la société italienne.&#xA;</xSynopsis>
        <xInfosSeance>me 17 mai 20h00&#x202F;-&#x202F;HL&#xA;</xInfosSeance>
        <xInfosSeance>je 25 mai 16h00&#x202F;-&#x202F;GF&#xA;</xInfosSeance>
    </film>
</cycle>

Plutôt que de partir de données XML "pures" (indépendantes de l'usage que l'on veut en faire), on utilise un document structuré en vue de son utilisation dans InDesign. Une option d'InDesign permet d'appliquer une transformation XSLT au fichier XML importé, ce qui est une autre possibilité si on ne peut pas avoir en amont de document XML de la forme voulue (je doute toutefois qu'il y ait beaucoup de volontaires pour écrire le script XSLT1 en question).

Ce document décrit un programme de cinéma consacré à Mario Monicelli (cinéaste italien, 1915-2010). L'élément racine s'appelle cycle et contient 3 éléments film qui correspondent chacun à un film et ses séances.

L'attribut xmlns:aid="http://ns.adobe.com/AdobeInDesign/4.0/" déclare le préfixe d'espace de nom aid propre à InDesign. Il permet d'utiliser dans le XML des attributs tels que aid:cstyle (pour indiquer à InDesign d'appliquer un style de caractère donné). Ce n'est pas toutefois pas un point crucial.

On peut distinguer dans le structure du XML deux types d'éléments :

  • Des éléments conteneurs (cycle, film), qui n'ont pas directement de données mais qui contiennent d'autres éléments. Ils n'ont pas d'impact sur la mise en page et il n'est pas possible de leur appliquer de styles. Leur intérêt est de regrouper le contenu par unités logiques, ce qui permet de naviguer plus aisément dans le panneau de structure XML d'InDesign.
  • Des éléments de contenu (xTitre, xRealisateurs, etc.), qui fournissent la matière textuelle à mettre en page. J'ai nommé ces éléments en les préfixant d'un "x" (comme XML), j'expliquerai pourquoi plus loin. On considèrera que chacun de ces éléments correspondra, dans la mise en page, à un paragraphe, auquel sera appliqué un style de paragraphe.
  • On peut avoir, à l'intérieur de ces éléments, d'autres éléments, identifiés ici avec la balise span2. Ils servent à délimiter, à l'intérieur d'un paragraphe, du contenu auquel appliquer un style de caractère (cas usuels : italique, exposant) via l'attribut aid:cstyle. [TODO: voir s'il ne vaut pas mieux se passer totalement de aid:cstyle et donner directement à la balise le nom du style de caractère que l'on veut appliquer, par exemple : <xItalic>.]

Ces trois points peuvent être vus comme 3 niveaux hiérarchiques :

  • La structure logique, qui n'a pas d'impact dans la mise en page.
  • Le niveau paragraphe : bloc de texte auxquel ont applique un style de paragraphe.
  • Le niveau "inline" (caractère) : fragment d'un paragraphe auquel on applique un style de caractère.

Selon les besoins, les éléments conteneurs peuvent s'imbriquer sur plusieurs niveaux. Ils permettent d'identifier des unités de contenu qui pourront être manipulées séparément dans InDesign.

Les éléments de paragraphe, pour pouvoir apparaître comme tels dans InDesign, doivent avoir un contenu qui se termine par un saut de ligne. Pour cela, on place juste avant la balise fermante un caractère spécial (LF = Line Feed = saut de ligne) exprimé par le code &#xA; (ou &#10; en base 10).

On peut donc reconnaître dans le fichier XML ce qui correspondra dans InDesign à un paragraphe :

<xNomDElement>Lorem ipsum dolor sit amet...&#xA;</xNomDElement>

Footnotes

  1. Le XSLT est un langage de transformation de documents XML. Un script XSLT servirait ici à transformer un fichier XML quelconque en un fichier XML préparé en vue de la mise en page. On n'utilise pas cette option si on a la possibilité d'importer directement un fichier XML adapté, ce qui est le cas dans cet exemple.

  2. Par analogie avec la balise span de HTML indiquant du contenu "inline".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment