1. ホーム
  2. xml

[解決済み] NULLのXML要素を表現する正しい方法は?

2022-02-09 15:17:25

質問

を見たことがあります。 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/> 子要素 から Tスタンパー を参照)。

 <book>
     <title>Beowulf</title>
     <author><null/></author>
 </book>

を表現する正しい、または標準的な方法はありますか? null の値は?上記の例以外に方法はありますか?

上記の例のXMLは作為的なものなので、あまり深読みしないようにしましょう :)

解決方法は?

xsi:nilは、そのような値を表現する正しい方法です。 DOM Level 2 の getElementValue() が発行されたとき、NULL 値が返されます。 xsi:nil はまた,たとえその要素のコンテントタイプが通常空の要素を許さないとしても,内容のない有効な要素を示すために使われます.

空のタグを使用した場合、getElementValue()は空の文字列("")を返します。 タグが省略された場合は、author タグも存在しないことになります。これは、nilに設定するのとは意味的に異なる場合があります(例: "Series"をnilに設定すると、その本はシリーズに属さないという意味になり、seriesを省略すると、シリーズが現在の要素に適用できない要素だという意味になります)。

からです。 W3C

<ブロッククオート

XML スキーマ。構造体では というシグナリングのためのメカニズムです。 要素を -valid- として受け入れる必要があります。 を持つにもかかわらず内容を持たない場合 を要求しない、あるいは要求しないコンテンツタイプ は、必ずしも空のコンテンツを許容するわけではありません。 ある要素は という属性がある場合、そのコンテンツは xsi:nilの値がtrueであること。また このようにラベル付けされた要素は空でなければなりませんが で許可されている場合、属性を持つことができます。 対応する複合型

明確化です。
book xml要素があり、子要素の1つがbook:seriesである場合、それを記入する際にいくつかのオプションがあります。

  1. 要素を完全に削除する - これは、シリーズがこの本に適用されないこと、またはその本がシリーズの一部でないことを示したい場合に行うことができます。この場合、book:seriesにマッチするテンプレートを持つxslトランスフォーム(または他のイベントベースのプロセッサー)は、決して呼び出されることはありません。例えば、xslがbook要素をテーブル行(xhtml:tr)に変換する場合、この方法を使用するとテーブルセル(xhtml:td)の数が正しく表示されない可能性があります。
  2. 要素を空にする - これはシリーズが ""であること、不明であること、またはその本がシリーズの一部でないことを示す可能性があります。book:seriesにマッチするxsl変換(または他のeverntベースのパーサー)が呼び出されます。current()の値は ""になります。このメソッドを使用しても、次に説明するメソッドと同じ数の xhtml:td タグを取得することができます。
  3. xsi:nil="true"を使用する - これはbook:series要素が単に空ではなく、NULLであることを意味します。book:seriesにマッチするテンプレートを持つxsl変換(または他のイベントベースのパーサー)が呼び出されます。current()の値は空になります(空文字列ではありません)。この方法と(2)の主な違いは、book:seriesのスキーマタイプが空文字列("")を有効な値として許可する必要がない点です。これはシリーズ要素では実質的に意味がありませんが、スキーマで列挙型として定義されている言語要素では、xsi:nil="true"によって、その要素がデータを持たないようにすることができます。他の例としては,10進数型の要素があります.もし空にしたいのであれば、""と10進数のみを許可する列挙文字列を結合するか、nillableである10進数を使用することが可能です。