0

我正在尝试使用 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", 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.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", 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.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", 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.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 实例中)。

4

0 回答 0