web-dev-qa-db-ja.com

nillableおよびminOccurs XSD要素の属性

要素をminOccurs="0"nillable="true"に設定することで行き来します。

this の記事を読んでいたのですが、WSDLで両方を使用する価値があるかどうかわかりません。この記事では、minOccurs="0"だけではできないため、ヌル値が散在する可能性のある配列を表す良い例を示しています。さて、私が行ってきた慣習は、要素がオプションでない場合、nillableではないということです。私が理解していること、そして私の質問のあるところの違いは、nillableプロパティを要素に適用することにより、NULL値に相当するXSDを渡すことができると言っているということですか?それ以外の場合、nillableプロパティを持たない要素には、制限内の値を設定する必要がありますか?

35
Casey

XMLをXMLとして考えているのか、XMLをJava(または他の))オブジェクトをここからそこへ送信する方法として考えているのかを判断する必要があります。

XMLでは、nillableは、SQL NULLなどの明示的な不在値のインジケータとして<myelement xsi:nil='true'/>の構築を許可します。これは、<myelement/>だけとは意味的に異なります。そして、両方ともまったく何もないから区別されます。したがって、XMLを見るときは、次の4つのケースを区別する必要があります。

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

一方、主にJava-SOAPを使用しているためと思われる場合は、Javaオブジェクトマップ行ったり来たり。

Objectから継承するJavaアイテムについては、JAXBおよびその他のマッピングテクノロジーはnull値を処理する方法を必要とします。Nillableはそれを行う方法です。オブジェクト、ツールキットは迷惑なことに配列を使用して不在を表す方法を見つけます。

一方、配列がある場合は、配列それ自体はオブジェクトであり、nullになる可能性があることに注意してください。そのため、すべてのツールキットはゼロ要素配列とヌルを区別する必要があります。

一方、プリミティブ型(たとえば、int)がある場合、xsi:nilからプリミティブへのマッピングがないため、nillableは問題を引き起こします。

56
bmargulies