问题描述
我在构建 Python 脚本以在 SPARQL 中运行查询时遇到问题。
我想得到的是在 SELECT 之后立即指定的信息列表(因此艺术家、唱片等),对于每个可能的艺术家。 脚本如下:
from SPARQLWrapper import SPARQLWrapper,JSON
sparql = SPARQLWrapper("http://dbpedia.org/sparql")
sparql.setQuery("""
PREFIX wdt: <http://www.wikidata.org/prop/direct/
SELECT ?artist ?discography ?artistLabel ?genreLabel ?yearstartLabel
?languageLabel WHERE {
?artist wdt:P106 wd:Q488205;
?artist wdt:P358 ?discography;
?artist wdt:P136 ?genre;
?artist wdt:P18 ?image;
?artist wdt:P2031 ?yearstart;
?artist wdt:P1412 ?language.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
print(result["label"]["value"])
SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad
request has been sent to the endpoint,probably the sparql query is bad
formed.
Response:
b'Virtuoso 37000 Error SP030: SPARQL compiler,line 3: Missing
<namespace-iri-string> in PREFIX declaration at \'<\' before
\'http:\'\n\nSPARQL query:\n#output-format:application/sparql-
results+json\n\n PREFIX wdt: <http://www.wikidata.org/prop/direct/\n
SELECT ?artist ?discography ?artistLabel ?genreLabel ?yearstartLabel ?
languageLabel WHERE {\n ?artist wdt:P106 wd:Q488205;\n ?artist wdt:P358
?discography;\n ?artist wdt:P136 ?genre;\n ?artist wdt:P18 ?image;\n ?
artist wdt:P2031 ?yearstart;\n ?artist wdt:P1412 ?language.\n SERVICE
wikibase:label { bd:serviceParam wikibase:language "en". }\n}\n'
正如我之前解释过的,我想要的是包含所寻求的相关信息的艺术家名单。
附言如果在 https://query.wikidata.org/ 上测试,我尝试运行的查询会提供积极响应,但如果我在 https://dbpedia.org/sparql 上尝试,则会出现错误。
我提前感谢您的回答,向大家问好。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)