Aller au contenu

ConTeXt/Travailler avec XML-TEI dans ConTeXt

Un livre de Wikilivres.

ConTeXt


 Page précédente : Pipeline professionnel

Part. V, ch. 13  •  Travailler avec TEI-XML dans ConTeXt  •  Sommaire

Page suivante 


Travailler avec XML-TEI dans ConTeXt

[modifier | modifier le wikicode]

Objectifs de cette section

  • Comprendre pourquoi et comment utiliser XML et TEI avec ConTeXt ;
  • Distinguer deux approches complémentaires :
    • une méthode simple / impérative (XML minimal + ConTeXt) ;
  • une méthode intégrale (TEI complet + ConTeXt comme moteur de composition) ;
  • Disposer d’un exemple minimal fonctionnel (Cicéron simple)
  • S’orienter vers des exemples plus avancés (ex: Iliade, Tusculanes, textes parallèles Platon / Cicéron).
  • introduire le chaînage XML → Lua → ConTeXt.

ConTeXt sait travailler directement avec des fichiers XML, comme on l'a vu précédemment pour la confection d'apparats critiques dans le chapitre 9 de la Partie III : Apparat critique et TEI et suivants. On peut donc :

  • séparer le texte (stocké en XML / TEI) de la mise en page (définie en ConTeXt) ;
  • réutiliser la même source pour plusieurs sorties : PDF critique, PDF de travail, version web, etc. ;
  • automatiser des tâches répétitives (index, notes, apparat, lemmatisation…).

Mais il faut être lucide : le travail XML-TEI + ConTeXt est technique. Il suppose un minimum de familiarité avec :

  • la structure d’un document XML (balises, attributs, hiérarchie) ;
  • la grammaire TEI (au moins quelques éléments de base) ;
  • le fonctionnement de ConTeXt avec XML (module `xml`, commandes `\xmlload`, `\xmltext`, `\xmlsetups`, etc.).

Cette page présente ainsi :

  • une méthode simple, accessible, pour commencer ;
  • une méthode intégrale, plus proche de la « vraie » TEI, pour des projets d’édition savante.

Des exemples complets (Iliade, Cicéron-Tusculanes, textes parallèles) seront décrits dans des pages séparées, afin de ne pas surcharger cette introduction.


1. Pourquoi utiliser XML-TEI avec ConTeXt ?

[modifier | modifier le wikicode]

1.1 TEI en quelques mots

[modifier | modifier le wikicode]

TEI (Text Encoding Initiative) est un ensemble de recommandations pour encoder des textes sous forme XML :

  • œuvres littéraires, correspondances, sermons, traités philosophiques ;
  • manuscrits, éditions critiques, variantes, apparat ;
  • corpus destinés à la recherche (linguistique, historique, philologique, etc.).

TEI met l’accent sur le sens plutôt que sur l’apparence :

  • les balises décrivent ce que c’est (un nom de personne, un lieu, une note, une variante),
 et non comment cela doit s’afficher (gras, italique, etc.).

ConTeXt, de son côté, fournit :

  • un moteur typographique puissant pour la composition finale (PDF, impression) ;
  • un langage de description souple pour définir la mise en page, les styles, les notes, les index, etc.

L’idée générale :

TEI = couche sémantique (XML)
ConTeXt = couche typographique (PDF)
Astuce Pour un projet sérieux (édition critique, corpus de recherche), on gagne en pérennité :
  on garde les données en TEI-XML, et on refait les mises en page en ConTeXt au besoin.

1.2 Cas d’usage typiques

[modifier | modifier le wikicode]
  • Édition critique d’un texte ancien ou moderne (avec variantes, apparat, notes).
  • Corpus littéraires / historiques pour la recherche, avec balisage sémantique (noms de personnes, lieux, dates…).
  • Projets d’humanités numériques (édition en ligne + version PDF imprimable).
  • Thèses ou ouvrages savants où l’on souhaite séparer proprement données et mise en page.

2. Deux approches complémentaires

[modifier | modifier le wikicode]

