null
要素はいくつかの方法で表されています。
要素はxsi:nil="true"
:で存在します
<book>
<title>Beowulf</title>
<author xsi:nil="true"/>
</book>
要素は存在しますが、空の要素として表されます( 'empty'とnull
は意味的に異なるため間違っていると思います):
<book>
<title>Beowulf</title>
<author/>
</book>
<!-- or: -->
<book>
<title>Beowulf</title>
<author></author>
</book>
要素は、返されたマークアップにまったく存在しません:
<book>
<title>Beowulf</title>
</book>
要素には<null/>
子要素があります(from TStamper below):
<book>
<title>Beowulf</title>
<author><null/></author>
</book>
そのようなnull
値を表す正しい、または標準的な方法はありますか?上記の例以外の方法はありますか?
上記の例のXMLは不自然であるため、あまり読みすぎないでください。 :)
xsi:nilは、次のような値を表す正しい方法です。DOM Level 2呼び出しgetElementValue()が発行されると、NULL値が返されます。 xsi:nilは、コンテンツタイプが空の要素を通常許可しない場合でも、コンテンツのない有効な要素を示すためにも使用されます。
空のタグが使用される場合、getElementValue()は空の文字列( "")を返します。タグが省略されると、作成者タグも存在しません。これは、 'nil'に設定することと意味的に異なる場合があります(例: "Series"をnilに設定すると、本はシリーズに属さない場合があります。シリーズを省略すると、シリーズは現在の要素に適用できません
From: The W3C
XMLスキーマ:Structuresは、空のコンテンツを必要としない、または必ずしも許可しないコンテンツタイプにもかかわらず、コンテンツがない場合に、要素を「有効」として受け入れる必要があることを通知するメカニズムを導入します。値がtrueの属性xsi:nilを持っている場合、要素はコンテンツなしで有効な場合があります。そのようにラベル付けされた要素は空である必要がありますが、対応する複合型で許可されている場合は属性を保持できます。
明確化:
book xml要素があり、子要素の1つがbook:seriesである場合、入力する際にいくつかのオプションがあります。
XMLには基本的にnullの概念がないため、正規の答えはありません。ただし、Xml /オブジェクトマッピングが必要であると仮定します(オブジェクトグラフにはnullがあるため)。あなたの答えは「あなたのツールが使用するものは何でも」です。処理を記述する場合、それは何でも好きなことを意味します。 XMLスキーマを使用するツールの場合、xsi:nil
が最適です。ほとんどのマッパーでは、一致する要素/属性を省略することが方法です。
XMLの検証方法によって異なります。 XMLスキーマ検証を使用する場合、null
値を表す正しい方法は、xsi:nil
属性を使用することです。
[ ソース ]
W3リンクのドキュメント
http://www.w3.org/TR/REC-xml/#sec-starttags
これが推奨されるフォームであると言います。
<test></test>
<test/>
他の回答で言及されている属性は検証メカニズムであり、状態の表現ではありません。 http://www.w3.org/TR/xmlschema-1/#xsi_nil を参照してください
XMLスキーマ:構造は、を必要としないコンテンツタイプにもかかわらずコンテンツがない場合に、要素が・valid・として受け入れられるべきであることを通知するメカニズムを導入します。または空のコンテンツを必ず許可することもあります。値がtrueの属性xsi:nilを持っている場合、要素はコンテンツなしで有効な場合があります。 そのようにラベル付けされた要素は空でなければなりませんが、対応する複合型で許可されている場合は属性を持ちます。
この答えを明確にするには:コンテンツ
<Book>
<!--Invalid construct since the element attribute xsi:nil="true" signal that the element must be empty-->
<BuildAttributes HardCover="true" Glued="true" xsi:nil="true">
<anotherAttribute name="Color">Blue</anotherAttribute>
</BuildAttributes>
<Index></Index>
<pages>
<page pageNumber="1">Content</page>
</pages>
<!--Missing ISBN number could be confusing and misguiding since its not present-->
</Book>
</Books>
スキーマのセマンティクスが要素にデフォルト値があることを示し、要素が存在しない場合はデフォルト値を使用する必要があることを示す場合、xsi:nil
を使用します。前文が自明なほどひどい考えではない賢い人がいると仮定しなければなりませんが、9種類の悪いように聞こえます。私がこれまでに扱ったすべてのXML形式は、要素を省略してnull値を表します。 (または属性、およびxsi:nil
で属性をマークすることは幸運です。)
属性や要素を省略するだけで、あまり形式的なデータではうまく機能しません。
より高度な情報が必要な場合、GMLスキーマは属性nilReasonを追加します。例:in GeoSciML :
xsi:nil
は、使用可能な値がないことを示すために使用されますnilReason
は、欠損値の追加情報を記録するために使用できます。これは、GMLの標準的な理由(missing, inapplicable, withheld, unknown
)の1つ、またはother:
で始まるテキスト、またはより詳細な説明へのURIリンクである可能性があります。データを交換するとき、XMLが一般的に使用される役割、1人の受信者に送信されるデータ、または特定の目的のために送信されるデータには、他の誰かが支払いをしたり、異なる認証を受けた人が利用できるコンテンツが隠されている場合があります。コンテンツが欠落している理由を知ることは非常に重要です。
科学者は、情報が欠落している理由にも懸念を持っています。たとえば、品質上の理由で削除された場合、元の不良データを見たい場合があります。
多くの場合、Null値の目的は、以前のバージョンのアプリケーションには存在しなかったデータ値を提供することです。
アプリケーション「ReportMaster」バージョン1のxmlファイルがあるとします。
現在、ReportMasterバージョン2では、定義されている場合と定義されていない場合がある属性がさらに追加されています。
「no tag means null」表現を使用すると、ReportMaster 1 xmlファイルを読み取るための自動下位互換性が得られます。