次の方法で共有


GDL スキーマ

GDL パーサーを使用すると、データ ドリブン スキーマを作成して実装できます。 スキーマが指定されると、パーサーはスキーマを検証し、データを変換します。

スキーマは、関連付けられている GDL ソース ファイル内のデータの構造と形式を記述します。 スキーマは、GDL ソース データ ファイル自体内で定義することも、GDL ソース データ ファイルが参照する別のファイルとして定義することもできます。 スキーマは、各コンストラクト内に表示できるデータ エントリと、各属性を定義できる回数を定義します。 たとえば、人を記述するコンストラクトを定義できます。 コンストラクトに、個人の名前、生年月日、身長、体重、自宅の住所、および雇用情報を含めることができます。

GDL データは、次のコード例のようになります。

*Person: person_ID
{
  *Name:
  *Birthdate:
  *Height:
  *Weight:
  *HomeAddress:
  *EmploymentInfo:
} 

*HomeAddress と *EmploymentInfo は情報の論理的なグループを表しているため、次のコード例に示すように、それらはコンストラクトとして定義することもできます。

*HomeAddress:
{
  *StreetAddress:
  *Apt_Number:
  *City:
  *State:
  *Zip:
}

*EmploymentInfo:
{
  *Employer:
  *Address:
  *Position:
  *Salary:
  *StartDate:
}

前の例に示すような GDL コンストラクトでは、構造とコンテンツの構文規則は定義されません。 たとえば、*Person コンストラクトには 2 つのインスタンスがあり、1 つは *Weight を kg 単位で指定し、もう 1 つは *Weight をポンド単位で指定します。 これらの複数のインスタンスによって不整合が発生する場合があります。

GDL スキーマには、受信データが準拠する必要がある構造とコンテンツを正式に指定するメソッドが用意されています。 パーサーはこのスキーマに対してデータを検証し、データまたはデータの構造がスキーマに準拠していない場合は警告します。 エントリが必須か省略可能か (Apt など)、またはエントリを乗算して定義できるかどうかを指定できます。 たとえば、*Apt_Numberは省略可能で、1 人のユーザーが 2 つのジョブを保持できます。

スキーマを使用すると、エントリの定義を共有および継承できます。 たとえば、*EmploymentInfo の *Address のスキーマ定義は、*HomeAddress で共有できます。 スキーマを使用すると、既存の定義から新しい定義を派生できます。 2 つの Address コンストラクトは、共通の継承された定義から派生したバリアントである可能性があるため、同一である必要はありません。

スキーマを使用して、特定の属性値の形式を指定できます。 たとえば、スキーマでは、MM-DD-YYYY 形式で日付値を指定する必要があります。 パーサーで複合値式をコンポーネントに分解し、スナップショットに表示することもできます。 たとえば、クライアント アプリケーションでは、次のコード例に示すように、日付を 3 つの個別のフィールドに分解する必要があります。

*Date:
{
  *Month: Jan
  *Day: 1
  *Year: 2001
}

継承をサポートするスキーマの機能には、追加の影響があります。 継承により、互換性を維持しながらスキーマを拡張できるようになります。 別のスキーマから派生したスキーマがある場合、派生したスキーマに準拠するデータ ファイルは、自動的に元のスキーマにも準拠します。 この継承により、ベンダーは、マスター スキーマ (およびマスター スキーマへの準拠を必要とするすべてのアプリケーション) との互換性を維持しながら、スキーマをカスタマイズ (およびデータ ファイルに影響を与える) ことが可能になります。 実際には、ベンダーはマスター スキーマを定義するファイルのみを参照し、マスター スキーマの定義から継承する新しい定義を作成する必要があります。 ベンダーは、マスター スキーマのプライベート コピーを作成したり、マスター スキーマを変更したりする必要はありません。 この状況により、後でマスター スキーマが変更された場合にベンダーはアクションを実行する必要がなくなります。

前の例が示すように、継承により一般的なパターンを除外し、定義の不必要な重複とそれに伴うメンテナンスを回避できます。 その結果、スキーマとそれが表すデータ セットをよく考えて論理的に構造化することができます。

継承ベースのスキーマの使用方法の詳細については、「GDL テンプレート」を参照してください。