無効な GDL 構成の使用
可能なすべての構成が有効または許可されているとは限りません。 たとえば、印刷デバイスでは、メディアが詰まる可能性があるため、どの入力トレイにも厚紙を給紙できない場合があります。 GDL 言語では、無効なパラメータ設定の組み合わせを定義することによって、無効な構成を定義することもできます。
*InvalidCombination ディレクティブは、この目的で使用されます。 *InvalidCombination の値は、2つ以上のパラメータ設定を指定し、それらを同時に使用できないことを示す LIST です。 次のコード例に示すように、パラメーター設定を指定するために使用される構文は EBNF 表記です。
InvalidCombination_Directive :== "*InvalidCombination" S ":" S ParamSettingsList S LB
ParamSettingsList :== "LIST" S "(" S ParamSetting S "," S ParamSetting ( S "," S ParamSetting)? S ")"
ParamSetting :== ParameterName "." Value
ParameterName :== {Construct Tag of *Feature construct}
Value :== {Construct Tag of *Option construct found within the *Feature construct.}
S :== [#x20#x09]*
LB :== [#x0A] | [#x0D] | ([#x0A] [#x0D]) | ([#x0D] [#x0A])
*InvalidCombination ディレクティブは、GDL ファイルのルート コンテキストに含まれている必要があります。
例えば、週末の雨が降らないようにする場合、次のコードを指定します。
*InvalidCombination: LIST(Weather.Rain, Today.Saturday)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday)
自分が健康な場合にのみ週末に雨が降らないようにする場合、次のコードを指定します。
*InvalidCombination: LIST(Weather.Rain, Today.Saturday, Health.Well)
*InvalidCombination: LIST(Weather.Rain, Today.Sunday, Health.Well)
前のコード例の *InvalidCombination ディレクティブでは、特定の組み合わせ (Weather.Rain、Today.Sunday、Health.Well、Weather.Rain、Today.Saturday、Health.Well) を含む構成がディレクティブに違反することになります。
*InvalidCombination ディレクティブは、特定の種類の制約です。 GDL パーサー関数は、指定された構成が、続行する前に GDL ファイルで定義されている制約のいずれかに違反しているかどうかを判別します。 違反が検出されると、制約に違反しないように構成が変更 (または解決) されます。 この状況は、制約の解決と呼ばれます。 1 つの GDL ファイルには、数十個のパラメーターで数百の制約が書かれている場合もあります。 制約は、1 つのパラメーターの設定を変更すると、他のパラメーターに変更が連鎖する可能性があるため、互いに作用し合う複雑に絡み合う存在ともなり得ます。
メモ 既定の構成が制約に違反していないことを確認する必要があります。 違反がある場合、パーサー インターフェイス関数は成功しません。
メモ GDL パーサーは、2 つのパラメーター設定のみを含む *InvalidCombination の特殊なケースも受け入れます。