attributs des éléments nillable et minOccurs XSD

je fais des allers-retours en plaçant un élément sur minOccurs="0" et nillable="true" .

je lisais cet article et maintenant dans mon WSDL Je ne suis pas sûr si utiliser les deux vaut le coup. L'article donne un bon exemple de représentation de tableaux où vous pourriez avoir des valeurs nulles intercalées tout au long, car cela ne peut pas être fait avec juste 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 telle que je la comprends, et où se trouve ma question, Est qu'en appliquant la propriété nillable à un élément, je dis que vous pouvez passer dans L'équivalent XSD d'une valeur nulle? Sinon, un élément sans la propriété nillable, doit avoir une valeur à l'intérieur de la restriction placée sur elle?

35
demandé sur informatik01 2009-12-14 22:50:40

1 réponses

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 explicite absente, comme un SQL NULL. C'est sémantiquement différent de juste <myelement/> . Et les deux sont distincts de rien du tout. Ainsi, en regardant XML, vous devez distinguer quatre cas:

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

si, d'un autre côté, vous êtes principalement concernés par Java -- peut-être parce que vous utilisez SOAP, alors vous devez penser à comment Java object map va et vient.

pour tout élément Java qui hérite D'un objet, JAXB et d'autres technologies de cartographie 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, toolkits va utiliser de manière agaçante un tableau pour trouver une façon de représenter absence.

, d'autre part, si vous avez un tableau, gardez à l'esprit que le tableau lui-même est un objet, et peut être null. Ainsi, chaque boîte à outils doit distinguer un tableau à zéro élément d'un null.

d'un autre côté, si vous avez un type primitif (par exemple int ), nillable va conduire à des problèmes, puisqu'il n'y a pas de cartographie de xsi:nil à une primitive.

56
répondu bmargulies 2013-08-05 20:35:31