Module plume.iso.map#

Mapping depuis ISO 19139 vers GeoDCAT-AP.

plume.iso.map.DATE_TYPE_CODE_MAP = {'creation': rdflib.term.URIRef('http://purl.org/dc/terms/created'), 'publication': rdflib.term.URIRef('http://purl.org/dc/terms/issued'), 'revision': rdflib.term.URIRef('http://purl.org/dc/terms/modified')}#

Correspondance entre les codes de type de date ISO 19139 (CI_DateTypeCode) et les propriétés DCAT.

class plume.iso.map.IsoToDcat(raw_xml, datasetid=None)#

Bases : object

Transcripteur ISO 19139 / GeoDCAT-AP.

Parameters:
raw_xmlstr

Le résultat brut retourné par le service CSW, présumé être un XML conforme au standard ISO 19139.

datasetidplume.rdf.utils.DatasetId, optional

L’identifiant du jeu de données. Si non fourni, un nouvel identifiant est généré.

Notes

Le XML n’est pas validé en entrée. Les éléments non prévus ou mal formés ne seront simplement pas exploités.

Attributes:
isoxmlxml.etree.ElementTree.Element

La désérialisation de l’élément gmd:MD_Metadata contenu dans le XML. Si le XML fourni en paramètre ne contenait pas d’élément gmd:MD_Metadata, root sera initialisé avec un élément vide (cas où la requête sur le CSW ne renvoie pas de résultat). Idem si la dé-sérialisation du XML a échoué pour une raison ou une autre.

tripleslist of tuples

Liste des triples résultant de la conversation des métadonnées selon GeoDCAT-AP.

datasetidplume.rdf.utils.DatasetId

L’identifiant du jeu de données.

languagestr

Langue de la fiche de métadonnées. Normalement, cette information est disponible dans le XML. S’il n’a pas été possible de l’extraire, les métadonnées seront présumées être en français.

Methods

load_language_codes()

Charge le dictionnaire des codes de langues.

submap_rights([distribution_nodes])

list of tuples: Triples contenant les informations relatives aux restrictions d'accès aux données.

ISO639_LANGUAGE_CODES = None#

dict: Mapping des codes de langue de trois caractères en codes à deux caractères.

Répertoire des codes de langues utilisés par les métadonnées ISO 19139. Les clés sont les codes sur trois caractères des métadonnées ISO, les valeurs sont les codes sur deux caractères utilisés préférentiellement pour les valeurs litériales RDF.

Ce dictionnaire est chargé si besoin à l’initialisation d’un nouvel objet, grâce à la méthode IsoToDcat.load_language_codes().

classmethod load_language_codes()#

Charge le dictionnaire des codes de langues.

property map_accrual_periodicity#

list of tuples: Triples contenant la fréquence d’actualisation du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_categories#

list of tuples: Triples contenant la ou les catégories ISO 19115.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_conforms_to#

list of tuples: Triples contenant les informations sur la conformité des données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

La fonction ne contrôle pas le champ (scope) de la conformité - dataset, series, etc - l’information est considérée comme valable pour le jeu de données dans tous les cas.

Elle vérifie le résultat du test de conformité, conservant l’information si gmd:pass ne vaut pas false. Ce choix, pragmatique et contestable, tient compte du fait que peu de jeux de données ont un résultat de conformité explicite.

Les explications libres sur la conformité (gmd:explanation) ne sont pas retranscrites.

property map_crs#

list of tuples: Triples contenant le ou les référentiels de coordonnées du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_dates#

list of tuples: Triples contenant les dates de référence du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_description#

list of tuples: Triples contenant le descriptif du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_distribution#

list of tuples: Triples contenant les distributions du jeu de données, ainsi que les informations relatives aux conditions d’accès et d’usage.

Il s’agit des objets dcat:Distribution avec leurs propriétés. La liste est en premier lieu alimentée par les valeurs de gmd:distributionInfo, mais un objet dcat:Distribution sera également ajouté dans le cas où le XML ne répertorie pas de distribution mais contient des informations sur les contraintes juridiques en cas de réutilisation, y compris licence. Du point de vue de DCAT, c’est en effet la distribution qui les porte.

La liste contient également les informations sur les conditions d’accès (dct:accessRights), bien qu’elles ne soient pas portées par la distribution.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si aucune information n’était disponible dans le XML, une liste vide est renvoyée.

property map_keywords#

list of tuples: Triples contenant les mots-clés.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_language#

list of tuples: Triples contenant la ou les langues des données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_location#

list of tuples: Triples contenant l’emprise géographique.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_organizations#

list of tuples: Triples contenant les informations relatives aux organisations responsables.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_provenance#

list of tuples: Triples contenant la généalogie des données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_spatial_resolution#

list of tuples: Triples contenant la résolution spatiale.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

