mercredi, janvier 29, 2014

XSD and null, zero values



* CAS 1 : Si on considère que lorsque l'information est vide, le tag n'a pas à apparaitre
XSD : 
<element name="DateFinValidite" type="date" minOccurs="0" />

XML Valide : 
<com:DateDebutValidite>2013-08-01</com:DateDebutValidite>
<com:DateMAJ>2013-09-17T00:00:00</com:DateMAJ>
ou
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite >2014-08-01</DateFinValidite>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>
XML Invalide :
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite/>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>


* CAS 2 : Si on veut voir tout le temps, quoiqu'il arrive, apparaitre le tag concerné que l'information soit vide ou renseignée
Il y a alors 2 solutions :

SOLUTION A/ usage de nil
XSD : 
<element name="DateFinValidite" type="date" nillable="true" minOccurs="1" maxOccurs="1"/>

XML Valide: 
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>
ou
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite >2014-08-01</DateFinValidite>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>


SOLUTION B/ surcharge de type


XSD : 
<element name="DateFinValidite" type="tns:dateNull" minOccurs="1" maxOccurs="1"/>

<simpleType name="emptyString">
<restriction base="string">
<length value="0" />
</restriction>
</simpleType>
<simpleType name="dateNull">
<union memberTypes="date tns:emptyString" />
</simpleType>
<simpleType name="intNull">
<union memberTypes="integer tns:emptyString" />
</simpleType>

XML Valide: 
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite/>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>
ou
<com:DateDebutValidite>2013-08-01</comateDebutValidite>
<com:DateFinValidite >2014-08-01</DateFinValidite>
<com:DateMAJ>2013-09-17T00:00:00</comateMAJ>