2.9 Nil ValuesNil Values
One of the purchase order items listed in po.xml, the Lawnmower,
does not have a shipDate element. Within the
context of our scenario, the schema author may have
intended such absences to indicate items not
yet shipped. But in general, the absence of an element does
not have any particular meaning: It may indicate that the
information is unknown, or not applicable, or the element
may be absent for some other reason. Sometimes it is
desirable to represent an unshipped item,
unknown information, or inapplicable information
explicitly with an element, rather than by an absent
element. For example, it may be desirable to represent a
"null" value being sent to or from a relational database
with an element that is present. Such cases can be
represented using XML Schema's nil mechanism which enables
an element to appear with or without a non-nil value.
ref20XML Schema's nil mechanism involves
an "out of band" nil signal. In other words, there is no
actual nil value that appears as element content, instead
there is an attribute to indicate that the element content
is nil. To illustrate, we modify the
shipDate element declaration so that nils can be
signalled:
NOTE:
<xsd:element name="shipDate" type="xsd:date" nillable="true"/>
ref21And to explicitly represent that
shipDate has a nil value in the instance
document, we set the nil
attribute (from the XML Schema
namespace for instances) to true:
NOTE:
<shipDate xsi:nil="true"></shipDate>
The nil
attribute is defined as part of the XML Schema namespace
for instances,
http://www.w3.org/2001/XMLSchema-instance,
and so it must appear in the instance document with a
prefix (such as xsi:) associated with that namespace.
(As with the xsd: prefix, the
xsi: prefix is used by convention only.) Note that
the nil mechanism applies only to element values, and not
to attribute values. An element with xsi:nil="true" may not
have any element content but it may still carry attributes.
|