5

我正在尝试使用 RDFlib Python 中的以下查询来针对用户的名字文字获取 uri。

plugin.register(
    'sparql', rdflib.query.Processor,
    'rdfextras.sparql.processor', 'Processor')
plugin.register(
    'sparql', rdflib.query.Result,
    'rdfextras.sparql.query', 'SPARQLQueryResult')

f1Str="Thomas"

ecsuri= GraphS.query("""
                    PREFIX akt: <http://www.aktors.org/ontology/portal#>

                    SELECT ?akturi WHERE{
                        ?akturi akt:family-name ?fname.
                        FILTER (?fname = """+f1Str+""")

                    }""")

它给出了以下错误,这似乎是由于f1Str,我们如何使用存储在某个变量中的值过滤 SPARQL 中的数据。请帮忙。

*Exception Type: ParseException
Exception Value: Expected "}" (at char 481), (line:10, col:29)*
4

2 回答 2

3

只需尝试使用str()过滤器将您的 SPARQL 变量转换为字符串

FILTER (str(?fname) = """+f1Str+""")

如果您需要不区分大小写的搜索,您也可以像这样进行正则表达式查询:

FILTER (regex(str(?fname),"""+f1Str+""","i"))

于 2012-10-11T09:31:58.617 回答
0

确保f1Str使用 SPARQL 语法:

f1Str="'Thomas'"   # SPARQL quoted string.

或者

f1Str="Thomas"
FILTER (?fname = '"""+f1Str+"""') # Add SPARQL quotes

此外,在查询字符串中添加一些换行符 - 错误消息将对您更有用。

于 2012-10-11T10:55:21.507 回答