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 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: [xsl] 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Re: XPath 2.0: Problems w, Michael Kay | Thread | RE: [xsl] Generally appending XML d, Aitor San Juan |
RE: [xsl] xsl Greater than and Less, Michael Kay | Date | RE: [xsl] xsl Greater than and Less, Michael Kay |
Month |