La résolution spatiale est représentée via la propriété dcat:spatialResolutionInMeters si elle est fournie sous la forme d’une distance (qui est alors convertie en mètres), via dqv:hasQualityMeasurement si elle est fournie sous la forme d’une échelle équivalente. À noter que les échelles équivalentes de GeoDCAT-AP sont exprimées par un nombre décimal, pas par le seul dénominateur de la fraction.

Les intervalles d’échelles sont aussi imparfaitement pris en charge par Plume que dans les XML ISO : les deux valeurs apparaîtront sans être explicitement décrites comme un intervalle.

Les distances sans unité sont présumées être en mètres.

property map_status#

list of tuples: Triples contenant l’état du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_temporal#

list of tuples: Triples contenant l’étendue temporelle du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_title#

list of tuples: Triples contenant le libellé du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property map_version#

list of tuples: Triples contenant la version du jeu de données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

property metadata_language#

str: Langue des métadonnées.

Cette propriété est recalculée à chaque interrogation à partir du XML.

submap_rights(distribution_nodes=None)#

list of tuples: Triples contenant les informations relatives aux restrictions d’accès aux données.

Cette propriété est recalculée à chaque interrogation à partir du XML. Si l’information n’était pas disponible dans le XML, une liste vide est renvoyée.

Réf. ISO 19139 : https://standards.iso.org/iso/19139/Schemas/gmd/constraints.xsd

Parameters:
distribution_nodeslist(rdflib.term.BNode), optional

La liste des noeuds représentant les distributions du jeu de données. Si non fourni, la méthode créera un nouveau noeud anonyme qui servira d’objet pour ses triplets.

Returns:
list(tuples)
exception plume.iso.map.MissingMetadataElement#

Bases : Exception

Erreur renvoyée lorsque le XML fourni ne contient pas de métadonnées.

C’est à dire lorsque l’élément gmd:MD_Metadata censé contenir les métadonnées n’est pas présent.

plume.iso.map.SUB_NS = {'http://librairies.ign.fr/geoportail/resources/IGNF.xml#': 'https://registre.ign.fr/ign/IGNF/crs/IGNF/', 'http://registre.ign.fr/ign/IGNF/IGNF.xml#': 'https://registre.ign.fr/ign/IGNF/crs/IGNF/', 'http://registre.ign.fr/ign/IGNF/crs/IGNF/': 'https://registre.ign.fr/ign/IGNF/crs/IGNF/', 'https://registre.ign.fr/ign/IGNF/IGNF.xml#': 'https://registre.ign.fr/ign/IGNF/crs/IGNF/'}#

Substitution d’espaces de nommage.

Les clés sont les espaces de nommage à remplacer par leurs valeurs.

plume.iso.map.date_or_datetime_to_literal(date_str)#

Renvoie la représentation RDF d’une date, avec ou sans heure, exprimée comme chaîne de caractères.

Cette fonction produira une valeur littérale de type xsd:date si la valeur fournie en argument était une date sans heure, xsd:dateTime s’il s’agissait d’une date avec heure.

Parameters:
date_strstr

Représentation ISO d’une date, avec ou sans heure, avec ou sans fuseau horaire.

Returns:
rdflib.term.Literal

Un littéral de type xsd:dateTime ou xsd:date.

Examples

>>> date_or_datetime_to_literal('2022-02-13T15:30:14')
rdflib.term.Literal('2022-02-13T15:30:14', datatype=rdflib.term.URIRef('http://www.w3.org/2001/XMLSchema#dateTime'))
plume.iso.map.denominator_to_float(denominator)#

Renvoie le nombre décimal correspondant à la fraction dont le dénominateur est fourni en argument.

Parameters:
denominatorstr or int or float

Une valeur numérique. 0 ou toute autre valeur invalide sera silencieusement éliminée, la fonction renvoyant alors None.

Returns:
float
plume.iso.map.find_iri(elem, path, subject, predicate, multi=False, transform=None, thesaurus=None, comparator=None)#

Extrait des IRI d’un XML et les renvoie sous forme de triples.

Parameters:
elemxml.etree.ElementTree.Element

Un élément XML présumé contenir l’information recherchée.

pathstr or list(str)

Le chemin de l’information recherchée dans le XML. Il est possible de fournir une liste de chemins, auquel cas la fonction s’appliquera successivement à tous les chemins listés. XPath n’est pas pris en charge, mais il est possible de viser la valeur d’un attribut en ajoutant son nom précédé de '@' à la fin du chemin.

subjectplume.rdf.utils.DatasetId or rdflib.term.BNode or None

L’identifiant du graphe ou le noeud anonyme sujet des triplets à renvoyer. Si la valeur de ce paramètre est explicitement fixée à None, la fonction générera un nouveau noeud anonyme pour chaque triplet renvoyé.

