MTES-MCT / metadata-postgresql

Plume : gestion des métadonnées du patrimoine PostgreSQL
https://mtes-mct.github.io/metadata-postgresql/
GNU Affero General Public License v3.0
0 stars 1 forks source link

Liens hypertextes des url choisies non explicites selon les thésaurus sélectionnés #185

Open WREATCHED opened 6 months ago

WREATCHED commented 6 months ago

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.

alhyss commented 6 months ago

Pour les hyperliens pointant sur registre.data.developpement-durable.fr, l'idée est de compléter le registre avec des pages HTML présentables. C'est le sujet de l'issue #167.

Pour les autres hyperliens pointant sur du code XML brut, il faudrait ajouter à chaque terme de vocabulaire une propriété foaf:page pointant vers une page HTML qui contient une définition du terme, ou du moins peut aider à le comprendre. Cela a déjà été fait pour certains vocabulaires, par exemple Restrictions d'accès en application du Code des relations entre le public et l'administration, avec des hyperliens sur les articles de Légifrance qui prévoient les différents cas de restriction d'accès.

Ce second sujet concerne notamment les nombreux vocabulaires du registre européen, pour lesquels il est aisé de générer des hyperliens pointant sur des pages lisibles par un être humain. Le registre inclut en effet pour chaque terme une page https://op.europa.eu/en/web/eu-vocabularies/concept/-/resource?uri={URI du concept}. Par exemple : territoire FRA_AR_PAR05.

alhyss commented 6 months ago

Les liens vers les pages lisibles du registre européen ont été ajoutées pour les vocabulaires issus de ce registre.

Pour mémoire, commandes exécutées :

from urllib.parse import quote
from pathlib import Path
from plume.rdf.namespaces import FOAF, RDF, SKOS
from plume.rdf.rdflib import URIRef
from plume.rdf.utils import graph_from_file, abspath

vocpath = Path(abspath('rdf/data/vocabularies'))
for file in vocpath.iterdir():
    if file.is_file() and file.name.startswith('eu_'):
        g = graph_from_file(file, format='turtle')
        for s in g.subjects(RDF.type, SKOS.Concept):
            if not (s, FOAF.page, None) in g:
                h = g.add(
                    (
                        s,
                        FOAF.page, 
                        URIRef(f'https://op.europa.eu/fr/web/eu-vocabularies/concept/-/resource?uri={quote(s)}')
                    )
                )
        with open(file, 'wb') as dest:
            dest.write(g.serialize(encoding='utf-8'))

Reste à regarder si, outre les vocabulaires de notre registre, d'autres vocabulaires sont encore concernés par ce problème.