35 votes

Nillable et minOccurs attributs d'élément XSD

Je vais de l'avant et de l'arrière avec le réglage d'un élément à minOccurs="0" et nillable="true".

Je lisais cet article et maintenant dans mon WSDL, je ne suis pas sûr que l'utilisation des deux en vaille la peine. L'article donne un bon exemple de représentation des tableaux où vous pourriez avoir des valeurs nulles intercalées, car cela ne peut pas être fait avec seulement minOccurs="0". Maintenant, la convention que j'ai adoptée est que si un élément n'est pas facultatif, il n'est pas nillable. La différence, telle que je la comprends, et où se situe ma question, est qu'en appliquant la propriété nillable à un élément, je dis que vous pouvez passer en valeur NULL l'équivalent XSD ? Sinon, un élément sans la propriété nillable doit avoir une valeur dans la restriction qui lui est imposée ?

56voto

bmargulies Points 49855

Vous devez décider si vous considérez XML en tant que XML, ou si vous considérez XML comme un moyen de transmettre des objets Java (ou autres) d'ici là-bas.

En XML, nillable permet la construction comme indicateur d'une valeur explicite absente, comme un SQL NULL. Ceci est sémantiquement différent de simplement . Et les deux sont distincts de rien du tout. Ainsi, en examinant XML, vous devez distinguer quatre cas:

du contenu

En revanche, si vous êtes principalement préoccupé par Java -- peut-être parce que vous utilisez SOAP, alors vous devez réfléchir à la façon dont les objets Java se mappent en aller-retour.

Pour tout élément Java qui hérite de Object, JAXB et d'autres technologies de mappage ont besoin d'un moyen de traiter les valeurs nulles. Nillable est la façon de le faire. Si vous interdisez nillable sur quelque chose qui peut être un objet, les outils utiliseront de manière ennuyeuse un tableau pour trouver un moyen de représenter l'absence.

En revanche, si vous avez un tableau, gardez à l'esprit que le tableau en lui-même est un objet, et peut être nul. Ainsi, chaque ensemble d'outils doit distinguer un tableau à zéro élément d'un null.

En revanche, si vous avez un type primitif (par ex. int), nillable posera des problèmes, car il n'y a aucun mappage de xsi:nil vers un primitif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X