Module plume.rdf.metagraph#

Graphes de métadonnées.

class plume.rdf.metagraph.Metagraph#

Bases : Graph

Graphes de métadonnées.

Un graphe de métadonnées est présumé décrire un et un seul jeu de données (dcat:Dataset).

Notes

Tous les graphes de métadonnées sont initialisés avec l’espace de nommage standard de Plume (plume.rdf.namespaces.PlumeNamespaceManager).

Attributes:
freshbool

False pour un graphe de métadonnées généré par désérialisation d’un dictionnaire de widgets (méthode plume.rdf.widgetsdict.WidgetsDict.build_metagraph()).

rewrittenbool

True si le graphe est issu d’une source externe. Concrètement, les constructeurs clean_metagraph(), copy_metagraph() et metagraph_from_iso() mettent cet attribut à True sur les graphes qu’elles génèrent. Il vaudra False dans tous les autres cas.

langlisttuple(str)

Tuple des langues autorisées pour les traductions, hérité le cas échéant du dictionnaire de widgets à partir duquel le graphe a été généré. Dans les autres cas, cet attribut vaut toujours ('fr', 'en').

Methods

absolutize(uri[, defrag])

Turn uri into an absolute URI if it's not one already

add(triple)

Add a triple with self as context

addN(quads)

Add a sequence of triple with context

available_export_formats([no_duplicate, format])

Renvoie la liste des formats d'export recommandés pour le graphe.

bind(prefix, namespace[, override, replace])

Bind prefix to namespace

cbd(resource, *[, target_graph])

Retrieves the Concise Bounded Description of a Resource from a Graph

close([commit_pending_transaction])

Close the graph store

collection(identifier)

Create a new Collection instance.

commit()

Commits active transactions

connected()

Check if the Graph is connected

copy_branch(alt_metagraph, bnode)

Copie dans le graphe une branche d'un autre graphe.

delete_branch(bnode)

Supprime du graphe de métadonnées une branche non liée au dcat:Dataset.

destroy(configuration)

Destroy the store identified by configuration if supported

export(filepath[, format])

Sérialise le graphe de métadonnées dans un fichier.

isomorphic(other)

does a very basic check if these graphs are the same If no BNodes are involved, this is accurate.

items(list)

Generator over all items in the resource specified by list

merge(alt_metagraph[, replace])

Met à jour le graphe de métadonnées avec le contenu d'un autre graphe de métadonnées.

n3()

Return an n3 identifier for the Graph

namespaces()

Generator over all the prefix, namespace tuples

objects([subject, predicate, unique])

A generator of (optionally unique) objects with the given subject and predicate

open(configuration[, create])

Open the graph store

parse([source, publicID, format, location, ...])

Parse an RDF source adding the resulting triples to the Graph.

predicate_objects([subject, unique])

A generator of (optionally unique) (predicate, object) tuples for the given subject

predicates([subject, object, unique])

A generator of (optionally unique) predicates with the given subject and object

print()

Imprime le graphe de métadonnées dans la console (sérialisation turtle).

query(query_object[, processor, result, ...])

Query this graph.

remove(triple)

Remove a triple from the graph

resource(identifier)

Create a new Resource instance.

rollback()

Rollback active transactions

serialize([destination, format, base, encoding])

Serialize the graph.

set(triple)

Convenience method to update the value of object

subject_objects([predicate, unique])

A generator of (optionally unique) (subject, object) tuples for the given predicate

subject_predicates([object, unique])

A generator of (optionally unique) (subject, predicate) tuples for the given object

subjects([predicate, object, unique])

A generator of (optionally unique) subjects with the given predicate and object

transitiveClosure(func, arg[, seen])

Generates transitive closure of a user-defined function against the graph

transitive_objects(subject, predicate[, ...])

Transitively generate objects for the predicate relationship

transitive_subjects(predicate, object[, ...])

Transitively generate subjects for the predicate relationship

triples(triple)

Generator over the triple store

update(update_object[, processor, initNs, ...])

Update this graph with the given update query.

update_metadata_date()

Met à jour la date de dernière modification des métadonnées.

value([subject, predicate, object, default, any])

