2009-12-14 6 views
34

Je vais dans les deux sens en réglant un élément sur minOccurs="0" et nillable="true". Je lisais article this et maintenant dans mon WSDL je ne suis pas sûr si l'utilisation des deux vaut la peine. L'article donne un bon exemple de représentation des tableaux dans lesquels vous pouvez avoir des valeurs nulles entremêlées, car cela ne peut pas être fait avec minOccurs="0". Maintenant, la convention que j'ai suivie est que si un élément n'est pas optionnel, il n'est pas nillable. La différence que je comprends, et où ma question réside, est qu'en appliquant la propriété nillable à un élément, je dis que vous pouvez passer dans l'équivalent XSD d'une valeur NULL? Sinon, un élément sans la propriété nillable, doit avoir une valeur dans la restriction placée sur lui?Attributs de l'élément XSD nillable et minOccurs

Répondre

55

Vous devez décider si vous envisagez XML en XML ou si vous envisagez XML pour transmettre un objet Java (ou autre) d'ici à là.

En XML, nillable permet la construction <myelement xsi:nil='true'/> comme indicateur d'une valeur absente explicite, comme une valeur SQL NULL. C'est sémantiquement différent de seulement <myelement/>. Et les deux sont distincts de rien du tout. Donc, quand on regarde XML, il faut distinguer quatre cas:

<!-- nothing --> 
<myElement attr1='true'>some content</myElement> 
<myElement/> 
<myElement xsi:nil='true'/> 

Si, d'autre part, vous êtes principalement à Java - peut-être parce que vous utilisez SOAP, alors vous devez réfléchir à la façon Carte d'objet Java dans les deux sens.

Pour tout élément Java qui hérite d'Object, JAXB et d'autres technologies de mappage ont besoin d'un moyen de traiter les valeurs nulles. Nillable est le moyen de le faire. Si vous interdisez nillable sur quelque chose qui peut être un objet, les toolkits utiliseront un tableau agaçante pour trouver un moyen de représenter l'absence. Par contre, si vous avez un tableau, gardez à l'esprit que le tableau lui-même est un objet, et peut être nul. Ainsi, chaque boîte à outils doit distinguer un tableau à zéro élément d'un null. D'autre part, si vous avez un type primitif (par exemple, int), nillable entraînera des problèmes, car il n'y a pas de mappage de xsi: nil à une primitive.

+6

En outre, l'absence de tout élément est également probablement sémantiquement différente à la fois de et de xsi: nil = true. – Zach