Lorsque l’on encode des données pour un projet, je me pose de plus en plus souvent la question : qu’est-ce que le corpus ? De quoi ce corpus est-il fait ? Cela doit venir de ma formation en linguistique où un corpus, c’est une collection de… quelque chose. En général, quelque chose de textuel, mais pas toujours (pensez à la langue orale ou encore à une langue des signes).
<teiCorpus> kesako ?
En TEI, il existe l’élément <teiCorpus> défini ainsi :
<teiCorpus> contient la totalité d’un corpus encodé selon la TEI, comprenant un seul en-tête de corpus et un ou plusieurs éléments TEI dont chacun contient un seul en-tête textuel et un texte.
Il est donc possible de penser ses données TEI comme un ensemble, le teiCorpus, dans lequel existent des parties, les fichiers TEI.
La TEI propose deux types de fichiers : les fichiers TEI (les plus connus, courants, dont la balise racine est <TEI>) et les fichiers teiCoprpus (dont la balise racine est <teiCorpus>). La page de documentation sur cet élément est la suivante : https://tei-c.org/release/doc/tei-p5-doc/fr/html/ref-teiCorpus.html On y trouve notamment un exemple. Voici rapidement comment l’on peut concevoir son corpus en TEI :
- le fichier
teiCorpus.xml: contient la description du corpus et les métadonnées communes à l’ensemble du corpus.
Il inclut les éléments du corpus qui sont traités dans des TEI indépendants : soit des fichiers séparés et inclus grâce à xi:include [voir plus bas dans cet article], soit des<TEI>(et tous leurs descendants) directement présents dans le fichier. - chaque
<TEI>du corpus est à considérer comme un fichier TEI comme n’importe quel autres. Ainsi par exemple les métadonnées (dans le<teiHeader>) sont celles propres à cet élément TEI (donc différentes des métadonnées du corpus).
Un exemple à toutes fins utiles :
- Répertoire Sévigné : le corpus TEI représente un site web. Chaque élément TEI est une page du site. C’est un cas un peu particulier donc, mais d’un point de vue technique/structurel, il est assez simple et donc j’imagine facile à appréhender :
- http://sevigne.elan-numerique.fr/data/tei/HN_Sevigne_corpus.xml
- pour voir les fichier TEI inclus, naviguer sur le site et cliquer sur le logo TEI présent sur les différentes pages
En pratique : l’inclusion de fichier
Avant toute chose, il faudra faire référence au namespace dédié à XML Include (en gros, la techno qui permet de gérer les inclusiuons de fichier). Je vous conseille de le faire directement dans l’élément racine de votre XML. Voici un exemple :
<TEI xmlns=”http://www.tei-c.org/ns/1.0″ xmlns:xi=”http://www.w3.org/2001/XInclude”>
Pour inclure en pointant vers une partie seulement d’un fichier cible, plusieurs solutions existent.
– Je n’évoque ici que les cas d’inclusion de fichiers XML mais il est aussi possible d’inclure des fichiers texte et d’utiliser l’attribut @fragid).
– Attention, tout ne fonctionne pas sous Oxygen, mais j’ai testé grâce à un autre processeur XML (xmllint, dispo en ligne de commande sous linux et probablement mac) et cela donne bien le résultat attendu.
1. Inclure un fichier cible dans son intégralité [fonctionne sous Oxygen]
<xi:include href="fichier_a_inclure.xml"/>
2. Inclure une partie d’un fichier cible en spécifiant ce que l’on souhaite inclure grâce à son xml:id [fonctionne sous Oxygen]
<xi:include href="fichier_a_inclure.xml" parse="xml" xpointer="id_element_a_inclure"/>
On inclut dans uniquement l’élement ayant @xml:id = ‘id_element_a_inclure’ (l’élément lui-même en tous ses enfants)
3. Inclure une partie d’un fichier cible en spécifiant ce que l’on souhaite inclure grâce à un chemin XPath [ne fonctionne pas sous Oxygen]
<xi:include href="fichier_a_inclure.xml" parse="xml" xpointer="xmlns(tei="xmlns(tei=http://www.tei-c.org/ns/1.0)xpointer(//tei:div[@xml:id='id_element_a_inclure'])"/>
Là, l’expression est plus lourde car il faut indiquer le xmlns (xml namespace) dans lequel on se situe (dans l’exemple, la TEI) + l’expression XPath. Dans cet exemple, je récupère l’élément <div> ayant @xml:id = 'id_element_a_inclure'
Cette méthode permet de faire des requêtes beaucoup plus poussées.
Juste pour donner un autre exemple, si on souhaite inclure tous les éléments contenus dans la balise <body> (donc un xpath possible est //tei:body/*), on écrira :

<xi:include href="fichier_a_inclure.xml" parse="xml" xpointer="xmlns(tei=http://www.tei-c.org/ns/1.0)xpointer(//tei:body/*)"/>
Yapuka !
OpenEdition vous propose de citer ce billet de la manière suivante :
Anne Garcia-Fernandez (6 décembre 2019). teiCorpus et inclusion de fichiers en XML. ELAN - L'élan littératures, arts et numériques de Litt&Arts (UMR 5316). Consulté le 19 avril 2026 à l’adresse https://doi.org/10.58079/o5e2