fn: boolean Для чего это нужно? - PullRequest
1 голос
/ 26 марта 2019

Я уже читал некоторые статьи, но я все еще не понимаю, что такое "fn: boolean" в XQuery3.0 ... Это функция, на которую я смотрю: http://www.xqueryfunctions.com/xq/fn_boolean.html

ДляНапример: если я введу fn: boolean ((1,2)> (5000,6,1)), это правда.

Если я введу fn: boolean ((6,1)> (1,99,22)), это тоже правда!

Я действительно запутался в этой функции, хотя в онлайн-статье говорится, что эта функция вызывается редко, но я все же хочу выяснить, для чего она нужна ...

Ответы [ 2 ]

3 голосов
/ 26 марта 2019

Функция fn:boolean(X) возвращает эффективное логическое значение для X. Например, эффективное логическое значение 1 - true, 0 - false, "true" - true, "" false ",ложь "есть (подожди) правда.EBV узла (или непустой последовательности узлов) имеет значение true, что делает выражения типа X[following-sibling::X] работающими.

Эффективное логическое значение логического значения является логическим неизменным: это относится к вашему примеру.

В двух случаях обращение к fn: boolean бессмысленно:

  • , где аргумент функции уже является логическим, как в вашем примере

  • , где вызов появляется в контексте, таком как условие XPath2.0 Выражение «if», или предикат в квадратных скобках, или атрибут test, равный xsl:if, где уже действует неявный вызов fn:boolean().

В других контекстах, например, когда вы предоставляете аргумент функции или связываете значение переменной XSLT или XQuery, явный вызов fn: boolean может быть полезен для принудительного перевода значения в правильный тип.Это также может помочь читателю вашего кода понять, что происходит преобразование типов.

1 голос
/ 26 марта 2019

Ну, как вы думаете, что является результатом (6,1) > (1,99,22) в XQuery?Это уже дает логическое значение, поэтому, возможно, вам следует начать разбираться, чтобы сначала понять сравнение последовательностей: https://www.w3.org/TR/xquery-31/#id-general-comparisons говорит: «Результат сравнения истинен тогда и только тогда, когда есть пара атомарных значений, одно впервая последовательность операндов и другая во второй последовательности операндов, которые имеют требуемое соотношение величин ".Так как 6 из первой последовательности слева больше, чем 1 во второй последовательности, сравнение дает истину.

Вызов boolean, тогда это значение не изменит это, так как эта функция для логических значений не дает ничего, кроме передаваемого логического значения.

...