Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath - Document to Video
Published on Oct 05, 2026
Description:
27/04/2025
Enrichir ses tableurs Excel ou
LibreOffice Calc grâce à des
API - Les espaces de noms et
XPath
Etienne Cavalié (Lully)
hƩps://bibliotheques.wordpress.com/2016/07/26/enrichir-ses-tableurs-excel-ou-libreoffice-calcgrace-a-des-api-34-les-espaces-de-noms-et-xpath/
Sebastien LHUILLIER
PERSONNEL 1 Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath
1
Voici un des fichiers XML récupérés grâce l’ISBN :
ark:/12148/cb34657300h
Tel est le résultat renvoyé par un Sparql Endpoint quand on lui demande une réponse en XML
Un espace de nom, c’est quoi ?
C’est simple : dans les fichiers XML qu’on peut rencontrer, c’est ce qui précède le « : » dans le nom de
la balise.
Ainsi, si dans un fichier XML vous rencontrez EducaƟon européenne [Texte imprimé] /
Romain Gary , la balise Ɵtle a comme espace de nom dc : cela signifie que la propriété Ɵtle
apparƟent à un vocabulaire spécifique, et que ce vocabulaire est précisé dans le fichier XML.
Je ne sais pas pourquoi, les navigateurs n’affichent pas les déclaraƟons d’espaces de nom, et si vous
ouvrez ceƩe noƟce RDF l’espace de nom « dc » ne semblera pas déclaré.
Pour le voir, il vous faut afficher le code source de ceƩe page (Clic droit > Code source de la page ou
Ctrl+U). Il n’y a pas d’indentaƟon dans le code source, c’est pas de bol, ça ne facilite pas la lecture. En
tout cas voilà ce que ça donne :2 Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath
2
J’ai surligné en jaune un ensemble d’aƩributs affectés à la balise racine du fichier . Tous
ces aƩributs s’appellent xmlns:quelquechose="uri"
« ns » signifie namespace (espace de nom). xmlns:quelquechose="uri" signifie donc : espace de nom
XML QuelqueChose est la manière abrégée de raccrocher un ensemble de balise au même vocabulaire
qu’on désigne par un uri commun
Et donc si vous regardez bien, vous verrez que s’y trouve la déclaraƟon de l’espace de nom « dc » sous
la forme :
xmlns:dc="http://purl.org/dc/elements/1.1/"
Et si vous suivez l’URL hƩp://purl.org/dc/elements/1.1/, vous tombez (évidemment) sur la descripƟon
du vocabulaire Dublin Core (non étendu)
Avec XPath, il faut donc désigner un élément en précisant son espace de nom. Pour accéder à la balise
dc:Ɵtle dans le fichier ci-dessus, il faudrait donc préciser « //dc:Ɵtle » et non pas « //Ɵtle »
« Oui, mais dans le résultat Sparql, la balise en quesƟon n’a pas de préfixe… »
C’est vrai, le résultat est dans la ligne :
ark:/12148/cb34657300h
Mais dans la balise racine, on trouve l’aƩribut suivant :
xmlns="http://www.w3.org/2005/sparql-results#"
Ce qui signifie que toutes les balises sans préfixe-espace de nom se raƩachent par défaut au vocabulaire
hƩp://www.w3.org/2005/sparql-results#
Je précise que ceƩe situaƟon est très fréquente dans les API : les résultats Marc21 de WorldCat par
exemple on un espace de nom vide (c’est-à-dire sans préfixe).
Comportement différencié dans Excel et dans Calc
Dans Excel, on constate la chose suivante :
quand la balise a un préfixe déclaré (comme dc:), on peut l’ajouter dans le XPath.
Par exemple, on peut récupérer le dc:Ɵtle en écrivant3 Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath
3
=FILTRE.XML(SERVICEWEB("http://www.sudoc.fr/082268789.rdf");"//
dc:title")
quand la balise se raƩache à un espace de nom sans préfixe (comme c’est le cas dans les
résultats XML de Sparql), le XPath ne trouve rien.
Dans Calc, c’est pire
Qu’il y ait un préfixe ou non, Calc n’arrive pas à accéder aux balises dès lors qu’elles sont associées à
un espace de nom.
Comment faire ?
On entre alors dans le bidouillage / bricolage. Comme je l’ai déjà dit, la documentaƟon est indigente
concernant ceƩe foncƟon, que ce soit pour Excel ou pour Calc. Il existe peut-être une manière propre
de déclarer dans la foncƟon FILTRE.XML (Excel) ou FILTREXML (Calc) un espace de nom, mais je n’ai pas
trouvé comment. Si vous avez la réponse « académique », elle m’intéresse.
En aƩendant, voilà comment je me débrouille :
Pour faire simple, j’introduis entre FILTREXML et SERVICEWEB une étape de transformaƟonmodificaƟon du résultat XML afin d’escamoter l’espace de nom.
Deux cas de figure
les balises ont un espace de nom avec préfixe (« dc: », « rdf: », etc.) :
[manipulaƟon inuƟle sous Excel, comme je le dis plus haut]
J’uƟlise la foncƟon SUBSTITUE() (SUBSTITUTE() en anglais) qui va chercher toutes les
occurrences de ce préfixe et les remplacer par rien.
Exemple :
=SUBSTITUE("Education européenne [Texte imprimé] /
Romain Gary ";"dc:";"")
récupère les toutes les occurrences de « dc: » dans la chaîne de caractères indiquée, et le
remplace par rien.
ApplicaƟon :
=FILTREXML(SUBSTITUE(SERVICEWEB("http://www.sudoc.fr/082268789.
rdf");"dc:";"");"//title")
o SERVICEWEB() récupère le contenu « naƟf » de la noƟce RDF
o la foncƟon SUBSTITUE() récupère le contenu de SERVICEWEB() et y enlève tous les
« dc: »
o la foncƟon FILTREXML() exploite ce fichier XML retraité pour en récupérer la balise
<Ɵtle> qui a remplacé
les balises ont un espace de nom sans nom (comme dans le résultat XML de Sparql)
J’uƟlise alors la foncƟon SUBSTITUE() pour supprimer la déclaraƟon de l’espace de nom
« vide » :4 Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath
4
Exemple :
=SUBSTITUE("";" xmlns=""http://www.w3.org/2005/sparqlresults#"";"")
AƩenƟon : dans Excel comme dans Calc, on peut meƩre des guillemets à l’intérieur de
valeurs de formule en les répétant : "" au lieu de ".
ApplicaƟon :
=FILTREXML(SUBSTITUE(SERVICEWEB("http://data.bnf.fr/sparql?defa
ult-graph-uri=&query=PREFIX+bnfonto%3A+%3Chttp%3A%2F%2Fdata.bnf.fr%2Fontology%2Fbnfonto%2F%3E%0D%0Aselect+%28substr%28str%28%3Furi%29%2C20%2C22%29
+as+%3Fark%29+where+%7B%0D%0A++%3Furi+bnf-onto%3Aisbn+%222-
901040-29-2%22%0D%0A%7D&format=application%2Fsparqlresults%2Bxml&timeout=0&should-sponge=&debug=on");"
xmlns=""http://www.w3.org/2005/sparqlresults#""";"");"//binding[@name='ark']")
Au bout d’un moment, je reconnais qu’il peut être plus prudent de découper le processus en plusieurs
colonnes successives…
Sur un Sparql Endpoint, le HTML pourra être plus perƟnent, sauf si par exemple vous voulez récupérer
plusieurs valeurs (plusieurs colonnes) en une seule requête :
en HTML, il faudra dans le XPath tenir compte du numéro de la colonne : "//td[1]", "//td[2]",
etc
Et on risque de perdre pied
En XML, on précise dans le XPath le nom de la variable mis dans la requête :
o "//binding[@name='ark']",
o "//binding[@name='isbn']",
o "//binding[@name='DateDeNaissance']", etc.
Il me reste un dernier billet à rédiger : comme faire quand une requête renvoie plusieurs réponses (par
exemple : un ISBN renvoie plusieurs ARK, ou plusieurs PPN).
Car la méthode FILTREXML ne renvoie que la première réponse…