Язык XML

       

Булевы значения


Объект типа boolean может иметь два значения: true и false.

Обработка выражения or сводится к обработке каждого операнда и приведению его значения к булевому типу, как если бы имел место вызов функции . Если значением какого-либо из операндов будет true, то и значением всего выражения в целом тоже будет true, в противном случае это будет false. Если в результате обработки левого операнда получено true, то обработка правого операнда не производится.

Обработка выражения and сводится к обработке каждого операнда и приведению его значения к булевому типу, как если бы имел место вызов функции . Если значением обоих операндов будет true, то и значением всего выражения будет true, в противном случае это будет false. Если в результате обработки левого операнда получено false, то обработка правого операнда не производится.

Обработка (который содержит не только ) или (который содержит не только ) сводится к сравнению объектов, полученных в результате обработки обоих операндов. Процедура сравнения объектов описывается в трех следующих параграфах. В первом параграфе сравнение наборов узлов определяется через сравнение более элементарных объектов. Это в равной степени относится к =, !=, <=, <, >= и >. Во втором параграфе описываются процедуры сравнения = и != для объектов, не являющихся наборами узлов. В третьем параграфе для объектов, не являющихся наборами узлов, описываются операторы сравнения <=, <, >= и >.

Если оба сравниваемых объекта являются наборами узлов, то их сравнение будет иметь результатом true тогда и только тогда, когда и в первом и во втором наборах имеются узлы, такие что в результате сравнения этих двух узлов имеем true. Если одним из сравниваемых объектов является набор узлов, а вторым - число, то их сравнение будет иметь результатом true тогда и только тогда, когда в представленном наборе имеется такой узел, что сравнение его , преобразованного в число с помощью функции , со вторым операндом даст в результате true. Если одним из сравниваемых объектов является набор узлов, а вторым строка, то в результате их сравнения true будет получаться тогда и только тогда, когда в наборе имеется такой узел, что результатом сравнения этого узла со второй представленной строки будет true. Если одним из сравниваемых объектов является набор узлов, а вторым булево значение, то в результате их сравнения true будет получено тогда и только тогда, когда сравнение представленного булевого значения с результатом приведения набора узлов к булевому значению с помощью функции также даст true.

Если ни один из объектов, подлежащих сравнению, не является набором узлов, а оператором является = или !=, то перед сравнением эти объекты приводятся к единому типу по следующему алгоритму: Если по крайней мере один из сравниваемых объектов имеет булевый тип, то оба сравниваемых объекта приводятся к булевому типу как при вызове функции . В противном случае, если хотя бы один из сравниваемых объектов является числом, то оба объекта преобразуется в число как при вызове функции . В остальных случаях оба сравниваемых объекта преобразуются в строки как при вызове функции . Оператор сравнения = будет иметь результатом true тогда и только тогда, когда оба объекта идентичны. Оператор сравнения != будет иметь результатом true тогда и только тогда, когда объекты неидентичны. Сравнение чисел осуществляется согласно требованиям IEEE 754 . Два булевых значения равны, если оба являются true или оба являются false. Две строки считаются равными тогда и только тогда, когда обе образованы одной и той же последовательностью UCS символов. Замечание: Если $x соответствует набору узлов, то выражение $x="foo" имеет иное значение, чем not($x!="foo"): Первое выражение имеет результатом true тогда и только тогда, когда в $x имеется какой-нибудь узел со строковым значением foo. Второе выражение имеет результатом true когда и только тогда, когда в $x все узлы имеют строковое значение foo.


Если ни один из подлежащих сравнению объектов не является набором узлов, а оператором является <=, <, >= или >, то сравниваемые объекты сперва преобразуются в числа, а затем выполняется сравнение этих чисел в соответствии с требованиями IEEE 754. Оператор сравнения < будет давать true тогда и только тогда, когда первое число меньше второго. Оператор сравнения <= будет давать true тогда и только тогда, когда первое число меньше или равно второму. Оператор сравнения > будет давать true тогда и только тогда, когда первое число больше второго. Оператор сравнения >= будет давать true тогда и только тогда, когда первое число больше или равно второму. Замечание: Если в XML документе встречается выражение XPath, то операторы < и <= должны быть маскированы в соответствии с правилами XML 1.0, например, заменой на &lt; и &lt;= соответственно. В следующем примере значением атрибута test является выражение XPath: <xsl:if test="@value &lt; 10">...</xsl:if>

[21]    OrExpr    ::=    | 'or' [22]    AndExpr    ::=    | 'and' EqualityExpr [23]    EqualityExpr    ::=    | '=' | '!=' [24]    RelationalExpr    ::=    | '<' | '>' | '<=' | '>=' Замечание: Согласно представленной выше грамматике, операторы будут иметь следующий порядок приоритета (наименьший приоритет идет первым):




  • or



  • and



  • =, !=



  • <=, <, >=, >

    Все указанные операторы имеют ассоциативность слева. Например, выражение 3 > 2 > 1 эквивалентно выражению (3 > 2) > 1, имеющему значение false.


    Содержание раздела