如何将 SPARQL 命令 INSERT 与 rdflib 一起使用? (不是插入数据)

How to use SPARQL command INSERT with rdflib? (not INSERT DATA)

使用 python 的 rdflib,我试图根据对现有三元组的一些基本操作将新的三元组插入到图形中。例如,在这个基本示例中,我创建了一个图形,我使用 INSERT DATA 填充了 4 个三元组。然后我尝试用 INSERT 来“对称化”这种情况,但是失败了。我做错了什么?

>>>
>>> import rdflib
>>> g = rdflib.Graph()
>>> g.update("INSERT DATA {<a> <b> <c>; <d> <e>.<f> <g> <h>; <i> <j>.}")
>>> print(list(g.triples((None, None, None))))
[(rdflib.term.URIRef('a'), rdflib.term.URIRef('d'), rdflib.term.URIRef('e')), (rdflib.term.URIRef('f'), rdflib.term.URIRef('g'), rdflib.term.URIRef('h')), (rdflib.term.URIRef('a'), rdflib.term.URIRef('b'), rdflib.term.URIRef('c')), (rdflib.term.URIRef('f'), rdflib.term.URIRef('i'), rdflib.term.URIRef('j'))]
>>> g.update("""INSERT {GRAPH {?c ?b ?a.}} WHERE {GRAPH  {?a ?b ?c.}}""")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/rdflib/graph.py", line 1161, in update
    return processor.update(update_object, initBindings, initNs, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/rdflib/plugins/sparql/processor.py", line 56, in update
    strOrQuery = translateUpdate(parseUpdate(strOrQuery), initNs=initNs)
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/rdflib/plugins/sparql/parser.py", line 1071, in parseUpdate
    return UpdateUnit.parseString(q, parseAll=True)[0]
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyparsing.py", line 1955, in parseString
    raise exc
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/pyparsing.py", line 3814, in parseImpl
    raise ParseException(instring, loc, self.errmsg, self)
pyparsing.ParseException: Expected end of text, found 'I'  (at char 0), (line:1, col:1)
>>>

INSERT {GRAPH {?c ?b ?a.}} WHERE {GRAPH {?a ?b ?c.}}

这不是合法的 SPARQL。 INSERTWHERE 子句中的 GRAPH 关键字后面需要跟一个变量或 IRI,指示名为图形的源和目标。

或者,如果您对使用命名图不感兴趣,只想修改默认图,只需完全删除 GRAPH 关键字(和额外的花括号)即可。