Subject: RE: XPath 2.0: Problems with the two boolean constants true and false
From: "Michael Kay" <mhk@xxxxxxxxx>
Date: Mon, 6 Oct 2003 15:49:15 +0100
|
To add to my previous reply, I should point out that Saxon should report
a type error on this stylesheet: you cannot pass an integer or string
value for a parameter whose required type is boolean.
Michael Kay
> -----Original Message-----
> From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
> Dimitre Novatchev
> Sent: 06 October 2003 11:15
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: XPath 2.0: Problems with the two boolean
> constants true and false
>
>
> > >
> > > 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!
>
> My confusion is due to the following:
>
> This transformation:
>
> <xsl:stylesheet version="2.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> xmlns:f="http://fxsl.sf.net/"
> xmlns:test="my:test"
> exclude-result-prefixes="f xs test"
> >
> <xsl:output omit-xml-declaration="yes"/>
>
> <xsl:template match="/">
> <xsl:apply-templates select="document('')/*/test:*[1]">
> <xsl:with-param name="arg1" select="'false'"/>
> <xsl:with-param name="arg2" select="1"/>
> </xsl:apply-templates>
> </xsl:template>
>
> <test:test/>
> <xsl:template name="And" match="test:*">
> <xsl:param name="arg1" as="xs:boolean"/>
> <xsl:param name="arg2" as="xs:boolean"/>
> <xsl:value-of
> select="xs:boolean(xs:boolean($arg1) and
> xs:boolean($arg2))"/>
> </xsl:template>
>
> </xsl:stylesheet>
>
> Produces:
>
> true
>
>
> But
>
> <xsl:value-of
> select="xs:boolean(xs:boolean('false') and xs:boolean(1))"/>
>
> produces:
>
> false
>
>
> Is this a bug in Saxon 7.7?
>
>
>
>
>
>
> =====
> Cheers,
>
> Dimitre Novatchev.
> http://fxsl.sourceforge.net/ -- the home of FXSL
>
> __________________________________
> Do you Yahoo!?
> The New Yahoo! Shopping - with improved product search
http://shopping.yahoo.com
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|