XSLT 2.0 and XPath 2.0 Programmer's Reference, 4th Edition (91 page)

BOOK: XSLT 2.0 and XPath 2.0 Programmer's Reference, 4th Edition
13.71Mb size Format: txt, pdf, ePub

xs:boolean

This is the simplest type defined in XML Schema. It has two values in the value space, referred to as
true
and
false
, and each of these has two permitted lexical representations:
1
and
true
,
0
and
false
.

Although it's so simple, there are some interesting quirks in the way XML Schema and XPath handle this type.

  • As far as XML Schema is concerned, the
    xs:boolean
    type has no ordering. But in XPath, there is an ordering:
    false
    is considered to be less than
    true
    . XPath 2.0 has taken this position largely for backward compatibility with XPath 1.0, and also because it can actually be useful; for example, a stylesheet might use the expression
    age < 18
    as a sort key, which will output the adults first, then the children.
  • There are two ways of converting a string to a boolean. An XML Schema processor interprets
    1
    and
    true
    as true,
    0
    and
    false
    as false. This behavior also occurs when you use the
    xs:boolean()
    constructor (described in Chapter 11). But if you use the
    boolean()
    function (or
    fn:boolean()
    if you want to write it with a namespace prefix), as described in Chapter 13, then a zero-length string translates to
    false
    , and everything else to
    true
    . This is also the result you get if you do an implicit conversion of a string to a boolean by using a string in a context such as
    if (S) then A else B
    , where S is a string.

    Again, the difference is partly historic: the XPath 1.0 rules were invented before XML Schema came along. But the convention of equating a zero-length string to
    false
    also has a long history in weakly typed programming languages, and is very convenient in some recursive algorithms that need to terminate when the argument is a zero-length string.

Other books

Truth & Tenderness by Tere Michaels
Nobody's Dream by Kallypso Masters
Hand-Me-Down Love by Ransom, Jennifer
Vet's Desire by Angela Verdenius
Name of the Devil by Andrew Mayne
Firefly by Severo Sarduy
The Lion Seeker by Kenneth Bonert
The Second Wave by Michael Tod
A Dance of Blades by David Dalglish
The Temptation of Your Touch by Teresa Medeiros