ZVON > Tutorials > XML Schema and Relax NG Tutorial
Index | >> Example 1 / 2 << | Prev | Next |
Contents > Overriding schema > nillable, xsi:nil

nillable, xsi:nil

  1. XML Schema
  2. Relax NG
XML Schema keys: nillable

1. XML Schema

We can override the schema declaration when setting xsi:nil attribute to value "true". The schema must allow this by setting attribute "nillable" to "true" (default value is "false").

Valid document
This document is valid, the element "root" contains the "e1" element.


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <e1>xxx</e1>
</root>

Valid document
This document is valid too, because the "xsi:nil" attribute overrides element's definition and allows the element to be empty.


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xsi:nil="true" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

Invalid document
This document is not valid, because when "xsi:nil" is true, the element must be empty (and "root" is not).


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xsi:nil="true" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <e1>xxx</e1>
</root>

Invalid document
This document is not valid, because the element "root" must have "e1" child and "xsi:nil" has not been set to "true".


<root xsi:noNamespaceSchemaLocation="correct_0.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

Correct XML Schema (correct_0.xsd)


<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >

  <xsd:element name="root" nillable="true">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="e1" type="xsd:string"/>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

2. Relax NG

There is no such mechanism in Relax NG.