Распространено заблуждение, что любой XQuery является выражением FLWOR. Это неправильное представление возникает, когда люди обращаются к XQuery с точки зрения SQL, рассматривая его как SELECT.
На самом деле это не так; выражение FLWOR во многих отношениях является просто другим выражением. Возможно, выражение FLWOR выполняется как выражение SQL, но это не обязательно так.
XQuery можно рассматривать как функциональный язык программирования (например, Haskell), который имеет некоторые декларативные конструкции (например, where и order by).
Выражение 1+2
- это просто выражение XQuery, которое добавляет числа 1 и 2, вокруг него не должно быть неявного выражения FLWOR.
Если вы хотите рассмотреть XQuery в полностью основанной на кортежах алгебре, то вы можете рассматривать вход как один пустой кортеж. Под этим я подразумеваю следующее.
Посмотрите на этот запрос:
for $x in ...
for $y in ...
where $x/@name=$y/@name
return $x
Если вы рассматриваете это в алгебре на основе кортежей, входом для выражения for будет поток кортежей, определяющих $x
и $y
. Очевидно, как это может относиться к запросу к базе данных. Это соответствует таблице с двумя столбцами $x
и $y
и строкой для каждой пары с одинаковыми именами.
Вы могли бы рассмотреть следующий запрос
//foo
как работа с одним кортежем без значений. Это было бы немного похоже на выражение FLWOR без fors или let (просто возвращаемое выражение, если бы это было разрешено). В реляционной земле это будет таблица без столбцов и одной строки. Однако это просто логическая абстракция, и большинство (если не все) реализации XQuery представляют это просто как выражение.