savez-vous s'il y a une différence entre ces balises sur XML/XSD?
<a_element /> and <a_element xsi:nil="true"/>
par exemple:
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea xsi:nil="true" />
</SpreadCurve>
and
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea />
</SpreadCurve>
S'agit-il de équivalent?
Si j'ai un élément XSD:
<xsd:element name="BusinessArea" type="xsd:string"/>
cela signifie qu'il s'agit par défaut de xsi: nil = "false". Et cela signifie qu'il n'acceptera pas de valeur nulle pour cet élément.
Mon doute est, acceptera-t-il celui-ci?
<BusinessArea />
Qu'est-ce que cela signifie vraiment pour le XSD?
Meilleures salutations
Vous obtenez cela car votre XSD BusinessArea doit être défini comme nillable = "true". Quelque chose comme:
<xsd:element name="BusinessArea" nillable="true">
.....
</xsd:element>
Cela signifie que l'élément BusinessArea peut avoir une valeur nulle, c'est-à-dire vide.
Et si l'élément en XML ne contient aucune valeur, il doit avoir l'attribut xsi: nil = "true":
<BusinessArea xsi:nil="true" />
Cela devrait être invalide:
<BusinessArea />
Deux exemples que vous avez montrés ne devraient pas être équivalents.
Vérifiez ceci pour comprendre xsi: nil et nillable:
http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
Schéma XML: les structures introduisent un mécanisme pour signaler qu'un élément doit être accepté comme · valide · lorsqu'il n'a pas de contenu malgré un type de contenu qui ne nécessite pas ou même autorise nécessairement un contenu vide. Un élément peut être · valide · sans contenu s'il a l'attribut xsi: nil avec la valeur true. Un élément ainsi étiqueté doit être vide, mais peut porter des attributs s'il est autorisé par le type complexe correspondant.
<a_element />
est l'équivalent d'un empty string
et sera valide contre xsd: chaîne, mais pas contre des types comme xsd: date, xsd: datetime, xsd: decimal, etc.
<a_element xsi:nil="true"/>
est l'équilalent de null
et sera valide pour tous les éléments qui ont nillable = "true" dans la définition de schéma
Je crois comprendre que ce ne sont pas les mêmes. Au moins si vous souhaitez valider le xml par rapport à un schéma. Si dans votre schéma vous définissez l'élément comme pouvant être supprimé, disons:
<xsd:element name="SomeName" type="xsd:double" nillable="true"/>
Vous devez explicitement dans votre xml définir cet élément sur null, comme ceci:
<SomeName xsi:nill="true" />
Si dans votre xml l'élément est comme <SomeName />
il ne sera pas valide selon le schéma.