teiCorpus et inclusion de fichiers en XML

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 :

En pratique : l’inclusion de fichier

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 !

 


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.