使用 Uniprot SPARQL 端点的 QueryBadFormed
QueryBadFormed using Uniprot SPARQL endpoint
我正在使用 SPARQLWrapper 从 Python 编码 SPARQL 查询。端点是 Uniprot,但有 50% 的时间,我在执行代码时遇到错误:
def getReviewProt(accession):
#print(accession)
mystring = '(uniprot:' + ') (uniprot:'.join(accession) + ')'
#print(mystring)
sparql = SPARQLWrapper("http://sparql.uniprot.org/sparql")
sparql.setQuery("""
PREFIX up_core: <http://purl.uniprot.org/core/>
PREFIX up_taxonomy: <http://purl.uniprot.org/taxonomy/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX apf: <http://jena.hpl.hp.com/ARQ/property#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX uniprot: <http://purl.uniprot.org/uniprot/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?is_true
WHERE
{
VALUES (?ac) {"""+mystring+"""}
?ac up_core:reviewed ?is_true
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
return results
if __name__ == '__main__' :
import sys
#print(sys.path)
accession = ["Q6GZX4","Q96375","B1XBG2"]
res = getReviewProt(accession)
for r in res['results']['bindings']:
print(r['is_true']['value'])
所以我得到这个错误:
QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed
当我试图查看确切的错误时,我得到的是:
Exception:virtuoso.jdbc4.VirtuosoException: SQ156: Internal Optimized compiler error : sqlo table has no index in sqldf.c:3782.
Please report the statement compiled
最奇怪的是,当我尝试执行时它有效,但大约有 50% 的时间。在此地址的端点中进行查询时,我得到完全相同的错误:http://sparql.uniprot.org/sparql。有时它工作得很好,所以我迷路了,当然,我希望我的程序在每次执行时都能正常工作。
他们在端点中使用 Virtuoso 软件,所以我猜问题出在这里,但我不知道 Virtuoso 是如何工作的。
我是 SPARQL 的新手,所以我很难理解和解决所有错误,
谁能帮我 ?或者如果这个问题已经解决了,我会很高兴 link :)
谢谢
问题不在您的代码中,而是在 运行 sparql.uniprot.org 端点的两个服务器之一中。如果您请求转到 'good' 机器,它会工作,如果它转到 'broken' 机器,它就会失败。两台机器现在应该都好了。
我正在使用 SPARQLWrapper 从 Python 编码 SPARQL 查询。端点是 Uniprot,但有 50% 的时间,我在执行代码时遇到错误:
def getReviewProt(accession):
#print(accession)
mystring = '(uniprot:' + ') (uniprot:'.join(accession) + ')'
#print(mystring)
sparql = SPARQLWrapper("http://sparql.uniprot.org/sparql")
sparql.setQuery("""
PREFIX up_core: <http://purl.uniprot.org/core/>
PREFIX up_taxonomy: <http://purl.uniprot.org/taxonomy/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX apf: <http://jena.hpl.hp.com/ARQ/property#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX fn: <http://www.w3.org/2005/xpath-functions#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX uniprot: <http://purl.uniprot.org/uniprot/>
PREFIX dc: <http://purl.org/dc/elements/1.1/>
SELECT ?is_true
WHERE
{
VALUES (?ac) {"""+mystring+"""}
?ac up_core:reviewed ?is_true
}
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()
return results
if __name__ == '__main__' :
import sys
#print(sys.path)
accession = ["Q6GZX4","Q96375","B1XBG2"]
res = getReviewProt(accession)
for r in res['results']['bindings']:
print(r['is_true']['value'])
所以我得到这个错误:
QueryBadFormed: a bad request has been sent to the endpoint, probably the sparql query is bad formed
当我试图查看确切的错误时,我得到的是:
Exception:virtuoso.jdbc4.VirtuosoException: SQ156: Internal Optimized compiler error : sqlo table has no index in sqldf.c:3782.
Please report the statement compiled
最奇怪的是,当我尝试执行时它有效,但大约有 50% 的时间。在此地址的端点中进行查询时,我得到完全相同的错误:http://sparql.uniprot.org/sparql。有时它工作得很好,所以我迷路了,当然,我希望我的程序在每次执行时都能正常工作。 他们在端点中使用 Virtuoso 软件,所以我猜问题出在这里,但我不知道 Virtuoso 是如何工作的。 我是 SPARQL 的新手,所以我很难理解和解决所有错误, 谁能帮我 ?或者如果这个问题已经解决了,我会很高兴 link :) 谢谢
问题不在您的代码中,而是在 运行 sparql.uniprot.org 端点的两个服务器之一中。如果您请求转到 'good' 机器,它会工作,如果它转到 'broken' 机器,它就会失败。两台机器现在应该都好了。