Get a value for a pair of two criteria

all_nodes

compute_qname

de_skolemize

qname

skolemize

toPython

triples_choices

available_export_formats(no_duplicate=False, format=None)#

Renvoie la liste des formats d’export recommandés pour le graphe.

Parameters:
no_duplicatebool, default False

Si True, lorsque plusieurs formats disponibles utilise la même extension (cas notamment de 'xml' et 'pretty-xml'), la méthode n’en renvoie qu’un.

formatstr, optional

Un format d’export à prioriser. format ne sera jamais éliminé par la suppression de pseudo-doublons effectuée lorsque no_duplicate vaut True. Il s’agira toujours de la première valeur de la liste renvoyée, sauf s’il ne s’agissait pas d’un format d’export disponible (auquel cas il ne sera pas du tout dans la liste renvoyée).

Returns:
list(str)

Notes

À date, cette méthode appelle la fonction plume.rdf.utils.export_formats(), puis exclut du résultat les formats 'xml' et 'pretty-xml' en présence de catégories locales de métadonnées, car leurs espaces de nommage ne sont pas gérés correctement. Il s’agit d’une limitation de RDFLib et non du format, qui pourrait être corrigée à l’avenir.

property available_formats#

list(str): Liste des formats d’export recommandés pour le graphe.

Voir aussi

Metagraph.available_export_formats()

Méthode dont est dérivée cette propriété.

copy_branch(alt_metagraph, bnode)#

Copie dans le graphe une branche d’un autre graphe.

Parameters:
alt_metagraphMetagraph

Le graphe de métadonnées contenant la branche à copier.

bnoderdflib.terms.BNode

Le noeud anonyme sujet de la branche à copier de alt_metagraph. Il est présumé exister en tant qu’objet dans le graphe source, sans quoi la méthode n’aura aucun effet.

Notes

Cette méthode préserve les noeuds anonymes copiés (mêmes identifiants dans le graphe résultant que dans alt_metagraph).

property datasetid#

rdflib.term.URIRef: Identifiant du jeu de données décrit par le graphe.

Peut être None si le graphe de métadonnées ne contient pas d’élément dcat:Dataset.

Il est possible de définir l’identifiant du jeu de données via cette propriété, sous réserve que le graphe soit vide (dans le cas contraire, la commande n’aura aucun effet).

Identifiant aléatoire :

>>> metagraph = Metagraph()
>>> metagraph.datasetid = None
>>> metagraph.datasetid
DatasetId('urn:uuid:...')

Identifiant pré-déterminé :

>>> metagraph = Metagraph()
>>> metagraph.datasetid = '523d5fa9-77a8-41da-a5ce-36b64fe935ed'
>>> metagraph.datasetid
DatasetId('urn:uuid:523d5fa9-77a8-41da-a5ce-36b64fe935ed')

L’identifiant doit être UUID valide, sans quoi un nouvel UUID sera utilisé à la place. Il peut être fourni sous la forme d’une chaîne de caractères, d’un objet uuid.UUID, rdflib.URIRef ou encore plume.rdf.utils.DatasetId.

delete_branch(bnode)#

Supprime du graphe de métadonnées une branche non liée au dcat:Dataset.

Parameters:
bnoderdflib.terms.BNode

Le noeud anonyme sujet de la branche libre à supprimer.

Notes

Cette méthode est récursive. Partant des triplets dont bnode était sujet, elle les supprime et supprime à leur tour les triplets dont leurs objets étaient sujets (sauf à ce que ce sujet demeure l’objet d’un autre triplet), et ainsi de suite.

Elle n’aura d’effet que si tous les triplets dont bnode était objet ont préalablement été supprimés du graphe.

export(filepath, format=None)#

Sérialise le graphe de métadonnées dans un fichier.

Parameters:
filepathstr

Chemin complet du fichier cible.

formatstr, optional

Format d’export. Pour connaître la liste des valeurs acceptées, on exécutera export_formats(). À noter certains formats peuvent donner un résultat peu probant selon le graphe. La propriété available_formats fournit une liste de formats présumés adaptés pour le graphe, il préférable de choisir l’un d’eux. Si aucun format n’est fourni et qu’il ne peut pas être déduit de l’extension du fichier cible, l’export sera fait en turtle.

