как сделать подзапрос с фильтрами в jena sparql?

Я пытаюсь применить подзапрос к фильтрам в Jena Sparql. Возможно ли это. Если да, то как? Например:

SELECT ?x WHERE(?y <xyz:> ?z . ?y <abc:> ?x .FILTER regex(?z,subquery,"i")}

Я имею в виду, что я хочу дать выражение в фильтре, используя некоторый подзапрос в jena. Как я могу это сделать? Если нет, то какая его замена?


person cooljohny    schedule 02.07.2014    source источник
comment
Не совсем понятно, о чем ты спрашиваешь, @cooljohny. Вы не сможете внедрить подзапрос прямо в выражение фильтра, но вы, безусловно, можете использовать подзапрос для предоставления значений, которые вы будете использовать в выражении фильтра.   -  person Joshua Taylor    schedule 02.07.2014


Ответы (1)


Вы не можете поместить подзапрос в выражение фильтра, потому что подзапрос не является выражением со значением. Однако вы можете использовать подзапрос для предоставления значений, которые вы используете в выражении фильтра. Например.,

# Find persons whose names are also the names of flowers (Rose, Daisy, etc.) by
# performing a subquery to find all the flower names, and then finding people 
# whose names match those names.
select ?person where {
  ?person a :Person ;
          :name ?name .
  filter regex(?name,?flowerName, "i" )

  { select ?flowerName { ?flower a :Flower ; :name ?flowerName } }
}
person Joshua Taylor    schedule 02.07.2014
comment
Спасибо за ваш ответ ... это именно то, что я хотел ... только еще одно сомнение, в фильтре регулярных выражений я сопоставляю шаблон ‹CAAD0KRhXUUwNjcAhc+4h-ftiJFW7q0y9gmDRGZ0khzyzWUDxbQ@mail.gmail.com›, и он есть в базе данных но когда я запрашиваю его с помощью фильтра, он ничего не дает. Существуют ли какие-либо ограничения на шаблон в фильтрах регулярных выражений, таких как символы типа + - . @ нельзя использовать? - person cooljohny; 02.07.2014
comment
@cooljohny хорошо, это регулярное выражение, поэтому такие символы, как +, обычно означают «по крайней мере один». Однако, если вы ищете точное совпадение, нет причин использовать регулярное выражение; просто запросите точное значение. - person Joshua Taylor; 02.07.2014
comment
на самом деле я не ищу точное совпадение... это просто часть всей строки, и если мой шаблон содержит + и т. д., что я могу сделать? - person cooljohny; 02.07.2014
comment
Если это просто сдерживание, используйте функцию contains. Это должно быть дешевле, чем регулярное выражение. - person Joshua Taylor; 02.07.2014
comment
Но я не хочу, чтобы ответ был истинным или ложным. Я хочу сделать запрос, используя это. Что может быть заменой регулярного выражения (если я хочу использовать + и т. д.)? - person cooljohny; 02.07.2014
comment
Но мне не нужны истинные или ложные ответы. Я не понимаю, о чем вы спрашиваете. регулярное выражение возвращает true или false, как и contains. Если вы ищете, например, ?name, который содержит ?flowerName, вы просто делаете filter contains( ?name, ?flowerName ). - person Joshua Taylor; 02.07.2014
comment
Извините, я что-то неправильно понял .. еще раз Спасибо! Я очень ценю вашу помощь, и вы действительно очень помогли мне со всеми моими вопросами. :) - person cooljohny; 02.07.2014