xsi:nil="true"

http://www.xmlforasp.net/schemavalidator.aspx

http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html

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.

你可能感兴趣的:(xml,schema)