RE: [xsl] XPath 2.0: Problems with the two boolean constants true and false

Subject: RE: [xsl] XPath 2.0: Problems with the two boolean constants true and false
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 6 Oct 2003 00:32:28 +0100
> 
> I see two problems with the boolean constants true and false:
> 
>   1. They cannot be used in an XPath expression -- cannot be 
> distinguished from child::true and child::false

There are no constants "true" and "false". As in XPath 1.0, the truth
values are represented by the function calls true() and false(). No
change here from 1.0.
> 
>   2. boolean('false') is true.  This is especially confusing 
> and may be the source of many programmers' headaches.

Again, no change here from 1.0. I haven't seen this cause much problem
in practice, though the introduction of xs:boolean alongside
[fn:]boolean may be confusing. xs:boolean() uses the schema rules: '0'
and 'false' give false, '1' and 'true' give true, any other string is an
error.
> 
> Because of these I chose in my code to use functions 
> returning xs:integer (0 and 1) and for templates to write 
> code like the following:
> 
>   <xsl:template name="And" match="*[namespace-uri()='allTrue-And']">
>     <xsl:param name="arg1"/>
>     <xsl:param name="arg2"/>
>          <xsl:value-of select="number(number($arg1) and 
> number($arg2))"/>
>   </xsl:template>
> 
> Am I wrong? Is there a way to overcome the above problems?
> 

It seems odd to me to use numbers instead of booleans because you don't
like the string-to-boolean conversions. If you don't like the
string-to-boolean conversions just don't use them; you can still use
booleans!

Michael Kay


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread