我尝试像这样查询数据库:
from rdflib import Graph, Literal, URIRef
from rdflib.namespace import RDF, SKOS
from rdflib.plugins.stores import sparqlstore
# define endpoint according to https://www.stardog.com/docs/
endpoint = 'http://path/to/query' # http://<server>:<port>/{db}/query
# create store
store = sparqlstore.SPARQLUpdateStore()
# I only want to query
store.open(endpoint)
store.setCredentials('me', 'my_pw')
# What does this actually do? That runs through
default_graph = URIRef('some:stuff')
ng = Graph(store, identifier=default_graph)
# # If identifier is not defined, it crashes
# ng = Graph(store)
rq = """
SELECT ?foo ?bar
WHERE {
?something a <http://path/to/data/.ttl#SomeValues>.
?something <http://path/to/data/.ttl#foo> ?foo.
?something <http://path/to/data/.ttl#bar> ?bar.
}
"""
query_res = ng.query(rq)
for s, l in query_res:
print(s, l)
不幸的是,我目前没有得到任何结果:
<head><variable name="foo"></variable><variable name="bar"></variable></head><results></results></sparql>
我的问题是,identifier
in 在Graph
做什么,即这是否重要,如果重要,应该如何定义。当我没有定义它时,代码会崩溃:
响应:b'{"message":"在 URI 中找不到分隔符:N53e412e0f3a74d6eab7ed6da163463bf"}'
如果我输入任何其他有冒号或斜杠的内容,它就会运行(但查询仍然没有返回任何内容)。
谁能简要解释一下,应该放什么以及这是否可能是查询不成功的原因(查询命令本身是正确的;当我从另一个工具调用它时,它工作正常)?