Dans un projet réel, on rencontre souvent deux manières d’utiliser XML avec ConTeXt :

  • une approche simple / impérative : XML minimal + ConTeXt qui va chercher « à la main » ce qui l’intéresse ;
  • une approche intégrale : TEI bien structuré, ConTeXt configuré pour interpréter directement les balises.

Les deux sont utiles. On peut commencer par la première, puis évoluer vers la seconde.

2.1 Méthode simple : XML impératif

[modifier | modifier le wikicode]

Principe :

  • on écrit un fichier XML relativement simple (structure claire, quelques balises) ;
  • on utilise ConTeXt pour :
    • charger le fichier (`\xmlload`) ;
    • extraire des morceaux (`\xmltext` avec un chemin XPath simple) ;
    • éventuellement appliquer quelques traitements (`\xmlsetups`).

C’est l’approche idéale pour :

  • tester la chaîne XML → ConTeXt → PDF ;
  • explorer pas à pas le module `xml` de ConTeXt ;
  • créer de petits prototypes avant de passer à TEI complet.

On reste proche d’une logique « impérative » :

« Prends ce bout de XML, mets-le en titre ; prends tel paragraphe, mets-le en corps de texte. »

2.2 Méthode « intégrale » : TEI + ConTeXt en profondeur

[modifier | modifier le wikicode]

Principe :

  • on encode le texte entièrement en TEI : divisions, lignes, variantes, notes, noms propres, lemmes, etc. ;
  • ConTeXt ne « pioche » plus seulement des morceaux : il interprète les balises.
  • on associe chaque balise ou famille de balises TEI à un setup ConTeXt :
par exemple, `<persName>` → petites capitales + index ;
`<placeName>` → italique + index géographique ;
`<note>` → note de bas de page ;
`<app>`, `<lem>`, `<rdg>` → apparat critique, etc.

On se rapproche ainsi d’une chaîne éditoriale complète :

TEI (source savante) → ConTeXt (règles typographiques) → PDF (édition critique ou de lecture)

Cette approche est plus exigeante :

  • maîtrise de TEI (au moins un sous-ensemble cohérent) ;
  • compréhension des commandes ConTeXt pour XML (`\xmlload`, `\xmlsetsetup`, `\startxmlsetups`, etc.) ;
  • organisation rigoureuse des fichiers.

Un projet type pourra ressembler à ceci :

projet-tei/
  data/
    iliad-sample-tei.xml
    tusculanes-tei.xml
  tex/
    iliad-tei-demo.tex
    tusculanes-tei.tex
  styles/
    env-critique.tex  (mise en page générale)
  build/
    pdf/
Astuce Il est souvent prudent de commencer par un petit fragment (10-20 lignes) entièrement encodé et typographié, avant d’étendre la méthode à tout un livre.

3. Exemple minimal : « Cicéron simple » (méthode impérative)

[modifier | modifier le wikicode]

Cet exemple illustre :

  • un TEI très réduit (édition + traduction) ;
  • l’extraction de textes via `\xmltext` ;
  • l’utilisation de `\xmlsetups` pour traiter quelques balises : `persName`, `placeName`, `note`.

3.1 Fichier XML : cicero-sample-tei.xml

[modifier | modifier le wikicode]
<?xml version="1.0" encoding="UTF-8"?>
<TEI>
  <text>
    <body>

      <div type="edition" xml:lang="la">
        <head>Exemplum Ciceronis</head>
        <p>
          <persName>Marcus Tullius Cicero</persName>
          in
          <placeName>Arpino</placeName>
          natus est.
          <note>Simple note.</note>
        </p>
      </div>

      <div type="translation" xml:lang="fr">
        <head>Traduction française</head>
        <p>Cicéron naquit à Arpinum.</p>
      </div>

    </body>
  </text>
</TEI>

3.2 Fichier ConTeXt : cicero-tei-simple.tex

[modifier | modifier le wikicode]
\setuppapersize[A5]
\setupbodyfont[latin-modern]

% 1. Charger le XML (le fichier doit être dans le même répertoire)
\xmlload{cicero}{cicero-sample-tei.xml}{}

% 2. Associer des balises TEI à des "setups" ConTeXt
\xmlsetsetup{cicero}{p}        {cicero:p}
\xmlsetsetup{cicero}{persName} {cicero:pers}
\xmlsetsetup{cicero}{placeName}{cicero:place}
\xmlsetsetup{cicero}{note}     {cicero:note}
\xmlsetsetup{cicero}{*}        {cicero:default}

% 3. Définition des setups

% Comportement par défaut : afficher le contenu tel quel
\startxmlsetups cicero:default
  \xmlflush{#1}
\stopxmlsetups

% Paragraphe : on déroule simplement les enfants
\startxmlsetups cicero:p
  \xmlflush{#1}
\stopxmlsetups

% Nom de personne : petites capitales
\startxmlsetups cicero:pers
  \bgroup\sc\xmlflush{#1}\egroup
\stopxmlsetups

% Nom de lieu : italique
\startxmlsetups cicero:place
  \bgroup\em\xmlflush{#1}\egroup
\stopxmlsetups

% Note : transformée en note de bas de page
\startxmlsetups cicero:note
  \footnote{\xmlflush{#1}}
\stopxmlsetups

\starttext

% 4. Titre de l’édition
\chapter{\xmltext{cicero}{/TEI/text/body/div[@type='edition']/head}}

% 5. Paragraphe latin (avec style sur persName/placeName/note)
\xmlflush{cicero}{/TEI/text/body/div[@type='edition']/p}

\blank[2*big]

% 6. Titre de la traduction
\subject{\xmltext{cicero}{/TEI/text/body/div[@type='translation']/head}}

% 7. Paragraphe de traduction
\xmltext{cicero}{/TEI/text/body/div[@type='translation']/p}

\stoptext

3.3 Comment ça marche ?

[modifier | modifier le wikicode]
  • \xmlload{cicero}{...}{} charge le fichier XML sous le nom logique cicero.
  • \xmltext{cicero}{/chemin/xpath} extrait le texte d’un nœud donné (ici <head>).
  • \xmlflush{cicero}{/chemin/xpath} « déroule » le contenu en appliquant les setups associés.

Les \xmlsetsetup définissent quelles balises appellent quels setups :

  • <persName>cicero:pers → petites capitales ;
  • <placeName>cicero:place → italique ;
  • <note>cicero:note → note de bas de page ;
  • tout le reste (*) → cicero:default → contenu brut.

Ce MWE (Minimum Working Example) suffit pour :

  • tester l’installation (XML + ConTeXt) ;
  • comprendre le principe \xmlload + \xmlsetups ;
  • servir de modèle pour des structures un peu plus élaborées.
Astuce Si rien ne s’affiche ou si ConTeXt imprime le XML en clair, vérifier :
  • orthographe du nom logique (ici cicero) ;
  • chemin XPath (copier/coller depuis le XML) ;
  • présence de `\xmlsetsetup{...}{*}{...}` pour les cas non prévus.

Un autre exemple complet (à tester) : lire un fichier TEI-XML et extraire automatiquement les lemmes

[modifier | modifier le wikicode]
Objectifs

Ce module montre comment ConTeXt peut :

  • lire directement un fichier XML conforme au standard TEI ;
  • associer des éléments TEI à des instructions ConTeXt via les mécanismes \xmlsetsetup ;
  • extraire automatiquement des lemmes (@lemma) depuis les balises <w> ;
  • générer un index complet sans traitement externe (ni XSLT, ni scripts).

Ce canevas constitue la « brique élémentaire » pour réaliser des éditions scientifiques ou scolaires : colonnes parallèles latin/traduction, appareil critique, notes multiples, extraction automatique d’index, etc.

1. Le fichier TEI-XML (exemple minimal)

[modifier | modifier le wikicode]

Voici un extrait TEI parfaitement valide, utilisant trois balises <w> avec un attribut lemma :

<?xml version="1.0" encoding="UTF-8"?>
<TEI xmlns="http://www.tei-c.org/ns/1.0">
  <text>
    <body>
      <p>
        <w lemma="anima">anima</w>
        <w lemma="humanus">humana</w>
        <w lemma="philosophia">philosophia</w>
      </p>
    </body>
  </text>
</TEI>

Chaque leçon fléchie apparaît dans le texte, tandis que le lemme est collecté dans l’index.

2. MWE ConTeXt complet (texte TEI + index des lemmes)

[modifier | modifier le wikicode]

Ce premier MWE produit deux pages : une avec le texte TEI, une avec l’index des lemmes. Il est adapté pour tester la chaîne complète TEI → ConTeXt → index.

% tei-lemma-demo.tex — MWE TEI + extraction automatique des lemmes

\setuplanguage[fr]
\mainlanguage[fr]
\setuppapersize[A4]

% 1) Registre pour l’index des lemmes
\defineregister[lemma]
\setupregister[lemma][n=1, indicator=no]

% 2) Déclaration du namespace TEI pour l’arbre XML "main"
\xmlnamespace{main}{tei}{http://www.tei-c.org/ns/1.0}

% 3) Dispatcher : associer tous les éléments TEI au jeu de règles xml:*
\xmlsetsetup{main}{tei:*}{xml:*}

% 4) Règle générique : dérouler le contenu
\startxmlsetups xml:*
  \xmlflush{#1}
\stopxmlsetups

% 5) Paragraphe TEI
\startxmlsetups xml:tei:p
  \xmlflush{#1}\par
\stopxmlsetups

% 6) Mots avec attribut @lemma : extraction automatique
\startxmlsetups xml:tei:w
  \lemma{\xmlatt{#1}{lemma}}     % index
  \xmlflush{#1}                  % forme fléchie
\stopxmlsetups

\starttext

\chapter{Texte TEI}
\xmlprocessfile{main}{tei-lemma-demo.xml}{}

\page
\chapter{Index des lemmes}
\placelemma

\stoptext
Résultat attendu
[modifier | modifier le wikicode]

Une compilation produit deux pages :

  • Page 1 : Texte TEI :
 anima humana philosophia (formes fléchies).
  • Page 2 : Index des lemmes :
 * anima  
 * humanus  
 * philosophia  

L’index pointe vers la page où les mots sont apparus dans le fichier TEI.

3. Variante monopage (pratique pour une capture PNG)

[modifier | modifier le wikicode]

Pour produire facilement une image (par exemple au format PNG), il peut être utile de limiter la sortie à une seule page (pour vérifier le test), en plaçant le texte TEI et l’index des lemmes sur la même page.

Le principe est le même ; on supprime simplement le changement de page et on remplace les chapitres par des titres de section plus compacts.

% tei-lemma-demo-onepage.tex — version monopage
% (texte TEI + index des lemmes sur la même page)

\setuplanguage[fr]
\mainlanguage[fr]
\setuppapersize[A4]

\defineregister[lemma]
\setupregister[lemma][n=1, indicator=no]

\xmlnamespace{main}{tei}{http://www.tei-c.org/ns/1.0}
\xmlsetsetup{main}{tei:*}{xml:*}

\startxmlsetups xml:*
  \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:tei:p
  \xmlflush{#1}\par
\stopxmlsetups

\startxmlsetups xml:tei:w
  \lemma{\xmlatt{#1}{lemma}}%
  \xmlflush{#1}%
\stopxmlsetups

\starttext

{\bf Texte TEI}\par
\xmlprocessfile{main}{tei-lemma-demo.xml}{}

\blank[2*big]

{\bf Index des lemmes}\par
\placelemma

\stoptext

Cette variante est idéale si l’on souhaite, par exemple, produire une image illustrant à la fois le texte et l’index sur une seule page.

4. Points d’attention

[modifier | modifier le wikicode]
Astuce
  • Le fichier XML (tei-lemma-demo.xml) doit se trouver dans le même répertoire que le fichier .tex.
  • L’ordre est important :
    • d’abord \xmlnamespace,
    • puis \xmlsetsetup,
    • puis les blocs \startxmlsetups.
  • ConTeXt n’interprète pas ... comme un commentaire : cette séquence coupe les blocs et peut rendre les setups inopérants.
  • Si le fichier journal (.log) contient empty xml file, ConTeXt ne trouve pas le contenu TEI (chemin erroné ou fichier vide).

5. Intérêt éditorial

[modifier | modifier le wikicode]

Ce MWE illustre la méthode recommandée pour les éditions savantes dans ConTeXt :

  • encoder le texte « proprement » en TEI ;
  • laisser ConTeXt piloter la mise en page ;
  • séparer clairement les données (XML-TEI) et la présentation (ConTeXt) ;
  • bâtir des outils puissants à partir de règles simples (\xmlsetsetup, \startxmlsetups, registres d’index).

À partir de cette base, il est possible de construire des exemples plus complexes :

  • colonnes parallèles (texte original / traduction) ;
  • appareil critique (balises <app>, <lem>, <rdg>) ;
  • deux niveaux de notes (philologiques / explicatives) ;
  • index thématiques et index de noms propres à partir d’éléments TEI dédiés.

Cet exemple constitue le point d’entrée pour les sections suivantes (édition de Cicéron, textes parallèles, etc.).

4. Vers des exemples plus riches (Iliade, Tusculanes, texte parallèle)

[modifier | modifier le wikicode]

Les exemples plus complexes (Iliade, Tusculanes, parallèle Platon / Cicéron) reprennent le même principe, mais :

  • avec un TEI plus riche (balises de lignes `<l>`, groupes `<lg>`, lemmatisation `<w lemma="...">`, etc.) ;
  • avec des notes de plusieurs types (notes lexicales, notes de traduction, apparat critique) ;
  • avec une mise en page plus sophistiquée (parallèle grec / latin, deux niveaux de notes, etc.).

Pour ne pas surcharger cette page :

  • un exemple « Iliade » (grec + traduction) sera détaillé dans une page dédiée :
 Exemple : Iliade en TEI-XML avec ConTeXt ;
  • un exemple « Tusculanes + République » (texte latin, traduction, notes, lemmatisation) sera présenté dans :
 Exemple : Tusculanes et texte parallèle.

Ces pages reprendront :

  • l’organisation d’un petit projet sur disque (arborescence des fichiers) ;
  • le cahier des charges (objectif de mise en page) ;
  • le fichier TEI-XML complet ;
  • le fichier ConTeXt correspondant ;
  • des explications pas à pas sur le rôle de chaque balise et de chaque setup.

5. Difficultés fréquentes et pistes de travail

[modifier | modifier le wikicode]
Courbe d’apprentissage
TEI demande un peu de temps (vocabulaire, structure, conventions).
ConTeXt + XML est puissant mais verbeux au début.
Organisation des fichiers
Bien séparer :
les données (data/*.xml) ;
les styles (tex/env-...tex) ;
les documents ConTeXt (tex/*.tex) ;
les sorties (build/pdf).
Méthode simple vs « intégrale »
Pour un projet court, la méthode simple (XML minimal + ConTeXt impératif) suffit souvent.
Pour une édition critique ou un gros corpus, la méthode intégrale (TEI complet + ConTeXt configuré) devient plus intéressante.
Ressources utiles
Documentation TEI (Guidelines, TEI by Example, manuels TEI) ;
Documentation ConTeXt sur le module `xml` (ConTeXt Garden) ;
Exemples concrets de cette page et des pages « Iliade » / « Tusculanes ».
Astuce Dans un projet réel, il est souvent judicieux d’encoder en TEI un seul chapitre ou un seul chant, de stabiliser la chaîne XML → ConTeXt, puis seulement d’étendre la méthode à l’ensemble de l’ouvrage.

Retour aux bases
Du document simple aux documents complexes
Aller plus loin avec XML, Lua, automatisation
Outils Lua et automatisation de ConTeXt
Exemples avancés XML-TEI
Exemple Iliade (TEI + ConTeXt)
Exemple Tusculanes / texte parallèle

Ressources externes

[modifier | modifier le wikicode]

 Page précédente : Pipeline professionnel

Part. V, ch. 13  •  Travailler avec TEI-XML dans ConTeXt  •  Sommaire

Page suivante