XML : XSD element with a value AND xsi:nil="true"

I have an XSD element

  <xsd:element name="author" type="cmd:Author" nillable="true">      <xsd:annotation>          <xsd:documentation>Contains author name and author id          </xsd:documentation>      </xsd:annotation>  </xsd:element>    

Type author:

  <xsd:complexType name="Author">      <xsd:annotation>          <xsd:documentation>Author's name and id.          </xsd:documentation>      </xsd:annotation>      <xsd:simpleContent>          <xsd:extension base="cmd:AuthorName">               <xsd:attribute name="id" type="cmd:Id" use="optional">                  <xsd:annotation>                      <xsd:documentation>Author's Id                      </xsd:documentation>                  </xsd:annotation>              </xsd:attribute>          </xsd:extension>      </xsd:simpleContent>  </xsd:complexType>    

Base AuthorName:

  <xsd:simpleType name="AuthorName">      <xsd:annotation>          <xsd:documentation>Type defining author's name.                   It may contain characters from AllowedChars          </xsd:documentation>      </xsd:annotation>      <xsd:restriction base="cmd:AllowedChars">          <xsd:maxLength value="112"/>      </xsd:restriction>  </xsd:simpleType>    

Type Id:

  <xsd:simpleType name="Id">      <xsd:annotation>          <xsd:documentation>Id          </xsd:documentation>      </xsd:annotation>      <xsd:restriction base="xsd:string">          <xsd:pattern value="\d{6}"/>      </xsd:restriction>  </xsd:simpleType>    

The problem is that I always have an ID but sometimes it may happen that AuthorName is null.

In that situation what I get is:

  <author id="111111"/>    

What I want to get is:

  <author id="111111"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:nil="true"/>    

My actual state makes problems with schema compatibility. Is it possible to do the thing I want without changing XSD model? Splitting Author into AuthorName and AuthorId isn't backward compatible and will require rewriting pretty big application.

No comments:

Post a Comment