如何解决Python 上的 SPARQL 查询:Virtuoso 37000 错误 SP030
我在构建 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 举报,一经查实,本站将立刻删除。