2012-10-10 57 views
2

我正試圖在RDFlib Python中使用以下查詢來獲取用戶的名字字面值的uri。使用python腳本在SPARQL查詢中過濾數據

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)* 

回答

2

剛剛嘗試你的SPARQL變量與str()過濾

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

如果您需要區分大小寫的搜索,你也可以做一個正則表達式這樣的查詢轉換爲字符串:

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

+0

更新後的查詢看起來像這樣,但給出錯誤** TypeError錯誤操作數類型爲一元+:'str'在語句FILTER ** f1Str =「Thomas」 ecsuri = GraphS.query('PREFIX foaf:「'+ +'」PREFIX akt:「'+ +'」PREFIX貓頭鷹:「'+ +'」SELECT?uri WHERE {「'+ +'」?akturi akt:family-name?fname「'+ +'」FILTER (正則表達式(str(?fname),''+ f1Str +'',「i」))。「'+ +'」}「') – imran

+0

Andy是對的,您在python三重引號前後缺少引用 –

0

確保f1Str處於SPARQL語法中:

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

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

另外,把一些換行的查詢字符串 - 錯誤消息將會對你更有用。