web-dev-qa-db-fra.com

Attributs d'élément XSD nillable et minOccurs

Je vais et vient en définissant un élément sur minOccurs="0" et nillable="true".

Je lisais cet article et maintenant dans mon WSDL, je ne sais pas si l'utilisation des deux en vaut la peine. L'article donne un bon exemple de représentation de tableaux où vous pouvez avoir des valeurs nulles entrecoupées, car cela ne peut pas être fait avec simplement minOccurs="0". Maintenant, la convention que j'ai suivie est que si un élément n'est pas facultatif, il ne peut pas être supprimé. La différence telle que je la comprends, et où réside ma question, est qu'en appliquant la propriété nillable à un élément, je dis que vous pouvez passer 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 dessus?

35
Casey

Vous devez décider si vous pensez à XML comme XML, ou si vous pensez à XML comme un moyen de transmettre Java (ou autre) objet d'ici à là.

En XML, nillable permet la construction <myelement xsi:nil='true'/> comme indicateur d'une valeur absente explicite, comme un SQL NULL. C'est sémantiquement différent de simplement <myelement/>. Et les deux sont distincts de rien du tout. Ainsi, lorsque vous regardez XML, vous devez distinguer quatre cas:

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

Si, d'autre part, vous êtes principalement concerné par Java - peut-être parce que vous utilisez SOAP, alors vous devez penser à la façon dont Java object map) d'avant en arrière.

Pour tout élément Java élément qui hérite d'Object, JAXB et d'autres technologies de mappage ont besoin d'un moyen de gérer les valeurs nulles. Nillable est le moyen de le faire. Si vous interdisez nillable sur quelque chose qui peut être un , les boîtes à outils utiliseront de manière agaçante un tableau pour trouver un moyen de représenter l'absence.

D'un autre côté, 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 nul.

En revanche, 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.

56
bmargulies