predicaterdflib.term.URIRef

La propriété qui sera le prédicat des triples renvoyés.

multibool, default False

La propriété admet-elle plusieurs valeurs ? Si False, la fonction s’arrête dès qu’une valeur a été trouvée, même si le XML en contenait plusieurs.

transformfunction, optional

Le cas échéant, une fonction de formatage à appliquer aux objets des triples. Elle doit prendre un unique argument, la valeur de l’objet, et renvoyer soit une valeur qui pourra être convertie en instance de rdflib.term.URIRef, soit None.

thesaurustuple(rdflib.term.URIRef, tuple(str))

Source de vocabulaire contrôlée pour les objets des triples. Il s’agit d’un tuple dont le premier élément est l’IRI de la source, le second un tuple de langues pour lequel le thésaurus doit être généré. La fonction ne présume pas de la nature de la valeur recueillie dans le XML, elle lui cherchera une correspondance en tant qu’IRI et en tant qu’étiquette. Il est possible de fournir une liste de thésaurus. Dans ce cas, la fonction les parcourt tous jusqu’à trouver une correspondance.

comparatorfunction, optional

Pour autoriser des correspondances approximatives sur les libellés, ce paramètre doit indiquer la fonction à utiliser. Cf. Thesaurus.look_up_label() pour plus de précisions.

Returns:
list of tuples

Une liste de triples, ou une liste vide si le chemin cherché n’était pas présent dans le XML ou pour une valeur issue de thésaurus non répertoriée.

plume.iso.map.find_literal(elem, path, subject, predicate, multi=False, datatype=None, language=None, transform=None)#

Extrait des valeurs litérales d’un XML et les renvoie sous forme de triples.

Parameters:
elemxml.etree.ElementTree.Element

Un élément XML présumé contenir l’information recherchée.

pathstr or list(str)

Le chemin de l’information recherchée dans le XML. Il est possible de fournir une liste de chemins, auquel cas la fonction s’appliquera successivement à tous les chemins listés. XPath n’est pas pris en charge, mais il est possible de viser la valeur d’un attribut en ajoutant son nom précédé de '@' à la fin du chemin.

subjectplume.rdf.utils.DatasetId or rdflib.term.BNode or None

L’identifiant du graphe ou le noeud anonyme sujet des triplets à renvoyer. Si la valeur de ce paramètre est explicitement fixée à None, la fonction générera un nouveau noeud anonyme pour chaque triplet renvoyé.

predicaterdflib.term.URIRef

La propriété qui sera le prédicat des triples renvoyés.

multibool, default False

La propriété admet-elle plusieurs valeurs ? Si False, la fonction s’arrête dès qu’une valeur a été trouvée, même si le XML en contenait plusieurs.

datatypeURIRef, optional

Le cas échéant, l’IRI du type de données. Les types XSD.string et RDF.langString ne doivent pas être spécifiés.

languagestr, optional

Le cas échéant, la langue de la valeur.

transformfunction, optional

Le cas échéant, une fonction de formatage à appliquer aux objets des triples. Elle doit prendre un unique argument, la valeur de l’objet, et renvoyer soit une valeur qui pourra être convertie en instance de rdflib.term.Literal, soit None.

Returns:
list of tuples

Une liste de triples, ou une liste vide si le chemin cherché n’était pas présent dans le XML.

plume.iso.map.find_value(elem, path)#

Extrait une valeur d’un XML.

Parameters:
elemxml.etree.ElementTree.Element

Un élément XML présumé contenir l’information recherchée.

pathstr or list(str)

Le chemin de l’information recherchée dans le XML. Il est possible de fournir une liste de chemins, auquel cas la fonction s’appliquera successivement à tous les chemins listés. XPath n’est pas pris en charge, mais il est possible de viser la valeur d’un attribut en ajoutant son nom précédé de '@' à la fin du chemin.

Returns:
str or None

La valeur si elle existe.

plume.iso.map.find_values(elem, path, multi=True)#

Extrait des valeurs d’un XML.

Parameters:
elemxml.etree.ElementTree.Element

Un élément XML présumé contenir l’information recherchée.

pathstr or list(str)

Le chemin de l’information recherchée dans le XML. Il est possible de fournir une liste de chemins, auquel cas la fonction s’appliquera successivement à tous les chemins listés. XPath n’est pas pris en charge, mais il est possible de viser la valeur d’un attribut en ajoutant son nom précédé de '@' à la fin du chemin.

multibool, default True

La propriété admet-elle plusieurs valeurs ? Si False, la fonction s’arrête dès qu’une valeur a été trouvée, même si le XML en contenait plusieurs.

Returns:
list

Une liste de valeurs, ou une liste vide si le chemin cherché n’était pas présent dans le XML.

