[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: XPath 2.0: Problems with the two boolean constants
> > > > 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|