我希望尽可能小,但仍然是自我一致的,并且使用RDFLib中的SPARQL . 我有RDFLib版本'4.0.1' .
我想有一个代码执行以下操作
-
导入RDFLib .
-
创建一个简单的图形(从2到4的关系)
-
将此图形写入rdf格式的文件中 .
-
从文件中读取图形 .
-
使用SPARQL从图中提取内容 .
ADDED
我自己尝试(首先没有写入和读取文件),我无法做到 . 这就是我所拥有的:
import rdflib
g = rdflib.ConjunctiveGraph()
has_border_with = rdflib.URIRef('www.example.org/has_border_with')
located_in = rdflib.URIRef('www.example.org/located_in')
germany = rdflib.URIRef('www.example.org/country1')
france = rdflib.URIRef('www.example.org/country2')
china = rdflib.URIRef('www.example.org/country3')
mongolia = rdflib.URIRef('www.example.org/country4')
europa = rdflib.URIRef('www.example.org/part1')
asia = rdflib.URIRef('www.example.org/part2')
g.add((germany,has_border_with,france))
g.add((china,has_border_with,mongolia))
g.add((germany,located_in,europa))
g.add((france,located_in,europa))
g.add((china,located_in,asia))
g.add((mongolia,located_in,asia))
x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""")
print x
结果我得到:
Traceback (most recent call last):
File "hello_world.py", line 23, in <module>
x = g.query("""select ?country where { ?country www.example.org/located_in www.example.org/part1 }""")
File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/graph.py", line 1045, in query
query_object, initBindings, initNs, **kwargs))
File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/plugins/sparql/processor.py", line 72, in query
parsetree = parseQuery(strOrQuery)
File "/usr/local/lib/python2.7/dist-packages/rdflib-4.0.1-py2.7.egg/rdflib/plugins/sparql/parser.py", line 1034, in parseQuery
return Query.parseString(q, parseAll=True)
File "/usr/lib/python2.7/dist-packages/pyparsing.py", line 1032, in parseString
raise exc
pyparsing.ParseException: Expected "}" (at char 24), (line:1, col:25)
1 回答
有几个问题:
以
http://
开头命名您的资源SPARQL查询中的
个URL需要
<>
使用简单的
Graph
而不是ConjunctiveGraph
您可以使用
Graph.serialize
和Graph.parse
方法保存和读取文件(参见代码)尝试对示例代码进行以下修改: