次の方法で共有


区切り記号の保存および非表示

概要

区切りレコードには、 空のデータの区切り記号を保持 し、末尾の区切り記号を抑制するという 2 つのプロパティ があります。 フラット ファイル アセンブラーが存在しないデータと末尾の区切り記号に関連付けられている区切り記号を処理する方法を制御するには、これらのプロパティを使用します。 [ 空のデータの区切り記号を保持 する] プロパティを [はい ] (既定の設定) に設定すると、翻訳されたフラット ファイル メッセージに区切り記号が含まれます。

  • データを含んでいないフィールド。

  • 関連付けられたタグを持たず、データを含んでいない直下のレコード。

    [ 空のデータの区切り記号を保持 する] プロパティを [いいえ] に設定すると、データのないレコードとフィールドの翻訳されたフラット ファイルに区切り記号は含まれません。 さらに、[ 空のデータの区切り記号を保持 ] プロパティの設定に関係なく、タグが定義されているデータのない直ちに下位レコードの翻訳されたフラット ファイル メッセージに区切り記号は含まれません。

    [ 末尾の区切り記号の非表示 ] プロパティを [いいえ ] (既定の設定) に設定すると、翻訳されたフラット ファイル メッセージに 1 つ以上の末尾の区切り記号が含まれる場合があります。 [ 末尾の区切り記号の抑制 ] プロパティを [はい] に設定すると、翻訳されたフラット ファイル メッセージに末尾の区切り記号は含まれません。

特殊なシナリオ

[ 空のデータの区切り記号を保持する] プロパティと [末尾の区切り記号を 非表示 にする] プロパティの設定によって発生する動作が競合する場合があります。 このような場合は、後者のプロパティ [ 末尾の区切り記号を抑制する] に関連付けられている動作が優先されます。 また、これら 2 つのプロパティの設定によって競合が発生する可能性が高いと予測される状況もあります。

たとえば、次のプロパティ値で定義された Record ノードを考えてみましょう。

  • ノード名が MyRec である。

  • タグ識別子が Rec である。

  • 子の区切り記号が , である。

  • 子の順序が挿入辞である。

    次の名前を持つ 5 つの Field Element ノードを格納するように定義されています ( フィールド属性 ノードまたは下位 の Record ノードの場合もあります)。

  • FieldElem1

  • FieldElem2

  • FieldElem3

  • FieldElem4

  • FieldElem5

    次に、この Record ノードを表す主に空の XML フラグメントがフラット ファイル アセンブラーに渡されるとします。

<MyRec>  
    <FieldElem1 />  
    <FieldElem2 />  
    <FieldElem3>Val</FieldElem3>  
    <FieldElem4 />  
    <FieldElem5 />  
</MyRec>  
  

次の表は、生成された出力と、関連するスキーマ ノードの関連する追加のプロパティ設定要件を示しています。これは、[ 空のデータの区切り記号の保持 (PDFED)] プロパティと [ 末尾の区切り記号の抑制 (STD)] プロパティのさまざまな設定に基づいています。

PDFED 設定 STD 設定 出力 追加のノード要件
はい いいえ Rec,,,Val,, [なし] :
いいえ はい Rec,Val すべての Field 要素 ノードは省略可能として構成する必要があります。
はい はい Rec,,,Val FieldElem4 および FieldElem5 という名前のノードは、省略可能として構成する必要があります。
いいえ いいえ Rec,Val,, すべての Field 要素 ノードは省略可能として構成する必要があります。

これらのプロパティ設定で、区切り記号が保存されない設定、または区切り記号を非表示にする設定を行うと、同じスキーマを使用してシリアル化したフラット ファイル データを解析できないという警告を示すメッセージが、次の場合に表示されます。

  • [空のデータの区切り記号を保持] プロパティが [いいえ] または [末尾の区切り記号の非表示] プロパティにそれぞれ [はい] に設定されている Record ノードに、下位の Field 要素ノード、フィールド属性ノード、またはタグが指定されていない Record ノードが含まれている場合。

  • 下位 の Field 要素 ノード、 フィールド属性 ノード、およびタグが指定されていない Record ノードが、スキーマでオプションとして構成されていない場合 ( Min Occurs プロパティを 0 に設定)。 [末尾の区切り記号の抑制] プロパティが [はい] に設定されている場合は、最後の下位ノードのみを省略可能として構成する必要があります。 [空のデータの区切り記号を保持する] プロパティが [いいえ] に設定されている場合は、後続のすべての下位ノードを省略可能として構成する必要があります。

Note

Record が省略可能な Field に従っている場合を除き、(おそらく省略可能な) RecordField Element、または Field Attribute ノードに関連付けられている XML 要素がビジネス ドキュメントの XML 表現から完全に欠落している場合、区切り記号は常に保持されます。 つまり、データとデータを囲む XML タグが両方とも欠落している場合、対応する区切り記号は、ビジネス ドキュメントのフラット ファイル表記に必ず含まれます。

ここで、欠落した [フィールド要素] の直後に 2 つの [フィールド要素] を持つ子レコードを含むようにスキーマを変更します。 子レコード要素は、| (パイプ) 文字を区切り記号として使用するように構成されています。

<MyRec>  
    <FieldElem1 />  
    <FieldElem2 />  
    <FieldElem3>Val</FieldElem3>  
    <!-- <FieldElem4 /> -->  
    <ChildRec>  
        <InnerFieldElement1>Inner1</InnerFieldElement1>   
        <InnerFieldElement2>Inner2</InnerFieldElement1>  
    </ChildRec>  
    <FieldElem5 />  
</MyRec>  
  

このデータがフラット ファイル逆アセンブラーに渡されると、FieldElem4 の区切り記号は保存されませんが、その後のレコードは正常に区切られます。

,,Val,,Inner1,Inner2,,  

参照