Python上的SPARQL查询:Virtuoso 37000错误SP030

2024-05-12 12:43:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我在构建python脚本以在SPARQL中运行查询时遇到问题

我想得到的是在选择之后立即为每个艺术家指定的信息列表(如艺术家、唱片摄影等)。 脚本如下:

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上尝试,则会出现错误

我提前感谢你的回答,向大家致意


Tags: orghttpprefixartistquerylanguagesparqlresults