Open WREATCHED opened 9 months ago
Visiblement la syntaxe pour consulter les objets du registre de l'INSEE a encore changé... Nous avions déjà dû modifier les URL il y a quelques mois - cf. issue #152.
Par exemple, pour l'URI http://id.insee.fr/geo/commune/01006, l'équivalent de https://rdf.insee.fr/sparql/describe?uri=http%3A//id.insee.fr/geo/commune/01006 est maintenant
http://rdf.insee.fr/sparql/?query=DESCRIBE%20%3Chttp://id.insee.fr/geo/commune/01006%3E - soit la forme encodée de http://rdf.insee.fr/sparql/?query=DESCRIBE <URI de l'objet>
. Mais le résultat est aussi de moins en moins lisible...
En alternative, j'envisagerais bien d'utiliser pour les hyperliens le vocabulaire des communes de France sur le registre Loterre (projet du CNRS). Il a l'intérêt de faire la correspondance avec les autres vocabulaires de référence sur le sujet, dont celui de l'INSEE. Il s'agirait soit de pointer directement sur ce registre, soit d'utiliser les pages Wikipédia qu'il référence.
NB1 : Utiliser les requêtes SPARQL DESCRIBE
sur le registre de l'INSEE permettrait au moins d'éviter les erreurs 404. Cette solution au moins devrait être mise en oeuvre dès la prochaine version, avant qu'une version ultérieure ne référence des URL alternatives apportant des informations plus exploitables.
NB2 : Les URI formées à partir du code INSEE ont un alias dont la partie identifiante est un UUID, et lancer la requête DESCRIBE
sur ceux-là semble apporter davantage d'informations, notamment les libellés des communes. Exemple pour la commune d'Ambléon (01006).
Le commit ci-avant a remplacé les URL https://rdf.insee.fr/sparql/describe?uri={URI de l'objet}
par des URL http://rdf.insee.fr/sparql/?query=DESCRIBE <{URI de l'objet}>
, ce qui les rend de nouveau fonctionnelles.
Pour mémoire, commandes exécutées :
from urllib.parse import quote
from plume.rdf.namespaces import FOAF, RDF, SKOS
from plume.rdf.rdflib import URIRef
from plume.rdf.utils import graph_from_file, abspath
for vocabulary in ('insee_department', 'insee_commune', 'insee_region', 'insee_individual_territories'):
g = graph_from_file(abspath(f'rdf/data/vocabularies/{vocabulary}.ttl'), format='turtle')
for s, o in g.subject_objects(FOAF.page):
if str(o).startswith('https://rdf.insee.fr/sparql/describe?uri='):
h = g.remove((s, FOAF.page, o))
h = g.add(
(
s,
FOAF.page,
URIRef('https://rdf.insee.fr/sparql/?query={}'.format(quote(f'DESCRIBE <{str(s)}>')))
)
)
with open(abspath(f'rdf/data/vocabularies/{vocabulary}.ttl'), 'wb') as dest:
dest.write(g.serialize(encoding='utf-8'))
Les URI synonymes basées sur des UUID étaient intégrées aux vocabulaires pour les régions et départements, donc je les ai utilisées pour créer des liens un peu plus informatifs, même si la présentation de l'information reste peu accessible.
Commandes exécutées, pour mémoire :
from urllib.parse import quote
from plume.rdf.namespaces import FOAF, RDF, SKOS
from plume.rdf.rdflib import URIRef
from plume.rdf.utils import graph_from_file, abspath
for vocabulary in ('insee_department', 'insee_region'):
g = graph_from_file(abspath(f'rdf/data/vocabularies/{vocabulary}.ttl'), format='turtle')
for s, o in g.subject_objects(FOAF.page):
a = g.value(s, SKOS.exactMatch)
if a and str(o).startswith('https://rdf.insee.fr/sparql/?query='):
h = g.remove((s, FOAF.page, o))
h = g.add(
(
s,
FOAF.page,
URIRef('https://rdf.insee.fr/sparql/?query={}'.format(quote(f'DESCRIBE <{str(a)}>')))
)
)
with open(abspath(f'rdf/data/vocabularies/{vocabulary}.ttl'), 'wb') as dest:
dest.write(g.serialize(encoding='utf-8'))
Ce n'est pas fait pour les communes à ce stade, car les URI synonymes n'avaient pas été inclus dans le fichier turtle pour limiter la taille de ce dernier.
Contexte Plume autorise la saisie de lien hypertexte au travers de listes déroulantes, elles-mêmes générées par des thésaurus.
Un exemple Je choisis dans un groupe de valeur ‘Thèmes’ le thésaurus Commune française (INSEE) et une valeur dans liste déroulante ‘Ain’ L’url de l’insee retourne une erreur 404 dans le navigateur.