xML/XSDのこれらのタグに違いがあるかどうか知っていますか?
<a_element /> and <a_element xsi:nil="true"/>
例えば:
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea xsi:nil="true" />
</SpreadCurve>
and
<SpreadCurve>
<Index>3M</Index>
<IndexNumber>4587</IndexNumber>
<BusinessArea />
</SpreadCurve>
これらは同等ですか?
XSD要素がある場合:
<xsd:element name="BusinessArea" type="xsd:string"/>
つまり、デフォルトではxsi:nil = "false"です。これは、この要素にnull値を受け入れないことを意味します。
私の疑問は、これを受け入れますか?
<BusinessArea />
これは、XSDにとって本当に何を意味するのでしょうか。
宜しくお願いします
これは、XSD BusinessAreaがnillable = "true"として定義されている必要があるために得られます。何かのようなもの:
<xsd:element name="BusinessArea" nillable="true">
.....
</xsd:element>
これは、BusinessArea要素がnull値、つまり空になる可能性があることを意味します。
XMLの要素に値が含まれていない場合は、属性xsi:nil = "true"が必要です。
<BusinessArea xsi:nil="true" />
これは無効である必要があります:
<BusinessArea />
あなたが示した2つの例は同等であってはなりません。
Xsi:nilとnillableを理解するためにこれをチェックしてください:
http://www.zvon.org/xxl/XMLSchemaTutorial/Output/ser_over_st0.html
XMLスキーマ:構造は、空のコンテンツを必要としない、または必ずしも許可しないコンテンツタイプにもかかわらず、コンテンツがない場合に要素を「有効」として受け入れる必要があることを通知するメカニズムを導入します。要素は、値がtrueの属性xsi:nilを持っている場合、コンテンツがなくても有効である可能性があります。そのようにラベル付けされた要素は空でなければなりませんが、対応する複合型で許可されている場合は属性を保持できます。
<a_element />
はempty string
と同等であり、xsd:stringに対しては有効ですが、xsd:date、xsd:datetime、xsd:decimalなどのタイプに対しては有効ではありません。
<a_element xsi:nil="true"/>
はnull
と同等であり、スキーマ定義にnillable = "true"を持つすべての要素に対して有効になります
私の理解では、それらは同じではありません。少なくとも、スキーマに対してxmlを検証する場合。スキーマで要素をnillableとして定義する場合は、次のようにしましょう。
<xsd:element name="SomeName" type="xsd:double" nillable="true"/>
次のように、xmlでその要素を明示的にnullに設定する必要があります。
<SomeName xsi:nill="true" />
Xmlの場合、要素は<SomeName />
スキーマによっては無効になります。