Очень полезная идиома для предоставления значений по умолчанию сжато в XQuery основан на правилах конверсии хз : string to xs: boolean вместе с поведением
$sequence[.]
Использование '.' поскольку предикат в выражении последовательности оценивает каждый элемент в последовательности как логический, если true, то этот элемент включен, если false, он исключен. Правило преобразования для xs: string для boolean является «true» для строк с ненулевой длиной и «false» для нулевой длины или пустых последовательностей. Ниже приведен подробный эквивалент последовательности xs: string.
за $ элемента $ последовательности возврата если (не (пусто ($ пункт)) и длины строки ($ элемент)> 0) тогда $ пункт еще()
Таким образом, следующая картина часто используется, чтобы сказать, «Использование $ х, если $ й не пусто или нулевой длиной, в противном случае использовать $ Y.
($x , $y)[.][1]
Обратите внимание на„[1]“, который выбирает первый элемент, который в результате предшествующего выражения. Пример предоставления значения по умолчанию для $ x, как
($x , "Default value")[.][1]
То же результаты или аргументы функций:
cts:search(doc() , (get-the-search-string() , "default")[.][1])
где «получить-на-поиск строку()» может вернуть пустую последовательность или строку нулевой длины или последовательность 1 или больше строк.
В вашем примере вы хотите пустую строку в качестве значения по умолчанию, так небольшой вариант может быть использован, чтобы позволить «», но не()
let $query := ($q-text,"")[1]
xdmp: получить-запрос-поле() также принимает необязательный второй параметр, который является значением по умолчанию для поля. Вы можете сделать 'xdmp: get-request-field (« q »,« »)'. –
ohh! nice..thanks dave – basari66