在本地 Wikibase 实例上使用 wikibaseintegrator 包执行 SPARQL 查询

问题描述

我正在尝试使用 Python 包 wikibaseintegrator(版本 0.10.0)运行 SPARQL 查询

程序编写如下:

from wikibaseintegrator.wbi_config import config as wbi_config
from wikibaseintegrator import wbi_login,wbi_core

wbi_config['MEdiawiKI_API_URL'] = 'http://localhost/database_name/api.PHP'
wbi_config['SPARQL_ENDPOINT_URL'] = 'http://localhost:8989/database_name/sparql'
wbi_config['WIKIBASE_URL'] = 'http://wikibase.svc'

temp_username = "placeholder_username"
temp_password = "placeholder_password"

def main():
    login_instance = login()
    
    sparql_str = """
        SELECT ?item ?itemLabel 
        WHERE 
        {
          ?item wdt:P98 wd:Q45.
          SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
        }
    """
    
    sparql_results = run_sparql_query(sparql_str)
    print(sparql_results)

def login(username=temp_username,password=temp_password):
    login_instance = wbi_login.Login(user=username,pwd=password)
    return login_instance
    
def run_sparql_query(sparql_str):
    sparql_results = wbi_core.ItemsEngine.execute_sparql_query(sparql_str,endpoint=wbi_config['SPARQL_ENDPOINT_URL'])
    return sparql_results

#    MAIN
if __name__ == "__main__": main()

当我运行这个时,我得到的错误是:

Traceback (most recent call last):
  File "database_script.py",line 52,in <module>
    if __name__ == "__main__": main()
  File "database_script.py",line 40,in main
    sparql_results = run_sparql_query(sparql_str)
  File "database_script.py",line 48,in run_sparql_query
    sparql_results = wbi_core.ItemsEngine.execute_sparql_query(sparql_str,endpoint=wbi_config['SPARQL_ENDPOINT_URL'])
AttributeError: module 'wikibaseintegrator.wbi_core' has no attribute 'ItemsEngine'

然而,文档 (https://github.com/LeMyst/WikibaseIntegrator) 似乎暗示这是格式化查询的正确方法。任何诊断方面的帮助将不胜感激!

编辑 1:文档说它在 ItemEngine (The method wbi_core.ItemEngine.execute_sparql_query()) 中,但程序本身似乎显示它在 FuctionsEngine 中

我已经尝试了所有这些变体,但错误是相同的:

$ python database_script.py
Traceback (most recent call last):
  File "database_script.py",in run_sparql_query
    sparql_results = wbi_core.FuctionsEngine.execute_sparql_query(sparql_str,endpoint=wbi_config['SPARQL_ENDPOINT_URL'])
AttributeError: module 'wikibaseintegrator.wbi_core' has no attribute 'FuctionsEngine'

$ python database_script.py
Traceback (most recent call last):
  File "database_script.py",in run_sparql_query
    sparql_results = wbi_core.ItemEngine.execute_sparql_query(sparql_str,endpoint=wbi_config['SPARQL_ENDPOINT_URL'])
AttributeError: type object 'ItemEngine' has no attribute 'execute_sparql_query'

$ python database_script.py
Traceback (most recent call last):
  File "database_script.py",in run_sparql_query
    sparql_results = wbi_core.FunctionEngine.execute_sparql_query(sparql_str,endpoint=wbi_config['SPARQL_ENDPOINT_URL'])
AttributeError: module 'wikibaseintegrator.wbi_core' has no attribute 'FunctionEngine'

编辑 2:更大的问题似乎是缺少 SPARQL 服务的安装,因为我已经使用 wamp64 运行它。我安装了一个 Docker 实例,开箱即用变得相当容易(除了导出 wamp64 版本并导入到 Docker 实例中)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...