Affichage des articles dont le libellé est xml. Afficher tous les articles
Affichage des articles dont le libellé est xml. Afficher tous les articles

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>