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éthodeplume.rdf.widgetsdict.WidgetsDict.build_metagraph()
).- rewrittenbool
True
si le graphe est issu d’une source externe. Concrètement, les constructeursclean_metagraph()
,copy_metagraph()
etmetagraph_from_iso()
mettent cet attribut àTrue
sur les graphes qu’elles génèrent. Il vaudraFalse
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 supportedexport
(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
relationshiptransitive_subjects
(predicate, object[, ...])Transitively generate subjects for the
predicate
relationshiptriples
(triple)Generator over the triple store
update
(update_object[, processor, initNs, ...])Update this graph with the given update query.
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émentdcat: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 encoreplume.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()
etclean_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()
etmetagraph_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