DFDL を使用してデータをモデル化する方法の第 3 段階は、共通の DFDL プロパティー値を単一の場所で宣言してそれらがスキーマ内のすべてのコンポーネントのデフォルトとして機能するように、DFDL モデルを編成することです。
IBM DFDL ウィザードおよびインポーターを使用して作成されるすべての DFDL スキーマは、ここで説明する手法に従います。
- スキーマの最上位で dfdl:format 注釈を使用して、共通の DFDL プロパティーのデフォルトをセットアップします。
スキーマ自体の最上位で dfdl:format 注釈を使用してプロパティーを宣言することで、複数のスキーマ・コンポーネントに共通する DFDL プロパティーを一度宣言するだけで済むように、DFDL スキーマをセットアップすることができます。
これらのプロパティーは、スキーマ内のすべてのコンポーネントのデフォルトとして効果的に機能します (DFDL のプロパティーには組み込みのデフォルト値がありません)。
- さらに改良して、これらのプロパティーを別の DFDL スキーマに配置すると、関連する他の DFDL スキーマで再利用できます。
これらの共通する DFDL プロパティーを格納するために別の DFDL スキーマを作成し、dfdl:defineFormat 注釈の中にそれらのプロパティーを配置します。
その後、XSD インクルードまたはインポートを使用して、このスキーマをメインの DFDL スキーマに組み込みます。
メイン・スキーマの最上位の dfdl:format 注釈は代わりに dfdl:ref を使用して、dfdl:defineFormat を参照します。
マクロ展開と非常に良く似た方法で、dfdl:defineFormat のプロパティーが dfdl:format にプルされ、前述のようにスキーマ内のすべてのコンポーネントのデフォルトとして機能します。
このようにして、共通する DFDL プロパティーを、関連する複数の DFDL スキーマで共有できます。
図 1. defaults.xsd<xs:schema>
:NONE.<xs:annotation>
<xs:appinfo source="http://www.ogf.org/dfdl/" >
<dfdl:defineFormat name="myDefaults" >
<!- Declare common DFDL property values -->
<dfdl:format encoding="ASCII" representation="text" ... />
</dfdl:defineFormat>
</xs:appinfo>
</xs:annotation>
</xs:schema>
- これで、各プロジェクトでいくつかのプロパティーを直接設定するだけで、構成が完了します。
-
図 2. employees.xsd<xs:schema>
<xs:include schemaLocation="defaults.xsd" />
<xs:annotation>
<xs:appinfo source="http://www.ogf.org/dfdl/" >
<!- Apply common DFDL property values as defaults -->
<dfdl:format ref="myDefaults" />
</xs:appinfo>
</xs:annotation>
<!- Add only DFDL properties that differ from the defaults -->
<xs:element name="employeeRecord" maxOccurs="unbounded" dfdl:lengthKind="implicit"
dfdl:initiator="{{" dfdl:terminator="}%CR;%LF;" >
<xs:complexType>
...
</xs:complexType>
</xs:element>
...
</xs:schema>