Les aventures de la bibliographie sémantique

Le 27 octobre 2025, Marcello Vitali-Rosati

Les références bibliographiques sont des données essentielles pour toutes les disciplines, mais, dans le cadre des sciences humaines, leur importance est encore plus claire car les textes et les documents sont l'objet même des disciplines humanistes. Or, pour autant que cela puisse sembler absurde, nos références bibliographiques ne sont presque jamais traitées comme des données dans nos articles ou monographies scientifiques. Dans la pire des hypothèses, les références ne sont que des chaînes de caractères, du texte non structuré. C'est le cas de la majorité des contenus, produits avec des traitements de texte (typiquement Word), sans bibliographie structurée.

Mais il y a quand même des possibilités d'écrire en utilisant une bibliographie structurée, par exemple en bibtex, ou en utilisant un logiciel de gestion bibliographique comme Zotero. C'est ce que nous proposons avec l'éditeur de texte Stylo. Stylo permet d'utiliser Zotero ou bibtex pour gérer la bibliographie et ensuite de citer les documents en utilisant le label de la référence. L'éditeur de texte utilise ensuite pandoc pour les conversions en appelant citeproc qui applique un style csl au choix.

Il est évidemment aussi possible d'utiliser des références structurées avec un logiciel de traitement de texte et un plugin qui le relie à un logiciel de gestion bibliographique, ou encore en utilisant une bibliographie structurée dans un workflow semblable à Stylo (markdown + bibtex), ou Latex -- ou finalement d'écrire directement en un format hautement structuré comme TEI.

Mais le problème se pose au moment des données finales. Le format cible, celui qui sera ensuite délivré au lecteurices et aux algorithmes d'indexation, permet-il d'ajouter des informations sémantiques ? En principe, évidemment, oui, mais cela est très peu pratiqué. Il est possible d'ajouter en HTML des liens vers les références structurées (par exemple un fichier ris), ou de structurer la bibliographie en XML TEI ou JATS. Mais personne (ou presque) ne le fait. Le problème dérive de la difficulté relative de réaliser cette tâche, car il n'y a aucun workflow -- à moins d'écrire directement l'XML -- qui le permette.

Les workflows basés sur pandoc ne permettent pas de le faire s'il faut appliquer un style à la bibliographie, car citeproc ne garde pas les informations sémantiques. Il faudrait donc avoir un double traitement: styler la bibliographie avec citeproc et ensuite récupérer les données sémantiques sur bibtex et les réinjecter dans le format final.

Pour mieux expliquer le problème, faisons un petit exemple.

Admettons d'avoir le fichier markdown testbiblio.md suivant :

---
title: Test
bibliography: bib.bib
---
>[...] the greater potential is for _computers as modeling machines, not knowledge jukeboxes_.                                     (mccarty_humanities_2005 p. 22?)                            

La référence est liée au bibtex bib.bib suivant:

@book{mccarty_humanities_2005,
	address = {Basingstoke, Hampshire},
	edition = {Paperback edition},
	title = {Humanities {Computing}},
	isbn = {978-1-4039-3504-5 978-1-137-44042-6},
	publisher = {Palgrave Macmillan},
	author = {McCarty, Willard},
	year = {2005},
}

Admettons d'appliquer le style bibliographique Chicago 18e édition. Appelons la commande:

pandoc -s -f markdown -t html --citeproc testbiblio.md -o testbiblio.html

