我尝试像这样查询数据库:
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>
我的问题是,
Graph
中的identifier
是做什么的,即它是否重要以及如何定义。如果我不定义它,代码会崩溃并显示以下错误信息:如果我输入任何其他带有冒号或斜杠的内容,它都可以运行(但查询仍然无法返回任何内容)。有人能简要解释一下,在那里应该放什么,以及这可能是查询失败的原因吗(查询命令本身是正确的;当我从另一个工具中调用它时,它可以正常工作)?Response: b'{"message":"No separator character found in the URI: N53e412e0f3a74d6eab7ed6da163463bf"}'
store
和/或ng
中的内容,即是否有一种方法可以检查与数据库的连接是否正常并浏览其内容?我想将其缩小到ì)连接失败或ii)查询失败。有什么想法吗? - Clebtag:stardog:api:context:default
是一个“未命名”的图的名称。尝试使用简单的查询获取此未命名图的内容,例如SELECT * { ?s ?p ?o } LIMIT 10
。结果看起来像你的东西吗? - Stanislav Kralins
看起来像http://path/to/#foo_i
,我只想对所有i
都有foo_i
。谢谢! - Cleb