EXPRESS(データモデリング言語)
EXPRESSは、製品データの標準データモデリング言語です。 EXPRESSは、製品交換のためのISO標準モデルSTEP(ISO 10303)で正式化され、ISO 10303-11として標準化されています。
概要
データモデルは、対象ドメインのデータオブジェクトとデータオブジェクト間の関係を正式に定義します。データモデルの典型的なアプリケーションには、データベースの開発をサポートし、特定の関心分野のデータ交換を可能にすることが含まれます。データモデルは、データモデリング言語で指定されます。 EXPRESSは、ISO 10303-11、EXPRESS Language Reference Manualで定義されているデータモデリング言語です。
EXPRESSデータモデルは、テキストとグラフィックの2つの方法で定義できます。正式な検証およびSDAIなどのツールへの入力として、ASCIIファイル内のテキスト表現が最も重要です。一方、グラフィカルな表現は、説明やチュートリアルなどの人間の使用により適していることがよくあります。 EXPRESS-Gと呼ばれるグラフィカルな表現は、テキスト形式で定式化できるすべての詳細を表すことはできません。
EXPRESSは、Pascalなどのプログラミング言語に似ています。 SCHEMA内では、さまざまなデータ型を構造的制約とアルゴリズム規則とともに定義できます。 EXPRESSの主な機能は、データ型の母集団を正式に検証できることです。これは、すべての構造的およびアルゴリズムルールをチェックすることです。
EXPRESS-G
EXPRESS-Gは、情報モデルの標準的なグラフィカル表記です。これは、エンティティおよびタイプの定義、関係、およびカーディナリティを表示するためのEXPRESS言語のコンパニオンです。このグラフィカル表記は、EXPRESS言語のサブセットをサポートしています。 EXPRESSよりもEXPRESS-Gを使用する利点の1つは、データモデルの構造をより理解しやすい方法で提示できることです。 EXPRESS-Gの欠点は、複雑な制約を正式に指定できないことです。図1は例です。図に示すデータモデルを使用して、オーディオCD(コンパクトディスク)コレクションのデータベースの要件を指定できます。
簡単な例
単純なEXPRESSデータモデルは図2のようになり、コードは次のようになります。
SCHEMAファミリー;エンティティパーソンアブストラクトスーパータイプ(ONEOF(男性、女性));名前:STRING;母:オプションの女性。父親:オプションの男性。 END_ENTITY; ENTITY Female SUBTYPE OF(Person); END_ENTITY; ENTITY男性サブタイプ(人); END_ENTITY; END_SCHEMA;データモデルはEXPRESSスキーマファミリに含まれています。これには、2つのサブタイプMaleおよびFemaleを持つスーパータイプエンティティPersonが含まれています。 PersonはABSTRACTであると宣言されているため、(ONEOF)のいずれかの出現のみが存在し、サブタイプMaleまたはFemaleが存在できます。人のすべての出現には必須の名前属性があり、オプションで属性motherおよびfatherがあります。特定のエンティティタイプの属性の読み取りの固定スタイルがあります。
- 女性は人の母親の役割を果たすことができます
- 男性は人の父親の役割を果たすことができます
エクスプレスビルディングブロック
データ型
EXPRESSは、EXPRESS-G表記の特定のデータ型記号を使用した一連のデータ型を提供します。
- エンティティデータ型:これは、EXPRESSで最も重要なデータ型です。以下で詳しく説明します。エンティティのデータ型は、サブスーパータイプツリーまたは属性によって、2つの方法で関連付けることができます。
- 列挙データ型:列挙値は、rgb列挙の赤、緑、青などの単純な文字列です。列挙型が拡張可能と宣言されている場合、他のスキーマで拡張できます。
- 定義済みのデータ型:これは他のデータ型をさらに専門化します。たとえば、値が0より大きい整数型のデータ型を定義します。
- データタイプの選択:選択により、異なるオプション間の選択肢または代替を定義します。最も一般的に使用されるのは、異なるentity_type間の選択です。よりまれなのは、定義されたタイプを含む選択です。列挙型が拡張可能と宣言されている場合、他のスキーマで拡張できます。
- 単純なデータ型
- 文字列:これは、最もよく使用される単純型です。 EXPRESS文字列の長さは任意で、任意の文字を含めることができます(ISO 10646 / Unicode)。
- バイナリ:このデータ型はごくまれにしか使用されません。これは、バイトではなくビット数をカバーします。一部の実装では、サイズは32ビットに制限されています。
- 論理:論理データ型と同様に、論理には可能な値TRUEとFALSEがあり、さらにUNKNOWNもあります。
- ブール値:ブール値TRUEおよびFALSE。
- 数値:数値データ型は、整数と実数の両方のスーパータイプです。ほとんどの実装では、実際の値が整数であっても、real_typeを表すためにdouble型を使用します。
- 整数:EXPRESS整数は原則として任意の長さを持つことができますが、ほとんどの実装では符号付き32ビット値に制限されています。
- 実数:理想的には、EXPRESSの実数値の精度とサイズに制限はありません。しかし実際には、実際の値はdouble型の浮動小数点値で表されます。
- 集約データ型:可能なタイプのaggregation_typesは、SET、BAG、LIST、およびARRAYです。 SETとBAGは順序付けられていませんが、LISTとARRAYは順序付けられています。 BAGには特定の値を複数回含めることができますが、これはSETでは許可されていません。 ARRAYは、未設定のメンバーを含むことができる唯一の集約です。これは、SET、LIST、BAGでは使用できません。集合体のメンバーは、他のデータ型でもかまいません。
データ型については、いくつかの一般的な事項に言及する必要があります。
- 構築されたデータ型は、EXPRESSスキーマ内で定義できます。これらは主にエンティティを定義し、エンティティの属性と集計メンバーのタイプを指定するために使用されます。
- データ型を再帰的に使用して、より複雑なデータ型を作成できます。たとえば、いくつかのエンティティまたは他のデータ型のSELECTのARRAYのリストを定義することができます。そのようなデータ型を定義することが理にかなっている場合は、別の質問です。
- EXPRESSは、データ型をさらに特殊化する方法をいくつか定義しています。これは、エンティティの再宣言された属性にとって重要です。
- GENERICデータ型は、プロシージャ、関数、および抽象エンティティに使用できます。
エンティティ属性
エンティティ属性を使用すると、「プロパティ」をエンティティに追加したり、特定のロール内のエンティティを別のエンティティに関連付けたりできます。属性の名前はロールを指定します。ほとんどのデータ型は、属性の型として直接機能します。これには集約も含まれます。
属性には、明示的属性、派生属性、逆属性の3種類があります。そして、これらはすべてサブタイプで再宣言できます。さらに、明示的な属性は、サブタイプで派生したものとして再宣言できます。属性の種類を他に変更することはできません。
- 明示的な属性は、STEPファイルに直接値が表示される属性です。
- 派生属性は、式から値を取得します。ほとんどの場合、式はこのインスタンスの他の属性を参照します。式では、EXPRESS関数も使用できます。
- 逆属性は、エンティティに「情報」を追加するのではなく、反対側からエンティティに明示的な属性に名前を付けて制約するだけです。
EXPRESS-G表記の特定の属性シンボル:
スーパータイプとサブタイプ
エンティティは、1つまたは複数の他のエンティティのサブタイプとして定義できます(多重継承が許可されています!)。スーパータイプには、任意の数のサブタイプを含めることができます。 STEPでは、非常に複雑なサブスーパータイプグラフを作成することが非常に一般的です。一部のグラフは、100以上のエンティティを相互に関連付けます。
エンティティインスタンスは、単一のエンティティ(抽象的でない場合)またはサブスーパータイプグラフ内のエンティティの複雑な組み合わせのいずれかに対して構築できます。大きなグラフの場合、可能な組み合わせの数は天文学的な範囲で増加する可能性があります。可能な組み合わせを制限するために、ONEOFやTOTALOVERなどの特別なスーパータイプ制約が導入されました。さらに、エンティティは抽象的であると宣言して、インスタンスがこのエンティティだけから構築されることを強制できますが、非抽象サブタイプが含まれる場合のみです。
アルゴリズムの制約
エンティティおよび定義されたデータ型は、WHEREルールでさらに制約される場合があります。 WHEREルールもグローバルルールの一部です。 WHEREルールは式であり、TRUEに評価する必要があります。そうでない場合、EXPRESSスキーマの母集団は無効です。派生属性と同様に、これらの式はEXPRESS関数を呼び出すことができ、さらにEXPRESSプロシージャを呼び出すことができます。関数とプロシージャを使用すると、ローカル変数、パラメーター、および定数を含む複雑なステートメントを作成できます-プログラミング言語に非常に似ています。
EXPRESS言語は、ローカルおよびグローバルルールを記述できます。例えば:
この例では、area_unitエンティティの長さの二乗値が必要であることを説明しています。このために、dimensions.length_exponent属性は2に等しく、基本SIユニットの他のすべての指数は0でなければなりません。
もう一つの例:
つまり、週の値が7を超えることはできません。
そのため、エンティティにいくつかのルールを記述することができます。指定された例の詳細については、ISO 10303-41を参照してください。