Source code for owmeta_core.graph_serialization

'''
Utilies for graph serialization
'''
import hashlib
from os.path import join as p, exists

from rdflib import plugin
from rdflib.parser import Parser, create_input_source
from rdflib.serializer import Serializer

from .rdf_utils import BatchAddGraph


[docs]def write_canonical_to_file(graph, file_name): ''' Write a graph to a file such that the contents would only differ if the set of triples in the graph were different. The serialization format is N-Triples. Parameters ---------- graph : rdflib.graph.Graph The graph to write file_name : str The name of the file to write to ''' with open(file_name, 'wb') as f: write_canonical(graph, f)
def write_canonical(graph, out): serializer = plugin.get('nt', Serializer)(sorted(graph)) serializer.serialize(out) def read_canonical_from_file(ctx, dest, graph_fname): bag = BatchAddGraph(dest, batchsize=10000) parser = plugin.get('nt', Parser)() with open(graph_fname, 'rb') as f, bag.get_context(ctx) as g: parser.parse(create_input_source(f), g) def gen_ctx_fname(ident, base_directory, hashfunc=None): hs = (hashfunc or hashlib.sha256)(ident.encode('UTF-8')).hexdigest() fname = p(base_directory, hs + '.nt') i = 1 while exists(fname): fname = p(base_directory, hs + '-' + str(i) + '.nt') i += 1 return fname