Aller au contenu

ConTeXt/Pipeline éditorial professionnel

Un livre de Wikilivres.

Pipeline éditorial professionnel : XML → ConTeXt → PDF

[modifier | modifier le wikicode]

Objectifs de cette section

  • comprendre l’architecture d’un flux éditorial XML → ConTeXt ;
  • préparer un corpus XML pour la mise en forme (édition critique, catalogues…) ;
  • transformer XML en code ConTeXt grâce à Lua ou XSLT ;
  • automatiser la production de PDF à partir de données externes ;
  • mettre en place une structure de projet robuste et reproductible ;
  • introduire le chaînage XML → Lua → ConTeXt.

Dans les workflows éditoriaux modernes — édition scientifique, publications institutionnelles, rapports, catalogues, textes littéraires — les données sont souvent structurées en XML. ConTeXt permet de transformer ces données en PDF de haute qualité en utilisant Lua, MetaPost, et ses propres mécanismes typographiques.

Ce chapitre présente un pipeline éditorial complet, simple mais robuste.


1. Architecture générale du pipeline XML → PDF

[modifier | modifier le wikicode]

Un flux éditorial classique suit la structure suivante :

XML source  →  Transformation (Lua ou XSLT)  →  ConTeXt  →  PDF final

Voici une version plus détaillée :

data/
 ├── source.xml        (contenu : texte, sections, notes)
 ├── metadata.xml      (titre, auteurs, identifiants)
 └── images/           (figures associées)

scripts/
 ├── parse-xml.lua     (chargement des données)
 ├── transform.lua     (conversion XML → ConTeXt)
 └── build.sh / build.bat (pipeline automatisé)

tex/
 ├── modeles/          (cadres, environnements, styles)
 │    └── edition.mkiv
 ├── publication.tex   (document maître)
 └── generated.tex     (contenu généré automatiquement)

publication.pdf         (résultat final)

Astuce
Séparer soigneusement données / transformation / mise en page. Cela évite les mélanges impropres entre XML et styles ConTeXt.


2. Lire un fichier XML en Lua

[modifier | modifier le wikicode]

ConTeXt intègre Lua, et Lua peut parser du XML grâce à lxp.lom.

Exemple minimal de lecture XML

[modifier | modifier le wikicode]

Fichier : source.xml

[modifier | modifier le wikicode]
<chapitre id="1">
  <titre>Introduction</titre>
  <paragraphe>Texte d’exemple pour illustrer une transformation XML.</paragraphe>
</chapitre>

Fichier ConTeXt : test-xml.tex

[modifier | modifier le wikicode]
\starttext

\startluacode
local lom = require("lxp.lom")
local xmlfile = io.open("source.xml","r")
local data = lom.parse(xmlfile:read("*all"))
xmlfile:close()

local chapitre = data[1]  -- premier noeud : <chapitre>

context.bold(chapitre.titre[1])
context.par()
context(chapitre.paragraphe[1])
\stopluacode

\stoptext

Résultat : le titre et le paragraphe sont importés depuis le XML et composés par ConTeXt.


3. Transformation XML → ConTeXt (via Lua)

[modifier | modifier le wikicode]

Voici une transformation plus réaliste, générant automatiquement du code ConTeXt.

XML : source.xml

[modifier | modifier le wikicode]
<livre>
  <chapitre id="1">
    <titre>Introduction générale</titre>
    <p>Premier paragraphe.</p>
    <p>Deuxième paragraphe.</p>
  </chapitre>

  <chapitre id="2">
    <titre>Définitions</titre>
    <p>Paragraphe de définition.</p>
  </chapitre>
</livre>

Fichier Lua : transform.lua

[modifier | modifier le wikicode]
local lom = require("lxp.lom")

local f = io.open("data/source.xml","r")
local xml = lom.parse(f:read("*all"))
f:close()

local livre = xml[1]

local out = {}
local function emit(s) table.insert(out, s) end

for _,chap in ipairs(livre) do
  emit("\\chapter{" .. chap.titre[1] .. "}\n")
  for _,el in ipairs(chap) do
    if el.tag == "p" then
      emit(el[1] .. "\n\n")
    end
  end
end

local output = io.open("tex/generated.tex","w")
output:write(table.concat(out))
output:close()

Document maître : publication.tex

[modifier | modifier le wikicode]
\environment edition

\starttext
\input generated.tex
\stoptext

Ce pipeline permet :

  • la modification du XML sans toucher au code ConTeXt,
  • la production automatique de chapitres structurés,
  • un flux de production rapide et reproductible.

4. Transformation XML → ConTeXt via XSLT

[modifier | modifier le wikicode]

Certains projets existants (TEI, DocBook, JATS) utilisent XSLT pour générer du TeX.

Voici un XSLT minimal :

Fichier : tei-to-context.xsl

[modifier | modifier le wikicode]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

 <xsl:template match="titre">
   <chapter><xsl:value-of select="."/></chapter>
 </xsl:template>

 <xsl:template match="p">
   <xsl:value-of select="."/><xsl:text>\par</xsl:text>
 </xsl:template>

</xsl:stylesheet>

Commande de transformation

[modifier | modifier le wikicode]
xsltproc tei-to-context.xsl source.xml > generated.tex

On compile ensuite avec :

context publication.tex

5. Exemple complet : pipeline XML → PDF

[modifier | modifier le wikicode]

Voici un pipeline « professionnel » minimal :

1) Structure d’un texte XML

[modifier | modifier le wikicode]
<livre>
  <metadata>
    <titre>Traité de démonstration</titre>
    <auteur>Jean Dupont</auteur>
  </metadata>

  <chapitres>
    <chapitre id="1">
      <titre>Préliminaires</titre>
      <p>Voici un premier paragraphe.</p>
      <p>Un second paragraphe avec une <note>Note importante.</note></p>
    </chapitre>
  </chapitres>
</livre>

2) Lua pour transformer les notes

[modifier | modifier le wikicode]
if el.tag == "note" then
  emit("\\footnote{" .. el[1] .. "}")
end

3) Génération structurée

[modifier | modifier le wikicode]
  • titres → \chapter{…}
  • notes → \footnote{…}
  • sections XML → sections typographiques ConTeXt
  • métadonnées → page de garde / PDF metadata

4) Document maître ConTeXt

[modifier | modifier le wikicode]
\setupinteraction[state=start,
  title={Traité de démonstration},
  author={Jean Dupont}
]

\starttext
\input generated.tex
\stoptext

Résultat : un PDF complet généré automatiquement à partir du XML.


6. Conseils pratiques

[modifier | modifier le wikicode]

Astuce

  • Validez toujours le XML (xmllint —noout).
  • Séparez le "contenu" (XML) du "style" (ConTeXt).
  • Évitez d’intégrer du code ConTeXt directement dans le XML.
  • Favorisez des transformations Lua (plus simples que XSLT dans ConTeXt).

7. Usage professionnel

[modifier | modifier le wikicode]

Ce pipeline est utilisé pour :

  • éditions critiques avec TEI,
  • rapports institutionnels,
  • catalogues de musées,
  • éditions philosophiques et littéraires,
  • manifestations scientifiques (actes, programmes),
  • génération automatisée de milliers de pages.

ConTeXt excelle dans les workflows XML → PDF grâce à son intégration native avec Lua.