使用 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' 机器,它就会失败。两台机器现在应该都好了。