diff env/lib/python3.7/site-packages/rdflib/plugins/sparql/update.py @ 5:9b1c78e6ba9c draft default tip

"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author shellac
date Mon, 01 Jun 2020 08:59:25 -0400
parents 79f47841a781
children
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/rdflib/plugins/sparql/update.py	Thu May 14 16:47:39 2020 -0400
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,310 +0,0 @@
-"""
-
-Code for carrying out Update Operations
-
-"""
-
-from rdflib import Graph, Variable
-
-from rdflib.plugins.sparql.sparql import QueryContext
-from rdflib.plugins.sparql.evalutils import _fillTemplate, _join
-from rdflib.plugins.sparql.evaluate import evalBGP, evalPart
-
-
-def _graphOrDefault(ctx, g):
-    if g == 'DEFAULT':
-        return ctx.graph
-    else:
-        return ctx.dataset.get_context(g)
-
-
-def _graphAll(ctx, g):
-    """
-    return a list of graphs
-    """
-    if g == 'DEFAULT':
-        return [ctx.graph]
-    elif g == 'NAMED':
-        return [c for c in ctx.dataset.contexts()
-                if c.identifier != ctx.graph.identifier]
-    elif g == 'ALL':
-        return list(ctx.dataset.contexts())
-    else:
-        return [ctx.dataset.get_context(g)]
-
-
-def evalLoad(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#load
-    """
-
-    if u.graphiri:
-        ctx.load(u.iri, default=False, publicID=u.graphiri)
-    else:
-        ctx.load(u.iri, default=True)
-
-
-def evalCreate(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#create
-    """
-    g = ctx.datset.get_context(u.graphiri)
-    if len(g) > 0:
-        raise Exception("Graph %s already exists." % g.identifier)
-    raise Exception("Create not implemented!")
-
-
-def evalClear(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#clear
-    """
-
-    for g in _graphAll(ctx, u.graphiri):
-        g.remove((None, None, None))
-
-def evalDrop(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#drop
-    """
-    if ctx.dataset.store.graph_aware:
-        for g in _graphAll(ctx, u.graphiri):
-            ctx.dataset.store.remove_graph(g)
-    else:
-        evalClear(ctx, u)
-
-
-def evalInsertData(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#insertData
-    """
-    # add triples
-    g = ctx.graph
-    g += u.triples
-
-    # add quads
-    # u.quads is a dict of graphURI=>[triples]
-    for g in u.quads:
-        cg = ctx.dataset.get_context(g)
-        cg += u.quads[g]
-
-
-def evalDeleteData(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#deleteData
-    """
-    # remove triples
-    g = ctx.graph
-    g -= u.triples
-
-    # remove quads
-    # u.quads is a dict of graphURI=>[triples]
-    for g in u.quads:
-        cg = ctx.dataset.get_context(g)
-        cg -= u.quads[g]
-
-
-def evalDeleteWhere(ctx, u):
-    """
-    http://www.w3.org/TR/sparql11-update/#deleteWhere
-    """
-
-    res = evalBGP(ctx, u.triples)
-    for g in u.quads:
-        cg = ctx.dataset.get_context(g)
-        c = ctx.pushGraph(cg)
-        res = _join(res, list(evalBGP(c, u.quads[g])))
-
-    for c in res:
-        g = ctx.graph
-        g -= _fillTemplate(u.triples, c)
-
-        for g in u.quads:
-            cg = ctx.dataset.get_context(c.get(g))
-            cg -= _fillTemplate(u.quads[g], c)
-
-
-def evalModify(ctx, u):
-
-    originalctx = ctx
-
-    # Using replaces the dataset for evaluating the where-clause
-    if u.using:
-        otherDefault = False
-        for d in u.using:
-            if d.default:
-
-                if not otherDefault:
-                    # replace current default graph
-                    dg = Graph()
-                    ctx = ctx.pushGraph(dg)
-                    otherDefault = True
-
-                ctx.load(d.default, default=True)
-
-            elif d.named:
-                g = d.named
-                ctx.load(g, default=False)
-
-    # "The WITH clause provides a convenience for when an operation
-    # primarily refers to a single graph. If a graph name is specified
-    # in a WITH clause, then - for the purposes of evaluating the
-    # WHERE clause - this will define an RDF Dataset containing a
-    # default graph with the specified name, but only in the absence
-    # of USING or USING NAMED clauses. In the presence of one or more
-    # graphs referred to in USING clauses and/or USING NAMED clauses,
-    # the WITH clause will be ignored while evaluating the WHERE
-    # clause."
-    if not u.using and u.withClause:
-        g = ctx.dataset.get_context(u.withClause)
-        ctx = ctx.pushGraph(g)
-
-    res = evalPart(ctx, u.where)
-
-    if u.using:
-        if otherDefault:
-            ctx = originalctx  # restore original default graph
-        if u.withClause:
-            g = ctx.dataset.get_context(u.withClause)
-            ctx = ctx.pushGraph(g)
-
-    for c in res:
-        dg = ctx.graph
-        if u.delete:
-            dg -= _fillTemplate(u.delete.triples, c)
-
-            for g, q in u.delete.quads.items():
-                cg = ctx.dataset.get_context(c.get(g))
-                cg -= _fillTemplate(q, c)
-
-        if u.insert:
-            dg += _fillTemplate(u.insert.triples, c)
-
-            for g, q in u.insert.quads.items():
-                cg = ctx.dataset.get_context(c.get(g))
-                cg += _fillTemplate(q, c)
-
-
-def evalAdd(ctx, u):
-    """
-
-    add all triples from src to dst
-
-    http://www.w3.org/TR/sparql11-update/#add
-    """
-    src, dst = u.graph
-
-    srcg = _graphOrDefault(ctx, src)
-    dstg = _graphOrDefault(ctx, dst)
-
-    if srcg.identifier == dstg.identifier:
-        return
-
-    dstg += srcg
-
-
-def evalMove(ctx, u):
-    """
-
-    remove all triples from dst
-    add all triples from src to dst
-    remove all triples from src
-
-    http://www.w3.org/TR/sparql11-update/#move
-    """
-
-    src, dst = u.graph
-
-    srcg = _graphOrDefault(ctx, src)
-    dstg = _graphOrDefault(ctx, dst)
-
-    if srcg.identifier == dstg.identifier:
-        return
-
-    dstg.remove((None, None, None))
-
-    dstg += srcg
-
-    if ctx.dataset.store.graph_aware:
-        ctx.dataset.store.remove_graph(srcg)
-    else:
-        srcg.remove((None, None, None))
-
-
-def evalCopy(ctx, u):
-    """
-
-    remove all triples from dst
-    add all triples from src to dst
-
-    http://www.w3.org/TR/sparql11-update/#copy
-    """
-
-    src, dst = u.graph
-
-    srcg = _graphOrDefault(ctx, src)
-    dstg = _graphOrDefault(ctx, dst)
-
-    if srcg.identifier == dstg.identifier:
-        return
-
-    dstg.remove((None, None, None))
-
-    dstg += srcg
-
-
-def evalUpdate(graph, update, initBindings={}):
-    """
-
-    http://www.w3.org/TR/sparql11-update/#updateLanguage
-
-    'A request is a sequence of operations [...] Implementations MUST
-    ensure that operations of a single request are executed in a
-    fashion that guarantees the same effects as executing them in
-    lexical order.
-
-    Operations all result either in success or failure.
-
-    If multiple operations are present in a single request, then a
-    result of failure from any operation MUST abort the sequence of
-    operations, causing the subsequent operations to be ignored.'
-
-    This will return None on success and raise Exceptions on error
-
-    """
-
-    for u in update:
-
-        initBindings = dict( ( Variable(k),v ) for k,v in initBindings.items() )
-
-        ctx = QueryContext(graph, initBindings=initBindings)
-        ctx.prologue = u.prologue
-
-
-        try:
-            if u.name == 'Load':
-                evalLoad(ctx, u)
-            elif u.name == 'Clear':
-                evalClear(ctx, u)
-            elif u.name == 'Drop':
-                evalDrop(ctx, u)
-            elif u.name == 'Create':
-                evalCreate(ctx, u)
-            elif u.name == 'Add':
-                evalAdd(ctx, u)
-            elif u.name == 'Move':
-                evalMove(ctx, u)
-            elif u.name == 'Copy':
-                evalCopy(ctx, u)
-            elif u.name == 'InsertData':
-                evalInsertData(ctx, u)
-            elif u.name == 'DeleteData':
-                evalDeleteData(ctx, u)
-            elif u.name == 'DeleteWhere':
-                evalDeleteWhere(ctx, u)
-            elif u.name == 'Modify':
-                evalModify(ctx, u)
-            else:
-                raise Exception('Unknown update operation: %s' % (u,))
-        except:
-            if not u.silent:
-                raise