DFDL を使用してデータをモデル化する方法の第 1 段階は、データの論理構造を調べることです。
- 複雑な構造の識別 複雑な構造は、モデルの複合タイプに相当します。
データ全体そのものが 1 つの包括的な複合タイプで表されます。
データに副構造が含まれている場合は、副構造ごとに複合タイプがあります。
例えば、COBOL コピーブックの各構造レベルや、CSV メッセージのそれぞれ異なる各行は、複合タイプのエレメントに相当します。
- 単純項目の識別 単純項目は、各複合タイプの内部に出現し、それぞれに論理データ・タイプがあります。
単純項目は、単純エレメントに相当します。
例えば、PIC 節が指定された COBOL コピーブックの各フィールドや、CSV メッセージのコンマで区切られた各値は、単純タイプのエレメントに相当します。
- 構造の順序付けの識別 順序付けによって、複合タイプの内部にあるグループが、シーケンスと選択項目のどちらであるかが決まります。
選択項目では、リスト項目のいずれか 1 つのみが出現可能です。
例えば、C の共用体や COBOL の REDEFINES などがあります。
- 構造および項目のカーディナリティーの識別 カーディナリティーによって、エレメントの minOccurs および maxOccurs 論理プロパティーの値が決まります。
- エレメントは必須 (minOccurs != 0) か、それともオプション (minOccurs = 0) か。
- エレメントは配列 (maxOccurs > 1) か。
- 配列である場合、出現回数は固定 (minOccurs = maxOccurs) か、それとも可変 (minOccurs != maxOccurs) か。
- 出現回数を無制限 (maxOccurs = unbounded) にできるか。
- ヌル可能項目およびデフォルト値の識別 エレメントによっては、特殊な範囲外の値を入れる必要が生じることがあります。その場合、エレメントはヌル可能でなければなりません。
例えば、COBOL コピーブックの数値フィールドに SPACES を設定する場合がありますが、これは DFDL の数値としては正しくありません。
必須エレメントのデータが空になる可能性がある場合は、デフォルト値を指定できます。
- コンポーネントの再利用の可能性についての検討 共通のタイプがある場合は、グローバルな複合タイプまたは単純タイプを作成することを検討してください。
共通のエレメントがある場合は、グローバルなエレメントを作成することを検討してください。
例として、この画像は、従業員レコードのファイルを示しています。
DFDL を使用して、複合エレメント employeeRecord を含む包括的な複合エレメント employees としてこのファイルをモデル化できます。
employeeRecord エレメントは、任意の回数にわたって繰り返されるため、maxOccurs は unbounded に設定されます。
employeeRecord は、次の単純エレメントからなるシーケンスです。
- name (xs:string タイプ)
- age (xs:int タイプ)
- dob (xs:date タイプ)
- permanent (xs:boolean タイプ)
- salary (xs:decimal タイプ)。
salary エレメントは
permanent が
Y である場合にのみ存在します。つまり、これはオプションであるため minOccurs が
0 になっています。
これ以外の単純エレメントはすべて必須であるため、minOccurs は
1 になっています。
次の段階は、DFDL 注釈を構成することです (
DFDL 注釈の構成)。