带python的sparql-插入带撇号的三元组

带python的sparql-插入带撇号的三元组,python,sparql,sparqlwrapper,Python,Sparql,Sparqlwrapper,我在执行sparql更新时遇到一些问题。正如标题所说,问题在于查询的第二个三元组中的撇号。这就是错误: Response: Error 400: Lexical error at line 20,column 229. Encountered " " (32) after: "s" 以下是python中的代码: from SPARQLWrapper import SPARQLWrapper def Query(query): sparql=SPARQLWrapper("http:/

我在执行sparql更新时遇到一些问题。正如标题所说,问题在于查询的第二个三元组中的撇号。这就是错误:

Response: Error 400: Lexical error at line 20,column 229. Encountered " " (32) after: "s"
以下是python中的代码:

from SPARQLWrapper import SPARQLWrapper


def Query(query):
    sparql=SPARQLWrapper("http://localhost:3030/ann/update")
    sparql.setQuery(query)
    sparql.method='POST'
    sparql.query()

query = """INSERT DATA {
           <http://www.example.com> a <http://purl.org/spar/fabio/Item>;
           rdfs:label 'Webpage's title'^^<http://www.w3.org/2000/01/rdf-schema#string>.
        }"""

Query(query)
从SPARQLWrapper导入SPARQLWrapper
def查询(查询):
sparql=SPARQLWrapper(“http://localhost:3030/ann/update")
setQuery(查询)
sparql.method='POST'
sparql.query()
query=“”插入数据{
A.
rdfs:标签“网页标题”^^。
}"""
查询(查询)

有什么想法吗?

为什么不直接使用
rdfs:label“Webpage's title”^^。
(即,使用双引号)?问题是您使用单引号来标记字符串,但字符串中也有单引号。@JoshuaTaylor感谢您的回复。是的,它可以工作,但问题是当我尝试参数化标题时:像这样:
rdfs:label“+title+”^^。
在这种情况下,我使用了你的建议,但仍然不起作用。这就是这次的错误:
Response:Error 400:在第20行第220列遇到“+”+”。
当我尝试参数化标题时:如下:
rdfs:label“+title+”^
。是的,当您使用字符串连接“参数化”事物时,可能会出现这种问题。试想一下,如果每个人都键入一个
title
值,类似于
some title“…恶意的三元组在这里…:foo a“任意的”
,会发生什么。这将是一个完全合法的插入,你将把任意内容放入你的三重存储。如果你有选择的话,最好使用正确的参数化查询。一个不是万无一失,但更容易检查的选择是使用三重引号字符串。语法中的长字符串文字产品(在中搜索字符串文字长度1)允许您编写
“文本带”和“未转义”
“与相同的东西带”和“'
”。它们可以包含任何内容,因此您只需检查它们是否包含
。为什么不使用
rdfs:label“Webpage's title”^^。
(即,使用双引号)?问题是您正在使用单引号来标记字符串,但字符串中也有单引号。@JoshuaTaylor谢谢您的回答。是的,它可以工作,但问题是当我尝试参数化标题时:像这样:
rdfs:label“+title”+“^^.
在这种情况下,我使用了你的建议,但仍然不起作用。这就是这次的错误:
Response:Error 400:在第20行第220列遇到“+”+”。
当我尝试参数化标题时:如下:
rdfs:label“+title+”^
。是的,当您使用字符串连接“参数化”事物时,可能会出现这种问题。试想一下,如果每个人都键入一个
title
值,类似于
some title“…恶意的三元组在这里…:foo a“任意的”
,会发生什么。这将是一个完全合法的插入,你将把任意内容放入你的三重存储。如果你有选择的话,最好使用正确的参数化查询。一个不是万无一失,但更容易检查的选择是使用三重引号字符串。语法中的长字符串文字产品(在中搜索字符串文字长度1)允许您编写
“文本带”和“未转义”
“与相同的东西带”和“'
”。它们可以包含任何内容,因此您只需检查它们是否包含