Nous aurons la sortie HTML (j'omets le head):


<body>
<header id="title-block-header">
<h1 class="title">Test</h1>
</header>
<blockquote>
<p>[…] the greater potential is for <em>computers as modeling machines,
not knowledge jukeboxes</em>. <span class="citation"
data-cites="mccarty_humanities_2005">(McCarty 2005, 22)</span></p>
</blockquote>
<div id="refs" class="references csl-bib-body hanging-indent"
role="list">
<div id="ref-mccarty_humanities_2005" class="csl-entry" role="listitem">
McCarty, Willard. 2005. <em>Humanities <span>Computing</span></em>.
Paperback edition. Palgrave Macmillan.
</div>
</div>
</body>

et en TEI:


<body>
<quote>
  <p>[…] the greater potential is for
  <hi rendition="simple:italic">computers as modeling machines, not
  knowledge jukeboxes</hi>. (McCarty 2005, 22)</p>
</quote>
<p xml:id="ref-mccarty_humanities_2005">McCarty, Willard. 2005.
<hi rendition="simple:italic">Humanities Computing</hi>. Paperback
edition. Palgrave Macmillan.</p>
</body>

Toutes les données sémantiques sont donc perdues.

Elles sont perdues au moment de l'application du style par citeproc.

C'est dommage, car le parseur de pandoc fait un excellent travail sur la bibliographie et est capable de produire un csljson très riche:

pandoc -t csljson bib.bib

donne:


[
  {
    "ISBN": "978-1-4039-3504-5 978-1-137-44042-6",
    "author": [
      {
        "family": "McCarty",
        "given": "Willard"
      }
    ],
    "edition": "Paperback edition",
    "id": "mccarty_humanities_2005",
    "issued": {
      "date-parts": [
        [
          2005
        ]
      ]
    },
    "publisher": "Palgrave Macmillan",
    "publisher-place": "Basingstoke, Hampshire",
    "title": "Humanities Computing",
    "type": "book"
  }
]

Il arrive donc à enrichir les informations contenues dans le bib.bib (par exemple en séparant nom et prénom de l'auteur, mais aussi en identifiant les particules, les parties de la date etc...)

Or pandoc a une extension au writer JATS qui permet de garder ces informations sémantiques dans la sortie JATS finale. C'est l'extension element_citations:

pandoc -s -t jats+element_citations --citeproc testbiblio.md

donne le résultat suivant:


<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" dtd-version="1.2" article-type="other">

[...]

<body>
<disp-quote>
  <p>[…] the greater potential is for <italic>computers as modeling
  machines, not knowledge jukeboxes</italic>. (McCarty 2005, 22)</p>
</disp-quote>
</body>
<back>
<ref-list>
  <title></title>
  <ref id="ref-mccarty_humanities_2005">
    <element-citation publication-type="book">
      <person-group person-group-type="author">
        <name><surname>McCarty</surname><given-names>Willard</given-names></name>
      </person-group>
      <source>Humanities Computing</source>
      <publisher-name>Palgrave Macmillan</publisher-name>
      <publisher-loc>Basingstoke, Hampshire</publisher-loc>
      <year iso-8601-date="2005">2005</year>
      <edition>Paperback edition</edition>
      <isbn>978-1-4039-3504-5 978-1-137-44042-6</isbn>
    </element-citation>
  </ref>
</ref-list>
</back>
</article>

Or cela est possible parce que la référence à la fin n'est pas stylée. Elle est structurée sémantiquement, mais on perd le style. Par ailleurs, dans cette sortie le lien entre la citation et la référence est perdu!

Si nous appliquons un style qui a des caractéristiques particulières, cela ressort encore plus. Par exemple, avec un style csl qui demande un label (ici din-1505-2-alphanumeric):


<article>

[...]

<body>
<disp-quote>
  <p>[…] the greater potential is for <italic>computers as modeling
  machines, not knowledge jukeboxes</italic>. [McCa05 p. 22]</p>
</disp-quote>
</body>
<back>
<ref-list>
  <title></title>
  <ref id="ref-mccarty_humanities_2005">
    <element-citation publication-type="book">
      <person-group person-group-type="author">
        <name><surname>McCarty</surname><given-names>Willard</given-names></name>
      </person-group>
      <source>Humanities Computing</source>
      <publisher-name>Palgrave Macmillan</publisher-name>
      <publisher-loc>Basingstoke, Hampshire</publisher-loc>
      <year iso-8601-date="2005">2005</year>
      <edition>Paperback edition</edition>
      <isbn>978-1-4039-3504-5 978-1-137-44042-6</isbn>
    </element-citation>
  </ref>
</ref-list>
</back>
</article>

Ou encore pire, avec un style "note": (ici,byzantine-and-modern-greek-studies)

<article>

[...]

<body>
<disp-quote>
  <p>[…] the greater potential is for <italic>computers as modeling
  machines, not knowledge
  jukeboxes</italic>.<xref ref-type="fn" rid="fn1">1</xref></p>
</disp-quote>
</body>
<back>
<fn-group>
  <fn id="fn1">
    <label>1</label><p>W. McCarty, <italic>Humanities
    Computing</italic>, Paperback edition (Basingstoke, Hampshire 2005)
    22.</p>
  </fn>
</fn-group>
</back>
</article>

Or, dans le cadre du projet Revue30, nous travaillons en partenariat avec Métopes pour avoir une sortie TEI Commons-publishing avec une bibliographie structurée sémantiquement. Commons est un schéma développé avec l'intention de devenir le standard pour les publications savantes en SHS (il naît de la collaboration entre OpenEdition, Metopes, le Certic et le Pôle Document numérique de Caen).

Il y a deux ans, j'avais pensé qu'une extension au writer TEI pourrait résoudre nos problèmes et j'avais fait une issue sur le repos de pandoc en proposant cette solution.

Mais le problème du style était vite ressorti: il aurait été nécessaire de pouvoir à la fois garder l'information sémantique et styler la bibliographie. Albert Krewinkel, un des contributeurs à pandoc, me renvoyait, justement à une autre issue, cette fois non pas de pandoc, mais de citeproc, ouverte avant par Frederik Elwert: Add support for semantic markup in bibliographies.

Disait Frederik:

For some output formats, it is desirable to not only have a formatted bibliography, but to use semantic markup to identify parts of the bibliography (e.g., title, author, publisher, …). While pandoc supports this for JATS, it is lacking for other output formats like TEI (https://www.tei-c.org/release/doc/tei-p5-doc/en/html/ref-bibl.html) or HTML (https://schema.org/CreativeWork).

The old pandoc-citeproc processor supported this via raw content elements as an extension to CSL, which allowed citation styles to specify bits of semantic markup to be added to the output. An example for TEI using the old processor can be found here: https://github.com/frederik-elwert/teicite.

It would be desirable if either citeproc re-implements the CSL extension, or if it (or pandoc) provides an alternative solution for adding semantic markup to bibliographies.

Super! C'était donc la chose à faire!

Avec Timothée Guicherd et d'autres nous nous sommes lancés dans ce travail.

L'objectif était donc, comme le suggérait Frederik, de conserver à la fois la structure sémantique et le style appliqué par citeproc.

John MacFarlane, le créateur et le développeur principal de pandoc et de citeproc nous faisait remarquer:

Can't do this with the current API. At the least, we'd need new methods for CiteprocOutput class, which would create a labeled Span in pandoc output.

Il fallait donc changer la class CiteporcOutput.

Pandoc et citeproc sont codés en Haskell et nous n'étions pas du tout familiers avec ce langage de programmation. Nous avons passé pas mal de temps à étudier le code et à la fin Tim est arrivé à faire quelque chose qui nous semblait avoir du sens. C'est la pull request 171.

En utilisant ce citeproc bidouillé et une commande du type pandoc --citeproc testbiblio.md, nous obtenons le résultat suivant (pour l'HTML, car nous n'avions touché aux writers pandoc):

<body>
<header id="title-block-header">
<h1 class="title">Test</h1>
</header>
<blockquote>
<p>[…] the greater potential is for <em>computers as modeling machines,
not knowledge jukeboxes</em>. <span class="citation"
data-cites="mccarty_humanities_2005">(<span
class="author">McCarty</span> <span class="date">2005</span>,
22)</span></p>
</blockquote>
<div id="refs" class="references csl-bib-body hanging-indent"
role="list">
<div id="ref-mccarty_humanities_2005" class="csl-entry" role="listitem">
<span class="author">McCarty, Willard</span>. <span
class="date">2005</span>. <em><span class="title">Humanities
<span>Computing</span></span></em>. <span class="edition">Paperback
edition</span>. <span class="publisher">Palgrave Macmillan</span>.
</div>
</div>
</body>

Ici le style est appliqué et les informations sémantiques sont gardées (dans la classe du span). L'information sémantique reste présente dans la citation qui a aussi une ancre vers la référence. Si on applique un style différent, par exemple un style "note":


<body>
<header id="title-block-header">
<h1 class="title">Test</h1>
</header>
<blockquote>
<p>[…] the greater potential is for <em>computers as modeling machines,
not knowledge jukeboxes</em>.<span class="citation"
data-cites="mccarty_humanities_2005"><a href="#fn1" class="footnote-ref"
id="fnref1" role="doc-noteref"><sup>1</sup></a></span></p>
</blockquote>
<section id="footnotes" class="footnotes footnotes-end-of-document"
role="doc-endnotes">
<hr />
<ol>
<li id="fn1"><p><span class="author">W. McCarty</span>, <em><span
class="title">Humanities <span>Computing</span></span></em>, <span
class="edition">Paperback edition</span> (<span
class="publisher-place">Basingstoke, Hampshire</span> <span
class="date">2005</span>) 22.<a href="#fnref1" class="footnote-back"
role="doc-backlink">↩︎</a></p></li>
</ol>
</section>
</body>

Un style "label":


<body>
<header id="title-block-header">
<h1 class="title">Test</h1>
</header>
<blockquote>
<p>[…] the greater potential is for <em>computers as modeling machines,
not knowledge jukeboxes</em>. <span class="citation"
data-cites="mccarty_humanities_2005">[McCa05 p. 22]</span></p>
</blockquote>
<div id="refs" class="references csl-bib-body" role="list">
<div id="ref-mccarty_humanities_2005" class="csl-entry" role="listitem">
<div class="csl-left-margin">[McCa05] </div><div
class="csl-right-inline"><span class="author"><span
class="smallcaps">McCarty, Willard</span></span>: <em><span
class="title">Humanities <span>Computing</span></span></em>. <span
class="edition">Paperback edition</span>. <span
class="publisher-place">Basingstoke, Hampshire</span> : <span
class="publisher">Palgrave Macmillan</span><span class="date">,
2005</span> — ISBN <span class="ISBN">978-1-4039-3504-5
978-1-137-44042-6</span></div>
</div>
</div>
</body>

Nous étions donc ravis de notre travail et pensions que c'était une très bonne réalisation.

Jusqu'à que nous analysions un peu plus attentivement la chose.

John MacFarlane nous faisait déjà remarquer des limitations (cf. ses commentaires à la pull request): certaines informations sémantiques seraient perdues, typiquement la différence entre prénom et nom de l'auteur. Nous n'utilisions pas les informations du csljson, mais nous faisions une utilisation "abusive" des TagNames alors qu'il aurait fallu créer un nouveau constructeur. John nous disait:

Oh, I see now that you are abusing TagNames to add this information to things that aren't names, like container-title.

This seems non-ideal; if we went in this direction I'd rather have a new contructor for the tags.

Mais nous nous sommes ensuite rendus compte que le problème était beaucoup plus profond. Grâce à la contribution d'Yves Marcoux nous avons compris que, tout simplement, la représentation stylée d'une référence n'est physiquement pas compatible avec la représentation sémantique.

MacFarlane insistait sur l'impossibilité de récupérer certaines informations en disant:

On why it wouldn't work: my point was simply that the structured information you can get this way doesn't include the structure you'd need to segregate surname and given name, which seems to be required in the TEI representation.

À cela Yves répond:

That's right. And it is not the only issue. In fact, we came to the conclusion that there is no elegant way to preserve or inject semantics in a bibliography formatted for presentation, so we decided to abandon the idea of having citeproc do it.

Here is the argument (in case it could be useful to anybody): Sneaking semantics in a formatted bibliography must be done invisibly, otherwise, it defeats the formatting. For material made visible in the formatting, semantic information can be injected through invisible qualification (e.g. spans with class attribute in HTML). But for material not displayed in the formatting, the enrichment must be done by invisibly injecting new material to the output. In HTML, for instance, this could be ad hoc attributes of the data- type, or in desperation, comments! Both solutions are unattractive. Combine this to the fact that citeproc would have to do this in an output-format independent way, and, in our view, that settles the case.

Je vais essayer d'expliquer la remarque d'Yves avec un exemple: admettons d'avoir un style -- comme Chicago -- qui demande d'insérer des tirets cadratins quand le nom d'un auteur est répété dans la bibliographie.

Par exemple:

---
title: Test
bibliography: bib.bib
---
>[...] the greater potential is for _computers as modeling machines, not knowledge jukeboxes_. \                                    (mccarty_humanities_2005 p. 22\?)                            

Autre citation \                                    (mccarty_autrelivre_2015\?)                            . 

Et le bibtex:


@book{mccarty_humanities_2005,
	address = {Basingstoke, Hampshire},
	edition = {Paperback edition},
	title = {Humanities {Computing}},
	isbn = {978-1-4039-3504-5 978-1-137-44042-6},
	publisher = {Palgrave Macmillan},
	author = {McCarty, Willard},
	year = {2005},
}

@book{mccarty_autrelivre_2015,
	address = {Test, test},
	edition = {Paperback edition},
	title = {Autre livre},
	publisher = {Autre éditeur},
	author = {McCarty, Willard},
	year = {2015},
}

La sortie que donnera notre citeproc sera:

<body>
<header id="title-block-header">
<h1 class="title">Test</h1>
</header>
<blockquote>
<p>[…] the greater potential is for <em>computers as modeling machines,
not knowledge jukeboxes</em>. <span class="citation"
data-cites="mccarty_humanities_2005">(<span
class="author">McCarty</span>, <span class="date">2005</span> :
22)</span></p>
</blockquote>
<p>Autre citation <span class="citation"
data-cites="mccarty_autrelivre_2015">(<span
class="author">McCarty</span>, <span
class="date">2015</span>)</span>.</p>
<div id="refs" class="references csl-bib-body hanging-indent"
data-entry-spacing="0" role="list">
<div id="ref-mccarty_autrelivre_2015" class="csl-entry" role="listitem">
<span class="author"><span class="smallcaps">McCarty</span>,
Willard</span>. <em><span class="title">Autre livre</span></em>, <span
class="edition">Paperback edition</span>, <span
class="publisher-place">Test, test</span>, <span class="publisher">Autre
éditeur</span>, <span class="date">2015</span>.
</div>
<div id="ref-mccarty_humanities_2005" class="csl-entry" role="listitem">
<span class="author">———</span>. <em><span class="title">Humanities
<span>Computing</span></span></em>, <span class="edition">Paperback
edition</span>, <span class="publisher-place">Basingstoke,
Hampshire</span>, <span class="publisher">Palgrave Macmillan</span>,
<span class="date">2005</span>.
</div>
</div>
</body>


Mais évidemment <span class="author">———</span> n'a aucun sens! C'est même une information sémantique fausse, car cela signifie, ni plus ni moins, que l'auteur du livre est une personne qui s'appelle "———". Cette situation se propose à chaque fois qu'on applique un style, car justement le sens du style est de représenter physiquement d'une manière particulière les informations sémantiques (que l'on pense aux "op. cit", "ibid.", "id.", "et al."...). Le style est une forme de représentation sémantique qui peut donc entrer en contradiction matérielle et physique avec la structuration sémantique faite par une architecture de type clé-valeur.

Conclusions

Il y a plusieurs considérations qui ressortent de ce travail, qui nous a quand même pris un temps énorme. Je vais en lister 3 qui me semblent particulièrement significatives.

En premier lieu la conclusion opérationnelle, à savoir ce que nous allons concrètement faire: si on veut garder l'information sémantique et aussi styler la bibliographie, il est nécessaire d'avoir une double représentation. On aura le texte avec la bibliographie et les citations stylées (avec n'importe quel style) et, ailleurs, les mêmes références non stylées, reliées aux premières avec une ancre. Cela signifie que nous allons appeler pandoc pour produire le csljson d'abord et ensuite pandoc avec citeproc pour produire le TEI ou n'importe quel autre format. Et finalement lier les deux. En TEI on pourra avoir l'élément biblStruct, en HTML un rdfa ou un ris joint. Donc d'une part l'affichage et de l'autre la sémantique: une double représentation, lié par des identifiants.

C'est la conclusion d'Yves:

IMHO, the best way to get a semantically rich bibliography in any kind of output is to completely bypass the application of a CSL style (or any styling mechanism, for that matter). CSL is designed (and works well) for controlling the presentation of a bibliography. Most CSL styles leave out on purpose some of the semantically-relevant information available in the bibliographic record, for the sake of readability or conformance to a bibliographic style (the most common case in point being the replacement of author names by "et al."). I am not sure one could write a CSL style that does not leave out anything. For example, I don’t think the dropping or non-dropping status of a name particle could directly and explicitly be represented in the output of a CSL style, even when that information is explicit in the input to the style (e.g. when that input is expressed in CSL-JSON).

Thus, it seems to me that the natural approach for producing semantically rich bibliographies in TEI or in Schema.org HTML (https://schema.org/CreativeWork) with pandoc is to develop specific writers.

One problem, in the case of a TEI output, is that even using the more structurally rigid biblStruct (as opposed to the less strict bibl), the number of valid structural representations for the same bibliographic information is very large. The writer would need to pick one specific representation, which might make it useful only in a limited range of use cases (i.e. TEI projects). However, different predefined structures could be supported (and selected by an option), covering more use cases (but not all).

Note that I am talking only about bibliographies. CSL processing might still be useful for handling citations and cites (in their CSL meaning).

En second lieu, la conclusion "éditoriale", ou de théorie de l'édition: la séparation entre forme et contenu, forme et sens est fausse. La forme est une représentation matérielle du sens, mais le sens ne peut exister que dans une forme. Quand on le représente avec une autre forme... c'est tout simplement un autre sens. En fait la forme n'est pas une "représentation" du sens, mais c'est le sens lui-même. Cet exemple me fait avancer sur mon travail à propos de la matérialité du sens et surtout l'idée selon laquelle il n'y a pas une essence idéale qui s'incarne ensuite en des modèles partiels. Le modèle est tout ce qu'il peut y avoir. C'est un peu ce que je commençais à proposer dans mon livre C'est la matière qui pense. Cela implique de repenser notamment la notion d'abstraction... mais c'est une autre -- trop longue -- histoire.

Pour finir, une considération méthodologique. J'ai travaillé avec mon équipe pendant un an à un truc qui a débouché sur un échec. C'est un exemple parfait de résultat négatif. Une idée qui semblait bonne et qui finalement s'est révélée non viable. Les résultats négatifs ne sont pas très valorisés par l'académie. Il faut toujours dire à la fin qu'on a produit quelque chose, qu'on a amélioré, inventé, augmenté la connaissance ou je ne sais pas quoi. Là je n'ai rien fait. J'ai juste compris que mon idée initiale était bête, fausse. Et pourtant je n'ai jamais eu autant l'impression de faire de la recherche... C'est peut-être ce que je voulais dire quand je faisais mon Éloge du bug.


Ce billet a été aussi publié sur le Blog de Marccelo Vitali-Rosati