W3C home > Mailing lists > Public > xmlschema-dev@w3.org > May 2002

Re: How do you use nillable ?

From: Jeni Tennison <jeni@jenitennison.com>
Date: Wed, 1 May 2002 10:44:02 +0100
Message-ID: <71780797507.20020501104402@jenitennison.com>
To: "Chagit Hazani" <ChagitH@DiamondTreeTech.com>
CC: xmlschema-dev@w3.org
Hi Chagit,

> I do not manage to find a working example of the use of nillable.
> What is necessary to do on the xsl side? And what on the xml side?

You can declare that an element is nillable -- by adding a nillable
attribute to its element declaration:

<xs:element name="date" nillable="true" type="xs:date" />

Being nillable means that an instance of the element can be valid even
if it doesn't have any content, as long as it has an xsi:nil attribute
on it, with a value equal to 'true'. So for example:

<date xsi:nil="true" />

is valid, even though:

<date />

wouldn't be.

XSLT 1.0 doesn't have any access to schema information (well, aside
from going looking at the schema document itself using the document()
function). As far as XSLT is concerned, the xsi:nil attribute is just
like any other attribute. So if you're using xsi:nil in your instance
document, you can check that it's there with a true value using XSLT:

<xsl:template match="date">
  <xsl:choose>
    <xsl:when test="@xsi:nil = 'true' or @xsi:nil = '1'">NIL</xsl:when>
    <xsl:otherwise><xsl:value-of select="." /></xsl:otherwise>
  </xsl:choose>
</xsl:template>

In XSLT 2.0 (or technically XPath 2.0), a nil value is an empty
sequence whereas an empty value is an empty string, so you can tell
the difference that way.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/
Received on Wednesday, 1 May 2002 05:44:04 UTC

This archive was generated by hypermail 2.3.1 : Wednesday, 7 January 2015 14:55:56 UTC