我想使用 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 执行此请求时,这些术语会毫无问题地添加到数据库中。
我认为我通过将请求放入 f 字符串并在单词上使用函数 quote() 解决了问题,但我的数据库现在填充了单词 %C3%89 而不是“é”,%20 而不是空格。我无法重现其他错误代码,但它的形式为 b'MALFORMED QUERY: Lexical error at line 1, column 135. Encountered: "\" (169), after : ""'