Notes

Le fichier sera toujours encodé en UTF-8 sauf pour le format NTriples (encodage ASCII).

property is_empty#

bool: Le graphe est-il vide ?

Au sens de cette propriété, un graphe de métadonnées est considéré comme vide quand il contient au plus un identifiant et une date de dernière modification de la fiche de métadonnées.

Un graphe qui ne contiendrait pas d’élément de classe dcat:Dataset sera toujours considéré comme vide.

property linked_record#

tuple(str): Fiche de métadonnées distante référencée par le graphe, le cas échéant.

Le tuple est constitué de deux éléments : l’URL de base du service CSW et l’identifiant de la fiche.

À défaut de configuration sauvegardée, cette propriété vaut (None, None).

Pour sauvegarder une configuration :

>>> metagraph = Metagraph()
>>> metagraph.datasetid = None
>>> metagraph.linked_record = (
...     'http://ogc.geo-ide.developpement-durable.gouv.fr/csw/dataset-harvestable', 
...     'fr-120066022-jdd-d3d794eb-76ba-450a-9f03-6eb84662f297'
...     ) 

Le graphe doit a minima contenir un identifiant de jeu de données, sans quoi la tentative de sauvegarde sera silencieusement ignorée.

Pour effacer la configuration :

>>> metagraph.linked_record = None
merge(alt_metagraph, replace=False)#

Met à jour le graphe de métadonnées avec le contenu d’un autre graphe de métadonnées.

Parameters:
alt_metagraphMetagraph

Un autre graphe de métadonnées.

replacebool, default False

Mode de fusion des deux graphes :

  • Si replace vaut True, les informations du graphe source sont preservées pour les catégories de métadonnées non présentes dans le graphe complémentaire. Sinon, elles sont remplacées par celles du graphe complémentaire.

  • Si replace vaut False, les valeurs du graphe complémentaire ne sont importées que pour les catégories de métadonnées qui n’étaient pas renseignées dans le graphe source.

Notes

À ce stade, le mécanisme de fusion est sommaire. En particulier, il n’est pas récursif et, dans le cas de catégories qui admettent plusieurs valeurs, remplace ou préserve toutes les valeurs plutôt que de les comparer une à une.

Par principe, la propriété dct:identifier n’est jamais remplacée, même si replace vaut True, puisqu’elle est censée rester cohérente avec l’URI du dcat:Dataset.

print()#

Imprime le graphe de métadonnées dans la console (sérialisation turtle).

update_metadata_date()#

Met à jour la date de dernière modification des métadonnées.

plume.rdf.metagraph.SHAPE = <Graph identifier=N749e553d3352487187e631b3e4edb589 (<class 'rdflib.graph.Graph'>)>#

Schéma SHACL définissant la structure des métadonnées communes.

plume.rdf.metagraph.clean_metagraph(raw_graph, old_metagraph=None)#

Crée un graphe propre à partir d’un graphe issu d’une source externe.

Parameters:
raw_graphrdflib.graph.Graph

Un graphe de métadonnées présumé issu d’un import via graph_from_file() ou équivalent.

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant.

Returns:
Metagraph

Notes

Le graphe est retraité de manière à ce qu’un maximum de métadonnées soient reconnues lors de la génération du dictionnaire de widgets. En particulier, la fonction s’assure que tous les noeuds sont des noeuds anonymes.

plume.rdf.metagraph.copy_metagraph(src_metagraph=None, old_metagraph=None)#

Génère un nouveau graphe de métadonnées avec le contenu du graphe cible.

Parameters:
src_metagraphMetagraph, optional

Le graphe dont on souhaite copier le contenu. Si non spécifié, la fonction considère un graphe vide.

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant.

Returns:
Metagraph

Notes

Cette fonction ne réalise aucun contrôle sur les informations qu’elle copie. Si src_metagraph n’est pas issu d’une source fiable, il est préférable d’utiliser clean_metagraph().

plume.rdf.metagraph.metagraph_from_file(filepath, format=None, old_metagraph=None)#

