由于“é”字母或空格的术语编码错误,导致 Python 中的 SPARQL 查询格式错误

问题描述 投票:0回答:1

我想使用 sparqlwrapper 使用 python 执行插入查询。但是当我执行查询时,我收到一条错误消息,告诉我我的查询格式错误。我怀疑错误是法语中的某些特殊重音字符。

这就是我所做的:

db = SPARQLWrapper(config.SPARQL_UPDATE_ENDPOINT)

query="""PREFIX : <http://www.my_ontologie.owl>
INSERT DATA {
GRAPH <http://my_graph.com>{
:athlétisme :hasGender :Masculine;
:PartOfSpeech :CommonNoun;
:hasDefinition "discipline sportive regroupant les sports pratiqués dans un stade : course, saut, lancer...";
:hasFrenchPhoneticForm "ATLETISME";:hasCapitalForm "ATHLÉTISME".
}
}"""
print(query)
db.setMethod('POST')
db.setQuery(query)
db.query()

这是我得到的错误:

SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: A bad request has been sent to the endpoint: probably the SPARQL query is badly formed. 

Response:
b'MALFORMED QUERY: Lexical error at line 1, column 135.  Encountered: "\\u00a9" (169), after : ""'

经过一些研究,我发现这是一些编码错误,我尝试用

query.encode('utf-8')
query.encode('unicode-escape')
对我的查询进行编码,但它给了我其他编码错误。 我查看了 Sparqlwrapper 的文档,但没有找到任何可以帮助我的内容。顺便说一句,当我在 SPARQL 编辑器中对 graphDB 执行此请求时,这些术语会毫无问题地添加到数据库中。

python sparql graphdb sparqlwrapper
1个回答
0
投票

我认为我通过将请求放入 f 字符串并在单词上使用函数 quote() 解决了问题,但我的数据库现在填充了单词 %C3%89 而不是“é”,%20 而不是空格。我无法重现其他错误代码,但它的形式为 b'MALFORMED QUERY: Lexical error at line 1, column 135. Encountered: "\" (169), after : ""'

© www.soinside.com 2019 - 2024. All rights reserved.