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

#rdf #sparql #jena #tdb

#rdf #sparql #jena #tdb

Вопрос:

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

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

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

Комментарии:

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

Ответ №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 } }
}
  

Комментарии:

1. Спасибо за ваш ответ .. это именно то, что я хотел… еще одно сомнение: в фильтре регулярных выражений шаблон, для которого я подбираю, является <CAAD0KRhXUUwNjcAhc 4h-ftiJFW7q0y9gmDRGZ0khzyzWUDxbQ@mail.gmail.com > и он есть в базе данных, но когда я запрашиваю его с помощью filter, он ничего не дает. Существуют ли какие-либо ограничения на шаблон в фильтрах регулярных выражений, например, символы типа — . @ не могут быть использованы?

2. @cooljohny ну, это регулярное выражение, поэтому символы типа обычно означают «по крайней мере, один». Однако, если вы ищете точное соответствие, нет причин использовать регулярное выражение; просто запросите точное значение.

3. на самом деле я не ищу точного соответствия .. это всего лишь часть всей строки, и если мой шаблон содержит и т.д., Что я могу сделать?

4. Если это просто сдерживание, используйте функцию contains . Это должно быть дешевле, чем выполнение регулярного выражения.

5. Извините, я неправильно понял something..an еще раз спасибо! Я действительно ценю вашу помощь, и вы действительно очень помогли мне со всеми моими вопросами. 🙂