2013-11-08 1 views
1

Я пытаюсь выполнить относительный простой запрос регулярного выражения, однако он использует переменную внутри регулярного выражения. Является ли sparql неспособным использовать такой тип конкатенации, или я использую неправильный метод? То, что я пытаюсь запроса следующий:SPARQL regexp с переменными

SELECT * 
WHERE { 
    ?part local:part_start ?start . 
    ?chunk local:long_region ?long_region 
    BIND(REPLACE(?long_region, ".{"+?start+"}(.{10}).*", "$1") AS ?regionX) 
} 

Я в конечном итоге с небольшой частью из длинной области символов в соответствии с начальным адресом и 10 символов в дальнейшем.

ответ

2

No + не может использоваться для объединения строк в большинстве реализаций SPARQL, в принципе реализация может поддерживать это как extended operator mapping, но я не знаю, что это делает.

Вместо этого вы можете использовать стандартную функцию CONCAT() для достижения своей цели условии, что вы используете SPARQL 1.1 совместимый двигатель:

SELECT * 
WHERE { 
    ?part local:part_start ?start . 
    ?chunk local:long_region ?long_region 
    BIND(REPLACE(?long_region, CONCAT(".{", ?start, "}(.{10}).*"), "$1") AS ?regionX) 
} 
+2

Jena поддерживает + в конкатенации. Но если? Start - номер, строка + номер не определена. Ему понадобится str (? Start). – AndyS

 Смежные вопросы

  • Нет связанных вопросов^_^