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émentgmd: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
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 pasfalse
. 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 degmd:distributionInfo
, mais un objetdcat: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), viadqv: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
ouxsd: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émentgmd:MD_Metadata
, sinon elle renverra un élémentgmd: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 vautTrue
.
- 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