web-dev-qa-db-fra.com

Quelle est la différence entre <a_element /> et <a_element xsi: nil = "true" />?

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

22

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

http://www.w3.org/TR/xmlschema-0/#Nils

13
YoK

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.

Source: http://www.w3.org/TR/xmlschema-1/#xsi_nil

4
RobertPitt
<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

2
Niek

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.

0
Pedro