Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API - Les espaces de noms et XPath

Published on Oct 05, 2026

Enrichir ses tableurs Excel ou LibreOffice Calc grâce à des API  - Les espaces de noms et XPath

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…