Фильтрация данных в запросе SPARQL с использованием скрипта Python

Я пытаюсь получить uri против литерала имени пользователя, используя следующий запрос в RDFlib Python.

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

person imran    schedule 10.10.2012    source источник


Ответы (2)


Просто попробуйте преобразовать переменную SPARQL в строку с фильтром str()

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

Если вам нужен поиск без учета регистра, вы также можете выполнить запрос регулярного выражения следующим образом:

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

person Dominique Guardiola    schedule 11.10.2012
comment
Обновленный запрос выглядит следующим образом, но выдает ошибку TypeError неверный тип операнда для унарного +: 'str' в операторе FILTER f1Str = Thomas ecsuri = GraphS.query ('PREFIX foaf: ‹xmlns.com/foaf/0.1› '+ +' PREFIX akt: ‹aktors.org/ontology/portal#› '+ +' ПРЕФИКС owl: ‹w3.org/2002/07/owl#› '+ +' SELECT? Uri WHERE {'+ +'? Akturi akt: family-name ? fname '+ +' ФИЛЬТР (regex (str (? fname), '+ f1Str +', i)). '+ +'} ') - person imran; 11.10.2012
comment
Энди прав, вам не хватает цитаты до и после тройных кавычек python - person Dominique Guardiola; 11.10.2012

Убедитесь, что f1Str находится в синтаксисе SPARQL:

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

or

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

Также добавьте несколько символов новой строки в строку запроса - сообщения об ошибках будут для вас более полезными.

person AndyS    schedule 11.10.2012