ビジネス・メッセージは、空または特定の範囲外の値を持つフィールドを含む場合があります。 これらの場合、そのメッセージを受信するアプリケーションは、そのフィールドに値がないかのように取り扱うことが予期されています。 論理メッセージ・ツリーは、どのエレメントの値にも NULL を設定できるようにすることで、この概念をサポートしています。
XML 文書においてヌル値を表す通常の方法は、エレメントや属性を空のままにしておくというものです。
例えば、次のようにします: <price></price> または <element price=""/>
xsi:nil 属性は、これをさらに明示的にする次のような方法を提供します: price=<xsi:nil="true"/>
ビジネス・メッセージの中には、ヌル値を表すために <price>-999</price> のような特殊な値を使用するものがあります。 DFDL パーサーおよび MRM パーサーではこのようなヌル表記方式がサポートされます。
DFDL パーサーは、範囲外の値で表されるヌル値を検出することができます。ヌル値は DFDL スキーマで指定する必要があり、すべてのエレメントで同じにすることも、エレメントごとに別々にすることもできます。 DFDL では、これは nil 値 と呼ばれます。 DFDL パーサーは、構文解析の際に、メッセージ内の各エレメントの nil 値を検査します。 ビット・ストリーム内の値が DFDL スキーマの nil 値に一致した場合、DFDL パーサーはメッセージ・ツリー内の値を NULL に設定します。 メッセージ・ツリーをビット・ストリームに変換する際にも、同じ検査が実施されます。 メッセージ・ツリー内の値が NULL であれば、DFDL パーサーは DFDL スキーマからの nil 値を出力します。
詳しくは、DFDL 1.0 仕様のセクション 13.15 を参照してください。
ESQL を使用して、メッセージ・ツリー・エレメントの値を、次のように NULL に設定することができます:
SET OutputRoot.XMLNSC.myField VALUE = NULL;
これは、myField をメッセージ・ツリーから削除してしまう SET OutputRoot.XMLNSC.myField = NULL; とは異なることに注意してください。
Java を使用して同じ結果を得ることもできます。
通常、XML パーサー (XMLNSC、XMLNS、および XML) は、メッセージ・ツリー中にヌル値を作成しません。空のエレメントまたは空の属性値は、メッセージ・ツリー中に単に空ストリング値しか生成しません。
妥当性検査が使用可能な場合、XMLNSC パーサーは入力文書中の xsi:nil 属性を検出して処理します。 xsi:nil 属性が 'true' に設定されていて、エレメントがヌル可能な場合、メッセージ・ツリー中のその属性の親エレメントにヌル値が与えられます。
空のエレメントおよびヌル値に対する XML パーサーのサポートの詳細については、XMLNSC の空のエレメントおよびヌル値およびXMLNS の空のエレメントおよびヌル値を参照してください。
XML 物理形式
MRM XML パーサーは、構文解析をする際に、入力 XML 文書中の xsi:nil 属性を検出して処理することができます。 xsi:nil 属性が 'true' に設定されていて、エレメントがヌル可能な場合、メッセージ・ツリー中のその属性の親エレメントにヌル値が与えられます。
MRM パーサーで xsi:nil サポートを使用可能にする方法については、メッセージ・セット: XML ヌルの処理に関するオプションを参照してください。
次のトピックでは、MRM パーサーでのヌル値の処理についての詳細情報が提供されます。
すべての物理形式
MRM パーサーは、範囲外の値で表されるヌル値を検出することができます。 ヌル値は、メッセージ・セットの物理形式で指定されなければなりません。
MRM パーサーは、構文解析の際に、メッセージ中の各エレメントにヌル値がないかを検査します。 ビット・ストリーム中の値が、メッセージ・セット中のヌル値に一致した場合、MRM パーサーはメッセージ・ツリー中の値を NULL に設定します。
メッセージ・ツリーをビット・ストリームに変換する際にも、同じ検査が実施されます。 メッセージ・ツリー中の値が NULL であれば、MRM パーサーはメッセージ・セットからヌル値を出力します。
JSON フォーマットは、JSON 値のタイプとして NULL をサポートしています。
ヌル値を持つオブジェクトが JSON メッセージに含まれる場合、JSON パーサーはメッセージ・ツリー中の値を NULL に設定します。
メッセージ・ツリー中のヌル値を持つエレメントを直列化するときに、JSON ビット・ストリームがヌル値を持つ JSON オブジェクトとして構成されます。