#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 еще раз спасибо! Я действительно ценю вашу помощь, и вы действительно очень помогли мне со всеми моими вопросами. 🙂