plume.iso.map.list_objects(triples)#

Renvoie la liste des objets d’une liste de triplets.

Parameters:
tripleslist(tuple)

Une liste de triplets.

Returns:
list(rdflib.term.URIRef or rdflib.term.Literal or rdflib.term.BNode)
plume.iso.map.list_subjects(triples)#

Renvoie la liste des sujets d’une liste de triplets.

Parameters:
tripleslist(tuple)

Une liste de triplets.

Returns:
list(rdflib.term.URIRef or rdflib.term.Literal or rdflib.term.BNode)
plume.iso.map.normalize_crs(crs_str)#

Recherche un code de référentiel de coordonnées dans une chaîne de caractères et le normalise.

La fonction ne saura traiter que :

  • Les URI de codes EPSG.

  • Les valeurs numériques, qui sont alors présumées être des codes EPSG.

  • Un code inclut dans une chaîne de caractères, à condition qu’il soit précédé d’un code d’autorité connu. Par exemple 'EPSG:' ou 'EPSG ' pour un code EPSG.

Dans les autres cas, elle renvoie la chaîne de caractères fournie en entrée.

La fonction produit des chaînes de caractères dont find_iri() se chargera de faire des URI. C’est également elle qui devra vérifier que les URI résultants sont effectivement référencés dans les vocabulaires de Plume, la présente fonction ne réalise aucun contrôle.

Parameters:
crs_strstr

Chaîne de caractères présumée contenir un code de référentiel de coordonnées.

Returns:
str or None

None lorsque la fonction n’a pas renconnu de code.

plume.iso.map.normalize_decimal(decimal_str)#

Normalise une valeur décimale.

La fonction s’assure notamment de l’absence de virgule.

Parameters:
language_strstr

Chaîne de caractères présumée correspondre à un nombre décimal.

Returns:
str or None

None lorsque l’argument de la fonction n’a pas la forme d’un nombre décimal.

plume.iso.map.normalize_language(language_str)#

Transforme un code de langue en URI.

Pour l’heure, le traitement est très basique :

  • Si le code est 'fr', 'fre' ou 'fra', la fonction renvoie l’URI correspondant au français dans le vocabulaire de la commission européenne.

  • Sinon, elle juxtapose le code à l’espace de nommage du vocabulaire des langues de la commission européenne.

La fonction produit des chaînes de caractères dont find_iri() se chargera de faire des URI. C’est également elle qui devra vérifier que les URI résultants sont effectivement référencés dans les vocabulaires de Plume, la présente fonction ne réalise aucun contrôle.

Parameters:
language_strstr

Chaîne de caractères présumée contenir un code de référentiel de coordonnées.

Returns:
str or None

None lorsque l’argument de la fonction n’était pas un code sur trois caractères ou un code sur deux caractères pouvant être retranscrit sur trois caractères.

plume.iso.map.parse_xml(raw_xml, strict=True)#

Désérialise un XML contenant des métadonnées ISO 19115/19139.

Parameters:
raw_xmlstr

Un XML présumé contenir des métadonnées ISO 19115/19139, englobées ou non dans une réponse de CSW.

strictbool, default True

Si True (défaut), la fonction génère une erreur lorsque le XML ne contient pas d’élément gmd:MD_Metadata, sinon elle renverra un élément gmd:MD_Metadata vide.

Returns:
xml.etree.ElementTree.Element

L’élément gmd:MD_Metadata trouvé dans le XML.

Raises:
xml.etree.ElementTree.ParseError

En cas d’erreur lors de la désérialisation - par exemple si raw_xml n’est pas un XML valide.

MissingMetadataElement

Si le XML ne contient pas d’élément gmd:MD_Metadata et que strict vaut True.

plume.iso.map.remove_objects(triples, object)#

Supprime de la liste les triplets dont l’objet est fourni en argument.

Parameters:
tripleslist(tuple)

Une liste de triplets.

objectrdflib.term.Literal or rdflib.term.URIRef or rdflib.term.BNode

Un objet RDF, ou une liste d’objets RDF.

plume.iso.map.to_spatial_resolution_in_meters(value, unit)#

Convertit en mètres une résolution spatiale potentiellement exprimée dans une autre unité.

Parameters:
valuestr

Chaîne de caractères correspondant à une valeur décimale, représentant une échelle équivalente.

Returns:
float
plume.iso.map.wns(tag)#

Explicite le tag en remplaçant le préfixe par l’URL de l’espace de nommage correspondant.

La fonction n’aura pas d’effet si le tag n’est pas de la forme 'prefix:objet' ou si le préfixe n’est pas reconnu. Le tag est alors retourné inchangé.

Parameters:
tagstr

Un tag XML présumé contenir un préfixe d’espace de nommage.

Returns:
str