【问题标题】:How to run a sparql query from Python over my GraphDB repository?如何通过我的 GraphDB 存储库从 Python 运行 sparql 查询?
【发布时间】:2021-06-09 07:40:08
【问题描述】:

我正在尝试运行一个简单的查询:

"""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?label
    WHERE { ?a rdfs:label ?label }
""")

通过我的 GraphDB 存储库,但来自 Python。经过一番搜索,我发现 SPARQL 包装器可以用于此,但我不确定如何让 python 连接到我的 GraphDB(端点?)。我对 API 没有经验。到目前为止我所拥有的:

from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://192.168.0.12:7200/repositories/MyRepository")
sparql.setQuery("""
    PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
    SELECT ?label
    WHERE { ?a rdfs:label ?label }
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print(result["label"]["value"])

print('---------------------------')

for result in results["results"]["bindings"]:
    print('%s: %s' % (result["label"]["xml:lang"], result["label"]["value"]))

我从另一个 stackoverflow 复制了这个示例查询,但只更改了 where 查询的主题,因此它适用于我的数据,它适用于他们指向那里的存储库 (http://dbpedia.org/sparql),但不适用于链接我从 graphDB 的存储库中获取。

有什么想法吗?

【问题讨论】:

  • 问题:你得到一个异常或只是一个空的结果集?
  • 尝试使用简单的选择查询来查看是否有任何结果。上面的例子对我有用,除了最后一个打印语句。选择 * where { ?s ?p ?o 。 } 限制 100
  • 有趣!我实际上得到以下错误: urllib.error.URLError:
  • 这对我来说表明我的 python 没有与我在 graphDB 上的存储库正确通信。这是我感到困惑的一点:我是否使用 sparql = SPARQLWrapper("192.168.0.12:7200/repositories/MyRepository") 正确指向了我的存储库
  • @Robin,curl 是一个命令行程序。使用它来测试你的 gdb 端点,而不会有你的 python 工具堆栈中的某些东西妨碍你的风险。

标签: python sparql graphdb sparqlwrapper


【解决方案1】:

关键是要确保您用来连接存储库的链接不是 GraphDB 提供给您的版本,而是该链接的 localhost 版本。 GraphDB 为您提供了一个 ipadress 链接。你必须用“localhost”替换ip地址,它会起作用。 (至少在本地)。

【讨论】:

  • 关键是确保您使用的任何形式都可以从您的环境中访问。 GraphDB 可能在单独的主机或虚拟机上运行,​​在这种情况下 localhost 将无法正常工作。但是很好,你解决了你的问题......
猜你喜欢
  • 2023-03-07
  • 2022-06-11
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多