Crée un graphe de métadonnées à partir d’un fichier.

Parameters:
filepathstr

Chemin complet du fichier source, supposé contenir des métadonnées dans un format RDF, sans quoi l’import échouera. Le fichier sera présumé être encodé en UTF-8 et mieux vaudrait qu’il le soit.

formatstr, optional

Le format des métadonnées. Si non renseigné, il est autant que possible déduit de l’extension du fichier, qui devra donc être cohérente avec son contenu. Pour connaître la liste des valeurs acceptées, on exécutera plume.rdf.utils.import_formats().

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant.

Returns:
Metagraph

Notes

Cette fonction se borne à exécuter successivement plume.rdf.utils.graph_from_file() et clean_metagraph().

plume.rdf.metagraph.metagraph_from_iso(raw_xml, old_metagraph=None, preserve='always')#

Crée un graphe de métadonnées à partir d’un XML renvoyé par un service CSW.

Parameters:
raw_xmlstr

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

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant.

preserve{“always”, “if blank”, “never”}, optional

Mode de fusion de l’ancien et du nouveau graphe :

  • Si preserve vaut 'never', le graphe est est intégralement recréé à partir des informations disponibles sur le catalogue distant. Hormis l’identifiant, tout le contenu de l’ancien graphe est perdu.

  • Si preserve vaut 'if blank', les informations de l’ancien graphe ne sont preservées que pour les catégories de métadonnées qui ne sont pas renseignées sur le catalogue distant. .

  • Si preserve vaut 'always', les valeurs du catalogue distant ne sont importées que pour les catégories de métadonnées qui n’étaient pas renseignées dans l’ancien graphe.

Returns:
Metagraph

Examples

>>> from urllib.request import urlopen
>>> from plume.iso.csw import getrecordbyid_request
>>> r = getrecordbyid_request(
    ...     'http://ogc.geo-ide.developpement-durable.gouv.fr/csw/dataset-harvestable', 
    ...     'fr-120066022-jdd-3c998f8c-0e33-4ae5-8535-150a745bccce'
    ...     )
>>> with urlopen(r) as src:
    ...     xml = src.read()
>>> g = metagraph_from_iso(xml)
plume.rdf.metagraph.metagraph_from_iso_file(filepath, old_metagraph=None, preserve='never')#

Crée un graphe de métadonnées à partir d’un fichier XML contenant des métadonnées INSPIRE/ISO 19139.

Parameters:
filepathstr

Chemin complet du fichier source, supposé contenir des métadonnées INSPIRE/ISO 19139, sans quoi la fiche de métadonnées résultante sera certainement vide. Le fichier sera présumé être encodé en UTF-8 et mieux vaudrait qu’il le soit.

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant.

preserve{“never”, “if blank”, “always”}, optional

Mode de fusion de l’ancien et du nouveau graphe :

  • Si preserve vaut 'never', le graphe est est intégralement recréé à partir des informations disponibles sur le catalogue distant. Hormis l’identifiant, tout le contenu de l’ancien graphe est perdu.

  • Si preserve vaut 'if blank', les informations de l’ancien graphe ne sont preservées que pour les catégories de métadonnées qui ne sont pas renseignées sur le catalogue distant. .

  • Si preserve vaut 'always', les valeurs du catalogue distant ne sont importées que pour les catégories de métadonnées qui n’étaient pas renseignées dans l’ancien graphe.

Returns:
Metagraph

Notes

Cette fonction se borne à exécuter successivement plume.rdf.utils.data_from_file() et metagraph_from_iso().

plume.rdf.metagraph.metagraph_from_rdf_data(data, format, old_metagraph=None)#

Crée un graphe à partir de données textuelles, résultant par exemple d’une requête internet.

Parameters:
datastr

Données RDF brutes.

formatstr

Le format d’encodage des données. Pour connaître la liste des valeurs acceptées, on exécutera plume.rdf.utils.import_formats().

old_metagraphMetagraph, optional

Le graphe contenant les métadonnées actuelles de l’objet PostgreSQL considéré, dont on récupèrera l’identifiant (et lui seul, tout le reste est perdu).

Returns:
Metagraph