【问题标题】:Filtering data in SPARQL query using python script使用 python 脚本过滤 SPARQL 查询中的数据
【发布时间】:2012-10-10 18:42:33
【问题描述】:

我正在尝试使用 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)*

【问题讨论】:

    标签: python filter sparql rdflib


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 更新后的查询看起来像这样,但给出了错误 TypeError bad operand type for unary +: 'str' at statement FILTER f1Str="Thomas" ecsuri= GraphS.query(' " PREFIX foaf: xmlns.com/foaf/0.1> "' + + '" PREFIX akt: aktors.org/ontology/portal#> "' + + '" PREFIX owl: w3.org/2002/07/owl#> "' + + '" SELECT ?uri WHERE{ "' + + '" ?akturi akt:family-name ?fname "' + + '" FILTER (regex(str(?fname),'"+f1Str+"', "i")). "' + + '" }"' )
    • 安迪是对的,你在 python 三引号前后都少了一个引号
    【解决方案2】:

    确保f1Str 采用 SPARQL 语法:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多