>サイトトップへ >このカテゴリの一覧へ

日本工業規格

JIS

 B

3700-11

-1996

 (ISO

10303-11

 : 1994

)

産業オートメーションシステム

及びその統合−

製品データの表現及び交換−

第 11 部:記述法:EXPRESS 言語

Industrial automation systems and integration

Product data representation and exchange

Part 11 : Description methods : The EXPRESS language reference manual

序文  この規格は,1994 年に第 1 版として発行された ISO 10303-11, Industrial automation systems and

integration

−Product data representation and exchange−Part 11 : Description methods : The EXPRESS language

reference manual

を翻訳し,技術的内容及び規格票の様式を変更することなく作成した日本工業規格である。

なお,この規格で点線の下線を施してある“参考”は,原国際規格にはない事項である。

0.

序文  この規格群は,計算機が解釈可能な製品データの表現及び交換を規定する。この規格群は,製

品のライフサイクルを通じて,特定のシステムに依存せずに製品データを記述できる中立の機構を提供す

ることを目的とする。この規格群の特質は,中立のファイル交換だけでなく,製品データベースの実装及

び共有,並びに保管の基盤としても適する。

この規格群は一連の規格からなり,

それぞれの規格は部として個別に制定する。この規格群の各規格は,

記述法,統合リソース,アプリケーションプロトコル,抽象試験スイート,実装法又は適合性試験のいず

れかの組に属する。この規格群の組は,JIS B 3700-1 による。この規格は,この規格群で,記述法を規定

する組の中の一つの規格とする。

この規格は,EXPRESS 言語の要素を規定する。言語の各要素は,それぞれの文脈の中で例を付けて示す。

単純な要素を最初に示し,より複雑な概念を順次導入する。

参考  この規格は,製品データの表現及び交換を規定する一連の規格群の中で,記述法を規定する一

組の規格の中の一つの規格である。この製品データの表現及び交換を規定する規格群の全体を

総称するときには“規格群”と呼び,記述法を規定する一組の規格を呼ぶときには“組”又は

“組の規格”と呼び,個々の規格を呼ぶときには単に“規格”と呼ぶ。

EXPRESS

記述例の注釈部は,

理解を容易にするため,

日本語記述としたが,

仕様では EXPRESS

文字集合に限定されているので,注意を要する。


2

B 3700-11-1996 (ISO 10303-11 : 1994)

0.1

言語の概要  EXPRESS は,情報に対する要件を形式的に記述する形式仕様言語とする。EXPRESS は,

この規格群の他の規格の情報要件を規定するのに使う。この言語は,複数個の設計目標に基づいており,

その幾つかを次に示す。

−  この規格群が膨大で複雑なため,言語は,計算機も人も共に構文解析ができるようにする。この

規格群の構成要素を形式的でない方法で表現すると,表現の矛盾性の検査又は実装の見解を含め

幾つかの二義的な見解を生じることに対する検査に,計算機の自動機能を採用できなくなる可能

性がある。

−  言語は,この規格群で取り扱う種々のものを区分できるように設計する。スキーマがこの区分及

び区分間通信の基盤となる。

−  言語は,関心の対象を表現するエンティティの定義に焦点を当てる。エンティティの定義はその

特性の観点から行い,その特性は定義域及び定義域に対する制約の仕様によって特徴付ける。

−  言語は,特定の実装の見解をできるだけ排除するようにする。しかし,例えば,静的なファイル

交換のような実装の見解は,自動的にかつ直接的な方法で作ることができる。

EXPRESS

では,エンティティは,属性によって定義する。すなわち,使用及び理解に重要な特性又は特

徴を属性によって定義する。これらの属性は表現を用い,その表現は単純データ型(例えば,整数)又は

他のエンティティ型であるかも知れない。例えば,幾何学の点は,三つの実数で定義する。エンティティ

の定義に寄与する属性には名前を付ける。したがって,幾何学の点に対する三つの実数には,x,y 及び z

と名前が付けられる。定義しようとするエンティティとそれを定義する属性との間の関係が確立され,同

様に属性とその表現との間の関係も確立される。

備考1.  多くの言語が EXPRESS に寄与した。それは,特に Ada,Algol,C,C

++

,Euler,Modula-2,

Pascal

,PL/I 及び SQL であった。しかし,EXPRESS を情報モデルの表現により適したものに

するため,幾つかの記述手段を創案した。

2.

この規格に示す EXPRESS の使用例は,特定の記述様式規則に従ったものではない。実際,

例の中には,紙面を節約し,柔軟性を示すために,様式として優れていないものもある。

例は,この規格群の他の規格で定義された情報モデルの内容を反映することを意図してい

ない。例は,EXPRESS の特定の機能を示すために作成した。例とこの規格群の他の規格で規

定された情報モデルとの類似性は,無視するのが望ましい。

1.

適用範囲  この規格は,製品データの種々の側面を規定できる言語を定義する。この言語は,EXPRESS

と呼ぶ。

この規格は,EXPRESS 言語の構成要素の部分集合を表すために図式表現も定義する。この図式表現は,

EXPRESS-G

と呼ぶ。

EXPRESS

は,JIS B 3700-1 で定義されたデータ仕様記述言語とする。この言語は,あいまいさなくデー

タを定義できるようにする言語要素と定義されたデータに対する制約の仕様とからなる。

次の事項は,この規格の適用範囲内とする。

−  データ型

−  データ型のインスタンスに対する制約

次の事項は,この規格の適用範囲外とする。

−  データベース様式の定義

−  ファイル様式の定義


3

B 3700-11-1996 (ISO 10303-11 : 1994)

−  転送様式の定義

−  プロセス制御

−  情報処理

−  例外処理

EXPRESS

は,プログラム言語ではない。

2.

引用規格  この規格で引用する規格を次に示す。これらの規格がこの規格の本文中で引用された場合

には,この規格の規定の一部とみなす。この規格の制定時点では,次の規格が最新規格であるが,改正さ

れることもあるので,この規格を使う当事者は,最新版を適用できるかどうかを検討するのが望ましい。

ISO 10303-1 (1994)

  Industrial automation systems and integration

Product data representation and 

exchange

Part 1 : Overview and fundamental principles

備考  JIS B 3700-1(産業オートメーションシステム及びその統合−製品データの表現及び交換−

第 1 部:概要及び基本原理)−1996 がこの国際規格と一致している。

ISO/IEC 8824-1 : 1994

  Information technology

Open systems interconnection

Abstract syntax notation 

one (ASN.1) 

Part 1 : Specification of basic notation.

ISO/IEC 10646-1 : 1993

  Information technology

Universal multiple-octet coded character set (UCS) 

Part 1 : Architecture and basic multilingual plane.

備考  JIS X 0221[国際符号化文字集合 (UCS) −第 1 部  体系及び基本多言語面]−1995 がこの

国際規格と一致している。

3.

用語の定義

3.1

JIS B 3700-1

で定義された用語  この規格は,JIS B 3700-1 で定義された次の用語を使う。

−  コンテキスト (context)

−  データ (data)

−  データ仕様記述言語  (data specificatin language)

−  情報 (information)

3.2

この規格で定義する用語  この規格では,次の用語を定義する。

3.2.1

複合エンティティデータ型 (complex entity data type)    エンティティの一つの表現。複合エンテ

ィティデータ型は,特定の上位型・下位型のグラフ内にあるエンティティデータ型の許された組合せで,

共通の属性と制約とによって定義された値の定義域を確立する。

3.2.2

複合エンティティ(データ型)インスタンス  [complex entity (data type) instance]    名前付けられ

た 1 単位のデータで,エンティティによって定義されたクラス内の 1 単位の情報を表現する。複合エンテ

ィティ(データ型)インスタンスは,複合エンティティデータ型によって確立された定義域の一つの要素

とする。

3.2.3

定数 (constamt)   指定された定義域をもつ名前付けられた値。その値は,修正できない。

3.2.4

データ型 (data type)   値の定義域。

3.2.5

エンティティ (entity)   共通の特性によって定義された情報のクラス。

3.2.6

エンティティデータ型 (entity data type)   エンティティの一つの表現。エンティティデータ型は,

共通の属性と制約とによって定義された値の定義域を確立する。


4

B 3700-11-1996 (ISO 10303-11 : 1994)

3.2.7

エンティティ(データ型)インスタンス[entity (data type) instance]  名前付けられた 1 単位のデ

ータで,エンティティによって定義されたクラス内の 1 単位の情報を表現する。エンティティ(データ型)

インスタンスは,エンティティデータ型によって確立された定義域の一つの要素とする。

3.2.8

インスタンス (instance)    名前付けられた値。

3.2.9

部分複合エンティティデータ型  (Partial complex entity data type)    エンティティの一つの可能な

表現。部分複合エンティティデータ型は,複合エンティティデータ型の一部又は全部を形成できる上位型・

下位型のグラフ内のエンティティデータ型の一団とする。

3.2.10

部分複合エンティティ値  (partial conplex entity value)    部分複合エンティティデータ型の一つの

値。これ単独では意味をもたず,複合エンティティインスタンスとするためには,更に他の部分複合エン

ティティ値と名前とを組み合わせなければならない。

3.2.11

母集団 (population)   エンティティデータ型インスタンスの集まり。

3.2.12

単純エンティティ(データ型)インスタンス  [simple entity (data type) instance]    名前付けられた

1

単位のデータで,エンティティによって定義されたクラス内の 1 単位の情報を表現する。単純エンティ

ティ(データ型)インスタンスは,単純エンティティデータ型によって確立された定義域の一つの要素と

する。

3.2.13

上位型・下位型のグラフ (subtype/supertype graph)   エンティティデータ型の宣言された集まり。

上位型・下位型のグラフで宣言されたエンティティデータ型は,SUBTYPE 文によって関係付けられる。

上位型・下位型のグラフは,一つ以上の複合エンティティデータ型を定義する。

3.2.14

字句 (token)   言語の分解不可能な構文要素。

3.2.15

 (value)    1 単位のデータ。

4.

適合性要件

4.1

EXPRESS

で書いた形式仕様

4.1.1

字句言語  EXPRESS で書いた形式仕様 (formal specification) は,次に規定する所定の水準に合致し

ていなければならない。形式仕様が所定の水準及びそのすべての下位水準に該当する検査のすべてに合格

した場合,その形式仕様は,所定の水準に合致しているとみなす。

検査水準  字句言語の検査水準は,次のとおりとする。

水準 1:参照検査  この水準は,形式仕様が構文的に及び参照の観点から正しいものにするために,

その形式仕様を検査することからなる。形式仕様が

附属書 A(規定)に示す開始構文規則 (syntax) の

展開によって生成された構文と整合する場合,その形式仕様は,構文的に正しいとみなす。EXPRESS

項目に対する参照のすべてが,10.及び 11.に定義する有効範囲及び可視性の規則に合致する場合,そ

の構文規則は,参照の観点から正しいとみなす。

水準 2:型検査  この水準は,形式仕様が次の事項に完全に合致するために,その形式仕様を検査す

ることからなる。

−  式は,12.に規定する規則に従っている。

−  代入文は,13.3 に規定する規則に従っている。

−  逆属性宣言は,9.2.1.3 に規定する規則に従っている。

−  属性再宣言は,9.2.3.4 に規定する規則に従っている。

水準 3:値検査  この水準は,7.16.で規定するとおり,形式仕様が“A は B より大でなければなら

ない”という形式の文を確実に満たすようにするために,形式仕様を検査することからなる。これは,


5

B 3700-11-1996 (ISO 10303-11 : 1994)

A

及び B が共にリテラル及び/又は定数によって評価できるような場所にだけ限定される。

水準 4:完全検査  この水準は,形式仕様がこの規格で規定するすべての要件規定を確実に満たすよ

うにするために,形式仕様を検査することからなる。

1.  この規格では,関数は,呼び出されたときにプロセスがとる可能性のあるそれぞれのパスで,

RETURN

文を指定しなければならないと規定している。これは,検査しなければならない。

4.1.2

図式形式  EXPRESS-G で書いた形式仕様は,次に規定する所定の検査水準に合致しなければなら

ない。形式仕様が所定の水準及びそのすべての下位水準に該当する検査のすべてに合格した場合,その形

式仕様は,所定の水準に合致しているとみなす。

検査水準  図式形式の検査水準は,次のとおりとする。

水準 1:記号及び有効範囲の検査  この水準は,形式仕様が附属書 D(規定)の D.5 及び D.6 で定義

するエンティティレベル又はスキーマレベルのいずれかの仕様に確実に合致するようにするために,

形式仕様を検査することからなる。これには,形式仕様が,

附属書 D(規定)の D.2D.3 及び D.4

で定義するとおりに記号を使っているかどうかの検査も含む。さらに,形式仕様は,ページ参照及び

再宣言された属性がそれぞれ

附属書 D(規定)の D.4.1 及び D.5.5 を確実に満たすようにするために,

検査される。

水準 2:完全検査  この水準は,附属書 D(規定)で定義する完全エンティティレベル又は完全スキ

ーマレベルのいずれかの仕様に適合していない場所及び 7.16.で定義する要件に適合していない場

所を識別するために,形式仕様を検査することからなる。

4.2

EXPRESS

の実装

4.2.1

EXPRESS

言語の構文解析系  EXPRESS 言語構文解析系の実装は,附属書 E(規定)に規定した制

約の内で実装に関連する部分と矛盾なく,EXPRESS で書いた形式仕様を解析できなければならない。

EXPRESS

言語構文解析系は,EXPRESS で書いた形式仕様に特定の検査水準(及びその下位水準)が要求

するすべての検査を適用できる場合には,その水準(4.1.1 参照)に適合しているとみなす。

EXPRESS

言語構文解析系の実装者は,識別子の個数・長さ,処理する数の範囲及び実数の最高精度に対

する実装上の制約を示さなければならない。これらの制約は,適合試験のために,

附属書 E(規定)に規

定した様式で文書化しなければならない。

4.2.2

図式編集ツール  EXPRESS-G 編集ツールの実装は,附属書 E(規定)に規定した制約の内で実装

に関連する部分と矛盾なく,EXPRESS-G で形式仕様を生成・表示できなければならない。EXPRESS-G 

集ツールは,指定された検査水準(及びその下位水準)に合致する EXPRESS-G の形式仕様を生成・表示

できる場合には,その特定の検査水準に適合しているとみなす。

EXPRESS-G

編集ツールの実装者は,識別子の個数・長さ,各ページで利用可能な記号の個数及び最大ペ

ージ数に対する実装上の制約を示さなければならない。これらの制約は,適合試験のために,

附属書 E(規

定)に規定した様式で文書化しなければならない。

5.

基本原則  この規格の利用者は,次の概念を理解しているものとみなす。

EXPRESS

言語で書いたスキーマには,定義域を設定する条件の集合を記述する。インスタンスは,それ

が定義域内にあるかどうかを決めるために評価できる。そのインスタンスがすべての条件を満たしている

場合には,定義域内にあるものとする。インスタンスが条件のいずれかを満たしていない場合,そのイン

スタンスは,条件に反しており,定義域内にない。インスタンスが省略可能な属性の値を含まず,かつそ

の条件のいずれかがこの属性を含んでいる場合,そのインスタンスがすべての条件を満たしているかどう


6

B 3700-11-1996 (ISO 10303-11 : 1994)

かを決めることはできない。この場合,インスタンスは,定義域内にあるとみなす。

EXPRESS

言語の要素の多くには,名前が付けられる。この名前によって,他の言語要素は,結合した表

現を引用できる。他の言語要素の定義中で名前を使うと,基底となる表現を引用することになる。言語の

構文では名前に識別子を用いるが,基底となる表現は,構造を理解するために,検討しなければならない。

EXPRESS

言語で書いたエンティティデータ型の仕様で,定義域を記述する。定義域の個々の要素は,そ

れに付けられた一意な識別子によって区別する。EXPRESS は,識別子の内容又は表現を規定しない。

定数エンティティインスタンスの宣言は,エンティティデータ型によって記述された定義域の識別可能

な要素を定義する。これらのエンティティインスタンスは,定義域上で行う演算によって修正したり削除

したりしてはならない。

EXPRESS

で制約を手続的に記述するときは,局所変数としてエンティティインスタンスを追加で宣言し

たり,引用したりすることができる。これらの追加されたエンティティインスタンスは,定義域の識別可

能な一時的な要素とみなす。手続的な記述では,追加されたエンティティインスタンスを修正することが

できるが,定義域の永続的な要素を修正してはならない。定義域の一時的な要素は,それらが宣言された

手続的な記述の有効範囲の中でだけ利用可能とし,その終了時に存在しなくなる。

EXPRESS

言語は,実装の環境を規定しない。特に,EXPRESS は,次の事項を規定しない。

−  名前に対する引用を処理する方法

−  他のスキーマを知る方法

−  制約を検査する方法又は検査の時期

−  制約を満たさないときの実装での対処

−  EXPRESS スキーマに適合していないインスタンスの実装での存在の可否

−  実装での,インスタンスの生成・修正・削除の時期及び方法

6.

言語仕様の構文  ここでは,EXPRESS 言語の構文を表現するのに使用する記法を定義する。

EXPRESS

言語の全構文を,

附属書 A(規定)に示す。これらの構文規則の多くは,特定の文の構文を規

定する箇条にも示されている。しかし,箇条に示されている部分は,必ずしも完全ではない。したがって,

示されていない規則を知るためには,

附属書 A(規定)を調べる必要がある場合もある。この規格群では,

構文の部分は,枠で囲って表示する。構文の囲いの中にある規則には,他の構文規則との間の相互参照の

ため,左側に一意な番号を付ける。

6.1

仕様の構文  EXPRESS の構文は,ヴィルト構文記法 (WSN) から導出した記法で定義する。

備考  附属書 J(参考)の文献 3.による。

記法及び WSN のそれ自身による定義を,次に示す。

syntax

= { production } .

production

= identifier  ‘=’ expressron ‘.’ .

expression

= term { ‘|’ term } .

term

= factor { factor } .

factor

= identifier | literal | group | option | repetition .

identifier

= character { character } .

literal

= ‘‘‘‘ character { character } ‘‘‘‘ .

group

= ‘(‘ expression ‘)’ .

option

= ‘[‘ expression ‘]’ .


7

B 3700-11-1996 (ISO 10303-11 : 1994)

repetition

= ‘{‘ expression ‘}’ .

−  等号’=’は,生成規則  (production)  を表す。左辺の要素は,右辺の要素の組合せとして定義され

る。生成規則の要素の間にある空白は,リテラルの中にある場合を除き,意味をもたない。生成

規則は,ピリオド’.’で終わる。

−  因子  (factor)  内の識別子  (identifier)  は,他の生成規則の左辺に現れる非終端記号を表すのに使

う。識別子は,文字,数字及び下線からなる。言語のキーワードは,生成規則の中では大文字の

列で表現する。

−  リテラル  (literal)  という語は,終端記号を表すのに用い,それ以上展開できない。リテラルは,

大文字・小文字の区別のない文字の列をアポストロフィーで囲ったものとする。文字  (character)

は,JIS X 0221 で定義された群 00 の面 00 にある区点 0021∼007E の文字とする。アポストロフィ

ーがリテラル中に現れる場合は,二重にしなければならない。

−  括弧の意味は,次のとおりとする。

●  波括弧’{  }’は,0 回以上の繰返しを表す。

●  角括弧’[  ]’は,省略可能なパラメタを表す。

●  丸括弧’()’は,丸括弧に囲まれた生成規則の集まりを,単一の生成規則として使用しなけれ

ばならないことを表す。

●  縦棒’ | ‘は,一つだけ選択することを表す。

2.  文字列型の構文は,次のとおりとする。

構文:

293

  string_type = STRING [ width_spec ] .

318

  width_spec = ‘(‘ width ‘)’ [ FIXED ] .

317

  width = numeric_expression  .

STRING

,numeric_expression 及び FIXED の定義は,

附属書 A(規定)に示す。

3.  例2.の構文に従うと,次のものが可能になる。

(a)  string

(b)  string ( 22 ) 

(c)  string ( 19 ) fixed

numeric_expression

の規則は非常に複雑であり,numeric_expression には,多くのものが

書ける。

6.2

特殊な文字による記法  表示するのが困難な文字集合全体及び特殊な文字を表現するのに,次の記

法を使う。

−  \は,JIS X 0221 の群 00 の面 00 にある区点 0021∼007E の文字を表現する。

−  \は,復帰改行(7.1.5.2 参照)を表現する。

−  \は,引用符(アポストロフィー)(‘)  とし,\に含まれる。

−  \は,間隔文字とする。

−  \は,JIS X 0221 の群 00 の面 00 にある区点 0000∼001F 及び区点 007F の文字を表現する。

7.

基本言語要素  ここでは,EXPRESS のスキーマを構成する基本要素,すなわち,文字集合,注釈,記

号,予約語,識別子及びリテラルを規定する。


8

B 3700-11-1996 (ISO 10303-11 : 1994)

基本言語要素は,組み合わせてテキストの流れとなり,一般的には物理的な行に分けられる。物理的な

行は,0 個以上の文字からなり,復帰改行(7.1.5.2 参照)で終わる。

備考  文を複数行に分け,空白を用いて異なる構文要素を配置することで,スキーマは,よって読み

やすくなる。

4.  次は,等価である。

          entity point;x, y, z:real end_entity;

          ENTITY point;

             x,

             y,

             z : REAL;

          END_ENTITY;

7.1

文字集合  EXPRESS で書かれるスキーマは,JIS X 0221 の群 00 の面 00 にある区点 0000∼007F から

なる選択部分集合の文字だけを使わなければならない。この選択部分集合を EXPRESS 文字集合  (EXPRESS

character set)

と呼ぶ。この文字集合の要素は,これらの文字が定義されている JIS X 0221 の点によって参

照され,点の番号は,16 進数によって規定する。この部分集合中の印字可能な文字(区点 0021∼007E)

は,EXPRESS 言語の字句を構成するために組み合わせる。EXPRESS の字句とは,キーワード,識別子,

記号又はリテラルをいう。EXPRESS を書くのに使う文字集合は,更に次のとおり区分する。

備考  ここでは,EXPRESS のスキーマを規定するのに使用する文字だけを規定しており,文字列デー

タ型で許される文字の範囲を規定していない。

7.1.1

数字  EXPRESS は,アラビア数字 (digit) の 0∼9 を使う(EXPRESS 文字集合の区点 0030∼0039)。

構文:

120digit

= ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

7.1.2

英字  EXPRESS は,英語の大文字・小文字 (letter) を使う(EXPRESS 文字集合の区点 0041∼005A

及び区点 0061∼007A)

。大文字と小文字との違いは,明示的な文字列リテラルでだけ意味をもつ。

備考  EXPRESS は,大文字だけ,小文字だけ又は大文字・小文字混じりで書いてもよい(例 4.参照)。

構文:

124

  letter = ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ | ‘h’ | ‘i’ | ‘j’ | ‘k’ | ‘l’ |

                 ‘m’ | ‘n’ | ‘o’ | ‘p’ | ‘q’ | ‘r’ | ‘s’ | ‘t’ | ‘u’ | ‘v’ | ‘w’ | ‘x’ |

                 ‘y’ | ‘z’ .

7.1.3

特殊文字  特殊文字 (special character,special)  は,文字でも数字でもない印字可能な文字とし,

主として区切り記号又は演算子として使う。特殊文字は,EXPRESS 文字集合の区点 0021∼002F,区点 003A

∼003F,区点 0040,区点 005B∼005E,区点 0060 及び区点 007B∼007F にある文字とする。

構文:

134

  specral = not_paren_star_quote_special | ‘(‘ | ‘)’ | ‘*’ | ‘‘‘‘ .

128

  not_paren_star_quote_special = ‘!’ | ‘”’ | ‘#’ | ‘$’ | ‘%’ | ‘&’ | ‘+’ | ‘,’ |

                                            ’-’ | ‘.’ | ‘/’ | ‘:’ | ‘;’ | ‘<‘ | ‘=’ | ‘>‘ |

                                            ’?’ | ‘@’ | ‘[‘ | ‘\’ | ‘]’ | ‘^’ | ‘_’ | ‘‘‘ |

                                            ’{‘ | ‘|’ | ‘}’ | ‘~’ .


9

B 3700-11-1996 (ISO 10303-11 : 1994)

7.1.4

下線  下線(_,EXPRESS 文字集合の区点 005F)は,識別子及びキーワードで使ってよい。ただ

し,これらの最初の文字であってはならない。

7.1.5

空白  空白は,次の項と 7.1.6 とによって定義する。空白は,EXPRESS で書かれたスキーマの字句

を区切るのに使う。

備考  自由で一貫した空白の使用は,スキーマの構造及び可読性を改善することができる。

7.1.5.1

間隔文字  一つ以上の間隔(EXPRESS 文字集合の区点 0020)は,二つの字句の間又は明示的な

文字列リテラルの中に入れることができる。記法\は,言語構文中では,間隔文字を表現するのに使う。

7.1.5.2

復帰改行  復帰改行は,EXPRESS で書かれた形式仕様中で,行の物理的な終わりを示す。復帰改

行は,通常,間隔として扱うが,後置注釈を終了したり,文字列リテラルを異常終了したりする場合には,

意味をもつ。復帰改行は,言語構文中で,記法\で表現する。

復帰改行の表現は,実装定義とする。

7.1.5.3

その他の文字  7.1.17.1.5.2 で定義しなかった文字(EXPRESS 文字集合の区点 0000∼001F 及び

区点 007F)は,明示的な文字列リテラル中を除き,空白として扱わなければならない。記法\o は,言語

構文中では,その他の文字の一つを表現するのに使う。

7.1.6

注釈  注釈 (remark) は,文書化のために使い,EXPRESS 言語の構文解析系によって空白として解

釈される。注釈は,埋込み注釈及び後置注釈の二つの形式をもつ。

7.1.6.1

埋込み注釈  文字対の“(*”は埋込み注釈の開始を示し,文字対の“*)”は埋込み注釈の終了

を示す。埋込み注釈 (embedded remark) は,任意の二つの字句の間に現れてよい。

構文:

142

  embedded_remark = ‘ (*’ { not_lparen_star | lparen_not_star | star_not_rparen |

                            embedded_remark } ‘*)’ .

126

  not_lparen_star = not_paren star | ‘)’ .

127

  not_paren_star = letter | digit | not_paren_star_special .

124

  letter = ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ | ‘h’ | ‘i’ | ‘j’ | ‘k’ | ‘l’ |

                 ‘m’ | ‘n’ | ‘o’ | ‘p’ | ‘q’ | ‘r’ | ‘s’ | ‘t’ | ‘u’ | ‘v’ | ‘w’ | ‘x’ |

                 ‘y’ | ‘z’ .

120

  digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

129

  not_paren_star_special = not_paren_star_quote_special | ‘‘’’ .

128

  not_paren_star_quote_specral = ‘!’ | ‘”’ | ‘#’ | ‘$’ | ‘%’ | ‘&’ | ‘+’ | ‘,’ |

                                           ‘-’ | ‘.’ | ‘/’ | ‘:’ | ‘;’ | ‘<’ | ‘=’ | ‘>’ |

                                           ‘?’ | ‘@’ | ‘[’ | ‘\’ | ‘]’ | ‘^’ | ‘_’ | ‘‘’ |

                                           ‘{’ | ‘|’ | ‘}’ | ‘~’ .

125

  lparen_not_star = ‘(’ not_star .

132

  not_star = not paren star | ‘(’ | ‘)’ .

135

  star_not_rparen = ‘*’ not rparen

131

  not_rparen = not_paren_star | ‘*’ | ‘(’ .

EXPRESS

文字集合の中の任意の文字は,復帰改行を含め,埋込み注釈の開始と終了との間に現れてよい。

すなわち,埋込み注釈は,複数行にわたって書くことができる。

埋込み注釈は,入れ子にしてよい。


10

B 3700-11-1996 (ISO 10303-11 : 1994)

備考  注釈を入れ子にする場合,記号の対が一致するよう注意しなければならない。

5.  次は,入れ子となった埋込み注釈の一例である。

          (* The ‘(*’ symbol starts a remark, and the ‘*)’ symbol ends it *)

7.1.6.2

後置注釈  後置注釈 (tail remark) は,行の物理的な終わりに書く。後置注釈は,連続する二つの

ハイフン (--) で始まり,復帰改行で終わる。

構文:

144

  tail_remark = ‘--’  { \a | \s | \o } \n .

6.  -- this is a remark that ends with a newline

7.2

予約語  EXPRESS の予約語 (reserved word) は,キーワード,組込み定数の名前,組込み関数の名前

及び組込み手続の名前とする。予約語は,識別子として使用してはならない。EXPRESS の予約語を,次に

規定する。

7.2.1

キーワード  EXPRESS のキーワード (keyword) を,表 1 に示す。

備考1.  キーワードは,リテラルを表現する大文字の生成規則をもつ。これは,構文の生成規則を読

みやすくする。

2.

CONTEXT

END_CONTEXTMODEL 及び END_MODEL は,この規格の改正版で将来使

用するために予約する。

表 1  EXPRESS のキーワード

ABSTRACT AGGREGATE

ALIAS

ARRAY

AS BAG

BEGIN

BINARY

BOOLEAN BY

CASE

CONSTANT

CONTEXT DERIVE  ELSE

END

END_ALIAS END_CASE  END_CONSTANT

END_CONTEXT

END_ENTITY END_FUNCTION

END_IF

END_LOCAL

END_MODEL END_PROCEDURE

END_RE

PEAT

END_RULE

END_SCHEMA END_TYPE

ENTITY

ENUMERATION

ESCAPE FIXED  FOR

FROM

FUNCTION GENERIC  IF

INTEGER

INVERSE LIST

LOCAL

LOGICAL

MODEL NUMBER

OF

ONEOF

OPTIONAL  OTHERWISE PROCEDURE QUERY

REAL REFERENCE

REPEAT

RETURN

RULE

SCHEMA SELECT SET

SKIP STRING

SUBTYPE

SUPERTYPE

THEN TO

TYPE UNIQUE

UNTIL

USE VAR WHERE

WHILE

 

7.2.2

演算子として用いる予約語  予約語として定義された演算子 (operator) を,表 に示す。これら演

算子の定義は,12.による。


11

B 3700-11-1996 (ISO 10303-11 : 1994)

表 2  演算子として用いる EXPRESS の予約語

AND ANDOR

DIV IN

LIKE

MOD NOT OR

XOR

 

7.2.3

組込み定数  組込み定数 (built-in constant) の名前を,表 に示す。これら定数の定義は,14.によ

る。

表 3  定数として用いる EXPRESS の予約語

? SELF

CONST_E

PI

FALSE TRUE  UNKNOWN

7.2.4

組込み関数  組込み関数 (built-in function) の名前を,表 に示す。これら関数の定義は,15.によ

る。

表 4  関数名として用いる EXPRESS の予約語

ABS ACOS

ASIN

ATAN

BLENGTH COS

EXISTS  EXP

FORMAT HIBOUND

HIINDEX

LENGTH

LOBOUND LOG

LOG2

LOG10

LOINDEX NVL

ODD

ROLESOF

SIN SIZEOF

SQRT

TAN

TYPEOF USEDIN VALUE  VALUE_IN

VALUE_UNIQUE

7.2.5

組込み手続  組込み手続 (built-in procedure) の名前を,表 に示す。これら手続の定義は,16.

よる。

表 5  手続名として用いる EXPRESS の予約語

INSERT REMOVE

7.3

記号  記号 (symbol) は,EXPRESS で特定の意味をもつ特殊文字又は特殊文字の集まりとする。記

号は,EXPRESS で区切り記号又は演算子として使う。区切り記号は,隣り合う字句要素又は構文要素を開

始,分離又は終了するのに使う。分離記号なしでは,これら要素の解釈は不可能となる。演算子は,演算

子と結合している被演算子に対して行う動作を表す。演算子は,12.に規定する。EXPRESS の記号を

表 6

に示す。


12

B 3700-11-1996 (ISO 10303-11 : 1994)

表 6  EXPRESS の記号

.

' ;  :

+ -  =

% ,

\ /

< > [ ]

{ } | e

( )

<= <>

>=

<

:

= ||

** --  (*

*)

:

=:

: <> :

7.4

識別子  識別子 (identifier) は,スキーマ自身を含め,スキーマ内で宣言される項目に与える名前と

する(9.3 参照)

。識別子は,EXPRESS の予約語と同じであってはならない。

構文:

140

  simple_id = letter { letter | digit | ‘_’ } .

124

  letter = ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ | ‘h’ | ‘i’ | ‘j’ | ‘k’ | ‘l’ |

                ‘m’ | ‘n’ | ‘o’ | ‘p’ | ‘q’ | ‘r’ | ‘s’ | ‘t’ | ‘u’ | ‘v’ | ‘w’ | ‘x’ |

                ‘y’ | ‘z’ .

120

  digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

識別子の最初の文字は,英字とする。残りの文字がある場合,英字,数字及び下線のいずれの組合せで

あってもよい。

EXPRESS

言語の構文解析系の実装者は,その実装系が読むことのできる識別子の最大の文字数を,

附属

書 E(規定)を用いて指定しなければならない。

7.5

リテラル  リテラル (literal) は,自己定義型の定数値とする。リテラルの型は,文字が字句をどの

ように構成するかに依存する。リテラルの型は,2 進,整数,実数,文字列及び論理とする。

構文:

238

  literal = binary_literal | integer_literal | logical_literal | real_literal | string_literal .

7.5.1

2

進リテラル  2 進リテラル (binary literal) は,2 進データ型の値を表現し,%記号に続く一つ以上

のビット(0 又は 1)の列からなる。

構文:

136

  binary_literal = ‘%’ bit { bit } .

119

  bit = ‘0’ | ‘1’ .

EXPRESS

言語の構文解析系の実装者は,その実装系が読むことのできる 2 進リテラル中の最大のビット

数を,

附属書 E(規定)を用いて指定しなければならない。

7.  正しい2進リテラル

          %0101001100

7.5.2

整数リテラル  整数リテラル (integer literal) は,整数データ型の値を表現し,一つ以上の数字

(digit)

からなる。


13

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

138

  integer_literal = digits  .

121

  digits = digit { digit } .

120

  digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

備考  EXPRESS では,式の構文中で単項演算子の概念を用いるので,整数リテラルの符号は,この構

文中では取り扱っていない。

EXPRESS

言語の構文解析系の実装者は,その実装系が読むことのできる整数リテラル中の最大の整数値

を,

附属書 E(規定)を用いて指定しなければならない。

8.  正しい整数リテラル

            4016

            38

7.5.3

実数リテラル  実数リテラル (real literal) は,実数データ型の値を表現し,仮数と省略可能な指数

とからなる。

仮数は,小数点を含んでいなければならない。

構文:

139

  real_literal = digits ‘.’ [ digits ] [ ‘e’[ sign ] digits ].

121

  digits = digit { digit } .

120

  digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

286

  sign = ‘+’ | ‘-’ .

備考  EXPRESS では,式の構文中で単項演算子の概念を用いるので,実数リテラルの符号は,この構

文中では取り扱っていない。

EXPRESS

言語の構文解析系の実装者は,その実装系が読むことのできる実数リテラルの最大の精度と最

大の指数とを,

附属書 E(規定)を用いて指定しなければならない。

9.  正しい実数リテラル

1.E6

    "E"  は,大文字又は小文字で書いてよい。

3.5e-5

359.62

10.  正しくない実数リテラル

.001

小数点の前に少なくとも 1 けたなければならない。

1e10

実数リテラルは,小数点を含まなければならない。

1. e10

実数リテラルは,間隔文字を含まない。

7.5.4

文字列リテラル  文字列リテラル (string literal) は,文字列データ型の値を表現する。文字列リテ

ラルは,単純文字列リテラル  (simple string literal),及び符号化文字列リテラル  (encoded string literal)  の二

つの形式をもつ。単純文字列リテラルは,アポストロフィー (‘) で囲まれた EXPRESS 文字集合(7.1 参照)

中の文字の列からなる。単純文字列リテラル中のアポストロフィーは,二つの連続したアポストロフィー

で表現する。符号化文字列リテラルは,JIS X 0221 の文字の並び中の各文字を 4 オクテット符号化表現で

表し,引用符 (") で囲む。符号化を次に定義する。

−  第 1 オクテットは,文字が定義されている JIS X 0221 の群。

−  第 2 オクテットは,文字が定義されている JIS X 0221 の面。


14

B 3700-11-1996 (ISO 10303-11 : 1994)

−  第 3 オクテットは,文字が定義されている JIS X 0221 の区。

−  第 4 オクテットは,文字が定義されている JIS X 0221 の点。

文字列リテラルは,物理的な行の境界で分割してはならない。すなわち,復帰改行は,文字列リテラル

を囲むアポストロフィー又は引用符の間に出現してはならない。

構文:

292

  string_literal = simple_string_literal | encoded_string_literal .

141

  simple_string_literal = \q {( \q \q ) | not_quote | \s | \o } \q .

130

  not_quote = not_paren_star_quote_special | letter | digit | ‘(‘ | ‘)’ | ‘*’ .

128

  not_paren_star_quote_specral = ‘!’ | ‘”’ | ‘#’ | ‘$’ | ‘%’ | ‘&’ | ‘+’ | ‘,’ |

                                            ‘-’ | ‘.’ | ‘/’ | ‘:’ | ‘;’ | ‘<’ | ‘=’ | ‘>’ |

                                            ‘?’ | ‘@’ | ‘[’ | ‘\’ | ‘]’ | ‘^’ | ‘_’ | ‘‘’ |

                                            ‘{‘ | ‘|’ | ‘}’ | ‘∼’ .

124

  letter = ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ | ‘h’ | ‘i’ | ‘j’ | ‘k’ | ‘l’ |

                 ‘m’ | ‘n’ | ‘o’ | ‘p’ | ‘q’ | ‘r’ | ‘s’ | ‘t’ | ‘u’ | ‘v’ | ‘w’ | ‘x’ |

                 ‘y’ | ‘z’ .

120

  digit = ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

137

  encoded_string_literal = ‘“’ encoded_character { encoded_character } ‘”’ .

122

  encoded_character = octet octet octet octet .

133

  octet = hex_digit  hex_digit  .

123

  hex_drgrt = dlglt | ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ .

EXPRESS

言語の構文解析系の実装者は,その実装系が読むことのできる単純文字列リテラルの最大の文

字数を,

附属書 E(規定)を用いて指定しなければならない。

さらに,EXPRESS 言語の構文解析系の実装者は,その実装系が読むことのできる符号化文字列リテラル

の最大のオクテット数(4 の倍数)を,

附属書 E(規定)を用いて指定しなければならない。

11.  正しい単純文字列リテラル

            ‘Baby needs a new pair of shoes!’

Baby needs a new pair ofshoes!

と読む。

            ‘Eds’‘Computer Store’

Ed’s Computer Store

と読む。

12.  正しくない単純文字列リテラル

            ‘Ed’s Computer Store’

アポストロフィーの数は,常に偶数でなければならない。

            ‘Ed’’s Computer

            Store’

物理的な行を分割している。

13.  正しい符号化文字列リテラル

            “00000041”

A

と読む。

            “000000C5”


15

B 3700-11-1996 (ISO 10303-11 : 1994)

A

と読む。

14.  正しくない符号化文字列リテラル

            “000041”

オクテットは,4 の倍数個で与えなければならない。

            “00000041 000000C5”

"

で囲まれた間には,16 進数の文字だけが許される。

7.5.5

論理リテラル  論理リテラル (logical literal) は,論理データ型又はブールデータ型の値を表現し,

組込み

定数 TRUEFALSE 又は UNKNOWN のいずれかとする。

備考  UNKNOWN は,ブールデータ型と整合しない。

構文:

242

  logical_literal = FALSE | TRUE | UNKNOWN .

8.

データ型  ここでは,言語の一部をなすデータ型を定義する。すべての属性,局所変数又は仮引き数

は,その定義域を定めるデータ型をもつ。

データ型は,単純データ型,集合体データ型,名前付きデータ型,構成データ型及び一般化データ型に

分類できる。データ型は,その使い方によって基本データ型,パラメタデータ型及び基底データ型にも分

類できる。これらの二つの分類間の関係は,8.6 で定義する。

これらの型の値に対し実行できる演算は,12.で定義する。

8.1

単純データ型  単純データ型は,EXPRESS における最小のデータ単位の定義域を定める。すなわち,

最小のデータ単位は,EXPRESS の認識する最小の要素とし,それ以上,細分化することはできない。単純

データ型は,

数値  (NUMBER),

実数  (REAL),

整数  (INTEGER),

文字列  (STRING),

ブール  (BOOLEAN),

論理  (LOGICAL)  及び 2 進  (BINARY)  のデータ型とする。

8.1.1

数値データ型  NUMBER データ型は,その定義域として,この言語で使うあらゆる数値をとる。

NUMBER

データ型は,数値を整数又は実数に特定化して表現する必要がない場合に使用する。

構文:

248

  number_type = NUMBER  .

15.  次の例では,size の状況を知ることができないので,それを正確に表現する方法が分からない。

例えば,フットボールゲームの観客数は INTEGER データ型であるし,一方,競技場の広さは

REAL

データ型である。

          size : NUMBER ;

備考  将来の改正では,数値データ型では,例えば複素数のように,更に特定化することもある。

8.1.2

実数データ型  REAL データ型は,その定義域として,有理数,無理数及び精度付き実数をとる。

REAL

データ型は,NUMBER データ型を特定化したデータ型とする。

構文:

265

  real_type = REAL [ ‘(’ precision spec ‘)’ ] .

255

  precision_spec = numeric_expression  .

有理数及び無理数は,無限の精度をもち,厳密な値をもつ。精度付き実数は,ある指定された精度まで

は既知である量を表現する。precision spec は,有効けた数を表す。

実数リテラルは,仮数部及び省略可能な指数部で表現する。その有効けた数は,先頭の余分なゼロを消


16

B 3700-11-1996 (ISO 10303-11 : 1994)

去した仮数部のけた数とする。値の精度は,応用に必要な値の先頭からのけた数とする。

規則及び制約:

(a)  precision spec

は,要求される最小の有効けた数を与える。この式は,正の整数値に評価されるもので

なければならない。

(b)

有効けた数が与えられなかった場合,実数値の精度は,制約されない。

8.1.3

整数データ型  INTEGER データ型は,その定義域として,整数値をとる。INTEGER データ型は,

REAL

データ型を特定化したデータ型とする。

構文:

227

  integer_type = INTEGER  .

16.  次の例は,nodes と名付けられた属性を表現するために INTEGER データ型を使用している。

この属性の定義域は,整数であり,それ以上の制約はない。

          ENTITY foo;

           nodes : INTEGER;

           ...

          END_ENTITY;

8.1.4

論理データ型  LOGICAL データ型は,その定義域として,三つのリテラル TRUEFALSE 及び

UNKNOWN

をとる。

構文:

243

  logical_type = LOGICAL  .

LOGICAL

データ型の値の順序付けは,FALSE<UNKNOWN<TRUE とする。

LOGICAL

データ型は,BOOLEAN データ型と整合するが,UNKNOWN の値は,BOOLEAN データ型

の変数には代入できない。

8.1.5

ブールデータ型  BOOLEAN データ型は,その定義域として,二つのリテラル TRUE 及び FALSE

をとる。BOOLEAN データ型は,LOGICAL データ型を特定化したデータ型とする。

構文:

173

  boolean_type = BOOLEAN  .

BOOLEAN

データ型の順序付けは,LOGICAL データ型と同様に,FALSE<TRUE とする。

17.  次の例では,planar と名付けられた属性を,BOOLEAN データ型で表している。surface のイ

ンスタンスと結合している planar の値は,TRUE 又は FALSE のいずれでもよい。

          ENTITY surface ;

            planar : BOOLEAN;

            ...

          END_ENTITY;

8.1.6

文字列データ型  STRING データ型は,その定義域として,文字の並びをとる。文字列を構成する

文字は,JIS X 0221 で定義している文字とする。

構文:

293

  string_type = STRING [ width spec ] .

318

  width_spec = ‘(’ width ‘)’ [ FIXED ] .

317

  width = numeric_expression  .

STRING

データ型は,固定長又は可変長として定義してもよい。

(予約語 FIXED を使って)固定長とし


17

B 3700-11-1996 (ISO 10303-11 : 1994)

て定義されていない場合は,その文字列は,可変長とする。

固定長の STRING データ型の定義域は,型宣言で指定された長さ  (width)  の文字列の集合とする。

可変長の STRING データ型の定義域は,型宣言で指定された最大の長さ  (width)  以下の文字列の集合と

する。

長さが指定されていない場合は,そのデータ型の定義域は,並びの長さに制約のない文字列の集合とす

る。

部分文字列及び個々の文字は,12.5 で規定する添字を使って指定してもよい。

文字列中では,大文字と小文字とは区別する。

規則及び制約:

width

式は,正の整数値に評価されるものでなければならない。

18.  次の例は,最大長の指定のない可変長の文字列を定義している。

          string1 : STRING;

19.  次の例は,最大長を10文字とする文字列を定義している。しかし,その長さを,0文字から10

文字の間で,変更することができる。

          string2 : STRING(10);

20.  次の例は,厳密に10文字の文字列を定義しており,その長さを変更することはできない。

          string3 : STRING(10) FIXED;

8.1.7

2

進データ型  BINARY データ型は,その定義域として,ビットの列をとる。それぞれのビットは,

0

又は 1 の値をもつ。

構文:

172

  binary_type = BINARY [ width spec ] .

318

  width_spec = ‘(’ width ‘)’ [ FIXED ] .

317

  width = numeric_expression  .

BINARY

データ型は,固定長又は可変長として定義してよい。

(予約語 FIXED を使って)固定長として

定義されていない場合は,その 2 進データは,可変長とする。

固定長の BINARY データ型の定義域は,型宣言で指定された長さ width(ビット数)のビットの列の集

合とする。

可変長の BINARY データ型の定義域は,型宣言で指定された最大の長さ width 以下のビットの列の集合

とする。長さが指定されていない場合は,その定義域は,列の長さに制約のないビットの列の集合となる。

BINARY

データ型の一部分及び個々のビットは,12.3 で規定する添字を使って指定してもよい。

規則及び制約:

width

式は,正の整数値に評価されるものでなければならない。

21.  次の例は,文字フォントの情報に適用できるかもしれない。

          ENTITY character;

           representation : ARRAY [1:20] OF BINARY (8) FIXED;

          END ENTITY;


18

B 3700-11-1996 (ISO 10303-11 : 1994)

8.2

集合体データ型  集合体データ型は,その定義域として,与えられた基本データ型の値の集まりを

とる(8.6.1 参照)

。これらの基本データ型の値を,集合体の要素と呼ぶ。EXPRESS は,4 種類の集合体デ

ータ型,すなわち,配列  (ARRAY),リスト  (LIST),多重集合  (BAG)  及び集合  (SET)  のデータ型を定

義する。これらの各集合体データ型の値は,次のとおり異なる性質をもつ。

−  ARRAY データ型は,固定した大きさの順序付けられた集まりとする。配列は,連続した整数で

添字付けする。

22.  座標変換行列は,配列を要素にもつ配列として定義してもよい。

−  LIST データ型は,位置によってアクセスできる要素の並びとする。リストの要素数は,可変でも

よいし,データ型定義で制約することもできる。

23.  工程計画は,作業のリストとして表現することができる。作業は,順序付けられ,工程計画に

追加したり,削除することができる。

−  BAG データ型は,要素の重複が許された順序付けられていない集まりとする。多重集合の要素数

は,可変でもよいし,データ型定義で制約することもできる。

24.  組立の問題で現れる留め具の集まりは,多重集合データ型で表現することができる。その集ま

りには,同じ種類のボルトが存在してもよい。この場合,特定の穴に対してどのボルトを使用

するかは重要ではない。

−  SET データ型は,要素の重複が許されず,順序付けされていない要素の集まりとする。集合の要

素数は,可変でもよいし,データ型定義で制約することもできる。

25.  世界の人口は,集合となる。

備考  EXPRESS の集合体は,一次元とする。(数学行列のような)多次元をもつと考えられるオブジ

ェクトは,集合体データ型で表現できる。ただし,その集合体データ型の基本型は,他の集合

体データ型となっているものとする。したがって,集合体データ型は,任意の次元をモデル化

するために,任意の深さで入れ子にすることができる。

26.  LIST [1:3] OF ARRAY [5:10] OF INTEGER は,実際には,2次元をもつ。

8.2.1

配列データ型  ARRAY データ型は,その定義域として,同類の要素の添字付けられた固定した大

きさの集まりをもつ。整数値の式をとる上限及び下限は,添字の値の範囲,すなわち,配列の大きさを定

義する。ARRAY データ型定義では,一つの配列データ型の値が重複する要素を含むことができないこと

を付加的に指定してもよい。さらに,配列データ型の値は,添字で指定されるすべての位置に必ずしも要

素を含まなくてもよいことを指定してもよい。

構文:

165

  array_type = ARRAY bound_spec OF [ OPTIONAL ] [ UNIQUE ] base_type .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric expression .

175

  bound_2 = numeric expression .

171

  base_type = aggregation_types | simple_types | named_types .

m

を下限,を上限とすると,その配列は,nm+1 個の要素を含む。これらの各要素には,mの添

字を付ける(12.6.1 参照)

備考  上限及び下限は,正の値,負の値又はゼロであってもよい。しかし,不定“?”であってはなら

ない(14.2 参照)


19

B 3700-11-1996 (ISO 10303-11 : 1994)

規則及び制約:

(a)

上限及び下限の仕様(上下限仕様)の bound_1 及び bound_2 の二つの式は,整数値に評価されるもの

でなければならない。この両方が同時に,不定“?”に評価されるものであってはならない。

(b)  bound_1

は,配列の下限を与える。これは,このデータ型の値がとり得る最も小さい添字とする。

(c)  bound_2

は,配列の上限を与える。これは,このデータ型の値がとり得る最も大きい添字とする。

(d)  bound_1

は,bound_2 以下でなければならない。

(e)

キーワード OPTIONAL が指定されている場合,配列データ型の値は,1 個以上の添字の位置の要素

に不定“?”の値をとってもよい。

(f)

キーワード OPTIONAL が指定されていない場合,配列データ型の値は,いかなる添字の位置の要素

にも不定“?”の値をとってはならない。

(g)

キーワード UNIQUE が指定されている場合,配列データ型の値中のそれぞれの要素は,他のすべての

要素と異なっていなければならない(インスタンスとしては等しくない。

備考  配列データ型宣言において,OPTIONAL 及び UNIQUE の両方を同時に指定してもよい。すな

わち,一つの配列データ型の値が複数の不定“?”の要素をとってもよい。それは,不定“?”

同士の比較が UNKNOWN となり,一意性制約が維持されることによる。

27.  次の例は,多次元の配列がどのように宣言されるかを示している。

sectors : ARRAY [1 : 10] OF

--

  第 1 次元

ARRAY [11 : 14 ] OF

--

  第 2 次元

  UNIQUE  something;

最初の配列は,データ型 ARRAY [11:14] OF UNIQUE something を 10 個もつ。sectors と名付

けられた属性は,総計 40 個のデータ型 something の要素をもつ。それぞれの ARRAY [11:14]  の

中には,重複する要素はないが,単一の sectors の異なる ARRAY [11:14] の中には,データ型

something

の同じ値があってもよい。

8.2.2

リストデータ型  LIST データ型は,その定義域として,同類の要素の並びをもつ。整数値をとる

下限及び上限は,省略可能とし,LIST データ型の値がもっことのできる要素の最小数及び最大数を定義

する。LIST データ型定義では,一つのリストデータ型の値が重複する要素を含めないことを付加的に指

定してもよい。

構文:

237

  list_type = LIST [ bound_spec ] OF [ UNIQUE ] base_type .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

171

  base_type = aggregation_types | simple_types | named_types .

規則及び制約:

(a)  bound_1

式は,0 以上の整数値に評価されなければならない。それは,リストデータ型の値中に存在

できる要素の最小個数(下限)を与える。bound_1 は,不定“?”をとってはならない。

(b)  bound_2

式は,bound_1 式以上の整数値又は不定“?”に評価されなければならない。それは,リスト

データ型の値中に存在できる要素の最大個数(上限)を与える。

この値が不定“?”の場合,リストデータ型の値中の要素の個数には,上限がない。


20

B 3700-11-1996 (ISO 10303-11 : 1994)

(c)  bound_spec

が省略されている場合,上下限は,  [0 ; ?]  となる。

(d)

キーワード UNIQUE が指定されている場合,リストデータ型の値中のそれぞれの要素は,他のすべて

の要素と異なっていなければならない(インスタンスとしては等しくない。

28.  次の例は,配列を要素とするリストを定義している。このリストは,0個から10個の配列データ

型の要素をもつことができる。それぞれの配列は,リスト中の他のすべての配列と異なってい

なければならない。

          complex_list : LIST [0:10] OF UNIQUE ARRAY [1:10] OF INTEGER;

8.2.3

多重集合データ型  BAG データ型は,その定義域として,順序付けられていない同類の要素の集

まりをもつ。整数値の式をとる下限及び上限は,省略可能とし,BAG データ型で定義される集まりがもつ

ことのできる要素の最小個数及び最大個数を定義する。

構文:

170

  bag_type = BAG [ bound_spec ] OF base_type .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

171

  base_type = aggregation_types | simple_types | named_types .

規則及び制約:

(a)  bound_1

式は,0 以上の整数値に評価されなければならない。それは,多重集合データ型の値中に存

在できる要素の最小個数(下限)を与える。bound_1 は,不定“?”をとってはならない。

(b)  bound_2

式は,bound_1 以上の整数値又は不定“?”に評価されなければならない。それは,多重集合

データ型の値中に存在できる要素の最大個数(上限)を与える。

この値が不定“?”の場合,多重集合データ型の値中の要素の個数には,上限がない。

(c)  bound_spec

が省略されている場合,上下限は,  [: ?]  となる。

29.  次の例は,point(すでに他の場所で宣言している名前付きデータ型)の多重集合である属性を

定義している。

            a_bag_of_points : BAG OF point;

a_bag_of_points

と名付けられた属性の値は,0 個以上の point をもつことができる。同

一の point インスタンスは,a_bag_of_points の値に 2 回以上現れてもよい。

その値が少なくとも 1 個の要素をもつ必要がある場合には,下限に関する仕様を次のように

指定する。

              a_bag_of_points : BAG [1:?] OF point;

a_bag_of_points

と名付けられた属性の値は,

少なくとも 1 個の要素をもたなければならない。

8.2.4

集合データ型  SET データ型は,その定義域として,順序付けられていない同類の要素の集まり

をもつ。SET データ型は,BAG データ型を特定化したデータ型とする。整数値の式をとる下限及び上限

は,省略可能とし,SET データ型の値がもつことのできる要素の最小個数及び最大個数を定義する。SET

データ型で定義される集まりは,二つ以上の要素に同一のインスタンスを含んではならない。


21

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

285

  set_type = SET [ bound_spec ] OF base_type .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

171

  base_type = aggregation_types | simple_types | named_types .

規則及び制約:

(a)  bound_1

式は,0 以上の整数値に評価されなければならない。それは,集合データ型の値中に存在で

きる要素の最小個数(下限)を与える。bound_1 は,不定“?”をとってはならない。

(b)  bound_2

式は,bound_1 以上の整数値又は不定“?”に評価されなければならない。それは,集合デー

タ型の値中に存在できる要素の最大個数(上限)を与える。

この値が不定“?”の場合,集合データ型の値中の要素の個数には,上限がない。

(c)  bound_spec

が省略されている場合,上下限は,  [: ?]  となる。

(d)

集合データ型の値中のそれぞれの要素は,他のすべての要素と異なっていなければならない(イン

スタンスとしては等しくない。

30.  次の例は,point(すでに他の場所で宣言している名前付きデータ型)の集合である属性を定義

している。

              a_set_of_points : SET OF point;

a_set of points

と名付けられた属性の値は,0 個以上の point をもつことができる。

(集合デー

タ型の値中の)

それぞれの point インスタンスは,

その集合データ型の値中の他のすべての point

インスタンスと異なっていなければならない。

その値が 15 個以下の point をもつ必要がある場合には,上限に関する仕様を次のように指定

する。

              a_set_of_points : SET [ 0 : 15 ] OF point;

a_set_of_points

と名付けられた属性の値は,15 個以下の point をもつ。

8.2.5

集合体における値の一意性  集合体の要素中の一意性は,インスタンス比較(12.2.2 参照)に基づ

く。集合体は,VALUE_UNIQUE 関数(15.29 参照)を使うことで,その要素中において,値が一意であ

るとの制約を与えることができる。

31.  次の例では,定義する集合は,その値が一意であるとの制約をもつ。

          TYPE value_unique_set = SET OF a;

          WHERE

           wrl : value_unique (SELF);

          END_TYPE;

備考  モデラで定義している値の一意性は,次の疑似コード中に示すような,一対の関数 my_equal

と my_unique とによって指定できる。

          FUNCTION my_equal(v1,v2: GENERIC:gen): LOGICAL;

          (*  v1 と v2 とが等しい場合,TRUE を戻す。*)

          END FUNCTION ;

          FUNOTION my_unique (c : AGGREGATE OF GENERIC) : LOGICAL ;


22

B 3700-11-1996 (ISO 10303-11 : 1994)

          (*  二つの c の要素が同じ値の場合,FALSE を戻す。

    すべての要素の比較において,一つでも UNKNOWN がある場合,

  UNKNOWN を戻す。そうでない場合,TRUE を戻す。*)

          LOCAL

             result    :  LOGICAL;

             unknownp : BOOLEAN := FALSE;

          END_LOCAL;

          IF (SIZEOF(c) =  O)  THEN

            RETURN (TRUE); END IF ;

          REPEAT i:= LOINDEX(c) TO (HIINDEX(c) - 1);

            REPEAT j :=(i+1) TO HIINDEX(c);

             result  := my_equal(c[i],c[j]);

             IF  (result = TRUE)  THEN

              RETURN (FALSE); END_IF;

              IF (result = UNKNOWN)  THEN

               unknownp  := TRUE;  END_IF;

              END_REPEAT;

          END_REPEAT;

          IF unknownp THEN

            RETURN(UNKNOWN);

          ELSE

            RETURN (TRUE);

          END_IF;

          END_FUNCTION;

関数 my_equal は,同値類の作成を可能にする次の特性をもつほうがよい。次に示す は,

検討中のオブジェクトの集合とする。my_equa1 (i

j)  は,TRUEFALSE 又 UNKNOWN はの

いずれかを戻す。ただし,i 及び j は,の要素とする。

(a)  my_equa1 (i

j)  は,集合 のすべての要素 i に対して,TRUE を戻す(なぜならば,集合

S

の要素には,不定“?”がないからである。このことは,myequal (?

?)  が TRUE である

ことを必要としない。

(b)

集合 のすべての要素 i,j に対して,my_equal (i

j)  my_equa1 (ji)  が成立する。

(c)

集合 のすべての要素 i,j 及び k に対して,(my_equa1(i

j)  TRUE)  かつ  (my_equa1(j

k) 

TRUE)ならば(my_equa1(ik)  TRUE)が成立する。

8.3

名前付きデータ型  名前付きデータ型は,形式仕様において宣言するデータ型とする。この利用者

宣言のデータ型は,エンティティデータ型及び定義データ型の 2 種類とする。ここでは,名前付きデータ

型の参照について規定する。これらのデータ型宣言は,9.による。

8.3.1

エンティティデータ型  エンティティデータ型は,ENTITY 宣言で定める(9.2 参照)。エンティテ

ィデータ型には,利用者がエンティティ識別子を割り当てる。エンティティデータ型は,この識別子によ

って参照できる。


23

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

147

  entity_ref = entity_id  .

規則及び制約:

entity_ref

は,現在の有効範囲内で可視であるエンティティへの参照でなければならない(10.参照)

32.  次の例は,属性の表現として,point エンティティデータ型を使用している。

          ENTITY point;

             x, y, z : REAL;

          END_ENTITY;

          ENTITY line;

             p0, p1 : point;

          END_ENTITY;

line

エンティティは,p0 と p1 と名付けられた二つの属性をもっている。これらの各属性の

データ型は,point である。

8.3.2

定着データ型  定義データ型は,TYPE 宣言によって宣言する(9.1 参照)。定義データ型には,利

用者が型識別子を割り当てる。定義データ型は,この識別子によって参照できる。

構文:

154

  type_ref = type_id  .

規則及び制約:

type ref

は,現在の有効範囲内で可視である定義データ型の名前でなければならない(10.参照)

33.  次の例は,属性と結合された測定単位を示すために使われる定義データ型である。

          TYPE volume = REAL;

          END_TYPE;

          ENTITY PART;

          ...

           bulk : volume;

          END_ENTITY;

bulk

と名付けられた属性は,実数として表現されている。この場合,定義データ型の volume

を使用することによって,実数値の意味及び文脈を明確にできる。すなわち,bulk は,REAL

で表現される他のものではなく,volume を意味している。

8.4

構成データ型  EXPRESS の構成データ型は,列挙  (ENUMERATION)  及び選択  (SELECT)  のデー

タ型の 2 種類とする。これらのデータ型は,同じような構文構造をもち,定義データ型の基底表現を定め

るために使う(9.1 参照)

備考  EXPRESS の構成データ型は,定義データ型を表現するためにだけ使うことができる。

8.4.1

列挙データ型  ENUMERATION データ型は,その定義域として,名前の順序付けられた集まりを

もつ。名前は,列挙データ型の値を表す。これらの名前は,enumeration_id によって指定し,列挙項目と

呼ぶ。

構文:

201

  enumeration_type=ENUMERATION OF ‘(’ enumeration_id { ‘,’ enumeration_id } ‘)’ .

二つの異なる ENUMERATION データ型は,同じ enumeration_id を含んでもよい。この場合,


24

B 3700-11-1996 (ISO 10303-11 : 1994)

enumeration_id

に対する(例えば,式中での)参照は,その参照が不明確にならないように,データ型識

別子を前に付け,修飾しなければならない。その場合,type_id.enumeration_id として参照する。

備考  type_id は,常に使用可能とする。それは,EXPRESS が定義データ型の基底表現としてだけ,

ENUMERATION

データ型を許していることによる。

規則及び制約:

(a)

比較が目的の場合,列挙型の値の順序は,enumeration_id の並びの相対位置で決定する。すなわち,

1

番目の項目は 2 番目の項目よりも小さくなければならず,2 番目の項目は 3 番目の項目よりも小さく

なければならないというように,順次,このような順序でなければならない。

(b)

異なる列挙データ型の値の間の比較は,未定義とする。

(c)

列挙データ型は,定義データ型の基底型としてだけ用いなければならない。

34.  次の例は,異なる種類の乗り物がどのように移動できるかを示すために,列挙データ型を使用

している。

          TYPE car_can_move = ENUMERATION  OF

                (left, right, backward, forward);

          END_TYPE;

          TYPE plane_can_move = ENUMERATION  OF

                (left, right, backward, forward, up, down);

          END_TYPE;

列挙項目 left は,二つの別個の意味で定義されており,それらが,構成要素となっている型

で定義されている。識別子 left の二つの定義間には,何の関係もない。left 又は right への参

照だけではあいまいとなる。このあいまいさを解消するため,これらの値を参照するときには,

car_can_move. left

のように型名によって修飾しなければならない。

8.4.2

選択データ型  SELECT データ型は,その定義域として,その選択リスト中の名前付きデータ型

の定義域の和をもつ。SELECT データ型は,その選択リスト中のそれぞれの名前付きデータ型を一般化し

たデータ型とする。

構文:

284

  select_type=SELECT ‘(’ named_types { ‘,’named_types } ‘)’ .

規則及び制約:

(a)

選択リスト中のそれぞれの項目は,エンティティデータ型又は定義データ型でなければならない。

(b)

選択データ型は,定義データ型の基底型としてだけ用いなければならない。

備考  SELECT データ型の値は,その選択データ型の選択リスト中で指定された二つ以上の名前付き

データ型の値であってもよい。この状況は,それらの名前付きデータ型がともに共通の継承グ

ラフ(9.2.3 参照)の一部である場合にだけ起こる。

35.  及び が の下位型であり,それらが ANDOR 式で関係付けられ,かつ SELECT(a,b)で定義

された型をもつ場合には,同時に 及び である SELECT データ型の値をもってもよい。

36.  次の例では,データ型の選択は,与えられた文脈によって行われる。

wall_mounting

は,永久固定又は一時固定の取付け方法によって,wa11 に product を取り

付ける。取付け方法は,更に細分化される。wall_mounting の値は,nailscrewglue 又は

weld

のうち一つの値をもつ。


25

B 3700-11-1996 (ISO 10303-11 : 1994)

            TYPE

               attachment_method = SELECT (permanent_attachment, temporary_attachment);

            END_TYPE;

            TYPE permanent_attachment = SELECT(glue,  weld)

            END_TYPE;

            TYPE temporary_attachment = SELEOT(nail,  screw)

            END_TYPE;

            ENTITY nail;

             length     :  REAL;

             head_area : REAL;

            END_ENTITY;

            ENTITY screw;

             length    : REAL;

             pitch     : REAL;

            END_ENTITY;

            ENTITY glue;

             composition : material_composition;

             solvent      : material_composition;

            END_ENTITY;

            ENTITY weld;

             composition : matenal_composition

            END_ENTITY;

            ENTITY wall_mounting;

             mounting  :  product;

             on         : wall;

             using      : attachment_method;

            END_ENTITY;

8.5

一般化データ型

構文:

211

  generalized_types = aggregate_type | general_aggregation_types |

generic_type

一般化データ型  (generalized data type,generalized_types)  は,ある他のデータ型を一般化するのを指定

するために使用し,ある限られた特定の文脈だけで使用できる。総称  (GENERIC)  データ型は,すべての

データ型を一般化するのに使う。被集合体  (AGGREGATE)  データ型は,すべての集合体データ型を一般

化するのに使う。一般化集合体データ型  (general aggregate data type,general_aggregation_types)  は,通常

の集合体データ型に適用される幾つかの制約を緩和した集合体データ型を一般化するのに使う。これらの

データ型は,9.5.3 による。


26

B 3700-11-1996 (ISO 10303-11 : 1994)

8.6

データ型の使い方による分類  EXPRESS では,データ型を三つの異なった方法,すなわち,基本デ

ータ型,パラメタデータ型及び基底データ型で使用する。基本データ型は,属性及び集合体要素の表現と

して使用する。パラメタデータ型は,関数及び手続の仮引き数の表現として使用する。基底データ型は,

定義データ型の表現として使用する。データ型には,

これらのいずれの方法でも使用できるものもあれば,

ある文脈中でしか使用できないものもある。これらの区別の要約を,

表 に示す。

表 7  データ型の使用法

(a)

基本データ型:属性又は集合体要素の表
現。

(b)

パラメタデータ型:仮引き数,局所変数,
及び関数結果の表現。

(c)

基底データ型:定義データ型の表現(9.1

参照)

8.6.1

基本データ型  基本データ型  (base data type,base_type)  は,属性の表現又は集合体データ型の要

素の型として使用する。基本データ型は,単純データ型,集合体データ型及び名前付きデータ型とする。

構文:

171

  base_type = aggregation_types | simple_types | named_types .

8.6.2

パラメタデータ型  パラメタデータ型  (parameter data type,parameter_type)  は,アルゴリズム(関

数及び手続)の仮引き数の表現として使用する。パラメタデータ型は,関数の戻り値の型及びアルゴリズ

ムで宣言された局所変数を表現するのに使用してもよい。パラメタデータ型は,単純データ型,名前付き

データ型及び一般化データ型とする。

構文:

253

  parameter_type = generalized_types | named_types | simple_types .

8.6.3

基底データ型  基底データ型  (underlying data type,underlying_type)  は,定義データ型の表現とし

て使用する。基底データ型は,単純データ型,集合体データ型,構成データ型及び定義データ型とする。

構文:

309

  underlying_type = constructed_types | aggregation_types | simple_types | type_ref.

9.

宣言  ここでは,EXPRESS で利用可能な種々の宣言を定義する。EXPRESS 宣言は,新しい EXPRESS

項目を生成し,それに識別子を結び付ける。EXPRESS 項目は,それに結び付けられた名前を書くことによ

って他から参照してもよい(10.参照)

EXPRESS

の重要な機能は,次の宣言によって得られる。

−  型

−  エンティティ

−  スキーマ

−  定数

−  関数

−  手続


27

B 3700-11-1996 (ISO 10303-11 : 1994)

−  規則

宣言は,明示的又は暗黙的であってよい。ここでは,明示的な宣言について示す。暗黙の宣言について

は,宣言が定められるための項目及び条件とともに,この箇条及びこの後の箇条で示す。

9.1

型宣言  型宣言 (type declaraticm,type_decl)  は,定義データ型(8.3.2 参照)を生成し,それを参照

するための識別子を宣言する。具体的には,定義データ型の名前として type_id が宣言される。このデー

タ型の表現は,underlying_type とする。定義データ型の定義域は,underlying_type の定義域と同一とし,

where_clause

によって,更に制約される。定義データ型は,基底型 (underlying_type) の特定化とし,基底

型と整合する。

備考  複数の定義データ型を同一の表現と結び付けてもよい。名前は,underlying_type を使用する意

図(又は文脈)を読む人が理解する助けとなる。

構文:

304

  type_decl = TYPE type_id ‘=’ underlying_type ‘;’ [ where_clause ] END_TYPE ‘;’ .

309

  underlying_type = constructed_types | aggregation_types | simple_types | type_ref .

37.  次の宣言は,STRING を基底とする person_name と名前を付けられた定義データ型を宣言する。

そして定義型 perscm_name は,属性,局所変数及び仮引き数の表現として使用できるようにな

る。これは,単に STRING を使うよりも多くの意味を伝える。

          TYPE person_name = STRING;

          END_TYPE;

定義域規則(WHERE 句)  定義域規則 (domain rule) は,定義データ型の定義域を限定する制約を指定

する。定義データ型の定義域は,その基底となる表現の定義域が一つ以上の定義域規則で制約されたもの

とする。WHERE 句  (where_clause)  において,定義域規則は,キーワード WHERE の後に書く。

構文:

315

  where_clause = WHERE domain_rule ‘;’ { domam_rule ‘;’} .

各 domain_rule には規則ラベルを付けてもよい。規則ラベルの参照の仕方は,この規格の適用範囲外と

する。

備考  規則ラベルは,それが与えられているときには,実装に対する規則を特定するために使ってよ

い。例えば,提出文書,誤り報告書及び必す(須)仕様などで使ってよい。このため,規則に

ラベルを付けることを推奨する。

規則及び制約:

(a)

各定義域規則は,論理値(TRUEFALSE 又は UNKNOWN)又は不定“?”に評価される。

(b)

キーワード SELF14.5 参照)は,各定義域規則において少なくとも 1 回現れなければならない。定

義域規則は,基底型の定義域に含まれる特定の値について,規則内に現れるすべての SELF をその値

で置換して評価される。

(c)

定義域規則の式が TRUE に評価されたとき,定義域規則は,満たされる (asserted) 。式が FALSE 

評価されたときは,定義域規則は,破られる (violated) 。さらに,式が不定“?”又は UNKNOWN 

評価されたときは,定義域規則は,破られるのでも満たされるのでもないものとする。

(d)

定義データ型の定義域は,基底型の定義域の値のうち,どの定義域規則をも破らないものからなって

いるものとする。

(e)

定義域規則ラベルは,与えられた型宣言の中で一意とする。


28

B 3700-11-1996 (ISO 10303-11 : 1994)

38.  次の例では,整数型を基底とする正の整数だけを許すように制約する定義データ型が生成でき

る。

          TYPE positive = INTEGER;

          WHERE

           notnegative : SELF > 0;

          END_TYPE;

positive

型として宣言された属性,局所変数又は仮引き数は,正の整数値だけをもつように制

約される。

9.2

エンティティ宣言  エンティティ宣言 (entity declaration,entity_dec1)  は,エンティティデータ型を

生成し,それを参照するための識別子を宣言する。

個々の属性は,エンティティの特性を表し,各エンティティインスタンスごとに,値と結び付けられる。

属性のデータ型は,それがとり得る値の定義域を定める。

個々の制約は,エンティティの次の特性の一つを表す。

−  属性値の個数,種類及び構造に関する制限。これらは,属性の宣言で指定する。

−  インスタンスの属性値間に要求される関係又は許される属性値に対する制限。これらは,where

句に現れ,定義域規則と呼ばれる。

−  エンティティデータ型のすべてのインスタンスについて,属性値間に要求される関係。これらは,

次の箇所に現れる。

●  一意性句  (unique_clause)。これは,一意性の制約と呼ぶ。

●  逆属性句  (inverse_clause)。これは,基数制約と呼ぶ。

●  規則  (rule)(9.6 参照)。

−  複数のエンティティ型のインスタンス間に要求される関係。これは,エンティティ宣言自体には

現れず,規則として現れる(9.6 参照)

構文: 

196

  entity_decl = entity_head entity_body END ENTITY ‘;’ .

197

  entity_head = ENTITY entity_id [ subsuper ] ‘;’ .

194

  eltity_body = { explicit_attr } [ derive_clause ] [ inverse_clause ] [ unique_clause ]

                       [ where_clause ] .

規則及び制約:

(a)

エンティティ宣言で宣言された属性識別子及びラベルは,その宣言中で一意でなければならない。

(b)

下位型は,その上位型の一つに属する属性の識別子と同一の識別子をもつ属性を宣言してはならない。

その例外は,その上位型の一つから継承した属性を下位型が再宣言する場合とする(9.2.3.4 参照)

9.2.1

属性  エンティティデータ型の属性は,エンティティの本質的な特色,特質又は特性を表す。属性

の宣言は,エンティティデータ型と,属性によって参照されるデータ型との間の関係を定める。

属性の名前は,それが現れるエンティティの文脈で,その属性の値が果たす役割を表す。

属性の種類は,次の 3 種とする。

明示属性  インスタンスを生成するために,実装によって値が与えられるべき属性。

誘導属性  何らかの方法で値が計算される属性。

逆属性    そのエンティティを特定の役割で使っているエンティティインスタンスを値としてもつ属性。


29

B 3700-11-1996 (ISO 10303-11 : 1994)

すべての属性は,宣言しているエンティティデータ型のインスタンスと他の一つ以上のインスタンスと

の間の関係を定める。集合体データ型でないデータ型によって表現された属性は,このデータ型への単純

な関係を定める。集合体データ型によって表現された属性は,集合体の値への関係(集団関係)及び集合

体の値の要素への関係(分配関係)の両方を定める。さらに,すべての属性は,その基本データ型と宣言

しようとしているエンティティデータ型との間の暗黙の逆関係を定める。

備考  これらの関係の詳細は,附属書 G(参考)に示す。

9.2.1.1

明示属性  明示属性 (explicit attribute,explicit_attr)  は,インスタンスを生成するために実装に

よって値が与えられるべき特性を表現する。明示属性は,それぞれ異なる特性を表す。明示属性の宣言は,

示されたとおりの定義域をもつ一つ以上の明示属性を生成し,それぞれに識別子を割り当てる。

構文:

203

  explicit_attr = attribute_decl { ‘,’attribute_decl } ‘:’ [ OPTIONAL ] base_type ‘:’ .

167

  attribute_decl = attribute_id | qualified_attribute .

171

  base_type = aggregation_types | simple_types | named_types .

備考  qualified_attribute の構文は,属性の再宣言をするのに使い,9.2.3.4 に規定する。

規則及び制約:

(a)

明示属性が OPTIONAL と宣言されていない限り,宣言しようとしているエンティティデータ型のす

べてのインスタンスは,その属性に値をもたなければならない。

(b)

キーワード OPTIONAL は,あるエンティティインスタンスにおいて,そのキーワードを与えられた

属性が値をもたなくてもよいことを示す。属性が値をもたないとき,値は,不定“?”とする。

OPTIONAL

は,そのエンティティ型のインスタンスでは,属性が常に意味をもつが,あるインスタン

スについては,属性で指定される役割を果たす値が存在しないかもしれないことを示す。OPTIONAL は,

そのエンティティ型のあるインスタンスでは,その属性が意味をもたないことを示すわけではない。

備考1.  属性が,あるインスタンスでは意味をもたない場合は,下位型を利用して適切にモデル化す

る(9.2.3参照)

2.

省略可能な属性は,値をもたない場合もあるので,それらの属性を参照する(特に,規則中

での参照)ときには,注意が必要である。値をもつかどうかを決めるには組込み関数 EXISTS

が使え,計算のために暗黙の値を得るには組込み関数 NVL が使える。これらのどちらも使

用しないと,予期しない結果になることがある。

39.  次の宣言は,等価である。

          ENTITY point;

           x, y, z : REAL;

          END_ENTITY;

          ENTITY point;

           x : REAL;

           y : REAL;

           z : REAL;

          END_ENTITY;


30

B 3700-11-1996 (ISO 10303-11 : 1994)

9.2.1.2

誘導属性  誘導属性 (derived attribute,derived_attr)  は,一つの式を評価することによって,値

が計算される特性を表現する。誘導属性は,キーワード DERIVE の後に宣言する。宣言は,属性識別子,

表現型及び属性値を計算する式からなる。

構文:

190

  derived_attr = attribute_decl ‘:’ base_type ‘:=’ expression ‘;’ .

167

  attribute_decl = attribute_id | qualified_attribute .

171

  base_type = aggregation_types | simple_types | named_types .

備考  qualified_attribute の構文は,属性の再宣言をするのに使い,9.2.3.4 に規定する。

式は,有効範囲内にある属性,定数(SELF を含む。

)又は関数識別子を参照してもよい。

規則及び制約:

(a)

式は,その属性のデータ型に代入可能(13.3 参照)でなければならない。

(b)

誘導属性の値は,特定のエンティティインスタンスにおいて,式に現れる SELF を注目するインスタ

ンスで置き換えるとともに,式に現れる属性の引用を対応する属性値で置き換えて,式を評価するこ

とによって決定される。

40.  次の例では,円が中心,軸及び半径で定義されている。これらの明示属性に加えて,面積及び

周長のような重要な特性を表すために,これらの値を式として与え,誘導属性として定義して

いる。

          ENTITY circle;

           centre  :  point;

           radius  :  REAL;

           axis

:  vector;

          DERIVE

           area

: REAL :

= PI*radius**2;

           perimeter  : REAL := 2.0*PI*radius;

          END_ENTITY;

9.2.1.3

逆属性  他のエンティティが明示属性を通じて注目するエンティティと関係をもつとき,この関

係を注目するエンティティの文脈で記述するために逆属性 (inverse attribute,inverse_attr)  が使用できる。

さらに,逆属性は,関係を一層制約するために使用してもよい。

逆属性は,キーワード INVERSE の後に宣言する。

逆属性は,個別に指定しなければならない。

逆の関係に対する基数制約は,逆属性の上下限仕様によって,明示属性の場合と同一の方法で指定する

附属書 G(参考)参照]。

備考  附属書 G(参考)に明示属性と逆属性との関係についての情報を示す。

逆属性は,エンティティデータ型,又は要素の型がエンティティデータ型である BAG 若しくは SET 

表現される。

このエンティティデータ型を,参照エンティティと呼ぶ。

逆属性の宣言は,その参照エンティティの明示属性に名前を与える。特定の注目するエンティティデー


31

B 3700-11-1996 (ISO 10303-11 : 1994)

タ型のインスタンスについて,逆属性の値は,注目するインスタンスを指定された役割で使用する参照エ

ンティティデータ型の(一つ以上の)インスタンスからなる。

逆の関係の表現には,次の三つの形式が可能とし,それぞれは,二つのエンティティ間の関係について

の制約を課す。

多重集合データ型  上下限仕様がある場合には,それは,注目するエンティティのインスタンス

を参照する可能性のある参照エンティティのインスタンスの個数の最小値及び最大値を定める。

多重集合は一つのインスタンスを複数回含む場合があるので,一つ以上のインスタンスが注目す

るインスタンスを参照することができ,更にある特定のインスタンスが注目するインスタンスを

複数回参照することができる。

備考1.  逆属性で参照された属性が,一意性のない集合体データ型(多重集合,又はキーワード

UNIQUE

を指定しないリスト若しくは配列)によって表現される場合,注目するエンティテ

ィのある特定のインスタンスは,参照エンティティのある特定のインスタンスによって複数

回使用できる。

2.

逆属性で参照された属性が,一意性のある集合体データ型(集合,又はキーワード UNIQUE

を指定しないリスト若しくは配列)によって表現される場合,注目するエンティティのある

特定のインスタンスは,参照エンティティのある特定のインスタンスで一度だけ使用できる。

逆属性を省略可能な属性とするには,下限に 0 を指定することで表現し,注目するエンティテ

ィのあるインスタンスが参照エンティティのどのインスタンスからも参照されなくてよいことを

示す。

集合データ型  多重集合データ型の場合に加えて,集合データ型は,個々の参照インスタンスが

一意であるという制約をもつ。この制限は,個々の参照インスタンスが逆属性で参照された役割

において,注目するインスタンスを一度だけ使えることも意味する。

備考  逆属性で参照された属性が,一意性のある集合体データ型(集合,又はキーワード UNIQUE 

指定しないリスト若しくは配列)によって表現される場合,逆属性は,一意性に関して制約を

追加しない。

エンティティデータ型  逆属性は,注目するインスタンスを指定された役割で使用する参照エン

ティティデータ型のインスタンスを一つだけもつ。この場合,逆属性の基数は 1 対 1 とする。

構文:

234

  inverse_attr = attribute_decl ‘:’ [( SET | BAG ) [ bound_spec ] OF ] entity_ref FOR

                       attribute_ref ‘;’ .

167

  attribute_decl = attribute_id | qualified_attnbute .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

規則及び制約:

(a)

宣言している注目するエンティティに対して順方向の関係を定義するエンティティは,明示属性とし

て関係を定義しなければならない。

(b)

順方向の関係を定義しているエンティティの中の明示属性のデータ型は,宣言している注目するエン

ティティ,その上位型の一つ,又は(注目するエンティティ又はその上位型の一つを基本型とする)


32

B 3700-11-1996 (ISO 10303-11 : 1994)

集合体データ型でなければならない。

41.  ドア (door) の構造について,次の宣言があると仮定する。

          ENTITY door;

           handle : knob;

           hinges : SET [1:?] OF hinge;

          END_ENTITY;

ここで,ノブ  (knob)  のインスタンスが必ずドアのインスタンスからハンドル  (handle)  の役

割で使われるように,ノブの宣言を制約したいとする。

          ENTITY knob;

          ...

          INVE RSE

           opens : door FOR handle;

          END_ENTITY;

今度は単に,一つのノブは,ドアに使われていないこと,又は 1 枚のドアに使われること(例

えば,ノブがドアに取り付けられているか又はまだドアにとりつけられていない。

)を指定した

いとする。

          ENTITY knob;

          ...

          INVERSE

           opens : SET [0:1] OF door FOR handle

          END_ENTITY;

9.2.2

局所規則  局所規則は,エンティティインスタンスの定義域に関する言明とし,そのエンティティ

データ型のすべてのインスタンスに適用される。局所規則は,2 種類とする。一意性規則は,与えられた

エンティティデータ型のインスタンス全体で属性値が一意になるようにする。定義域規則は,与えられた

エンティティデータ型の各インスタンスの属性値に対する他の制約,又はそれらの間での他の制約を規定

する。

各局所規則には規則ラベルを付けてもよい。規則ラベルの参照の仕方は,

この規格の適用範囲外とする。

備考  規則ラベルは,それが与えられているときには,実装に対する規則を特定するために使ってよ

い。例えば,提出文書,誤り報告書及び必す(須)仕様などで使ってよい。このため,規則に

ラベルを付けることを推奨する。

9.2.2.1

一意性規則  個々の属性又は属性の組合せに対する一意性の制約は,一意性規則で指定してよい。

一意性規則は,キーワード UNIQUE の後に書き,一つの属性名又は属性名のリストを指定する。一つの属

性名を指定する規則は,単純一意性規則  (simple uniqueness rule)  と呼び,そのエンティティデータ型のど

の二つのインスタンスもその指定された属性に同一のインスタンスを使ってはならないことを指定する。

複数の属性名を指定する規則は,結合一意性規則 (joint uniqueness rule) と呼び,そのエンティティデータ

型のどの二つのインスタンスもその指定された属性の組が組として同一のインスタンスをもってはならな

いことを指定する。

備考  比較は,インスタンス等価によって行われ,値等価によっては行われない(12.2.2 参照)。


33

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

310

  unique_clause = UNIQUE unique_rule ‘;’ { unique_rule ‘;’ } .

311

  unique_rule = [ label ‘:’ ] referenced_attribute { ‘,’ referenced_attribute } .

266

  referenced_attribute = attribute_ref | qualified_attribute .

規則及び制約:

OPTIONAL

9.2.1.1 参照)が付いた明示属性が一意性規則に現れる場合で,その属性が特定のインスタ

ンスで値をもたないときには,一意性規則は破られるのでも満たされるのでもないので,そのエンティテ

ィインスタンスはその定義域の要素とする。

42.  a及び という名前の三つの属性をもつエンティティは,次のとおりに書ける。

          ENTITY e;

          a, b, c : INTEGER ;

          UNIQUE

          ur1 : a;

          ur2 : b;

          ur3 : c;

          END_ENTITY;

宣言しようとしているこのエンティティデータ型のどの二つのインスタンスも,a,b 又は c

の属性がそれぞれ同一の値をとれないことを意味する。

43.  次のような person name エンティティを考える。

          ENTITY person_name;

           last

:  STRING;

           first

:  STRING;

           middle

:  STRING;

           nickname  :  STRING;

          END_ENTITY;

            これは,次のとおりに使われる。

          ENTITY employee;

           badge : NUMBER;

           name  : person_name;

             ...

          UNIQUE

           ur1:  badge,name;

             ...

          END_ENTITY;

この例では,person_name エンティティの二つのインスタンスが,四つの属性に同一の値の

組をもち得る。しかし,employee では,badge と name との対は,一意でなければならないこ

とが要求される。したがって,employee の二つのインスタンスは,badge 及び name に同じ値

をもってもよい。しかし,employee のどの二つのインスタンスも badge 及び name の両方に同

じインスタンスをもってはならない。それは,対として見たとき,これらのインスタンスは,


34

B 3700-11-1996 (ISO 10303-11 : 1994)

一意でなければならないからである。属性の一意性を記述する方法は,9.6 による。

9.2.2.2

定職域規則(WHERE 句)  定義域規則は,すべてのエンティティインスタンスについて,個々

の属性又は属性の組合せの値を制約する。すべての定義域規則は,キーワード WHERE の後に書く。

構文:

315

  where_clause = WHERE domain_rule ‘;’ { domam rule ‘;’} .

規則及び制約:

(a)

各定義域規則の式は,論理値(TRUEFALSE 又は UNKNOWN)又は不定“?”に評価されなければ

ならない。

(b)

すべての定義域規則の式は,SELF に対する参照を含んでいるか,又はそのエンティティ若しくはそ

のいずれかの上位型で宣言された属性に対する参照を含んでいなければならない。

(c)

キーワード SELF は,宣言しているエンティティのインスタンスを参照しなければならない。

(d)

定義域規則の式が TRUE に評価されるとき,定義域規則は満たされるものとする。式が FALSE に評

価されるときは,規則は破られるものとする。さらに,その式が不定“?”又は UNKNOWN に評価さ

れるときは,式は,破られるのでも満たされるのでもないとする。

(e)

(その定義域の)

エンティティの正当なインスタンスについては,定義域規則に違反するものはない。

44.  unit_vector は,そのベクトルの長さがちょうど1であることを要求する。この制約は,次のと

おりに指定できる。

          ENTITY unit_vector;

           a, b, c : REAL;

          WHERE

           length_1 : a**2 + b**2 + c**2 = 1.0;

          END_ENTITY;

定義域規則における省略可能な属性  省略可能な属性を含む定義域規則は,次のとおりに取り扱う。

規則及び制約:

(a)

省略可能な属性が値をもつ場合,その定義域規則は,他の定義域規則と同様に評価されなければなら

ない。

(b)

省略可能な属性が値をもたない場合,その定義域規則の式を評価するときに,不定“?”が属性値とし

て使われる。不定“?”を含む式の評価は,12.による。

45.  例44.を変更したものを考える。

          ENTITY unit vector;

           a, b : REAL;

           c

: OPTIONAL REAL;

          WHERE

           length_1 : a**2 + b**2 + c**2 = 1.0;

          END_ENTITY;

この定義域規則の意図は,unit_vector が正規化されていることを確実にすることである。し

かし,c が不定“?”をもつ場合には,この定義域規則は,a 及び b の値にかかわらず常に

UNKNOWN

に評価される。

省略可能な属性が不定“?”であるとき,適切な値を得るために関数 NVL15.18 参照)が使


35

B 3700-11-1996 (ISO 10303-11 : 1994)

える。関数 NVL は,省略可能な属性が値をもつ場合は,その値を戻す。それ以外の場合は,

代わりの値を戻す。

          ENTITY unit_vector;

           a, b  : REAL;

           c

: OPTIONAL REAL;

          WHERE

           length_1 : a**2 + b**2 + NVL(c,  0.0)**2 = 1.0;

          END_ENTITY;

9.2.3

下位型及び上位型  EXPRESS は,エンティティを他のエンティティの下位型とする仕様を備える。

その場合,下位型のエンティティは,その上位型の特定化とする。これは,下位型がその上位型の特質(す

なわち,属性及び制約)を継承するというエンティティ間の継承関係(すなわち,上位型・下位型の関係)

を定める。連続する上位型・下位型の関係は,継承グラフを定める。ここでは,下位型のすべてのインス

タンスがその(一つ以上の)上位型のインスタンスでもある。

上位型・下位型の関係によって定められた継承グラフは,非循環とする。

エンティティの意味のあるすべての特質を完全に定義するエンティティ宣言は,単純エンティティデー

タ型を宣言する。上位型との継承関係を定めるエンティティ宣言は,複合エンティティデータ型を宣言す

る。継承グラフ内の複合エンティティデータ型は,その(一つ以上の)上位型の特徴を共有する。複合エ

ンティティデータ型は,そのどの上位型にも含まれない付加的な特徴をもっていてもよい。

構文:

294

  subsuper = [ supertype_constraint ] [ subtype_declaration ] .

297

  supertype_constraint = abstract_supertype_declaration | supertype_rule .

156

  abstract_supertype_declaration = ABSTRACT SUPERTYPE [ subtype constraint ] .

295

  subtype_constraint = OF ‘(’ supertype_expression ‘)’ .

298

  supertype_expression = supertype_factor { ANDOR supertype_factor } .

299

  supertype_factor = supertype_term { AND supertype_term } .

301

  supertype_term entity_ref | one of | ‘(’ supertype_expression ‘)’ .

250

  one_of = ONEOF ‘(’ supertype_expression { ‘,’ supertype_expression } ‘)’ .

300

  supertype_rule = SUPERTYPE subtype_constraint .

次のことは,上位型・下位型の関係に付随することであり,それは上位型・下位型のグラフに関連する。

上位型・下位型のグラフは,節点がエンティティ型を表現し,リンクが上位型・下位型の関係を表現する

ような,複数の根をもつ有向非循環グラフとする。SUBTYPE OF リンクをたどると上位型に達し,

SUPERTYPE OF

リンクをたどると下位型に達する。

規則及び制約:

(a)

上位型句と下位型句とが両方ともあるとき,上位型句は,下位型句より先に書かなければならない。

(b)

下位型は,複数の上位型をもってもよい。

(c)

上位型は,複数の下位型をもってもよい。

(d)

上位型自体が,他の一つ以上のエンティティ型の下位型であってもよい。すなわち,上位型・下位型

のグラフの経路は,幾つかの節点を通過できる。

(e)

上位型・下位型の関係は,推移的とする。すなわち,A が B の下位型であり,B が C の下位型の場合,


36

B 3700-11-1996 (ISO 10303-11 : 1994)

A

は,C の下位型となる。あるエンティティ型の上位型となるエンティティは,そのエンティティ型

から出発して SUBTYPE OF リンクをたどって到達できるエンティティとする。

(f)

下位型は,そのすべての上位型のリスト中で,どの型の上位型であってもならない。すなわち,上位

型・下位型のグラフは,非循環とする。

9.2.3.1

下位型の指定  エンティティが SUBTYPE 宣言を含むときは,そのエンティティは,下位型とす

る。下位型宣言は,エンティティの(一つ以上の)直属の上位型を明確にする。

構文:

296

  subtype_declaration = SUBTYPE OF ‘(’ entity_ref { ‘,’ entity_ref } ‘)’ .

9.2.3.2

上位型の指定  エンティティは,明示的又は暗黙的な指定によって上位型となる。エンティティ

が ABSTRACT SUPERTYPE 宣言を含むときは,エンティティは,明示的に上位型であると指定される。

エンティティが少なくとも一つの他のエンティティの下位型宣言で指名されるときは,エンティティは,

暗黙に上位型であると指定される。

構文:

297

  supertype_constraint = abstract_supertype_declaration | supertype_rule .

156

  abstract_supertype_declaration = ABSTRACT SUPERTYPE [ subtype_constraint ] .

295

  subtype_constraint = OF ‘(’ supertype_expression ‘)’ .

298

  supertype_expression = supertype_factor { ANDOR supertype_factor } .

299

  supertype_factor = supertype_term { AND supertype_term } .

301

  supertype_term=entity_ref | one of | ‘(’ supertype_expression ‘)’ .

250

  one_of = ONEOF ‘(’ supertype_expression { ‘,’ supertype_expression } ‘)’ .

300

  supertype_rule = SUPERTYPE subtype_constraint .

規則及び制約:

上位型式中で参照されるすべての下位型は,注目するエンティティを上位型とする下位型宣言を含む。

46.  奇数  (odd_number)  は整数  (integer_number)  の下位型であるので,整数は奇数の上位型であ

る。

          ENTTY integer_number;

           val : INTEGER;

          END_ENTITY;

          ENTITY odd_number

           SUBTYPE OF (integer_number);

          WHERE

           not_even : ODD(val);

          END_ENTITY;

9.2.3.3

属性継承  上位型の属性識別子は,その下位型の有効範囲で可視とする(10.参照)。したがって,

下位型は,その上位型のすべての属性を継承する。これによって下位型では,制約又はそれ自体の属性の

いずれかを定義するのに継承する属性を用いてもよい。下位型が複数の上位型をもつ場合,下位型は,す

べての上位型からすべての属性を継承する。これを多重継承と呼ぶ。

規則及び制約:

継承する属性を再宣言するのでなければ(9.2.3.4 参照)

,エンティティは,その上位型の一つから継承す


37

B 3700-11-1996 (ISO 10303-11 : 1994)

る属性と同じ名前をもつ属性を宣言してはならない。

下位型が互いに排他的な二つの上位型から属性を継承する場合,これらの上位型は,同一の属性識別子

の付いた全く異なる属性をもっていることがある。この場合,属性の名前があいまいにならないよう,そ

れぞれの属性の識別子の前にそこから継承する上位型エンティティの名前を付けなければならない。

47.  次の例は,e12というエンティティが attr という二つの属性を継承する方法及びその二つのう

ちのどちらの属性が制約されているかを明確にするために属性名にエンティティ名を前置する

方法を示す。

          ENTITY el;

           attr : REAL;

           ...

           END_ENTITY;

           ENTITY  e2;

           attr : BINARY;

           ...

           END_ENTITY;

          ENTITY e12

          SUBTYPE OF (e1, e2);

          ...

          WHERE

           positive : SELF\el. attr > 0.0 ;

                      -- el で宣言された attr

          END_ENTITY;

下位型は,異なる複数の上位型が一つの上位型から継承した同一の属性を,継承してもよい。これを繰返

し継承と呼ぶ。この場合,下位型は一度だけその属性を継承する。すなわち,このエンティティデータ型

のインスタンスは,この属性に一つだけ値をもつ。

9.2.3.4

属性の再宣言  上位型で宣言された属性は,下位型で再宣言できる。属性は,上位型のものであ

ることには変わりがないが,その属性のもつことができる値の定義域は,下位型での再宣言によって決ま

る。元の宣言は,次の三つの一般的な方法で変更してよい。

−  属性のデータ型は,元のデータ型を特定化して,変更してもよい(9.2.6 参照)

48.  NUMBER データ型の属性は,INTEGER データ型又は REAL データ型に変更してもよい。

−  上位型の省略可能な属性は,下位型で必す(須)属性に変更してもよい。

−  上位型の明示属性は,下位型で誘導属性に変更してもよい。

構文:

262

  qualified_attribute = SELF group_qualifier attribute_qualifier .

219

  group_qualifier = ‘\’ entity_ref .

169

  attribute_qualifier = ‘.’ attribute_ref .

規則及び制約:

(a)

下位型で再宣言された属性は,上位型で同じ名前をもつ属性の特定化でなければならない。

(b)

再宣言された属性の名前は,qualified_attribute の構文に従って与えられなければならない。


38

B 3700-11-1996 (ISO 10303-11 : 1994)

(c)

上位型の属性がお互いに排他的でない二つの下位型で再宣言された場合,この両方の下位型を含むイ

ンスタンスは,その両方の再宣言に有効な一つの値をもつ。水準 4 の適合性を主張する EXPRESS 

語の構文解析系の実装は,単一のインスタンスで共存する可能性のある下位型における矛盾する再宣

言を検査する。

49.  ある幾何の体系は浮動小数点座標を使い,他のものは整数座標空間を使う。

          ENTITY point;

           x : NUMBER;

           y : NUMBER;

          END_ENTITY;

          ENTITY integer_point

           SUBTYPE OF (point);

           SELF\point.x : INTEGER;

           SELF\point.y : INTEGER;

          END_ENTITY;

50.  次の例は,集合体データ型の要素を一意になるように変え,集合体データ型の中の要素の個数

を減らし,かつ省略可能な属性を必す(須)属性に変える例を示す。

          ENTITY super;

           things : LIST [3:?] OF thing;

           items  : BAG [0:?] OF widget;

           may_be : OPTIONAL stuff;

          END_ENTITY;

           ENTITY  sub

           SUBTYPE OF (super);

           SELF\super.things : LIST [3:?] OF UNIQUE thing;

           SELF\super.items  : SET [1:10] OF widget;

           SELF\super.may be : stuff;

          END_ENTITY;

51.  次の例では,円  (circle)  は,中心  (centre),軸  (axis)  及び半径  (radius)  で定義される。別の形

で,円  (circle_by_points)  は,中心及び円上の二つの点で定義される。これらの3点は,この種

の円を定義するデータを表現する。これらのデータに加えて,他の重要な特色,すなわち半径

及び軸を表す必要があり,これらの値を計算する式を与える誘導属性として,再宣言すること

でこれらを表現できる。

          FUNCTION distance(p1, p2 : point) : REAL;

(*2 点の最短距離を計算する。*)

          END_FUNCTION

          FUNCTION normal(p1, p2, p3 : point) : vector;

(*  平面上の与えられた 3 点から平面の法線を計算する。*)

          ENDFUNCTION;

          ENTITY circle;

           centre : point;


39

B 3700-11-1996 (ISO 10303-11 : 1994)

           radius : REAL;

           axis   :  vector;

          DERIVE

           area   : REAL := PI*radius**2;

          END_ENTITY;

          ENTITY circle_by_points

           SUBTYPE OF (circle);

           p2 : point;

           p3 : point;

          DERIVE

           SELF\circle.  radius  :  REAL    := distance(centre,  p2);

           SELF\circle. axis    : vector := normal(centre, p2, p3);

          WHERE

           not_coincident : (centre <> p2) AND

                                (p2 <> p3) AND

                                (p3 <> centre);

           is_circle        : distance(centre, p3) =

                                distance(centre, p2);

          END_ENTITY;

この下位型では,定義している 3 点(centrep2 及び p3)は明示属性だが,radiusaxis 

び area は誘導属性である。これらの誘導属性の値は,代入演算子の後にある式によって計算さ

れる。radius 及び axis の値は,関数呼出しによって得られる。area の値は,関数呼出しをせず

に計算される。

9.2.3.5

規則継承  上位型に適用するすべての局所規則又は規則は,その下位型にも適用する。したがっ

て,下位型は,その上位型のすべての規則を継承する。下位型が複数の上位型をもつ場合,下位型は,上

位型を制約しているすべての規則を継承する。

規則継承によって下位型に結び付けられたどの規則も,変更又は削除できないが,下位型を更に制約す

る新しい規則を追加することはできる。

規則及び制約:

エンティティインスタンスは,そのエンティティデータ型のそれぞれに指定されたすべての制約によっ

て制約される。二つ以上のエンティティデータ型で指定された制約が矛盾する場合,これらのエンティテ

ィデータ型を含む有効なインスタンスはない。水準 4 の適合性を主張する EXPRESS 言語の構文解析系の

実装は,単一のインスタンスで共存する可能性のあるエンティティデータ型における矛盾する制約を検査

する。

52.  次の例では,大学院生  (graduate)  は,教えもし,かつ授業も受ける  (take_cource)  人  (person)

である。大学院生は,その上位型[教官  (teacher)  及び学生  (student)]から属性及び制約の両

方を継承する。これには,それらの共通な上位型  (person)  からの属性及び制約も含まれる。

大学院生は,教官とは達って,大学院水準  (graduate_leve1)  の授業を教えることは許されない。

          SCHEMA s;

          ENTITY person;


40

B 3700-11-1996 (ISO 10303-11 : 1994)

           ss_no : INTEGER;

           born  :  date;

           ...

          DERIVE

           age : INTEGER := years_since(born);

          UNIQUE

           un1 : ss_no;

          END_ENTITY;

          ENTITY teacher

           SUBTYPE OF (person);

           teaches  :  SET  [1:?]  OF  course;

           ...

          WHERE

           old : age >= 21;

          END_ENTITY;

          ENTITY student

           SUBTYPE OF (person);

           takes : SET [1:?]  OF course;

           ...

          WHERE

           young : age >= 5;

          END_ENTITY;

          ENTITY graduate

           SUBTYPE OF (student, teacher);

           ...

          WHERE

           limited : NOT (GRAD_LEVEL IN SELF\teacher. teaches);

          END_ENTITY;

          TYPE course = ENUMERATION OF (...., GRAD_LEVEL, ...);

          END_TYPE;

          ...

          END_SCHEMA; -- スキーマ S の終わり

備考  下位型が複数の上位型から互いに矛盾する制約を継承する場合,どのインスタンスも制約のど

れか一つには違反するので、その下位型で適合するインスタンスは存在しえない。

9.2.4

上位型・下位型の制約  下位型となるエンティティデータ型のインスタンスは,その上位型のそれ

ぞれのインスタンスとする。明示的又は暗黙的に上位型として宣言されているエンティティデータ型のイ

ンスタンスは,その一つ以上の下位型のインスタンスにもなり得る[

附属書 G.2(参考)参照]。


41

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

294

  subsuper = [ supertype_constraint ] [ subtype_declaration ] .

297

  supertype_constraint = abstract_supertype_declaration | supertype_rule .

156

  abstract_supertype_declaration = ABSTRACT SUPERTYPE [ subtype_constraint ] .

295

  subtype_constraint = OF ‘(’ supertype_expression ‘)’ .

298

  supertype_expression = supertype_factor { ANDOR supertype_factor } .

299

  supertype_factor = supertype_term { AND supertype_term } .

301

  supertype_term = entity_ref | one_of | ‘(’ supertype_expression ‘)’ .

250

  one_of = ONEOF ‘(’ supertype_expression { ‘,’ supertype_expression } ‘)’ .

300

  supertype_rule = SUPERTYPE : subtype_constraint .

どの上位型・下位型のグラフがインスタンス化されるかを制約できる。これらの制約は,SUPERTYPE

制約によって上位型で指定する。

次に示す幾つかの指定可能な制約の下で,インスタンス化される上位型・下位型の組合せを決める形式

的な方法を,

附属書 B(規定)に示す。

9.2.4.1

抽象上位型  EXPRESS は,直接インスタンス化されることを意図しない上位型の宣言を許す。エ

ンティティデータ型は,この目的のために,上位型制約に ABSTRACT SUPERTYPE という句を含まなけ

ればならない。抽象上位型は,その下位型の少なくとも一つとともにインスタンス化する場合を除き,イ

ンスタンス化してはならない。

備考  このことは,下位型をもたない抽象上位型を含むスキーマは不完全であり,ある引用するスキ

ーマにおいて下位型が宣言されない限りインスタンス化できないことを意味する。

53.  次の輸送モデルにおいて,乗り物  (vehicle)  は,抽象上位型として表現できる。それは,この

エンティティデータ型のすべてのインスタンスは,その下位型になることが意図されているか

らである[すなわち,陸上の  (land_based)  乗り物,水上の  (water_based)  乗り物など]

vehicle

のエンティティデータ型は,単独でインスタンス化してはならない。

          ENTITY vehicle

           ABSTRACT  SUPERTYPE;

           END_ENTITY;

          ENTITY land_based

           SUBTYPE OF (vehicle);

           ...

          END_ENTITY;

          ENTITY water_based

           SUBTYPE OF (vehicle);

           ...

          END_ENTITY;

9.2.4.2

ONEOF

  ONEOF 制約は,ONEOF のリストにある要素が互いに排他的であることを明らかにす

る。どの要素も,リスト中の他の要素とともにインスタンス化することはできない。それぞれの要素は,

そのエンティティデータ型のある一つの下位型に帰着できる上位型式とする。


42

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

250

  one_of = ONEOF ‘(’ supertype_expression { ‘,’ supertype_expression } ‘)’ .

298

  supertype_expression = supertype_factor { ANDOR supertype_factor } .

299

  supertype_factor = supertype_term { AND supertype_term } .

301

  supertype_term = entity_ref | one_of | ‘(’ supertype_expressron ‘)’

ONEOF

制約は,複雑な制約を書けるように,他の上位型制約と組み合わせてもよい。

備考  ONEOF (abc)  という句は,“インスタンスは,エンティティデータ型 a又は のいずれ

かからなる。

”と読む。

54.  上位型のインスタンスは,その下位型のうちの一つだけをインスタンス化することによって定

まる。この制約は,ONEOF 制約を使って宣言する。多くの種類のペット  (pet)  がいるが,ど

の一つのペットも同時に複数の種類に属することはできない。

          ENTITY pet

           ABSTRACT SUPERTYPE OF (ONEOF(cat,

                                              rabbit,

                                              dog,

                                              ...));

           name : pet_name;

           ...

          END_ENTITY;

          ENTITY cat

           SUBTYPE OF (pet);

           ...

          END_ENTITY;

          ENTITY rabbit

           SUBTYPE OF (pet);

           ...

          END_ENTITY;

          ENTITY dog

           SUBTYPE OF (pet);

           ...

          END_ENTITY;

9.2.4.3

ANDOR

  下位型が互いに排他的でない場合,すなわち,上位型のインスタンスが複数の下位型

のインスタンスになり得る場合,下位型間の関係は,ANDOR 制約を用いて指定しなければならない。

備考  b  ANDOR  という句は,“インスタンスは,型及び/又は 型からなる。”と読む。

55.  人  (person)  は夜間に学校に通っている従業員  (employee)  かもしれないので,人は同時に従

業員であり,かつ学生  (student)  であってよい。

          ENTITY person

           SUPERTYPE OF (employee ANDOR student);

           ...


43

B 3700-11-1996 (ISO 10303-11 : 1994)

          END_ENTITY;

          ENTITY employee

           SUBTYPE OF (person);

           ...

          END_ENTITY;

          ENTITY student

           SUBTYPE OF (person);

           ...

          END_ENTITY;

9.2.4.4

AND

  上位型を完全に分類する方法が複数あることを示すために,上位型のインスタンスが互い

に排他的な下位型の複数のグループに分類されている場合(すなわち,複数の ONEOF グループ)

,これ

らのグループ間の関係は,AND 制約を用いて指定する。AND 制約は,他の上位型・下位型の制約によっ

て定められた複数のグループを関係付けるためにだけ用いる。

備考  b  AND  という句は,“インスタンスは,b 型及び c 型の両方からなる。”と読む。

56.  人  (person)  は,男性  (male)  又は女性  (female)  に分類でき,かつ国民  (citizen)  又は外国人

(alian)

にも分類できる。

          ENTITY person

          SUPERTYPE OF (ONEOF(male,female) AND

                           ONEOF  (citizen,alien));

           ...

           END_ENTITY;

          ENTITY male

           SUBTYPE OF (person);

           ...

          END_ENTITY;

          ENTITY female

           SUBTYPE OF (person);

           ...

          END_ENTITY;

          ENTITY citizen

           SUBTYPE OF (person);

           ...

          END_ENTITY;

          ENTITY alien

           SUBTYPE OF (person);

           ...

          END_ENTITY

9.2.4.5

上位型演算子の優先順位  上位型式の評価は,左から右へ,最も高い優先順位の演算子から先に

評価しつつ行う。

表 に,上位型式の演算子に対する優先順位の規則をまとめて示す。同一の行にある演

算子は,同一の優先順位をもち,行は優先順位の高い順に並んでいる。


44

B 3700-11-1996 (ISO 10303-11 : 1994)

表 8  上位型式の演算子の優先順位

優先順位

演算子

      1

  ( )ONEOF

      2

  AND

      3

  ANDOR

57.  次の二つの式は,等価でない。

          ENTITY x

          SUPERTYPE OF (a ANDOR b AND c);

          END_ENTITY;

          ENTITY x

          SUPERTYPE OF ((a ANDOR b) AND c);

          END_ENTITY;

9.2.4.6

下位型間の暗黙の制約  エンティティの宣言に上位型の制約がない場合,(存在するならば)下

位型は,互いに包括的,すなわち,すべての下位型が暗黙に ANDOR で記述されているとみなさなければ

ならない。

そのエンティティの一部の下位型に上位型の制約が指定された場合,その制約は,それらの下位型に対

しては指定されたとおりとし,他の下位型に対しては ANDOR と指定されたものとする。

58.  例55.のモデルは,次のような暗黙の構成によるものと等価である。

          ENTITY person

           ...

          END_ENTITY;

          ENTITY employee

           SUBTYPE OF (person);

           ...

          END_ENTITY;

          ENTITY student

           SUBTYPE OF (person);

           ...

          END_ENTITY;

9.2.5

暗黙の宣言  エンティティが宣言されるとき,構成子 (entity constructor) も,暗黙に宣言される。

その構成子識別子はエンティティ識別子と同一で,構成子宣言の可視性はそのエンティティ宣言の可視性

と同一とする。

構成子は,呼び出されたとき,エンティティデータ型の部分複合エンティティ値を呼出し点に戻さなけ

ればならない。この部分複合エンティティ値内の各属性の値は,構成子呼出しで渡される実引き数の値に

よって与えられる。実引き数がエンティティインスタンスの場合,そのエンティティインスタンスは,部

分複合エンティティ値の属性で示された役割を果たす。構成子には,エンティティ宣言で明示的な属性だ

けを与える。

構文:

195

  entity_constructor = entity_ref ‘(’ [ expression { ‘,’ expression }] ‘)’ .


45

B 3700-11-1996 (ISO 10303-11 : 1994)

複合エンティティインスタンス(上位型・下位型のグラフに出現するエンティティのインスタンス)が

作成されるとき,個々の要素となるエンティティに対する構成子は||演算子を用いて結合する(12.10

参照)

規則及び制約:

(a)

構成子は,そのエンティティで宣言された明示属性のそれぞれに対して一つの仮引き数をもたなけれ

ばならない。これは,上位型から継承し,そのエンティティデータ型で再宣言された属性を含まない。

(b)

仮引き数の順序は,エンティティにおける明示属性の宣言の順序と同じとする。

(c)

各仮引き数に対する引き数データ型は,対応する属性のデータ型と同じとする。

(d)

エンティティが明示属性をもたない場合,空の引き数リストを渡すものとする(すなわち,括弧は常

に必要)

備考  このことは,明示的に宣言される関数の場合と異なる。

(e)

暗黙に定義された構成子が呼び出されるとき,OPTIONAL 属性は,不定“?”であってもよい。これ

は,明示的な値が割り当てられていないという事実を表現する。

(f)

複合エンティティインスタンス内に,上位型の明示属性を再宣言した誘導属性を含む下位型が存在す

る場合,その上位型の構成子は,これらの再宣言された属性に値を与えなければならない。これらの

値は,下位型で値が誘導されるために無視される。

59.  次のエンティティ宣言をしたと仮定する。

          ENTITY point;

           x, y, z : REAL;

          END_ENTITY;

point

エンティティに対する暗黙に宣言された構成子は,次のとおりに考えられる。

          FUNCTION point(x, y, z : REAL):point;

このエンティティデータ型のインスタンスに値を割り当てるとき,構成子を使用できる。

          CONSTANT

           origin : point := point(0.0, 0.0, 0.0);

          END_CONSTANT;

9.2.6

特定化  特定化は,最初の宣言を一層制約したものとなる。許される特定化を次に示す。

−  下位型のエンティティは,上位型の特定化とする。

−  INTEGER 及び REAL は,共に NUMBER の特定化とする。

−  INTEGER は,REAL の特定化とする。

−  BOOLEAN は,LOGICAL の特定化とする。

−  LIST OF UNIQUE item は,LIST OF item の特定化とする。

−  ARRAY OF UNIQUE item は,ARRAY OF item の特定化とする。

−  ARRAY OF item は,ARRAY OF OPTIONAL item の特定化とする。

−  SET OF item は,BAG OF item の特定化とする。

−  AGG を ARRAYBAGLIST 又は SET の一つとするとき,item が original の特定化ならば,

AGG OF item

は,AGG OF original の特定化とする。

−  AGG を BAG

LIST 又は SET の一つとするとき,b

t

で,l

b

u

で,かつ l

t

u

ならば,AGG  

[b : t] 

は,AGG [l : u]  の特定化とする。

−  BSR が BINARYSTRING 又は REAL データ型の一つを表すとき,BSR (length) は,BSR の特


46

B 3700-11-1996 (ISO 10303-11 : 1994)

定化とする。

−  short が long より小さいならば,BSR (short)  は,BSR (long)  の特定化とする。

−  キーワード FIXED の付いた BINARY は,可変長 BINARY の特定化とする。

−  キーワード FIXED の付いた STRING は,可変長 STRING の特定化とする。

−  定義データ型は,それを宣言するために使われる基底データ型の特定化とする。

9.3

スキーマ  SCHEMA 宣言は,関連するエンティティ及び他のデータ型の宣言の集まりに共通な有効

範囲を定義する。

60.  幾何 (geometry) は,点,曲線,曲面及び他の関連するデータ型の宣言を含むスキーマの名前で

あってもよい。

スキーマ宣言内に現れる宣言の順序は,意味をもたない。

あるスキーマ内の宣言は,11.に規定するインタフェース仕様によって,他のスキーマの有効範囲内で可

視にしてもよい。

構文:

281

  schema_decl = SCHEMA schema_id ‘;’ schema_body END_SCHEMA ‘;’ .

280

  schema_body = { interface_specification } [ constant_decl ] { declaration | rule_decl } .

228

  interface_specification = reference_clause | use_clause .

189

  declaration = entity_decl | function_decl | procedure_decl | type_decl .

9.4

定数  定数宣言は,名前付き定数を宣言するのに使う。定数識別子の有効範囲は,その定数宣言が

現れる関数,手続,規則又はスキーマとする。CONSTANT 宣言に現れる名前付き定数は,明示的な初期

化をもたなければならない。その初期化の値は,式を評価して計算される。名前付き定数は,他の名前付

き定数の宣言に現れてもよい。

構文:

185

  constant_decl = CONSTANT constant_body { constant_body } END_CONSTANT ‘;’ .

184

  constant_body = constant_id ‘:’ base_type ‘;=’ expression ‘;’ .

171

  base_type = aggregation_types | simple_types | named_types .

規則及び制約:

(a)

定数の値は,初期化後は変更してはならない。

(b)

定数宣言の外に現れる名前付き定数は,初期値と等価でなければならない。

(c)

式  (expression)  は,指定された基本型  (base_type)  の値を戻さなければならない。

61.  次の定数宣言は,正しい。

          CONSTANT

           thousand  :  NUMBER  := 1000;

           million   :  NUMBER  := thousand**2;

           origin    :  point  := point (0.0, 0.0, 0.0);

          END CONSTANT;

9.5

アルゴリズム  アルゴリズムは,ある期待する最終状態を生成するための文 (statement,stmt)  の列

とする。指定できるアルゴリズムは,関数及び手続の 2 種類とする。

仮引き数は,アルゴリズムへの入力を定義する。アルゴリズムが呼び出されたとき,実引き数が実際の

値又はインスタンスを与える。実引き数は,仮引き数と型,順序及び個数が一致していなければならない。


47

B 3700-11-1996 (ISO 10303-11 : 1994)

アルゴリズムに局所的な宣言は,必要ならば,頭部の後に書く。これらの宣言には,必要に応じて型,

局所変数,他のアルゴリズムなどを書ける。

アルゴリズムの本体は,局所的な宣言の後に書く。

9.5.1

関数  関数は,引き数に作用し,特定のデータ型をもつ結果の値を一つだけ生成するアルゴリズム

とする。式中で関数を呼び出す(12.8 参照)と,呼出し点で結果の値に評価される。

関数は,RETURN 文の実行によって終了する。RETURN 文中の式の値は,関数呼出しによって生成され

る結果を定義する。

構文:

208

  function_decl = function_head [ algorithm_head ] stmt { stmt } END_FUNCTION ‘;’.

209

  function_head = FUNOTION function_id[ ‘(’ formal_parameter

                         { ‘;’ formal_parameter } ‘)’ ]‘:’ parameter_type ‘;’ .

206

  formal_parameter = parameter_id { ‘,’ parameter_id } ‘:’ parameter_type .

253

  parameter_type = generalized_types | named_types | simple_types .

163

  algorithm_head = { declaration } [ constant_decl ] [ local_decl ] .

189

  declaration = entity_decl | function_decl | procedure_decl | type_decl .

規則及び制約:

(a)  FUNCTION

では,関数が呼び出されたときに処理が行われる可能性のあるそれぞれの経路上に

RETURN

文を指定しなければならない。

(b)

関数の有効範囲内の各 RETURN 文では,呼出し点に戻される値に評価される一つの式を指定しなけ

ればならない。

(c)

各 RETURN 文に指定された式は,関数で宣言された戻り値の型と整合していなければならない。

(d)

関数は,副作用をもたない。FUNCTION の仮引き数には VAR (variable)  と指定してはならないので,

関数内でのこれらの引き数の変更は呼出し点へ反映されない。

(e)

関数では,次の場合,有効範囲の外で宣言された局所変数又は引き数を変更することができる。すな

わち,注目する関数が FUNCTIONPROCEDURE 又は RULE の algorithm_head で宣言される場合

とする。

9.5.2

手続  手続は,引き数を呼出し点から受け取り,それらに何らかの方法で作用して期待された最終

状態を生成するアルゴリズムとする。手続内の引き数に対する変更は,仮引き数の前にキーワード VAR が

付いている場合にだけ,呼出し点に反映される。

構文:

258

  procedure_decl = procedure_head [ algorithm_head ] { stmt } END PROCEDURE

‘;’.

259

  procedure_head = PROCEDURE procedure_id [ ‘(’[ VAR ] formal_parameter

                          { ‘;’ [ VAR ] formal_parameter } ‘)’ ]‘;’ .

206

  formal_parameter = parameter_id { ‘,’ parameter_id } ‘:’ parameter_type .

253

  parameter_type = generalized_types | named_types | simple_types .

163

  algorithm_head = { declaration } [ constant_decl ] [ local_decl ] .

189

  declaration = entity_decl | function_decl | procedure_decl | type_decl .


48

B 3700-11-1996 (ISO 10303-11 : 1994)

規則及び制約:

手続は,次の場合,有効範囲の外で宣言された局所変数又は引き数を変更することができる。すなわち,

注目する手続が FUNCTIONPROCEDURE 又は RULE の algorithm_head で宣言される場合とする。

9.5.3

引き数  関数又は手続は,仮引き数をもつことができる。仮引き数には,それぞれ名前及び引き数

の型を指定する。名前は,関数又は手続の有効範囲内で一意な識別子とする。手続の仮引き数は,更に VAR

と宣言してもよい。これは,引き数が手続内で変更されたとき,その変更が呼出し点に反映されることを

意味する。VAR と宣言されていない引き数も,変更はできるが,制御が呼出し側に返ったときにその変更

は,反映されない。

構文:

206

  formal_parameter = parameter_id { ‘,’ parameter_id } ‘:’ parameter_type .

253

  parameter_type = generalized_types | named_types | simple_types .

62.  次の宣言は,仮引き数の宣言の方法を示す。

          FUNCTION dist(p1, p2 : point)  : REAL ;

          ...

          PROCEDURE midpt(p1, p2 : point; VAR result : point) ;

被集合体データ型  (AGGREGATE)  及び総称データ型  (GENERIC)  は,関数及び手続の仮引き数を表現

するのに使用するデータ型をはん(汎)用化するのに使う。同様に,一般化集合体データ型は,特定の集

合体データ型に許される基底データ型をはん(汎)用化するのに使ってよい。

9.5.3.1

被集合体データ型  AGGREGATE データ型は,すべての集合体データ型のはん(汎)用化した

ものとする。

被集合体データ型の仮引き数をもつ手続又は関数が呼び出されるとき,渡される実引き数は,ARRAY

BAG

LIST 又は SET とする。実行できる操作は,実引き数のデータ型に依存する。

渡される実引き数のデータ型にかかわりなく,複数の引き数が同じデータ型であることを確実にするた

めに,又は戻り値のデータ型が,渡された引き数の一つの型と同一であることを確実にするために,型ラ

ベルを使用してもよい(9.5.3.3 参照)

構文:

161

  aggregate_type = AGGREGATE [ ‘:’ type_label ] OF parameter_type .

306

  type_label = type_label_id | type_label_ref .

253

  parameter_type = generalized_types | named_types | simple_types .

規則及び制約:

(a)  AGGREGATE

データ型は,関数若しくは手続の仮引き数の型として,又は規則(b)で規定する場合に

だけ使用する。

(b)  AGGREGATE

データ型は,関数の戻り値の型として,又は関数若しくは手続の中の局所変数の型と

して使うことができる。これらの場合,型ラベル参照を必要とし,仮引き数で宣言された型ラベルを

参照しなければならない(9.5.3.3 参照)

63.  次の関数は,数値の集合体を受け付ける。そして元の値を何倍かにした数値を含んでいる,渡

されるものと同じ型の集合体を返す。

          FUNCTION scale(input:AGGREGATE:intypee OF NUMBER;

                            scalar:NUMBER):AGGREGATE:intype OF NUMBER;


49

B 3700-11-1996 (ISO 10303-11 : 1994)

           LOCAL

            result : AGGREGATE : intype OF NUMBER := [];

           END_LOCAL;

           REPEAT i := LOINDEX (input) TO HIINDEX (input);

            result[i] := scalar * input  [i];

           END_REPEAT;

           RETURN(result);

          END FUNCTION;

9.5.3.2

総称データ型  GENERIC データ型は,他のすべてのデータ型をはん(汎)用化したものとする。

手続又は関数が総称データ型の引き数を付けて呼び出されるとき,渡される実引き数は,GENERIC 

ータ型であってはならない。実行できる操作は,実引き数のデータ型に依存する。

渡される実引き数のデータ型にかかわりなく,複数の実引き数が同じデータ型であることを確実にする

ために,又は戻り値のデータ型が,渡された引き数の一つの型と同一であることを確実にするために,型

ラベルを使用してもよい(9.5.3.3 参照)

構文:

218

  generic_type = GENERIC [ ‘:’ type_label ] .

306

  type_label = type_label_id | type_label_ref .

規則及び制約:

(a)  GENERIC

データ型は,関数若しくは手続の仮引き数の型として,又は規則(b)で規定する場合にだけ

使用する。

(b)  GENERIC

データ型は,関数の戻り値の型として,又は関数若しくは手続の中の局所変数の型として

使うことができる。これらの場合,型ラベル参照を必要とし,仮引き数で宣言された型ラベルを参照

しなければならない(9.5.3.3 参照)

64.  この例は,数値又はベクトルを加える総称関数を示す。

          FUNCTION add (a,b:GENERIC:intype):GENERIC:intype;

           LOCAL

            nr : NUMBER; -- 整数又は実数

            vr : vector;

           END_LOCAL;

           IF (‘NUMBER’ IN TYPEOF(a)) AND (‘NUMBER’ IN TYPEOF(b)) THEN

                 nr  := a+b;

                 RETURN(nr);

          ELSE

           IF (‘THIS_SCHEMA.VECTOR’ IN TYPEOF(a)) AND

               (‘THIS_SCHEMA.VECTOR’ IN TYPEOF(b)) THEN

             vr.i  := a.i + b.i;

             vr.j  := a.j + b.j;

             vr.k  := a.k + b.k;

             RETURN(vr);


50

B 3700-11-1996 (ISO 10303-11 : 1994)

            END_IF;

           END_IF;

           RETURN (?); -- 正当でない入力を受けた場合,何の値も戻さない。

          END_FUNCTION;

9.5.3.3

型ラベル  型ラベルは,呼出し時の実引き数のデータ型を,他の実引き数の型,局所変数の型,

又は関数の戻す値の型と関係付けるために使用する。型ラベルは,関数又は手続の仮引き数の宣言の中で

AGGREGATE

データ型又は GENERIC データ型に対して宣言され,仮引き数の宣言,局所変数の宣言又

は FUNCTION の戻すデータ型の宣言中の AGGREGATE データ型又は GENERIC データ型で参照しても

よい。

構文:

306

  type_label = type_label_id | type_label_ref .

規則及び制約:

(a)

仮引き数における型ラベルの最初の出現はその型ラベルを宣言し,それ以降の型ラベルの出現はその

最初の型ラベルの参照とする。

(b)

関数又は手続に渡される引き数の内で,型ラベルを参照するものは,型ラベルを宣言する引き数に渡

されたデータ型と整合する。

(c)

型ラベルを介して引き数のデータ型を参照する,局所変数のデータ型又は関数の戻り値のデータ型は,

型ラベルを宣言する引き数のデータ型と同じとする。

65.  次の例は,関数を定義するときに型ラベルがどのように使われるかを示し,更にその関数を呼

び出すときに行われる型の整合性検査の結果を示す。

          ENTITY a;

          ...

          END_ENTITY;

          ENTITY b SUBTYPE OF (a);

          ...

          END_ENTITY;

          ENTITY c SUBTYPE OF (b);

          ...

          END_ENTITY;

          ...

          FUNCTION test ( pl : GENERIC:x; p2 : GENERIC:x)     :    GENERIC:x;

          ...    --

          ...    --    型ラベルの宣言  型ラベルの参照  型ラベルの参照

          END_FUNCTION;

          ...

          LOCAL

           v_a : a := a(...);

           v_b : b := a(...) | | b(...);    --  | |  演算については 12.11 に示す。

           v_c : c := a(...) | | b(...)| | c(...);


51

B 3700-11-1996 (ISO 10303-11 : 1994)

           v_x : b;

          END_LOCAL;

          v_x := test(v_b,  v_a);    --  v_a  は,型 b と整合しないので不正。

          v_x := test(v_a,  v_b);    --  関数は,型 a を戻すので不正な代入。

他の型ラベルの使用例を,15.に示す。

9.5.3.4

一般化集合体データ型  一般化集合体データ型 (general aggregation type) は,一般化データ型と

呼ぶクラスの一部とする。これは,集合体データ型を指定するときに通常適用される制約を弱めた集合体

データ型(ARRAY

BAGLIST 及び SET)を表現する(すなわち,general_list_type は,list_type のは

ん(汎)用化とする。

構文:

212

  general_aggregation_types = general_array_type | general_bag_type |

                                       general_list_type | general_set_type .

213

  general_array_type = ARRAY [ bound_spec ] OF [ OPTIONAL ] [ UNIQUE ]

                               parameter_type .

176

  bound_spec = ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

253

  parameter_type = generalized_types | named_types | simple_types .

214

  general_bag_type = BAG [ bound_spec ] OF parameter_type .

215

  general_list_type = LIST [ bound_spec ] OF [ UNIQUE ] parameter_type .

217

  general_set_type = SET [ bound_spec ] OF parameter_type .

一般化集合体データ型を,関数及び手続の仮引き数のデータ型として使用するときには,次のものを実

引き数としてよい。

−  添字値の範囲を指定しない配列。これは,仮引き数の仕様の中で,その配列の上下限仕様を指定

しないことによって行われる。

備考  アルゴリズム部の中では,その配列の実際の添字付けの仕方を決定するために,関数 HIINDEX

及び関数 LOINDEX を使用するのがよい。

−  基底型が GENERICAGGREGATE 又は一般化集合体データ型のいずれかである集合体。

66.  次の例は,仮引き数の宣言において SET がどのように書かれるかを示す。SET の基底となる型

は,GENERIC を含まないので,これは属性の宣言では書くことができない。

          FUNCTION  dimensions (input:SET  [2:3]  OF  GENERIC):INTEGER;

9.5.4

局所変数  アルゴリズムに局所的な変数は,LOCAL キーワードの後に宣言する。局所変数は,そ

れが宣言されたアルゴリズムの有効範囲内でだけ可視とする。局所変数には値を割り当ててもよく,また

局所変数は式にも使用できる。

構文:

239

  local_decl = LOCAL local_variable { local_variable } END_LOCAL ‘;’ .

240

  local_variable = variable_id { ‘,’ variable_id } ‘:’ parameter_type [ ‘:=’ expression ]

‘;’ .

253

  parameter type = generalized_types | named_types | simple_types .


52

B 3700-11-1996 (ISO 10303-11 : 1994)

局所変数の初期化  アルゴリズムが呼び出された時,局所変数に初期化指定が明示的に与えられていない

場合は,すべての局所変数は,不定“?”をもつ。初期化指定が与えられている場合は,そのアルゴリズム

に入った時にその局所変数に初期値が代入される。

67.  変数 r_result は,0.0という値に初期化される。

          LOCAL

           r_result : REAL := 0.0;

           i_result : INTEGER;

          END_LOCAl;

          ...

          EXISTS(r_result) -- TRUE

          EXISTS(i_result) -- FALSE    値が代入されていないと仮定

9.6

規則  規則 (rule) は,スキーマの有効範囲内で,一つ以上のエンティティデータ型に適用される制

約を定義できるようにする。局所的な規則(すなわち,エンティティ宣言中の一意性の制約及び定義域規

則)は,エンティティデータ型のすべてのインスタンスに個別に適用される制約を宣言する。RULE 宣言

は,エンティティデータ型の定義域に全体として適用される制約,又は複数のエンティティデータ型のイ

ンスタンスに適用される制約を定義できるようにする。RULE は,一つの応用例として,異なるエンティ

ティの属性値を整合性を保ちながら制約することにも使える。

規則の宣言は,その規則に名前を付け,これによって影響を受けるエンティティを指定する。

構文:

277

  rule_decl = rule_head [ algorithm_head ] { stmt } where_clause END_RULE ‘;’ .

278

  rule_head = RULE rule_id FOR ‘(’ entity_ref { ‘,’ entity_ref } ‘)’ ‘;’ .

163

  algorithm_head = { declaration } [ constant_decl ] [ local_decl ] .

189

  declaration = entity_decl | function_decl | procedure_decl | type_decl .

規則及び制約:

(a)

各領域規則は,論理値又は不定“?”のいずれかに評価されなければならない。

(b)

式が TRUE に評価されるときは,式は満たされる。式が FALSE に評価されるときは,式は破られる。

さらに,式が不定“?”又は UNKNOWN に評価されるときは,式は,破られるのでも満たされるので

もない。

(c)

規則の頭部において指定されたエンティティデータ型のエンティティインスタンスの正当な集まりに

対しては,いかなる領域規則も破られてはならない。

68.  次の規則は,第1象限及び第7象限に,同じ個数の点があることを要求している。

          RULE point_match FOR (point);

          LOCAL

           first_oct  ,

           seventh_oct : SET OF POINT := [];

          END_LOCAL

           first_oct  := QUERY(temp <* point | (temp. x > 0) AND

                                                      (temp. y > 0) AND

                                                      (temp. z > 0) );


53

B 3700-11-1996 (ISO 10303-11 : 1994)

           seventh_oct  := QUERY(temp <* point | (temp. x < 0) AND

                                                        (temp. y < 0) AND

                                                        (temp. z < 0) );

          WHERE

           SIZEOF(first_oct) = SIZEOF(seventh_oct);

          END RULE;

69.  RULE は,エンティティ属性に対する結合一意性規則を指定するのに使うことができる。

          ENTITY b;

           a1 : c;

           a2 : d;

           a3 : f;

          UNIQUE

           ur1 : a1, a2;

          END_ENTITY;

b

の結合一意性規則は,c と d とのインスタンスに適用される。さらに,次の RULE は,値

に基づく結合一意性規則を課する。

          RULE vu FOR (b);

           ENTITY  temp;

            a1 : c;

            a2 : d;

           END_ENTITY;

          LOCAL

           s : SET OF temp := [];

          END_LOCAL;

          REPEAT i := 1 TO SIZEOF(b);

           s  := s + temp(b[i].al,  b[i],a2);

          END REPEAT;

          WHERE

           wr1 : VALUE UNIQUE(s);

          END_RULE;

暗黙の宣言  RULE 内で各 population は,局所変数として暗黙的に宣言される。それは,指定されたエ

ンティティの定義域における,すべてのインスタンスの集合,すなわち,規則において検査されるエンテ

ィティインスタンスの集合を含む。

構文:

254

  population = entity_ref  .

規則及び制約:

ある population への参照は,そのエンティティデータ型を頭部で参照する規則においてだけ行うこと

ができる。

70.  次の宣言を仮定する。


54

B 3700-11-1996 (ISO 10303-11 : 1994)

          RULE coincident FOR (point);

暗黙に宣言される変数は,次のようになる。

          LOCAL

           point : SET OF point;

          END_LOCAL;

10.

有効範囲及び可視性  EXPRESS の宣言は,そのスキーマの他の部分中(又は他のスキーマ中)で宣言

された項目を参照するために,識別子を作成する。幾つかの EXPRESS の構成要素は,暗黙に EXPRESS 

項目を宣言し,それらの項目に識別子を付ける。宣言された項目に対する識別子を参照してもよい場所で

は,その宣言された項目は可視であるという。項目は,その識別子が可視であるところでだけ参照しても

よい。可視性の規則は,10.2 による。識別子で項目を参照する方法は,12.7 による。

ある EXPRESS の項目は,有効範囲と呼ぶテキストの領域(ブロック)を定義する。この有効範囲は,

その中で宣言された識別子の可視の範囲を定める。有効範囲は,入れ子にできる。すなわち,有効範囲を

もつ EXPRESS の項目は,他の項目の有効範囲に含まれていてもよい。特定の EXPRESS の項目の有効範囲

内に現れてもよい項目には,制約がある。通常,これらの制約は,EXPRESS の構文[

附属書 A(規定)参

照]によって定まる。

ここでは,

表 で規定するそれぞれの項目について,有効範囲が定義されるならば,それを規定すると

ともに,識別子の可視性の一般的な規則及びその詳細を規定する。

10.1

有効範囲の規則  EXPRESS 言語で許される有効範囲定義のすべての形に適用できる一般的な規則は,

次のとおりとする。有効範囲を定義する項目を,表 9 に示す。

規則及び制約:

(a)

宣言は,ある有効範囲内に存在しなければならない。

(b)

識別子は,一つの有効範囲内で,1 回だけ宣言してもよいし,1 回だけ明示的にインタフェース(11.

参照)してもよい。同一の宣言から複数の経路を介して,注目のスキーマに明示的にインタフェース

されたエンティティ又は型の識別子は,1 回だけのインタフェースと数える。

(c)

有効範囲は,正しく入れ子になっていなければならない。すなわち,有効範囲は,ずれて重なってい

てはならない(これは,言語の構文で規定される。

入れ子の最大の深さはこの規格では規定しないが,EXPRESS 構文解析系の実装では,入れ子の最大の深

さを規定してもよい。

10.2

可視性の規則  識別子の可視性規則を,次に規定する。識別子を宣言する EXPRESS 項目を表 に示

す。名前付きデータ型の識別子に対する可視性の規則は,他の識別子のそれとは多少異なる。これらの違

いは,10.2.2 による。


55

B 3700-11-1996 (ISO 10303-11 : 1994)

表 9  有効範囲及び識別子を定義する項目

項目

有効範囲

識別子

ALIAS

(

1

)

属性

定数

列挙

エンティティ

関数

引き数

手続

QUERY

(

1

)

REPEAT

(

1

)

(

2

)

規則

(

3

)

規則ラベル

スキーマ

型ラベル

変数

(

1

)

識別子は,その宣言の定義された有効範囲内で暗黙
に宣言された変数とする。

(

2

)

変数は,増分制御が指定されているときには,暗黙に

だけ宣言される。

(

3

)

規則によって制約を受けるすべてのエンティティに対
し,暗黙の変数宣言が行われる。

10.2.1

可視性の一般的な規則  すべての識別子に適用する一般的な規則は,次のとおりとする。ただし,

名前付きデータ型の識別子に対しては,規則(d)は適用しない。

規則及び制約:

(a)

識別子は,それが宣言されている有効範囲内で可視とする。この有効範囲をその識別子の局所有効範

囲と呼ぶ。

(b)

識別子が特定の有効範囲内で可視であるならば,規則(d)に従って,その有効範囲内で定義されるすべ

ての有効範囲でも可視とする。

(c)

識別子は,規則(f)を例外として,その局所有効範囲の外側の有効範囲では不可視とする。

(d)

有効範囲 で可視である識別子 が の内側の有効範囲 で再宣言されているとき,有効範囲 及び

Q

内で宣言されている有効範囲で,で宣言されている識別子 だけが可視とする。有効範囲 で宣

言されている は,有効範囲 と を再宣言していない内側の有効範囲とで可視とする。

(e)  EXPRESS

における組込み定数,関数,手続及び型は,すべての有効範囲を含む仮想的な有効範囲で宣

言されているとみなす。すべてのスキーマは,この有効範囲内で入れ子になっているとみなす。組込

み定数,関数,手続,型及びスキーマを参照する識別子は,EXPRESS で定義されるすべての有効範囲

で可視とする。

(f)

定義データ型の有効範囲内で宣言された列挙項目の識別子は,すぐ外側の有効範囲でも可視とする。

ただし,

これは,

すぐ外側の有効範囲で他の項目に対して同じ識別子が宣言されていない場合とする。

備考  すぐ外側の有効範囲が同じ識別子を含んでいたとしても,その列挙項目は,定義データ型の識

別子を前置することによって(12.7.2 参照)

,アクセスできる。

(g)

一つのスキーマ中で宣言した識別子は,インタフェース仕様(11.参照)によって,別のスキーマ中の

項目で可視となる。


56

B 3700-11-1996 (ISO 10303-11 : 1994)

71.  次のスキーマで,上の規則によって許される識別子及び参照の例を示す。

          SCHEMA example;

          CONSTANT

           b : INTEGER := 1  ;

           c : BOOLEAN := TRUE  ;

          END_GONSTANT;

          TYPE enum = ENUMERATION OF (e, f, g );

          END_TYPE;

          ENTITY entity1;

           a : INTEGER;

          WHERE

           wr1 : a > 0 ;

--

  規則(a)に従う。a は局所有効範囲内で可視。

           wr2 : a <> b ;

--

  規則(b)に従う。b は外側の局所有効範囲から可視。

          END_ENTITY;

          ENTITY entity2;

           c : REAL;

--

  規則(c)に従って,ここでは定数 c は,可視でない。

          END_ENTITY;

          ENTITY d;

           attr1 : INTEGER;

           attr2 : enum;

          WHERE

           d:  ODD(attr1);

--

  規則(d)に従って,ODD はどこでも可視。

           wr: attr2 <> e;

--

  規則(e)に従って,e は型 enum で定義された

          END_ENTITY; --  有効範囲の外側でも可視。

          END_SCHEMA;

10.2.2

名前付きデータ型の識別子の可視性規則  名前付きデータ型の識別子は,一つの例外を除き,他の

識別子と同じ可視性規則に従う。例外は,10.2.1 の規則(d)に対するものとする。すなわち,次のいずれか

が成立している場合,有効範囲 で宣言されているエンティティ又は定義データ型の識別子 は,内側の

有効範囲 で再宣言されていたとしても,中で可視のままとする。

(a)

有効範囲 がエンティティ宣言で定義されており,かつ がその有効範囲で属性として宣言される。

(b)

有効範囲 が関数,手続又は規則の宣言で定義されており,かつ がその有効範囲で仮引き数又は変

数として宣言される。

72.  entity1中で,は,エンティティデータ型及び属性の両方として使われている。

          SCHEMA example;

           ENTITY  d;

            attrl : REAL;

           END_ENTITY;

           ENTITY  entity1;

            d : d;                --  この有効範囲内で,d は,エンティティであり,

           END_ENTITY;           --  属性である。


57

B 3700-11-1996 (ISO 10303-11 : 1994)

          END SCHEMA;

10.3

項目に与えた個別の規則  ここでは,有効範囲及び可視性の一般的な規則が種々の EXPRESS の項目

に適用される方法を規定する。

10.3.1  Alias

文  ALIAS 文の定義は,13.2 による。

可視性:ALIAS 文で暗黙に宣言された識別子は,その ALIAS 文で定義された有効範囲で可視とする。

有効範囲:ALIAS 文は,新しい有効範囲を定義する。この有効範囲は,キーワード ALIAS から始まり,

その ALIAS 文を終了させるキーワード END_ALIAS までとする。

宣言:次の EXPRESS 項目によって,ALIAS 文の有効範囲内で,識別子を宣言してもよい。

− ALIAS 文

− QUERY 式

− REPEAT 文

10.3.2

属性

可視性:属性の識別子は,それが宣言されているエンティティ及びそのエンティティのすべての下位型の

有効範囲で可視とする。

10.3.3

定数

可視性:定数の識別子は,それが宣言されている関数,手続,規則又はスキーマの有効範囲で可視とする。

10.3.4

列挙項目

可視性:列挙項目の識別子は,その型が宣言されている関数,手続,規則又はスキーマの有効範囲で可視

とする。これは,可視性規則の例外とする[10.2.1(f)参照]。この識別子は,同じ有効範囲内にある他の列

挙データ型では宣言できるが,それ以外ではこの有効範囲内で別に宣言してはならない。同じ識別子を,

二つの列挙データ型の列挙項目として宣言する場合,どちらの列挙項目の参照であるかを明確にするため

に,それぞれの参照の前にそのデータ型の識別子を付けなければならない(8.4.1 参照)。

10.3.5

エンティティ

可視性:エンティティの識別子は,それが宣言されている関数,手続,規則又はスキーマの有効範囲で可

視とする。エンティティの識別子は,その識別子が再宣言されている内側の有効範囲内でも,10.2.2 で定

義する条件では,可視のままとする。

有効範囲:エンティティ宣言は,新しい有効範囲を定義する。この有効範囲は,キーワード ENTITY から

始まり,そのエンティティ宣言を終了させるキーワード END_ENTITY までとする。エンティティの上位

型で宣言する属性は,継承によってその下位型のエンティティで可視とする。

備考  下位型のエンティティの有効範囲は,その上位型の有効範囲の入れ子とは考えない。

宣言:次の EXPRESS 項目によって,エンティティ宣言の有効範囲内で,識別子を宣言してもよい。

−  属性(明示属性,誘導属性及び逆属性)

−  規則のラベル(一意性規則及び定義域規則)

− QUERY 式(誘導属性及び定義域規則の中で)

73.  二つのエンティティ中の属性の識別子 batt は,二つの異なった有効範囲内で宣言されているた

め,衝突しない。

          ENTITY entity1;

           aatt : INTEGER;

           batt : INTEGER;

          END_ENTITY;


58

B 3700-11-1996 (ISO 10303-11 : 1994)

          ENTITY entity2;

           a     :  entity1;

          batt  :  INTEGER;

          END_ENTITY;

74.  属性の識別子 aatt が illegal の有効範囲内に継承され(9.2.3.3参照)宣言されているため,次の

仕様は,正しくない。二つのエンティティ中の規則ラベル lab は,別の有効範囲内にあるため,

衝突しない。属性 aatt に関する誤りを無視すれば,illegal の正しいインスタンスは,両方の定

義域規則に従う。

          ENTITY may_be_ok;

           quantity : REAL;

          WHERE

           lab : quantity >= 0.0;

          END_ENTITY ;

          ENTITY illegal

           SUBTYPE OF (may_be_ok);

           aatt : INTEGER;

           batt : INTEGER;

           aatt : REAL ;

          WHERE

           lab :batt < 0;

          END_ENTITY;

10.3.6

関数

可視性:関数の識別子は,それが宣言されている関数,手続,規則又はスキーマの有効範囲内で可視とす

る。

有効範囲:関数宣言は,新しい有効範囲を定義する。この有効範囲は,キーワード FUNCTION から始まり,

その関数宣言を終了させるキーワード END_FUNCTION までとする。

宣言:次の EXPRESS 項目によって,識別子を,関数宣言の有効範囲内で宣言してもよい。

− ALIAS 文

−  定数

−  エンティティ

−  列挙

−  関数

−  引き数

−  手続

− QUERY 式

− RETURN 文

−  型

−  型ラベル

−  変数

75.  次の例は,仮引き数の識別子 parm を局所変数の識別子としても使っているので,正しくない。


59

B 3700-11-1996 (ISO 10303-11 : 1994)

          FUNCTION illegal(parm : REAL) : LOGICAL;

          LOCAL

           parm : STRING;

          END_LOCAL;

           ...

          END_FUNCTION;

10.3.7

引き数

可視性:仮引き数の識別子は,それが宣言される関数又は手続の有効範囲内で可視とする。

10.3.8

手続

可視性:手続の識別子は,それが宣言される関数,手続,規則又はスキーマの有効範囲中で可視とする。

有効範囲:手続宣言は,新しい有効範囲を定義する。この有効範囲は,キーワード PROCEDURE から始

まり,その手続宣言を終了させるキーワード END_PROCEDURE までとする。

宣言:次の EXPRESS 項目によって,識別子を,手続宣言の有効範囲内で宣言してもよい。

− ALIAS 文

−  定数

−  エンティティ

−  列挙

−  関数

−  引き数

−  手続

− QUERY 式

− RETURN 文

−  型

−  型ラベル

−  変数

10.3.9  Query

式  QUERY 式の定義は,12.6.7 による。

可視性:QUERY 式中で暗黙に宣言された識別子は,その QUERY 式で定義される有効範囲で可視とする。

有効範囲:QUERY 式は,新しい有効範囲を定義する。この有効範囲は,キーワード QUERY の後の左括

弧“(”から始まり,その QUERY 式を終了させる右括弧“)”までとする。

宣言:次の EXPRESS 項目によって,識別子を,QUERY 式の有効範囲内で宣言してもよい。

− QUERY 式

10.3.10  Repeat

文  REPEAT 式の定義は,13.9 による。

可視性:増分制御による REPEAT 文中で暗黙に宣言された識別子は,その REPEAT 文の有効範囲内で可

視とする。

有効範囲:REPEAT 文は,新しい有効範囲を定義する。この有効範囲は,キーワード REPEAT から始ま

り,その REPEAT 文を終了させるキーワード END_REPEAT までとする。

宣言:次の EXPRESS 項目によって,識別子を,REPEAT 文の有効範囲内で宣言してもよい。

− ALIAS 文

− QUERY 式

− REPEAT 文


60

B 3700-11-1996 (ISO 10303-11 : 1994)

10.3.11

規則

可視性:規則の識別子は,それが宣言されているスキーマの有効範囲内で可視とする。

備考  規則の識別子は,実装でだけ使われる。EXPRESS は,規則の識別子を参照するための機構を提

供しない。

有効範囲:規則の宣言は,新しい有効範囲を定義する。この有効範囲は,キーワード RULE から始まり,

その規則宣言を終了させるキーワード END_RULE までとする。

宣言:次の EXPRESS 項目によって,識別子を,規則宣言の有効範囲内で宣言してもよい。

− ALIAS 文

−  定数

−  エンティティ

−  列挙

−  関数

−  引き数

−  手続

− QUERY 式

− RETURN 文

−  規則ラベル

−  型

−  型ラベル

−  変数

76.  次の例は正しくない。それは,規則によって影響を受けるエンティティの識別子 point が,規

則内で変数として暗黙に宣言されており,局所変数としても明示的に宣言されているからであ

る。

          RULE illegal FOR (point);

          LOCAL

           point : STRING;

          END_LOCAL;

           ...

          END_RULE;

10.3.12

規則ラベル

可視性:規則ラベルは,それが宣言されるエンティティ,規則又は型の有効範囲内で可視とする。

備考  規則ラベルは,実装でだけ使われる。EXPRESS は,規則ラベルを参照するための機構を提供し

ない。

10.3.13

スキーマ

可視性:スキーマの識別子は,他のすべてのスキーマに対し可視とする。

備考  適合実装では,スキーマの集まりを一つの有効範囲として扱う機構を提供してもよい。

有効範囲:スキーマ宣言は,新しい有効範囲を定義する。この有効範囲は,キーワード SCHEMA から始

まり,そのスキーマ宣言を終了させるキーワード END_SCHEMA までとする。

宣言:次の EXPRESS 項目によって,識別子を,スキーマ宣言の有効範囲内で宣言してよい。

−  定数


61

B 3700-11-1996 (ISO 10303-11 : 1994)

−  エンティティ

−  列挙

−  関数

−  手続

−  型

77.  次のスキーマは,二つの点で正しくない。識別子 adef は,USE 節を通して移入されたが,型の

名前として再宣言されている。さらに,名前 fdef は,二つの宣言(項目の型は,無関係だが,

ここでは,エンティティ及び関数である。

)で識別子として使われている。

          SCHEMA incorrect;

          USE FROM another_schema(adef);

           FUNCTION fdef(parm : NUMBER) : INTEGER;

           ...

           END_FUNCTION;

           TYPE  adef = STRING;

           END_TYPE;

           ENTITY  fdef;

           ...

           END_ENTITY;

          END_SCHEMA;

10.3.14

可視性:型の識別子は,それが宣言されている関数,手続,規則又はスキーマの有効範囲内で可視とする。

型の識別子は,その識別子が再宣言されている内側の有効範囲内でも,10.2.2 で定義する条件では,可視

のままとなる。

有効範囲:型宣言は,新しい有効範囲を作る。この有効範囲は,キーワード TYPE から始まり,その型宣

言を終了させるキーワード END_TYPE までとする。

宣言:次の EXPRESS 項目によって,識別子を,型宣言の有効範囲内で宣言してもよい。

−  列挙

−  規則ラベル(定義域規則)

− QUERY 式(定義域規則内で)

10.3.15

型ラベル

可視性:型ラベルは,それが宣言されている関数又は手続の有効範囲内で可視とする。それは,仮引き数

の仕様に従った有効範囲で最初に現れたときに,暗黙に宣言される。このようにして宣言された型ラベル

は,仮引き数の仕様の中でも,又は関数若しくは手続の局所宣言の中でも参照してよい。型ラベルは,関

数中で宣言されているならば,関数の結果の型の仕様で参照してもよい。

10.3.16

変数

可視性:変数の識別子は,それが宣言されている関数,手続又は規則の中で可視とする。

11.

インタフェース仕様  ここでは,一つのスキーマで宣言した項目を別のスキーマで可視にする構成要

素を規定する。インタフェースの仕様は,二つ(USE 及び REFERENCE)とし,これによって項目を可

視にする。


62

B 3700-11-1996 (ISO 10303-11 : 1994)

USE

仕様によって,あるスキーマで宣言した項目を,USE 構成要素を指定したスキーマ内で独立にイン

スタンス化できる。

エンティティインスタンスが独立とは,他のエンティティインスタンスの属性で記述される役割を果た

さない場合とする。独立なインスタンスに対し,ROLESOF(15.20 参照)は,空集合を戻す。そのスキー

マで局所的に宣言されているエンティティ又はそこで USE されているエンティティは,独立にインスタン

ス化されてもよく,そのスキーマ内でエンティティの属性で記述された役割を果たしてもよい。

明示的に REFERENCE されているエンティティ又は暗黙にインタフェースされているエンティティは,

そのスキーマ中のエンティティの属性で記述された役割を果たすためだけに,インスタンス化しなければ

ならない。

構文:

228

  interface_specification = reference_clause | use_clause .

外部宣言 (foreign declaration) は,外部スキーマ[注目のスキーマ以外のスキーマ (foreign schema)]中

に現れる任意の宣言(例えば,エンティティ)とする。

さらに,インタフェースの二つの形式の相違は,USE 仕様が名前付きデータ型(エンティティデータ型

及び定義データ型)だけに適用されるのに対して,REFERENCE 仕様が規則及びスキーマを除くすべての

宣言に適用されることとする。

外部スキーマの EXPRESS 項目には,注目のスキーマ中で,新しい名前を与えてもよい。EXPRESS 項目

は,キーワード AS の後に新しい名前が与えられたならば,注目のスキーマ中では,その名前で参照しな

ければならない。

11.1  Use

インタフェース仕様  外部スキーマ中で宣言されたエンティティデータ型及び定義データ型は,

USE

(使用)仕様で使用可能となる。USE 仕様は,外部スキーマの名前を与え,かつそこで宣言されるエ

ンティティデータ型及び定義データ型の名前を付加的に与える。名前付きデータ型  (named types)  が指定

されていないならば,外部スキーマで宣言されている名前付きデータ型及びその外部スキーマで USE して

いる名前付きデータ型のすべては,局所的に宣言したように扱われる。

構文:

313

  use_clause = USE FROM schema_ref [ ‘(’ named_type_or_rename

                     { ‘,’ named_type_or_rename } ‘)’ ] ‘;’ .

246

  named_type_or_rename = named_types [ AS ( entity_id | type_id )] .

11.2  Referencc

インタフェース仕様  REFERENCE(参照)仕様は,外部スキーマで宣言された次の

EXPRESS

項目を,注目のスキーマ中で可視にする。

−  定数

−  エンティティ

−  関数

−  手続

−  型

REFERENCE

仕様は,外部スキーマの名前を与え,かつそこで宣言された EXPRESS 項目の名前を付加的

に与える。名前が指定されていないならば,外部スキーマで宣言されている EXPRESS 項目及びその外部

スキーマで USE している EXPRESS 項目のすべては,注目のスキーマ中で可視になる。


63

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

267

  reference_clause = REFERENCE FROM schema_ref [ ‘(’ resource_or_rename

                             { ‘,’ resource_or_rename } ‘)’ ] ‘;’ .

274

  resource_or_rename = resource_ref [ AS rename_id ] .

275

  resource_ref = constant_ref | entity_ref | function_ref | procedure_ref | type_ref .

270

  rename_id = constant_id | entity_id | function_id | procedure_id | type_id .

REFERENCE

される外部宣言は,局所宣言として扱われず,独立にはインスタンス化できない。しかし,

注目のスキーマ中のエンティティの属性で記述される役割を果たすためにインスタンス化してもよい。

11.3  use

と reference との相互作用  エンティティデータ型又は定義データ型が注目のスキーマの中に

USE

され,かつ REFERENCE されるときは,USE 仕様を優先する。

78.  次の文は,al を局所宣言として扱う。

          USE FROM s1 (a1);

          REFERENCE FROM s1 (a1);

名前付きデータ型が注目のスキーマに USE されたときは,その名前付きデータ型は,注目のスキーマか

ら別のスキーマに USE 又は REFERENCE してもよい

(すなわち,

USE

仕様は,

スキーマ間で連結される。

79.  次の二つのスキーマを宣言した場合,

          SCHEMA s1;

           ENTITY  e1;

           END_ENTITY;

          END SCHEMA;

          SCHEMA s2;

          USE FROM s1 (e1 AS e2);

          END_SCHEMA;

この場合,次の二つの仕様は,等価である。

          SCHEMA s3;                            SCHEMA s3;

          USE FROM s1 (e1 AS e2);            USE FROM s2 (e2);

          END_SCHEMA;                          END_SCHEMA;

REFERENCE

された EXPRESS 項目は局所的に宣言されているとはみなせないので,REFERENCE は,

連結できない。

11.4

暗黙のインタフェース  外部宣言は,注目のスキーマで不可視な識別子を参照していてもよい。暗

黙に参照されるこれらの EXPRESS 項目は,注目のスキーマを完全に理解する上で必要となる。しかし,

それらは,注目のスキーマ中で宣言される EXPRESS 項目では,不可視とする。暗黙にインタフェースさ

れたそれぞれの項目が,注目のスキーマ中では不可視である他の EXPRESS 項目を更に参照していてもよ

い。これらの EXPRESS 項目も注目のスキーマを完全に理解する上で必要となる。

80.  暗黙にインタフェースされた項目及び暗黙のインタフェースの連結。

          SCHEMA s1;

           TYPE  t1 = REAL;

           END_TYPE;

           ENTITY  e1;


64

B 3700-11-1996 (ISO 10303-11 : 1994)

            a   :  t1;

           END_ENTITY;

           ENTITY  e2;

            a1 : e1;

           END_ENTITY;

          END_SCHEMA :

          SCHEMA s2;

           REFERENCE FROM s1 (e2);

           ENTITY  e3;

            a3: e2;

           END_ENTITY;

          ND_SCHEMA;

エンティティ e2 は,属性 a3 のデータ型として使われる。e2 はその定義で e1 を要求するの

で,e1 はスキーマ s2 に暗黙にインタフェースされる。しかし,e1 は,s2 に明示的にインタフ

ェースされていないので,s2 内で e1 とは記述できない。同様に,e1 は,その定義で t1 を要求

している。したがって,t1 は,スキーマ s2 によって暗黙にインタフェースされる。

ここでは,インタフェースされるという語は,USE される,REFERENCE される又は暗黙

にインタフェースされるという意味で使用する。

11.4.1

定数のインタフェース  定数がインタフェースされる場合,インタフェースされる定数の宣言で使

用される次のものは,暗黙にインタフェースされる。

−  定義データ型

−  エンティティデータ型

−  定数

−  関数

11.4.2

定義データ型のインタフェース  定義データ型がインタフェースされるとき,次のものは暗黙にイ

ンタフェースされる。

−  インタフェースされる型の宣言で使用される定義データ型。ただし,インタフェースされる型が

SELECT

データ型の場合を除く。この場合,選択可能な項目のいずれも,このインタフェースの

結果として暗黙にインタフェースされない。

−  インタフェースされる定義データ型の表現の宣言中に使われる定数又は関数。

−  インタフェースされる定義データ型の定義域規則内で使われる定数又は関数。

−  SELECT データ型によって表現された定義データ型。ただし,その SELECT データ型は,選択

リスト中にインタフェースされる定義データ型を含む。

81.  SELECT データ型を介しての定義データ型への暗黙のインタフェース。

          SCHEMA s1;

           TYPE  sel1 = SELECT  (e1,t1);

           END_TYPE;

           TYPE  t1 = INTEGER;

           END_TYPE;

           ENTITY  e1;


65

B 3700-11-1996 (ISO 10303-11 : 1994)

           ...

           END_ENTITY;

          END_SCHEMA;

          SCHEMA s2;

          REFERENCE FROM s1 (t1);

          END_SCHEMA;

スキーマ s2 は,t1 の明示的な参照を含む。さらに,sel1 は t1 を含む SELECT で表現さ

れているので,sel1 は暗黙にインタフェースされる。

11.4.3

エンティティデータ型のインタフェース  エンティティデータ型がインタフェースされるとき,次

のものは暗黙にインタフェースされる。

−  インタフェースされるエンティティデータ型の上位型であるすべてのエンティティデータ型

備考  インタフェースされるエンティティデータ型の下位型は,それらが SUPERTYPE OF 式で現れ

るか否かにかかわらず,このインタフェースの結果として暗黙にインタフェースされない。

−  インタフェースされるエンティティデータ型を参照するすべての規則。ただし,その規則の参照

する 0 個以上の他のエンティティデータ型は,注目するスキーマ中で明示的に又は暗黙にインタ

フェースされたものでなければならない。

−  インタフェースされるエンティティデータ型の属性の宣言中で使われる定数,定義データ型,エ

ンティティデータ型又は関数

−  インタフェースされるエンティティデータ型の定義域規則内で使われる定数,定義データ型,エ

ンティティデータ型又は関数

−  SELECT データ型で表現されたエンティティデータ型。ただし,その選択データ型は選択リスト

中にインタフェースされるエンティティデータ型を指定しているものとする。

上位型及び下位型のグラフは,インタフェースされたエンティティデータ型の暗黙のインタフェースを

集めたときの SUBTYPE OF のリンクだけをたどったものにしてよい。その結果の上位型及び下位型のグ

ラフで許されるインスタンス化を計算するために使われるアルゴリズムは,

附属書 C(規定)による。

11.4.4

関数のインタフェース  関数がインタフェースされるとき,次のものは暗黙にインタフェースされ

る。

−  インタフェースされる関数の引き数の宣言中で使われる定義データ型又はエンティティデータ型

−  インタフェースされる関数の戻り値の型の宣言中で使われる定義データ型又はエンティティデー

タ型

−  インタフェースされる関数内の局所変数の宣言中で使われる定義データ型又はエンティティデー

タ型

−  インタフェースされる関数内で使われる定数,関数又は手続

11.4.5

手続のインタフェース  手続がインタフェースされるとき,次のものは暗黙にインタフェースされ

る。

−  インタフェースされる手続の引き数の宣言中で使われる定義データ型又はエンティティデータ型

−  インタフェースされる手続内の局所変数の宣言中で使われる定義データ型又はエンティティデー

タ型

−  インタフェースされる手続内で使われる定数,関数又は手続


66

B 3700-11-1996 (ISO 10303-11 : 1994)

11.4.6

規則のインタフェース  規則がインタフェースされるとき,次のものは暗黙にインタフェースされ

る。

−  インタフェースされる規則内の局所変数の宣言中で使われる定義データ型又はエンティティデー

タ型

−  インタフェースされる規則内で使われる定数,関数又は手続

12.

式  式  (expression)  は,演算子,被演算子及び関数呼出しの組合せからなり,値を算出するために評

価される。

構文:

204

  expression = simple_expression [ rel_op_extended simple_expression ] .

269

  rel_op_extended = rel_op | IN | LIKE .

268

  rel_op = ‘<’ | ‘>’ | ‘<=’ | ‘>=’ | ‘<>’ | ‘=’ | ‘:<>:’ | ‘:=:’ .

287

  simple_expression = term { add_like_op term } .

303

  term = factor { multiplication_like_op factor } .

205

  factor = simple_factor [ ‘**’ simple_factor ] .

288

  simple_factor = aggregate_initializer | entity_constructor |

                         enumeration_reference | interval | query_expression |

                         ([ unary_op ] ( ‘(’ expression ‘)’ | primary ) ) .

308

  unary_op = ‘+’ | ‘-’ | NOT .

256

  primary = Iiteral | ( qualifiable_factor { qualifier }) .

244

  multiplication like_op = ‘*’ | ‘/’ | DIV | MOD | AND | ‘ | | ’ .

158

  add_like_op = ‘+’ | ‘-’ | OR | XOR .

幾つかの演算子は一つの被演算子を必要とし,他の演算子は二つの被演算子を必要とする。被演算子を

一つだけ必要とする演算子は,その被演算子の前に置かれなければならない。二つの被演算子を必要とす

る演算子は,その被演算子の間に書かなければならない。ここでは,演算子を定義し,各演算子が使って

よい被演算子のデータ型を規定する。

演算子には次の七つのクラスがある。

(a)

算術演算子 (arithmetic operator) は,数値の被演算子をとり,数値の結果を生じる。算術演算の結果の

値のデータ型は,演算子及び被演算子のデータ型に依存する(12.1 参照)

(b)

関係演算子 (relational operator,rel_op)  は,被演算子として種々のデータ型をとり,LOGICAL の結

果(TRUEFALSE 又は UNKNOWN)を生じる。

(c)  2

進  (BINARY)  演算子は,BINARY の被演算子をとり,BINARY の結果を生じる。

(d)

論理  (LOGICAL)  演算子は,LOGICAL の被演算子をとり,LOGICAL の結果を生じる。

(e)

文字列  (STRING)  演算子は,STRING の被演算子をとり,STRING の結果を生じる。

(f)

集合体演算子 (aggregate operator) は,種々の方法で,集合体値を,他の集合体値又は個々の要素と組

み合わせ,集合体の結果を生じる。

(g)

要素参照及び添字演算子は,エンティティインスタンス及び集合体値から要素を抽出する。

式の評価は,式を構成する演算子の優先順位に従う。

括弧で囲まれた式は,一つの被演算子として取り扱われる前に,評価される。


67

B 3700-11-1996 (ISO 10303-11 : 1994)

評価は,最も高い優先順位を最初に評価しながら,左から右へと進む。

表 10 に EXPRESS の全演算子の

優先順位の規則を示す。同一行の演算子は同じ優先順位をもち,行は優先順位の高い順に並べられている。

表 10  演算子の優先順位

優先順位

記述

演算子

1

要素参照

[ ] . ¥

2

単項演算子

+ − NOT

3

べき乗

**

4

乗算・除算

*/DIV MOD AND

  | |

(

1

)

5

加算・減算

− + OR  XOR

6

関係

= <> <= >= < > :=: : <> :

IN LIKE

(

1

)

これは,複合エンティティ構成演算子である。

優先順位の異なる二つの演算子間に置かれた被演算子は,優先順位の高い演算子に結びつけられる。同

じ優先順位の演算子間に置かれた被演算子は,左側のものに結びつけられる。

82.  −10**2は,  (−10)  **2として評価され,値100を生じる。10/20*30は, (10/20) *30とし

て評価され,値15を生じる。

12.1

算術演算子  一つの被演算子を必要とする算術演算子は,恒等  (+)  及び符号反転  (−)  とする。被

演算子は,数値をもつ型(NUMBERINTEGER 又は REAL)とする。演算子が+の場合,結果は被演算

子に等しく,演算子が一の場合,結果は被演算子を符号反転したものとなる。被演算子が不定“?”の場合,

どの演算子が使われようと,結果は不定“?”となる。

二つの被演算子を必要とする算術演算子は,加算  (+)  ,減算  (−)  ,乗算  (*)  ,除算 (/) ,べき乗  (*

*)  ,整数除算  (DIV)  及び剰余  (MOD)  とする。被演算子は,数値をもつ型(NUMBERINTEGER 

は REAL)でなければならない。

加算,減算,乗算,除算及びべき乗の演算子は,その名前の示す数学演算を実行する。除算の場合を除

き,これらは,両方の被演算子のデータ型が INTEGER ならば INTEGER の結果を生じ,そうでなければ

REAL

の結果を生じる(いずれの被演算子も不定“?”と評価できない場合。

。実数除算 (/) は,実数の結

果を生じる(いずれの被演算子も不定“?”と評価できない場合。

剰余及び整数除算は,常に INTEGER の結果を生じる(いずれの被演算子も不定“?”と評価できない

場合。

いずれか一方の被演算子のデータ型が REAL の場合は,演算の前に小数点以下が切り捨てられ,

INTEGER

にされる。及び が整数ならば,(a DIV b) 

b (a MOD b)   a は,常に真となる。a MOD

b

の絶対値は b の絶対値より小さくなるし,a MOD b の符号は の符号と同じになる。

算術演算子に対する被演算子のいずれかが,不定“?”であるならば,その演算の結果は,不定“?”と

なる。

実数の丸め  必要な場合,丸めは,精度 pREAL 型に対して明示的に示すか又は

附属書 E(規定)の

とおり実装上の制限として示す。

]から,次のアルゴリズムを用いて,決めなければならない。

(a)

数値の表現を,すべての先行するゼロを取り除いた指数形式に変換する。

(b)

小数点の右側から数えて けた目の数字の位置をけたポインタ に設定する。

(c)

実数値が正ならば,次を行う。

−  小数点以下 けた目の数字が 5∼9 の範囲にあるならば,小数点以下 k−1 けた目の数字に 1 を加

え,小数点以下 けた目とそれ以降の全数字とを無視し,(e)へ進む。


68

B 3700-11-1996 (ISO 10303-11 : 1994)

−  小数点以下 けた目の数字が 0∼4 の範囲にあるならば,小数点以下 けた目とそれ以降の全数字

とを無視し,(h)へ進む。

(d)

実数値が負ならば,次を行う。

−  小数点以下 けた目の数字が 6∼9 の範囲にあるならば,小数点以下 k−1 けた目の数字に 1 を加

え,小数点以下 けた目とそれ以降の全数字とを無視し,(e)へ進む。

−  小数点以下 けた目の数字が 0∼5 の範囲にあるならば,小数点以下 けた目とそれ以降の全数字

とを無視し,(h)へ進む。

(e)

けたポインタ の値を 1 だけ減らす。

(f)

小数点以下 けた目の数字が 0∼9 の範囲にあるなら,(h)に進む。

(g)

小数点以下 けた目の数字が値 10 をもつなら,小数点以下 k−1 けた目の数字に 1 を加え,小数点以

下 けた目の数字を 0 にし,(e)へ進む。

(h)

数値の丸めは終了した。

備考  この丸めの方式では,0.5 が 1 に,−0.5 が 0 に丸められる。

83.  次の例は,実数の小数部に有効けた数,すなわち,精度を定義した効果を示している。

        LOCAL

         distance    :  REAL(6);

         x1, y1, z1 : REAL ;

         x2, y2, z2 : REAL ;

        END_LOCAL ;

        ...

        x1 := 0.;  y1  := 0.;  z1  :=  0.;

        x2 := 10.; y2 := 11.;z2  := 12.;

        ...

        distance := SQRT((x2-x1)**2 + (y2-y1)**2 + (z2-z1)**2);

distance

は 1.9104973...e+1 の値に計算されるが,ここの仕様は 6 けたの精度を要求し

ているので,実際には,1.91050e+1 の値をもつ。したがって,6 けたの有効数字だけが保持

される。

12.2

関係演算子関係演算子は,値比較演算子,インスタンス比較演算子,帰属  (IN)  演算子及び文字列照

合  (LIKE)  演算子からなる。関係式の結果は,LOGICAL の値(TRUEFALSE 又は UNKNOWN)とす

る。被演算子のいずれかが不定“?”に評価されると,式は,UNKNOWN と評価される。

12.2.1

値比較演算子  値比較演算子は,次のとおりとする。

−  等価  (=)

−  非等価 (<>)

−  より大きい (>)

−  より 4、さい (<)

−  以上 (>=)

−  以下 (<=)

これらの演算子は,数値,論理,文字列,2 進及び列挙項目の被演算子に適用してよい。さらに,=及

び<>は,集合体データ型及びエンティティデータ型の値に適用してよい。値比較被演算子の二つの被演算

子は,データ型が整合していなければならない(12.11 参照)


69

B 3700-11-1996 (ISO 10303-11 : 1994)

二つの与えられた値 a 及び値 b に関して,そのどちらも不定“?”でなければ,a<>b は,すべてのデー

タ型に対して,NOT (a

b)  と等しい。a 及び b が集合体でもエンティティデータ型でもなければ,さらに,

次のことがなり立つ。

(a)  a < b

a又は a > b  の一つが TRUE

(b)  a <

は,(a < b) OR (ab)  に等しい。

(c)  a >

は,(a > b) OR (ab)  に等しい。

12.2.1.1

数値比較  値比較演算子は,数値をもつ被演算子に適用されたときは,実数の数学的順序付けに

対応しなければならない。

備考  二つの実数を比較するときは,精度の指定は,考慮されない。

84.  次のものが与えられたとき,式 a    b は,TRUE と評価される。

              a : REAL(3) : =1.23

              b : REAL(5) : =1.2300;

12.2.1.2  2

進比較  二つの 2 進値を比較するには,両方の値の同じ位置のビットを,ビットの最初(左端)

の対から始めて,次に 2 番目の位置の対といったように,等しくない対が見つかるか又はすべてのビット

対を検査し終わるまで比較する。等しくない対が見つかったならば,0 ビットを含む 2 進値は,もう一方

の 2 進値よりも小さい。それ以上の比較は,必要ない。等しくない対が見つからなければ,より短い

BLENGTH 関数を用いる)2 進値が他の 2 進値より小さいとみなす。両方の 2 進値が同じ長さをもち,

すべての対が等しいならば,二つの 2 進値は,等しい。

12.2.1.3

論理比較  二つの LOGICAL の値(又は BOOLEAN の値)の比較は,次の順序付けに従わなけ

ればならない。

  FLASE < UNKNOWN < TRUE

12.2.1.4

文字列比較  二つの文字列値を比較するには,両方の値の同じ位置の文字を,文字の最初(左端)

の対から始めて,次に 2 番目の位置の対といったように,等しくない対が見つかるか又はすべての文字の

対を検査し終わるまで比較する。等しくない対が見つかったならば,

JIS X 0221 で定義された文字を表す

オクテット値として)小さい方の文字を含む文字列値がもう一方の文字列値よりも小さいとみなす。それ

以上の比較は,必要ない。等しくない対が見つからなければ,より短い文字列値(LENGTH 関数を用い

る。

)が他の文字列値より小さいとみなす。両方の文字列値が同じ長さをもち,すべての対が等しければ,

二つの文字列値は,等しい。

12.2.1.5

列挙項目比較  列挙項目の値の比較は,その列挙データ型の宣言中でのそれらの相対的な位置に

基づく[8.4.1(a)参照]

12.2.1.6

集合体の値比較  集合体の値のために定義されている値比較演算子は,等価  (=)  及び非等価

(<>)

とする。二つの集合体の値は,それらのデータ型が整合する場合に限り(12.11 参照)

,比較できる。

すべての集合体の比較は,各被演算子中の要素数を検査し,SIZEOF(a)

  <>  SIZEOF(b)ならば,それ

らの集合体は等しくないとする。集合体の比較は,値の比較を行うことによって,集合体の値の要素を比

較する。要素比較のいずれかが FALSE と評価されると,集合体の比較は,FALSE と評価される。集合体

の比較で,

一つ以上の要素比較が UNKNOWN と評価され,

残りの比較がすべて TRUE と評価された場合,

この集合体の比較は,UNKNOWN と評価される。その他の場合,集合体の評価は,TRUE と評価される。

集合体の等価性の定義は,比較される集合体のデータ型による。

−  配列 と配列 とは,の各要素が同じ位置にある の要素と値比較で等しいとき,すなわち,

a[i] 

 b[i]12.6.1 参照)のときにだけ,等しい。


70

B 3700-11-1996 (ISO 10303-11 : 1994)

−  リスト とリスト とは,の各要素が同じ位置にある の要素と値比較で等しいときにだけ,

等しい。

−  と とが多重集合又は集合である場合,次の条件がともに成立するときに,と とは等しい。

(a)  a

の各要素について,におけるその値の出現回数と におけるその値の出現回数とが等しい。

(b)  b

の各要素について,におけるその値の出現回数と におけるその値の出現回数とが等しい。

備考  たとえ多重集合が同じインスタンスの複数の出現を含むときでも,多重集合は集合値で等しく

なってもよい。それは,値比較によって等しい要素の個数を調べるからである。

12.2.1.7

エンティティ値比較  二つのエンティティインスタンスの各属性が値比較で等しい場合,その二

つのエンティティインスタンスは値比較で等しい。エンティティインスタンスはエンティティデータ型で

表される属性をもつこともあるので,インスタンスは,自己参照することができる。その場合,エンティ

ティインスタンスは,単純デタ型で表される属性のすべてが同じ値をもち,かつ両方のエンティティイン

スタンスが自己参照ならば,値比較で等しいとする。

ここで,より正確に示す。二つの比較するインスタンスを l と r とする。ここで,l

  ::  の場合,l

とする。

その他の場合は,次の定義に従う。

−  考慮中のインスタンスの集団上で順序付けを定義する。実際には,この集団は有限なので,順序

付けを行うことができる。

−  ここでの利便のためにだけ,この順序づけに従う集合体添字演算子を次のとおり定義する。すな

わち,任意の集合体 agg 並びに任意の添字 及び添字 に対し,条件 i < j は,条件 agg [i] < agg [j] 

と等価とする。

−  一つ以上の属性参照又は添字参照の列である参照パスを定義する。参照パス S をインスタンス i

に適用したものを,s(i)と書く。最終の参照を除き,すべての参照が不定“?”でないならば,s (i)

は,評価可能とする。

このとき,l

  =  の値は,次の条件を順次調べ,最初に成立した箇所で定まる。

(a)  TYPEOF(l)

  <>  TYPEOF (r)  の場合,l  =  は,FALSE とする。

(b)  s(l)

及び s (r)  のうちの一方だけが評価可能であるような参照パス s がある場合,l

  =  は,FALSE

とする。

(c)  s(l)

及び s (r)  の両方が単純型の値になるような参照パス があり,かつ s(l)

  <>  s (r)  の場合,l  =

r

は,FALSE とする。

(d)  NOT EXISTS (s(l))

又は NOT EXISTS (s(r))であるような参照パス s がある場合,l

  =  は,

UNKNOWN

とする。

(e)

その他の場合,l

  =  は,TRUE とする。

85.  次のアルゴリズムは,上の値比較を検査するための実装の例である。このアルゴリズムは,例

示であり,特定の実装を規定することを意図していない。

このアルゴリズムでは,l 及び r は,GENERIC 型の変数とする。

(a)  l

を左辺のエンティティインスタンスに,を右辺のエンティティインスタンスに初期化する。

(b)

インスタンスが同じ(すなわち,l

  ::  r)であるならば,式は,TRUE に評価する。

(c)

エンティティインスタンスの識別子の順序対を含むリスト plist は,空リストに初期化する。

備考  インスタンス識別子の表現は,実装による。

(d)

次に示す深等価アルゴリズムを用いて,と とを比較する。


71

B 3700-11-1996 (ISO 10303-11 : 1994)

(e)

式は,この深等価アルゴリズムによって戻される値に評価する。

深等価アルゴリズム

(a)  l

及び の一方,又はその両方が不定“?”であるならば,アルゴリズムは,UNKNOWN を戻す。

(b)  TYPEOF(l)

  <>  TYPEOF (r)  ならば,アルゴリズムは,FALSE を戻す。

(c)  l

及び の両方がエンティティインスタンスでないならば,適切な等価検査によって,l

  =  の値を

戻す。

(d)  l

と とがエンティティインスタンスが同じ(すなわち,l

  ::  r)であるならば,アルゴリズムは,

TRUE

を戻す。

(e)

インスタンスの対  (lr)  が plist 中にあるならば,アルゴリズムは,TRUE を戻す。

(f)

インスタンスの対  (lr)  が plist 中にないならば,アルゴリズムは,次のことを行う。

(1)

対  (lr)  を plist に加える。

(2)  l

及び に対し定義された各属性 a に対し,

l

  =  l. a 及び r  =  r. a として深等価アルゴリズムを

使い,l. a と r. a とを比較する。

備考  これは再帰呼出しである。

(3)

上の(2)の段階で,いずれかの属性に対し深等価アルゴリズムが FALSE の結果を戻すなら,このア

ルゴリズムの現在の呼出しの結果は,FALSE とする。その他の場合で,いずれかの属性に対し深等

価アルゴリズムが UNKNOWN の結果を戻したときは,この呼出しの結果は,UNKNOWN とする。

その他のときは,この呼出しの結果は,TRUE とする。

備考  これは,次のことを確実にする。すなわち,いずれかの比較が FALSE ならば,結果は FALSE

となる。すべての比較が TRUE ならば,結果は TRUE となる。いずれかの比較が UNKNOWN

であり,かつ残りのすべての比較が TRUE ならば,結果は UNKNOWN となる。

86.  変数 i1及び変数 i2が loop_of_integer 型で,次のように割り当てられている場合,それらは値等

価でない

          ENTITY loop_of_integer;

           int : INTEGER;

           next : loop_of_integer;

          END_ENTITY;

          ...

          LOCAL

           i1, i2 : loop_of_integer

          ENDLOCAL;

          ...

          i1 :=loop_of_integer(5, loop_of_integer(3, SELF));

          i2 :=loop_of_integer(3, loop_of_integer(5, SELF));

          IF i1=i2  THEN  -- 偽に評価される。

エンティティ値の比較は,エンティティインスタンス及びグループ修飾された(12.7.4 参照)エンティ

ティインスタンスに適用できる。エンティティインスタンスについては,比較中のインスタンスのあらゆ

る上位型及び下位型の属性のすべてが,比較されなければならない。グループ修飾されたエンティティイ

ンスタンスについては,そのグループ修飾子中で指定されたエンティティデータ型のそのエンティティ宣

言の中の属性だけが比較される(指定されたエンティティデータ型中で再宣言される継承された属性を除


72

B 3700-11-1996 (ISO 10303-11 : 1994)

く。

12.2.2

インスタンス比較演算子  インスタンス比較演算子は,次のとおりとする。

−  インスタンス等価  (:=:) ;

−  インスタンス非等価  (:<>:) .

これらの演算子は,数値,論理,文字列,2 進,列挙,集合体及びエンティティの各データ型の被演算

子に適用してよい。インスタンス比較演算子に対する二つの被演算子は,データ型が整合していなければ

ならない(12.11 参照)

二つの与えられた被演算子の a 及び b に対し,

 (a

  :<> :  b)  は,すべてのデータ型に対して,NOT (a  :

:  b)  と等しい。

インスタンス比較演算子は,数値,論理,文字列,2 進及び列挙の各データ型の被演算子に適用された

ときは,対応する値比較演算子と等しい。すなわち,これらのデータ型に対して, (a

  ::  b)   (a  =

b) 

に等しく, (a

  :<>:  b)    (a <> b)  に等しい。

12.2.2.1

集合体のインスタンス比較  集合体値に対して定義されたインスタンス比較演算子は,等価 (:

:)  及び非等価 (:<>:) とする。二つの集合体値は,それらのデータ型が整合する(12.11 参照)ときに限

り,比較できる。

すべての集合体比較は,各被演算子中の要素数を検査し,SIZEOF(a)<> SIZEOF(b)ならば,それらの集

合体は等しくない。集合体比較は,インスタンスの比較を行うことによって,集合体値の要素を比較する。

要素比較のいずれかが FALSE と評価されると,集合体の比較は,FALSE と評価される。集合体の比較で,

一つ以上の要素比較が UNKNOWN と評価され,残りの比較がすべて TRUE と評価された場合,この集合

体の比較は,UNKNOWN と評価される。その他の場合,集合体の比較は,TRUE と評価される。

集合体のインスタンス等価性の定義は,比較される集合体のデータ型に次のとおり依存する。

−  配列 と配列 とは,の各要素が同じ位置にある の要素と同じインスタンスのとき[すなわ

ち,a [i] 

  ::  b [i]  12.6.1 参照)]にだけ,等しい。

−  リスト とリスト とは,の各要素が同じ位置にある の要素と同じインスタンスのときにだ

け,等しい。

−  多重集合 と多重集合 とは,に帰属する各要素が同じ回数だけ に帰属し,かつ に帰属す

る各要素が同じ回数だけ に帰属するときにだけ,等しい。

−  集合 と集合 とは,に帰属する各要素が に帰属し,かつ に帰属する各要素が に帰属す

るときにだけ,等しい。

−  多重集合と集合とは,集合中の各要素が多重集合中でただ 1 回だけ帰属し,かつ多重集合が集合

中にない要素を含まないときにだけ,等しい。

87.  二つの配列のインスタンス比較

          LOCAL

           a1, a2 : ARRAY [1 : 10]  OF b ;

          END_LOCAL ;

          IF (a1 :=: a2) THEN ...

12.2.2.2

エンティティインスタンス比較  エンティティインスタンス等価 (::)  及びエンティティイン

スタンス非等価 (:<>:) の演算子は,二つの整合する被演算子をとり,LOGICAL の値に評価する。

a

  ::  は,が と同じエンティティインスタンスに評価されるとき,すなわち,実装に依存する

識別子が同じであるとき,TRUE に評価される。a が b と異なったエンティティインスタンスに評価され


73

B 3700-11-1996 (ISO 10303-11 : 1994)

るとき,FALSE に評価される。いずれかの被演算子が不定“?”に評価されるとき,不定“?”に評価され

る。

特に記さない限り,集合体比較の場合,UNIQUE 規則を調べる場合などで,二つのエンティティインス

タンスを比較するときには,エンティティインスタンス比較を使う。

88.  すべての子供は母親をもつが,子供によっては,兄弟又は姉妹をもつ。このことは,次のよう

にモデル化できる。

          ENTITY child

          SUBTYPE OF (person) ;

           mother : female; -- ここでは,1 世代より上は考えない。

           father : male;

          END_ENTITY;

          ENTITY sibling

          SUBTYPE OF (child) ;

           siblings : SET  [1 : ?] sibling ;

          WHERE

−−  注目するインスタンス自身が兄弟姉妹  (siblings)  に含まれないこと

          not_identical : SIZEOF ( QUERY ( i <* siblings | i :=: SELF ) ) = O;

−−  兄弟姉妹  (siblings)  のそれぞれが,注目するインスタンスと

−−  母親  (mother)  又は父親  (father)  を共有すること

          ssame_parent : SIZEOF ( QUERY ( i <* siblings  |

                                               ( i.mother :=: SELF. mother ) OR

                                               ( i.father :=: SELF. father ) ) =

                            SIZEOF ( siblings )) ;

          END_ENTITY ;

12.2.3

帰属演算子  帰属演算子 IN は,項目がある集合体に属しているかどうかを調べ,LOGICAL の値

に評価する。第 2 被演算子(演算子の右側の被演算子)は集合体データ型の値とし,第 1 被演算子(演算

子の左側の被演算子)はこの集合体の値の基本型と整合しなければならない。

e IN agg

は,次の順で評価される。

(a)

いずれかの被演算子が不定“?”の場合,この式は,UNKNOWN に評価される。

(b)  e

  ::  agg [i]  となる要素がある場合,この式は,TRUE に評価される。

(c)

不定“?”となる要素 agg [i]  がある場合,この式は,UNKNOWN に評価される。

(d)

その他の場合,この式は FALSE に評価される。

備考  関数 VALUE IN15.28 参照)は,集合体の要素が特定の値をもつか否かを決めるために使って

よい。

モデラで要素の帰属を調べるために,次の疑似コードで表される my_equa18.2.5

備考参照)

及び my_in のような一対の関数を定義してよい。

FUNCTION my_in (c : AGGREGATE OF GENERIC : gen ; v : GENERIC

 : gen) :

LOGICAL ;

(*  v 又は c が不定“?”ならば UNKNOWN を戻し,

    c のいずれかの要素が値 v をもつならば TRUE を戻し,


74

B 3700-11-1996 (ISO 10303-11 : 1994)

    いずれかの比較が UNKNOWN ならば UNKNOWN を戻し,

    さもなければ,FALSE を戻す。  *)

          LOCAL

           result  : LOGICAL;

           unknownp: BOOLEAN := FALSE;

          END_LOCAL

          IF ((NOT EXISTS(v)) OR (NOT EXISTS(c)) THEN

           RETURN (UNKNOWN); END_IF;

          REPEAT i := LOINDEX(c) TO HIINDEX(c) ;

           result  := my_equal(v, c[i]) ;

           IF  (result = TRUE)  THEN

             RETURN (result) ; END_IF ;

           IF  (result = UNKNOWN)  THEN

             unknownp  := TRUE;  END_IF;

          END_REPEAT ;

          IF (unknownp) THEN

           RETURN (UNKNOWN) ;

          ELSE

          RETURN(FALSE) ;

          END_IF ;

          END_FUNCTION ;

これは,例えば,次のように使う。

          LOCAL

           v : a ;

           c : SET OF a ;

          END_LOCAL ;

          ...

          IF my_in(c, v) THEN ...

12.2.4

区間式  区間式 (interval expression,interval)  は,値が与えられた区間にあるかどうかを調べる。

区間式は,三つの被演算子を含み,それらの被演算子の型は整合していなければならない(12.11 参照)

被演算子は,順序が定義された型,すなわち,単純データ型(8.1 参照)

,及び基底型が単純データ型又は

列挙データ型である定義型でなければならない。

構文:

229

  imterval = ‘{‘ interval_low interval_op interval_item interval_op

                  interval high ‘}’ .

232

  interval_low = simple expression .

233

  interval_op = ‘<‘ | ‘<=’ .

231

  interval_item = simple expression .

230

  interval_high = simple expression .


75

B 3700-11-1996 (ISO 10303-11 : 1994)

備考  区間式

{ bound_1 interval_op interval_item interval_op bound_2}

は,意味的に次と等しい。

(bound_1 interva1_op

interva_item) AND (interval_item interval_op bound_2)

2

番目の式で,interval_item は,ただ一度だけ評価される。

両方の関係演算式が TRUE と評価されるならば,区間式は,LOGICAL の値 TRUE に評価される。ど

ちらかの関係演算式が FALSE と評価されるならば,区間式は,FALSE と評価される。いずれかの被演算

子が不定“?”ならば,区間式は,UNKNOWN と評価される。

89.  次では,b の値が5.0より大きく,かつ100.0以下であることを調べる。

          LOCAL

           b : REAL := 20.0;

          END_LOCAL;

          .

          IF { 5.0 < b <= 100.0 } THEN -- TRUE に評価

          .

12.2.5  Like

演算子  LIKE 演算子は,次に示すパターン照合アルゴリズムを用いて,二つの文字列値を比

較し,LOGICAL の値に評価する。第 1 被演算子は,対象文字列とする。第 2 被演算子は,パターン文字

列とする。

パターン照合アルゴリズムは,次のとおりに定義される。パターン文字列の各文字は,対象文字列の対

応する文字と比較される。対応する文字の対のいずれかが合致しないときは,照合は失敗し,式は FALSE

と評価される。

パターン文字列中の幾つかの特殊文字は,対象文字列中の二つ以上の文字と合致してよい。これらの文

字は,

表 11 に定義する。式が TRUE と評価されるためには,すべての対応する文字が,同一であるか,又

表 11 で定義されているように合致していなければならない。いずれかの被演算子が不定“?”ならば,

式は,UNKNOWN と評価される。

表 11  パターン照合文字

文字

意味

@

任意の英字に合致する。

^

任意の大文字の英字に合致する。

?

任意の文字に合致する。

&

残りの文字列に合致する。

#

任意の数字に合致する。

$

間隔文字の前まで又は文字列の終わりまでの任意の部分文字列に合致する。

*

任意の個数の文字に合致する。

パターンエスケープシーケンスの始まりを示す。

否定文字(他の文字を伴って使われる。

特別なパターン照合文字そのものが照合される必要があるときは,パターンは,パターンエスケープシ

ーケンスを含まなければならない。パターンエスケープシーケンスは,エスケープ文字  (\)  と,それに

続く照合の対象となる特殊文字から構成される。

90.  文字@を照合するためには,エスケープシーケンス\@を用いる。

次に,これらのパターン照合文字を例示する。

91.        a  :=  ’\AAAA’  の場合,次が成立する。


76

B 3700-11-1996 (ISO 10303-11 : 1994)

                                            a LIKE ‘\\AAAA’        --> TRUE

                                            a LIKE ‘\AAAA’         -->  FALSE

                                            a LIKE ‘\\A?AA’        --> TRUE

                                            a LIKE ‘\\!\\AAA’      --> TRUE

                                            a LIKE ‘\\&’            --> TRUE

                                            a LIKE ‘\$’             --> FALSE

92.          a  :=  ’The quick red fox’  の場合,次が成立する。

                                            a LIKE ‘$$$$’          --> TRUE

93.          a  :=  ’Page 407’  の場合,次が成立する。

                                            a LIKE ‘$*’            --> TRUE

12.3  2

進演算子  12.2.1.2 で定義した関係演算子に加えて,更に二つの演算子を 2 進データ型に対して定

義する。

すなわち,  [  ]  で表す添字 (index) 演算子及び+で表す連結 (concatenation) 演算子である。

12.3.1  2

進添字  2 進添字演算子は,添字付けされる 2 進値及び添字指定の二つの被演算子をとり,長さ

(index_2

  −  index1  +  1)  の 2 進値に評価される。結果の 2 進値は,index_1index_2 のビット列に

等しい。長さ 1 の 2 進値が必要なときは,index_1 だけを指定する。添字値の 1 は,最左端のビット位置

を指定する。

構文:

226

  index_qualifier= ‘[‘ index_1 [ ‘:’ index_2 ] ‘]’ .

224

  index_1 = index

223

  index = numeric expression .

225

  index_2 = index  .

規則及び制約:

(a)  index_1

は,正の整数値に評価されなければならない。

(b)  1

index_1

BLENGTH

(対象の 2 進値)とする。その範囲になければ,式は,不定“?”に評価され

る。

(c)  index_2

を指定する場合,それは正の整数値に評価されなければならない。

(d)  index_1

index_2

BLENGTH

(対象の 2 進値)とする。その範囲になければ,式は,不定“?”に評

価される。

94.  image と呼ばれる2進数の4番目のビットは,次のように調べることができる。

              image := %01010101

              IF image[4]=%1 THEN ...-- TRUE  に評価

              IF image[4:4]=%1 THEN ... -- 上と等価な式

95.  image と呼ばれる2進数の4番目から10番目までのビットは,次のように調べることができる。

              IF image[4:10]=%1011110 THEN ...

12.3.2  2

進連結演算子  2 進連結演算子  (+)  は,二つの 2 進値を一つに結合する 2 進演算子とする。被

演算子は,両方とも 2 進値に評価されなければならない。式は,最初の被演算子が左側に現れるようにし

て,二つの被演算子を連結したものからなる 2 進値に評価される。

96.  2進値は,次のように連結してよい。


77

B 3700-11-1996 (ISO 10303-11 : 1994)

image :

= %101000101 + %101001  ;

(

* image  は,2 進値  %101000101101001  をもつ。*)

12.4

論理演算子  論理演算子は,NOTANDOR 及び XOR からなる。それぞれの演算子は,論理型

の結果を生じる。ANDOR 又は XOR の演算子は二つの論理型の被演算子をとり,NOT 演算子は一つの

論理型の被演算子をとる。

12.4.1  NOT

演算子  NOT 演算子は,一つの論理型の被演算子を(NOT 演算子の右側に)とり,表 12 

示す論理値に評価する。

表 12  NOT 演算子

被演算子の値

結果の値

TRUE FALSE

UNKNOWN

UNKNOWN

FALSE TRUE

12.4.2  AND

演算子  AND 演算子は,二つの論理型の被演算子をとり,表 13 に示す論理値に評価する。

AND

演算子は,可換とする。

12.4.3  OR

演算子  OR 演算子は,二つの論理型の被演算子をとり,表 14 に示す論理値に評価する。OR

演算子は,可換とする。

12.4.4  XOR

演算子  XOR 演算子は,二つの論理型の被演算子をとり,表 15 に示す論理値に評価する。

XOR

演算子は,可換とする。

12.5

文字列演算子  12.2.1.4 及び 12.2.5 で定義した関係演算子に加えて,STRING 型に対して,更に二つ

の演算子を定義する。すなわち,  [  ]  で表す添字演算子及び+で表す連結演算子である。

12.5.1 

文字列添字  文字列添字演算子は,添字付けされている文字列値及び添字指定の二つの被演算子を

とり,長さ  (index_2 

 index_1   1)  の文字列値に評価する。結果の文字列値は,index_1index_2 

文字の列に等しい。長さ 1 の文字列値が必要なときは,index_1 だけを指定する。添字値の 1 は,最左端

の文字の位置を指定する。

構文:

226

  index_qualifier = ‘[‘ index_1 [ ‘:’ index_2 ] ‘]’ .

224

  index_1 = index  .

223

  index = numeric_expression  .

225

  index_2 = index  .

規則及び制約:

(a)  index_1

は,正の整数値に評価されなければならない。


78

B 3700-11-1996 (ISO 10303-11 : 1994)

表 13  AND 演算子

被演算子 1 の値 被演算子 2 の値

結果の値

TRUE TRUE

TRUE

TRUE UNKNOWN

UNKNOWN

TRUE FALSE

FALSE

UNKNOWN TRUE

UNKNOWN

UNKNOWN UNKNOWN

UNKNOWN

UNKNOWN FALSE  FALSE

FALSE TRUE

FALSE

FALSE UNKNOWN

FALSE

FALSE FALSE

FALSE

表 14  OR 演算子

被演算子 1 の値 被演算子 2 の値

結果の値

TRUE TRUE

TRUE

TRUE UNKNOWN

TRUE

TRUE FALSE

TRUE

UNKNOWN TRUE  TRUE

UNKNOWN UNKNOWN

UNKNOWN

UNKNOWN FALSE

UNKNOWN

FALSE TRUE TRUE

FALSE UNKNOWN

UNKNOWN

FALSE FALSE FLSE

(b)  1

index_1

LENGTH

(対象の文字列値)とする。その範囲になければ,式は,不定“?”に評価さ

れる。

(c)  index_2

を指定する場合,それは正の整数値に評価されなければならない。

(d)  index_1

index_2

LENGTH

(対象の文字列値)とする。その範囲になければ,式は,不定“?”に

評価される。

表 15  XOR 演算子 

被演算子 1 の値 被演算子 2 の値

結果の値

TRUE TRUE

FALSE

TRUE UNKNOWN

UNKNOWN

TRUE FALSE

TRUE

UNKNOWN TRUE

UNKNOWN

UNKNOWN UNKNOWN

UNKNOWN

UNKNOWN FALSE

UNKNOWN

FALSE TRUE TRUE

FALSE UNKNOWN

UNKNOWN

FALSE FALSE

FALSE

97.  name と呼ばれる文字列の7番目の文字は,次のように調べることができる。


79

B 3700-11-1996 (ISO 10303-11 : 1994)

              IF name[7]="00000053" THEN ... --  JIS X 0221 の表現を仮定

              IF name[7:7]="00000053" THEN ... --  上と等価な式

98.  name と呼ばれる文字列の7番目から10番目までの文字は,次のように調べることができる。

              IF name[7:10]=‘Some’ THEN ...

12.5.2

文字列連結演算子  文字列連結演算子  (+)  は,二つの文字列を一つに結合する文字列演算子とす

る。被演算子は,両方とも文字列値に評価されなければならない。式は,最初の被演算子が左側に現れる

ようにして,二つの被演算子を連結したものからなる文字列値に評価される。

99.  文字列値は,次のように連結してよい。

          name := ‘ABC’ + ‘  ’ + ‘DEF’  ;

          (* name は,文字列値’ABC DEF’をもつ。  *)

12.6

集合体演算子  集合体演算子 (aggregate operator) は,添字 ([  ])  ,積  (*)  ,和  (+)  ,差  (−)  ,

部分集合 (<=)  ,超集合 (>=)  及び QUERY とする。これらの演算子は,ここで定義する。12.2 で定義

した関係演算子の等価  (=)  ,非等価 (<>) ,インスタンス等価 (:=:)  ,インスタンス非等価 (:<>:) 及び

帰属  (IN)  も,すべての集合体値に適用できる。

備考  集合体演算子の中には,集合体内に含まれる要素の暗黙の比較を必要とするものがある。その

すべての場合において,インスタンス比較を使用しなければならない。

12.6.1

集合体添字  集合体添字演算子は,添字付けされる集合体値及び添字指定の二つの被演算子をとり,

集合体から取り出された一つの要素に評価する。選ばれた要素のデータ型は,添字付けされる集合体値の

基本型とする。

構文:

226

  index_qualifier = ‘[’  index_1[ ‘:’ index_2 ] ‘]’ .

224

  index_1 = index  .

223

  index = numeric_expression  .

225

  index_2 = index  .

規則及び制約:

(a)

集合体添字演算子では index_2 は,指定してはならない。それは,集合体値の一つの要素だけを指定

するからである。

(b)  index_1

は,整数値に評価されなければならない。

(c)  LOINDEX

(対象の集合体値)

index_1 

HIINDEX

(対象の集合体値)とする。その範囲になけれ

ば,式は,不定“?”に評価される。

(d)

集合体値の型が ARRAY 又は LIST ならば,式は,集合体値中の index_1 で示される位置の要素に評

価される。

(e)

集合体値の型が BAG 又は SET ならば,LOINDEX(集合体値)と HIINDEX(集合体値)との間の各

index_1

に対して,式は,それぞれ集合体値の異なった要素に評価される。

(f)

同じ集合体値の同じ index_1 による集合体添字付けを繰り返し用いた場合は,集合体値が修正されな

い限り,同じ要素を戻す。集合体データ型の BAG 又は SET において,集合体値が修正された場合,

修正された集合体値の添字付けの結果は,予測できない。

100. 多重集合及び集合の添字付けは,集合体値内のすべての値を繰り返し用いるのに利用してよい。

          a_set : SET [1:20] OF INTEGER;


80

B 3700-11-1996 (ISO 10303-11 : 1994)

          result : INTEGER;

          result := 1  ;

          REPEAT FOR index := LOINDEX (a_set) TO HIINDEX (a_set) ;

             result  := result * a_set  [index];

           END_REPEAT  ;

            REPEAT 文の出口で,result は,a_set の中のすべての整数の積の値をもっている。

12.6.2

積演算子  積演算子  (*)  は,二つの集合体値の被演算子をとり,集合体値に評価する。許される

被演算子の型及び対応する結果の型を,

表 16 に示す。結果の集合体値は,から不定“?”までの上下限

をもち,

表 16 で指定された型の集合体として,暗黙に宣言される。被演算子の基本データ型は,整合する

ものでなければならない(12.11 参照)

。二つの被演算子の積が要素を含まないならば,結果の集合体値の

大きさは,ゼロ(0)になる。

被演算子のどちらかが集合ならば,結果は,被演算子の両方に帰属するそれぞれの要素を含む集合とな

る。

両方の被演算子が多重集合で,特定の要素 が一方には 回帰属し,他方には 回  (m

n)

帰属するな

らば,結果には が 回帰属する。

表 16  積演算子−被演算子及び結果の値

1

番目の被演算子 2 番目の被演算子 結果

Bag Bag

Bag

Bag Set

Set

Set Set

Set

Set Bag

Set

12.6.3

和演算子  和演算子  (+)  は,集合体値を含む二つの被演算子をとり,集合体値に評価する。許さ

れる被演算子の型及び対応する結果の型を,

表 17 に示す。和演算子は,被演算子の型及びそれらの並び方

に従って,次のとおりに定義される。

−  一方の被演算子 の型が他方の被演算子 の基本型に整合している場合,次のとおり を 

加える。

・  が集合値の場合,E IN A でないときに限り,結果の集合は,に を加えたものとする。

・  がリスト値の場合,が第 1 被演算子であるとき,結果のリストは の 1 番目の位置に

E

を加えたものとし,が第 2 被演算子であるとき,結果のリストは の SIZEOF (A) +

1

番目の位置に を加えたものとする。

備考  結果のリストは,リストの被演算子が LIST OF UNIQUE と宣言されていた場合でも,重複す

る要素を含んでよい。

・  が多重集合値である場合,結果の多重集合は,に を加えたものとする。

−  両方の被演算子が整合するリストの場合,結果のリストは,第 1 被演算子の最後に第 2 被演算子

を付けたものとする。

備考  結果のリストは,両方の被演算子が LIST OF UNIQUE と宣言されていた場合でも,重複する

要素を含んでよい。

−  第 1 被演算子が集合値の場合,結果の集合は,次のとおり作られる。すなわち,最初は第 1 被演

算子を結果の集合とし,次にその集合に帰属しない第 2 被演算子の各要素を,順次その結果の集

合に加えていったものとする。


81

B 3700-11-1996 (ISO 10303-11 : 1994)

−  第 1 被演算子が多重集合値の場合,結果は,第 1 被演算子に第 2 被演算子のすべての要素を加え

たものとする。

表 17  和演算子−被演算子及び結果の型

1

番目の被演算子 2 番目の被演算子

結果

Bag Bag Bag

Bag Element Bag

Element Bag  Bag

Bag Set Bag

Bag List Bag

Set Set Set

Set Element Set

Element Set

Set

Set Bag Set

Set List Set

List List

List(

1

)

Element List  List(

2

)

List Element

List(

3

)

(

1

)  2

番目のリストの最初の要素は最初のリストの最

後の要素の後に続く。

(

2

)

新しい要素は,結果として生じるリストの 1 番目
のものとなる。

(

3

)

新しい要素は,結果として生じるリストの最後の

ものとなる。

12.6.4

差演算子  差演算子  (−)  は二つの演算子をとり,その第 1 被演算子が集合体値でなければならな

い。この差演算子は・集合体値に評価する。許される被演算子の型及び対応する結果の型を,

表 18 に示す。

結果の集合体値は,

第 1 被演算子の要素の中から第 2 被演算子の要素を取り除いたものとする。

すなわち,

第 1 被演算子に帰属する第 2 被演算子の各要素を,第 1 被演算子から取り除いたものとする。結果の集合

体値は,0 から不定“?”までの上下限をもち,

表 18 に示す型の集合体として,暗黙に宣言される。二つ

の被演算子の基本データ型は,整合していなければならない(12.11 参照)

。戻される集合体のデータ型は,

第 1 被演算子のものと同じになる。

両方の被演算子が多重集合で,

要素 が第 1 被演算子中に 回帰属し,

第 2 被演算子中に 回帰属した場合,が より大きいとき,は結果に m回帰属し,が 以下のと

き,は結果に帰属しない。第 2 被演算子が第 1 被演算子中にない要素を含んでいる場合,これらの要素

は,無視され,結果の集合体値の一部にはならない。

表 18  差演算子−被演算子及び結果の型

1

番目の被演算子 2 番目の被演算子 結果

Bag Bag

Bag

Bag Set

Bag

Bag Element

Bag

Set Set

Set

Set Bag

Set

Set Element

Set

101. が整数の多重集合  [1213]  の場合,次のものは,  [123]  と評価され,これは  [2

1

3]  と等価とする。

          A  −  1


82

B 3700-11-1996 (ISO 10303-11 : 1994)

12.6.5

部分集合演算子  部分集合演算子 (<=)  は,表 19 に定義する二つの被演算子をとり,LOGICAL

に評価する。

第 1 被演算子中に 回帰属する任意の要素 e に関して,が第 2 被演算子中に少なくとも 回帰属する

場合にだけ,式は,TRUE に評価される。どちらかの被演算子が不定“?”のとき,式は UNKNOWN に評価

される。このどちらでもない場合には,FALSE と評価される。

二つの被演算子は,整合する型でなければならない(12.11 参照)

12.6.6

超集合演算子  超集合演算子 (>=)  は,表 19 に定義する二つの被演算子をとり,LOGICAL に評

価する。

第 2 被演算子中に 回帰属する任意の要素 e に関して,が第 1 被演算子中に少なくとも 回帰属する

場合にだけ,式は,TRUE に評価される。どちらかの被演算子が不定“?”のとき,式は UNKNOWN に評価

される。このどちらでもない場合には,FALSE に評価される。

表 19  部分集合及び超集合演算子−被演算子の型

1

番目の被演算子 2 番目の被演算子

Bag Bag

Bag Set

Set Bag

Set Set

二つの被演算子は,整合する型でなければならない(12.11 参照)

b

  >=  a は,a  <=  b と厳密に等しくなければならない。

12.6.7  Query

式  QUERY 式は,集合体値の各要素に対してそれぞれ論理式  (logical_expression)  を適用し,

logica_expression

が TRUE であると評価される要素からなる集合体値に評価される。これは,元となる集

合体値の部分集合を生成する効果をもつ。この部分集合は,すべての要素が論理式で表された条件を満た

したものからなる。

構文:

264

  query_expression = QUERY ‘(’ variable_id ‘<*’ aggregate_source ‘ | ’

                             logical_expression ‘)’ .

160

  aggregate_source = simple expression .

241

  logical_expression = expression  .

規則及び制約:

(a)  variable_id

は,その QUERY 式の有効範囲内で変数として暗黙に宣言される。

備考  この変数は,他の場所で宣言する必要がなく,かつ式の外側では有効でない。

(b)  aggregate_source

は,集合体値(ARRAYBAGLIST 又は SET)に評価されなければならない。

(c)  3

番目の被演算子  (logical_expression)  は,LOGICAL の結果に評価される式でなければならない。

要素は元となる集合体から一つずつ取り出され,

logical_expression

中の variable_id に置き換わる。

次に,

logica1_expression

が評価される。logical_expression が TRUE に評価されたとき,その要素は,結果に加

えられる。そうでないときは,加えられない。これは,元となる集合体のすべての要素に対して繰り返さ

れる。結果の集合体値は,元となる集合体データ型の種類に従って,次のとおり生成される。


83

B 3700-11-1996 (ISO 10303-11 : 1994)

配列

結果の配列は元となる配列と同じ基本型及び上下限をもつが,配列要素は OPTIONAL とする。

各要素は,最初は不定“?”とする。次に,元となる配列中で,logical_expression が TRUE 

評価される要素が,結果の中の対応する添字の位置に置かれる。

多重集合  結果の多重集合は,元となる多重集合と同じ基本型及び上限をもつ。その下限は,ゼロとする。

結果の多重集合は,最初は空とする。次に,元となる多重集合中で,logical_expression が TRUE

と評価される要素が,結果に加えられる。

リスト

結果のリストは,元となるリストと同じ基本型及び上限をもつ。その下限は,ゼロとする。結

果のリストは,最初は空とする。次に,元となるリスト中で,logical_expression が TRUE と評

価される要素が,結果の最後に加えられる。元となるリスト中での順序は,保存される。

集合

結果の集合は,元となる集合と同じ基本型及び上限をもつ。その下限は,ゼロとする。結果の

集合は,最初は空とする。次に,元となる集合中で,logical_expression が TRUE と評価される

要素が,結果に加えられる。

102. colour は,その基底型が pink 及び scarlet を含む ENUMERATION をもつ定義型とする。次の

ようにして,配列 colours から pink か又は scarlet かを取り出すことができる。

          LOCAL

           colours : ARRAY OF colour;

           reds     :  ARRAY  OF  OPTIONAL  colour;

          END_LOCAL;

          .

          reds := QUE]RY ( element < * colours | ( element = pink ) OR

                                                         (  element = scarlet ) ) ;

          .

103. 次の規則は,エンティティ型 point のすべてのインスタンスを検査するために,QUERY 式を用

いている。結果として生じる集合は,原点に位置する point のすべてのインスタンスを含む。

          RULE two_points_at_origin FOR (point) ;

          WHERE

           SIZEOF (QUERY (temp <* point | temp = point(0.0, 0.0, 0.0))) = 2;

          END_RULE;

この例は,三つの暗黙の宣言を使用している。最初のものは,規則の頭部で,point 型のすべ

てのインスタンスの集合として暗黙に宣言された変数 point である。2 番目のものは,QUERY

式の評価中に,集合体値 point の要素を次々にとる変数 temp である。3 番目のものは,エンテ

ィティ宣言から生じる構成子関数 point である。

12.7

引用  局所的有効範囲で可視である項目を局所的に使用するときは,項目は,その項目に宣言され

た識別子によって引用しなければならない。

12.7.1

単純引用  単純引用は,単に,注目の有効範囲中で項目に与えた名前(識別子)とする。

この方法で引用できる項目は,次のとおりとする。

−  エンティティ宣言内での属性*

−  定数*

−  列挙型の要素*

−  エンティティ**


84

B 3700-11-1996 (ISO 10303-11 : 1994)

−  関数*

−  アルゴリズムの本体内の局所変数*

−  アルゴリズムの本体内の引き数*

−  手続

−  規則

−  インタフェース仕様内のスキーマ

−  型

*

この項目は,式中で,単純引用によって引用してよい。

**

エンティティの名前は,構成子(9.2.5 参照)としてか,又は規則中(9.6 参照)の局所変数と

して引用してよい。

104. 正しい単純引用

            line    (*  エンティティ型  *)

            Circle (*  エンティティ型  *)

            RED     (*  列挙項目  *)

            z_depth(*  属性  *)

12.7.2

前置引用  同じ有効範囲内で可視である二つ以上の定義データ型中で,列挙項目に同じ名前が宣言

されている場合(10.参照),列挙項目名は,それを一意に識別するため,その定義データ型への識別子を

その名前の前に付けなければならない。前置引用は,定義データ型名,ピリオド (.) 及び列挙項目名を,

この順序で並べたものとする。

105. 次の例は,列挙項目 red を stop_signal として使うために一意に識別する方法を示す。

        TYPE traffic_light = ENUMERATION OF (red, amber, green);

        END_TYPE;

        TYPE rainbow = ENUMERATION  OF

                          (red, orange, yellow, green, blue, indigo, violet);

        END_TYPE;

        stop_signal : taraffic_light :=trafic_light.red;

        ink_colour : rainbow := blue;

12.7.3

属性引用  属性引用は,エンティティインスタンス内の一つの属性を引用できるようにする。属性

引用の左の式は,エンティティインスタンス又は部分複合エンティティ値に評価されなければならない。

引用する属性の識別子は,ピリオド(.)の後に続けて指定する。

構文:

169

  attribute_qualifier  =  ‘.’ attribute_ref .

属性引用を式の中で使うと,エンティティインスタンス又は部分複合エンティティ値の中の指定した属

性の値が戻される。指定した属性が,エンティティインスタンス又は部分複合エンティティ値の中にない

ときは,不定“?”が戻される。

属性引用を代入文の左辺として又は手続中の VAR 引き数として使うと,そのエンティティインスタン

スの属性に値が入れられる。代入文で指定した属性がエンティティインスタンス中になかったとき,結果

は予測できない。

106. 次の例で属性引用の使い方を示す。


85

B 3700-11-1996 (ISO 10303-11 : 1994)

        ENTITY point;

         x, y, z, : REAL;

        END_ENTITY;

        ENTITY coloured_point

        SUBTYPE OF (point) ;

         colour : colour;

        END_ENTITY;

        .

        PROCEDURE foo;

        LOCAL

         first : point := point (1.0,2.0,3.0) | | coloured_point (red) ;

          second : coloured_point :=  point(1.0,2.0,3.0) | | coloured_point (red) ;

         x_coord : REAL;

        END_LOOAL;

        .

        x_coord := first.x;             --  値 1.0 になる。

        IF first. colour = red  THEN   --  colour は,first を宣言した型の属性では

                                            --  ないので,正しくない引用である。

        IF second. colour = red  THEN  --  colour は正しい引用なので、TRUE になる。

12.7.4

グループ引用  グループ引用は,複合エンティティインスタンス内の部分複合エンティティ値を引

用できるようにする。グループ引用の左の式は,複合エンティティインスタンスに評価されなければなら

ない。引用する部分複合エンティティ値のエンティティデータ型は,逆斜線  (\)  の後に続けて指定する。

構文:

219

  group_qualifier = ‘\’ entity_ref .

グループ引用は,式の中で使うとき,引用する複合エンティティインスタンス中で,名前が指定された

エンティティデータ型に対する部分複合エンティティ値を戻す。指定したエンティティデータ型が,引用

する複合エンティティインスタンス中にないときは,不定“?”を戻す。グループ引用は,更に属性引用で

修飾してよい。この使い方では,グループ引用は,属性引用の有効範囲を指定する。

備考  この使い方が要求されるのは,複合エンティティインスタンスが同じ名前の属性を複数もつと

き,又は選択データ型が同じ名前の属性をもつ複数のエンティティを含むときとする。

規則及び制約:

属性引用で修飾されていないグループ引用は,エンティティ値比較演算子  (=)  か又は複合エンティテ

ィインスタンス構成子 (| |) かの被演算子として現れる。

107. この例で値比較に対するグループ引用の使い方を示す。

          ENTITY E1

          ABSTRACT SUPERTYPE;

           attrib1 : REAL;

           attrib2 : REAL;

           attrib3 : REAL;


86

B 3700-11-1996 (ISO 10303-11 : 1994)

          END_ENTITY;

          ENTITY E2

          SUBTYPE OF (E1) ;

           attribA : INTEGER;

           attribB : INTEGER;

           attribC : INTEGER;

          END_ENTITY;

          LOCAL

           a : E1;

           b : E2;

          END_LOCAL;

           --  複合エンティティインスタンス構成演算子を使って,

           --  a 及び b の複合インスタンスを作る。

          a := E1 (0.0, 1.0, 2.0) | | E2 (1, 2, 3) ;

          b := E1 (0.0, 1.0, 2.0) | | E2 (3, 2, 1) ;

           --  a 及び b において,E1 で宣言された属性について,

           --  その値を調べる。

          a\El = b\E1 -- TRUE :

          (*

          これは,次と等価である。

                (a.attrib1 = b.attrib1)  AND

                (a.attrib2 = b.attrib2)  AND

                (a.attrib3 = b.attrib3)

          *)

108. この例では,属性名に対し見たいエンティティデータ型をグループ引用を使って指定する方法

を示す。

          ENTITY foo1;

           attr : REAL;

          END_ENTITY;

          ENTITY foo2

           SUBTYPE OF (foo1);

           attr2 : BOOLEAN;

          END_ENTITY;

          TYPE t = BINARY (80) FIXED

          END_TYPE;

          TYPE crazy=SELECT (foo2, t);

          END_TYPE;

          .

          LOCAL

           v : crazy;


87

B 3700-11-1996 (ISO 10303-11 : 1994)

          END_LOCAL;

          .

          IF ‘THIS.FOO2’ IN TYPEOF(V) THEN     --  これは予測できない結果が生じない

                                                      --  ようにする(ガードと呼ぶことが

                                                      --  ある。

             v\foo1. attr := 1.5;                --  の属性 attr に 1.5 を代入する。

           --  attr は,foo1 で定義しているので,

           --  引用は,foo1 を使わなければならない。

          END_IF;

12.8

関数呼出し  関数呼出しは,関数を呼び出す。それは,関数識別子の後に,多くの場合,実引き数

の並びが続いたものからなる。実引き数の個数,型及び順序は,その関数に対して定義されている仮引き

数に一致しなければならない。

関数呼出し式は,

その実引き数が関数宣言中の仮引き数に置き換えられて,

関数の戻り値に評価される。

関数呼出しは,インスタンスの領域を広げる。関数の評価中に作られたインスタンスは,既知のインス

タンスの集団全体を通して,一意に識別可能となる。通常,そのようにして作られたインスタンスは,呼

出し側では未知とし,考慮中のインスタンス集団の一部とはならない。この規則の例外は,そのようなイ

ンスタンスが関数呼出しの結果として戻る時とする。この場合,そのインスタンスは,呼出し点に戻って

も既知とする。この方法で,インスタンスをスキーマレベル(誘導属性又は定数の値として)に戻すなら

ば,インスタンスは考慮中の集団の一部として考える。

構文:

207

  function_call = ( bullt_in_function | function_ref ) [ actual_parameter_list ] .

157

  actual_parameter_list = ‘(‘ parameter { ‘,’ parameter } ‘)’ .

251

  parameter = expression  .

規則及び制約:

渡される実引き数は,仮引き数に代入可能でなければならない。

109. 関数呼出しの使い方の例

          ENTITY point;

           x, y, z : number;

          END_ENTITY;

          FUNCTION midpoint_of_line (1 : line) : point;

          .

          END_FUNCTION;

          IF midpomt_of_Ime (L506) .x = 9.0  THEN .

                                  --  関数の結果に,属性引用を直接使う。

          END_IF;


88

B 3700-11-1996 (ISO 10303-11 : 1994)

12.9

集合体初期化式  集合体初期化式は,配列,多重集合,リスト又は集合の値を設定するために使用

する。角括弧はゼロ個以上の式を囲み,それらの式は集合体の基本データ型に整合する値に評価される。

二つ以上の値があるときは,コンマでそれらを分ける。要素の値が欠けている配列は,欠けている値を表

すために,不定“?”を使って初期化してもよい。集合体初期化式は,要素として指定された値を含む集合

体値に評価される。初期化される要素の個数は,その集合体のデータ型に対して指定された上下限と合っ

ていなければならない。

要素をもたない集合体初期化式を使うとき,それは空の多重集合,リスト又は集合を作る(空配列を作

ることはできない。

構文:

159

  aggregate_initializer = ‘[’ [ element { ‘,’ element } ] ‘]’ .

195

  element = expression [ ‘:’ repetition ] .

273

  repetition = numeric_expression  .

110. 次の宣言が与えられているものとする。

              a : SET OF INTEGER;

値は,次のように指定できる。

              a := [ 1, 3, 6, 9*8, -12 ] ; -- 9*8 は式であり,その値は 72 である。

幾つかの連続した値が同じときは,繰返しを適用してもよい。これは,コロン (:) 文字で分けられた二

つの式で表現される。コロンの左にある式は,繰り返される値とする。コロンの右にある式 repetition は,

左辺の値が繰り返される回数を与える。この式は,負でない整数値に評価されなければならず,かつ初期

化前に一度評価される。

111. 次の宣言が与えられたとき,

          a : BAG OF BOOLEAN ;

次の二つの文は,等価である。

          a := [ TRUE:5 ] ;

          a := [ TRUE, TRUE, TRUE, TRUE, TRUE ] ;

12.10

複合エンティティインスタンス構成演算子  複合エンティティインスタンス構成演算子 (| |) は,部

分複合エンティティ値を結合することによって複合エンティティのインスタンスを構成する。部分複合エ

ンティティ値は,任意の順序で結合してよい。複合エンティティインスタンス構成演算子式は,部分複合

エンティティ値か又は複合エンティティインスタンスに評価される。部分複合エンティティデータ型は,

エンティティインスタンス構成演算子式の一つのレベルに一度だけ現れてもよい。部分複合エンティティ

値は,次のように入れ子になっている場合は,異なったレベルで現れてもよい。すなわち,部分複合エン

ティティ値 (X) が複合エンティティインスタンス (Y) を作るのに使われており,X が Y を属性値として

使う場合とする。部分複合エンティティ値に関する追加の情報を

附属書 B(規定)に示す。

112. ENTITY a

          ABSTRAOT SUPERTYPE;

           a1 : INTEGER;

          END_ENTITY;

          ENTITY b SUBTYPE OF (a) ;

           b1 : STRING;


89

B 3700-11-1996 (ISO 10303-11 : 1994)

          END_ENTITY;

          ENTITY c SUBTYPE OF (a) ;

           c1 : REAL;

          END_ENTITY;

          このとき,次の複合エンティティインスタンスを作ってもよい。

          LOCAL

           v1 : a ;

           v2 : c ;

          END_LOCAL;

           v2  :=a (2) | |  c (7.998e-5);    --  これは,型 a&c

           v1  :=v2  |  |  b  (‘abc’);          --  これは,型 a&b&c

           v1  :=v2\a  |  |  b  ("00002639");  --  これは,型 a&b

           v1  :=v1  |  |  v2;                   --  これは,型 a&b&a&c になるので,

                                                  --  正しくない。

12.11

型の整合性  演算子の被演算子は,その演算子が必要とするデータ型と整合 (compatible) していな

ければならない。ある演算子の両方の被演算子のデータ型は,既に示したとおり互いに整合していなけれ

ばならない。データ型は,同一でなくても整合してよい。データ型は,次の条件の一つが成立する場合,

整合する。

−  デ−タ型が同じ場合。

−  一方のデータ型が他方の下位型又は特定化である場合(定義データ型を基底データ型として利用

する定義データ型を含む。

−  両方のデータ型が,整合する基本データ型の配列データ型であって,同一の上下限をもつ場合。

−  両方のデータ型が整合する基本データ型をもつリストデータ型の場合。

−  両方のデータ型が整合する基本データ型をもつ多重集合又は集合のデータ型の場合。

113. 次の定義を与える。

              TYPE natural = REAL;

              WHERE SELF >= 0.0;

              END_TYPE;

              TYPE positive = natural;

              WHERE SELF > 0.0;

              END_TYPE;

              TYPE bag_of_natural = BAG OF natural;

              END_TYPE;

              TYPE set_of_up_to_five_positive = SET [0:5] OF posrtrve ;

              END_TYPE;

次に,整合するデータ型を示す。


90

B 3700-11-1996 (ISO 10303-11 : 1994)

与えられたデータ型

整合するデータ型

REAL

INTEGER, REAL, NUMBER, natural, positive

natural

REAL, NUMBER, natural, positive

positive

REAL, NUMBER, natural, positive

bag_of _natural

BAG

OF

REAL,

                               BAG OF NUMBER,

BAG OF natural, BAG OF positive, SET OF REAL,

SET OF NUMBER, SET OF natural, SET OF positive,

bag_of_natural, set_of_up_to_five_positive

set_of_up_to_five_positive BAG

OF

REAL,

                               BAG OF NUMBER,

BAG OF natural, BAG OF positive, SET OF REAL,

SET OF NUMBER, SET OF natural, SET OF positive,

bag_of_natural, set_of_up_to_five_positive

13.

実行文  実行文 (executable statement,stmt)  は,関数 (function) ,手続 (procedure) 及び規則 (rule) の

動作を定義する。これらの文は,FUNCTIONPROCEDURE 又は RULE の局所的な変数だけを使う。実

行文は,WHERE 句及び RULE で制約を定義するのに必要な論理及び動作を定義するために使用する。実

行文は,5.で定義された定義域内のエンティティインスタンスには影響を及ぼさない。実行文は,空文,

ALIAS

文,代入文,GASE 文,複合文,ESCAPE 文,IF 文,手続呼出し文,REPEAT 文,RETURN 文及

び SKIP 文とする。

構文:

291

  stmt = alias_stmt | assignment_stmt | case_stmt | compound_stmt | escape_stmt |

              if_stmt | null_stmt | procedure_call_stmt | repeat_stmt | return_stmt |

              skip_stmt .

実行文は,FUNCTION,PROCEDURE 又は RULE の中にだけ現れることができる。

13.1

空文  セミコロンだけからなる実行文は,空文 (null statement,null_stmt)  と呼ぶ。空文を実行して

も,いかなる動作も起こらない。

構文:

247

  null stmt = ‘;’  .

114. 次は,空文の考えられる使用例である。

          IF a = 13  THEN

           ;  -- これが空文

          ELSE

           b  := 5  ;

          END_IF ;

13.2  Alias

文  ALIAS 文 (alias statement,alias_stmt)  は,修飾した変数及び引き数の名前を局所的に変え

るのに使う。


91

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

164

  alias_stmt = ALIAS variable id FOR general_ref { qualifier } ‘;’ stmt { stmt }

                    END ALIAS ‘;’ .

216

  general_ref = parameter_ref | variable_ref .

ALIAS

文の有効範囲内では,variable_id は,適切な型が付けられた変数として暗黙に宣言される。この

変数は,キーワード FOR に続く修飾された識別子によって参照される値をもつ。

備考  variable_id の可視性の規則は,10.3.1 による。

115. 属性の x,y 及び z をもったエンティティデータ型 point がある場合,ALIAS は,関数

calculate_length

の中で,RETURN 文中の式の長さを短くするために使ってもよい。

          ENTITY line;

           start_point,

           end_point  :  point;

          END_ENTITY;

          FUNCTION calculate_length (the_line : line) : real;

          ALIAS s FOR the_line.start_point;

           ALIAS e FOR the_line.end_point;

            RETURN (SQRT ((s.x - e.x)**2 + (s.y - e.y)**2 + (s.z - e.z)**2)) ;

           END_ALIAS;

          END_ALIAS;

          END_FUNCTION

13.3

代入文  代入文 (assignment statement,assignment_stmt)  は,局所変数又は引き数にインスタンスを

代入するために使用する。変数に代入される値のデータ型は,変数又は引き数に代入可能でなければなら

ない。

備考  代入文は,二つの局所変数が同じエンティティインスタンスであることを指定するのに使える。

構文:

166

  assignment_stmt = general_ref { qualifier } ‘:=’ expression ‘;’

216

  general_ref = parameter_ref | variable_ref .

116. 次は,正しい代入である。

          LOCAL

           a, b : REAL ;

           p     :  point;

          END_LOOAL ;

           .

           a  := 1.1  ;

           b  := 2.5 * a;

           p.x  := b  ;

代入可能性  代入される変数又は引き数のデータ型及び式の結果のデータ型は,次のいずれかがなり立つ

場合,代入可能とする。

−  型が同じ場合。


92

B 3700-11-1996 (ISO 10303-11 : 1994)

−  式が代入される変数に対して宣言された型の下位型又は特定化である場合。

−  代入を受ける変数が定義データ型として宣言されており,その本来の型が選択データ型であり,

かつ代入する式の値がその選択型の選択リスト中の一つ以上の型に代入可能である場合。

ただし,定義データ型の本来の型は,その基底データ型の本来の型とする。定義データ型以外

では,その型自身を本来の型とする。

−  変数が定義データ型によって表され,その本来の型が単純データ型であり,かつ代入する式の値

がその単純データ型となる場合。

−  変数が集合体データ型によって表され,代入する式が集合体初期化式である場合。ただし,その

式に要素がある場合,それらは,集合体データ型の基本型に代入可能とする。

正当な複合エンティティインスタンス[

附属書 B(規定)参照]ではない部分複合エンティティ値は,

引き数又は変数に代入することができず,実引き数として関数又は手続に渡すこともできない。これは,

正当な複合エンティティインスタンスの代入を制限しない。

13.4  Case

文  CASE 文 (case statement,case_stmt)  は,式の値に基づいて文を選択的に実行する機構とす

る。文は,CASE 選択子  (selector)  の値を判断基準として実行される。CASE 文は,CASE 選択子である式

と,先頭に一つ以上の CASE ラベル  (case_label)  の式をもつ選択動作の並びとからなる。CASE ラベルを

評価した型は,CASE 選択子の型に整合しなければならない。CASF 選択子と同じ値に評価される CASE

ラベルをもつ最初の文が実行される。高々一つの CASE 動作  (case_action)  が実行される。CASE ラベルの

値がどの CASE 選択子の値とも同じにならなかった場合は,次のとおりとなる。

−  OTHERWISE 句が存在するならば,それに伴う文が実行される。

−  OTHERWISE 句が存在しないならば,CASE 動作に関するいずれの文も実行されない。

構文:

182

  case_stmt = CASE selector OF { case_action } [ OTHERWISE ‘;’ stmt ]

                     END_CASE ‘;’ .

283

  selector = expression  .

180

  case_action = case_label { ‘,’ case_label } ‘:’ stmt .

181

  case_label = expression  .

規則及び制約: 

CASE

ラベルを評価した値の型は,CASE 選択子を評価した値の型と整合していなければならない。

117. 整数の CASE ラベルを用いた簡単な CASE 文。

          LOCAL

           a : INTEGER ;

           x : REAL ;

          END_LOCAL ;

           .

          a := 3  ;

          x := 34.97  ;

          CASE a OF

           1      : x := SIN (x) ;

           2      : x := EXP (x) ;


93

B 3700-11-1996 (ISO 10303-11 : 1994)

           3      : x := SQRT (x) ;    --  これを実行!

           4,5    : x := LOG (x) ;

          OTHERWISE : x := 0.0  ;

          END_CASE ;

13.5

複合文  複合文  (compound statementcompound stmt)  は,BEGIN と END とによって囲まれた一

連の文とする。複合文は,一つの文として動作する。

備考  複合文は,新しい有効範囲を宣言しない。

構文:

183

  compound_stmt BEGIN_stmt { stmt } END ‘;’

118. 簡単な複合文。

          BEGIN

           a = a+1  ;

           IF a > 100 THEN

            a := 0  ;  ,

           END  IF;

          END ;

13.6  Escape

文  ESCAPE 文 (escape statement,escape_stmt)  は,それが現れている REPEAT 文の後に制

御を直接移動させる。

備考  これが繰返し制御による無限ループの REPEAT を終わらせる唯一の方法である。

構文:

202

  escape_stmt = ESCAPE  ‘;’ .

規則及び制約:

ESCAPE

文は,REPEAT 文の有効範囲内にだけ現れる。

119. a < 0の場合,ESCAPE 文は,END_REPEAT の次の文に制御を移す。

          REPEAT UNTIL (a=1);

           ...

           IF (a < 0) THEN

            ESCAPE;

           END_IF;

           ...

          END_REPEAT;

          --  ここに制御が移る。

13.7  If...Then...Else

文  IF...THEN...ELSE 文 (if...then...else statement,if_stmt)  は,LOGICAL の型の式に

基づいて,次に実行する文を選択できるようにする。logical_expression が TRUE と評価されたとき,THEN

に続く文が実行される。logical_expression が FALSE 又は UNKNOWN と評価され,かつ ELSE 句が存在

するとき,ELSE に続く文が実行される。logical_expression が FALSE 又は UNKNOWN と評価され,かつ

ELSE

句がないとき,制御は,次の文へ移る。


94

B 3700-11-1996 (ISO 10303-11 : 1994)

構文:

220

  if_stmt = IF logical_expressron THEN stmt { stmt } [ ELSE stmt { stmt } ]

                 END_IF ‘;’ .

241

  logical_expression = expression  .

120. 簡単な IF 文。

          IF a < 10 THEN

           c =: c + 1;

          ELSE

           c  := c - 1;

          END_IF;

13.8

手続呼出し文  手続呼出し文  (procedure call statement,procedure_call_stmt)  は,手続を呼び出す。

手続呼出しで与えられる実引き数は,個数,順序及び型においてその手続の仮引き数と合っていなければ

ならない。

構文:

257

  procedure_call_stmt = (built_in_procedure | procedure ref )

                                [ actual_parameter_list ] ‘;’ .

157

  actua_parameter_list = ‘(’ parameter { ‘,’ parameter } ‘)’ .

251

  parameter = expression  .

規則及び制約:

渡される実引き数は,仮引き数に代入可能でなければならない。

121. 組込み手続 INSERT の呼出し。

          INSERT (point_list, this_point, here ) ;

13.9  Repeat

文  REPEAT 文 (repeat statement,repeat_stmt)  は,一連の文の実行を条件付きで繰り返すた

めに使う。繰返しが始められるか又は繰返しが続けられるかは,制御条件を評価することによって決まる。

制御条件は,次のとおりとする。

−  有限回数の繰返し

−  条件が TRUE の間

−  条件が TRUE になるまで

構文:

272

  repeat_stmt = REPEAT repeat_control ‘;’ stmt { stmt } END_REPEAT ‘;’ .

271

  repeat_control =  [ increment_control ] [ while_control ] [ until_control ] .

222

  increment_control = variable_id ‘:=’ bound_1 TO bound_2 [ BY increment ] .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

221

  increment = numeric_expression  .

これらの制御は,繰返しを終わらせる条件を指定するために組み合わせて使用できる。

これらの条件は,繰返しを制御するために,次のとおりに評価される。

(a) REPEAT

文に入るときに増分制御  (increment_control)  があれば,13.9.1 に従ってそれが評価される。

(b) WHILE

制御  (while_control)  式があれば,それが評価される。結果が TRUE のとき(又は WHILE 制


95

B 3700-11-1996 (ISO 10303-11 : 1994)

御式がないとき)

,REPEAT 文の本体が実行される。結果が FALSE 又は UNKNOWN のとき,REPFAT

文の実行は,終了する。

(c) REPEAT

文の本体の実行が完了すると,UNTIL 制御  (until_control)  式が評価される。その結果の値が

TRUE

ならば,繰返しが止まり,REPEAT 文の実行が完了する。結果が FALSE 又は UNKNOWN であ

れば,REPEAT 文の制御は,増分制御に戻る。UNTIL 制御がないならば,REPEAT 文の制御は,増分

制御に戻る。

(d)

増分制御があれば,ループ変数の値は,increment の値ずつ増やされる。ループ変数が bound_1 

bound_2

との間(等しいときも含む。

)にある場合,制御は,上の(b)に移る。そうでない場合,REPEAT

文の実行は,終了する。

122. この例は,一つ以上の制御条件が REPEAT 文の中でどのように使われるかを示している。この

文は,望む許容誤差に達するか又は100回繰り返されるかの,いずれかが先に達成されるまで繰

り返される。

すなわち,解が十分に速く収束しないとき,繰返しは,止まってしまう。

                REPEAT i:=1 TO 100 UNTIL epsilon < 1. E-6;

                 ...

                 epsilon  := ...

                END_REPEAT;

13.9.1

増分制御  増分制御は,一連の連続する値の間で REPEAT 文の本体を実行するのに使う。

REPEAT

文に入る時,暗黙に宣言された数値型変数 variable_id に bound_1 の値が設定される。繰返し

をするたびに,variable_id の値は,variable_id

increment に設定される。increment が指定されていなけ

れば,1 が既定値として使われる。variable_id が bound_1 と bound_2 との間にあるならば

variable id

bound2

の場合も含む。

REPEAT 文の実行は,続く。

構文:

222

  increment_control = variable_id ‘:=’ bound_1 TO bound_2 [ BY increment ] .

174

  bound_1 = numeric_expression  .

175

  bound_2 = numeric_expression  .

221

  increment = numeric_expression  .

規則及び制約:

(a)  bound_1

bound_2 及び increment を表現する numeric_expression は,数値に評価されなければなら

ない。

(b)  bound_1

bound_2 及び increment を表現する numeric_expression は,REPEAT 文の入口で一度だけ評

価される。

(c)  bound_1

bound_2 又は increment を表現する numeric_expression のいずれかが不定”?”であるとき,

REPEAT

文は,実行されない。

(d)

増分制御が最初に評価されるとき,次の条件が調べられる。

−  increment が正で,かつ bound_1

  〉  bound_2 であれば,REPEAT 文は,実行されない。

−  increment が負で,かつ bound_1

  〈  bound_2 であれば,REPFAT 文は,実行されない。

−  increment がゼロの場合,REPEAT 文は,実行されない。

−  上のいずれでもないとき,REPEAT 文は,variable_id の値が指定された bound_1 若しくは


96

B 3700-11-1996 (ISO 10303-11 : 1994)

bound_2

を超えるまで,又は他の REPEAT 制御があれば,それが実行を終了させるまで,実行

される。

(e)

ループ変数は,最初の繰返しサイクルの始めに bound_1 に初期化され,その後,繰返しサイクルが始

まるたびに,increment の値だけ増やされる。

(f) REPEAT

文の本体では,ループ変数の値を変更してはならない。

(g) REPEAT

文は,ループ変数 variable_id を暗黙のうちに数値変数として宣言する局所有効範囲を作る。

それを囲んでいる有効範囲の中での variable_id の宣言は REPEAT 文の中に隠され,ループ変数の値は

REPEAT

文の外では使用できない。

13.9.2  While

制御  WHILE 制御は,制御式である logical_expression が TRUE の間,REPEAT 文の本体の

実行を開始し,その実行を繰り返す。制御式は,各繰返しの前に評価される。

WHILE

制御があり,かつその式が FALSE 又は UNKNOWN と評価されるなら,本体は,実行されない。

構文:

316

  while_control = WHILE logical_expression .

241

  logical_expression = expression  .

規則及び制約:

(a)  logical_expression

は,LOGICAL の値として評価されなければならない。

(b)  logical_expression

は,各繰返しの始めに再評価される。

13.9.3  Until

制御  UNTIL 制御は,制御式である logical_expression が TRUE に評価されるまで、REPEAT

文の本体の実行を続ける。制御式は,それぞれの繰返しの後に評価される。

制御が UNTIL 制御だけしかない場合,少なくとも 1 回は必ず実行される。

構文:

312

  until_control = UNTIL logical_expression .

241

  logical_expression = expression  .

規則及び制約:

(a)  logical_expression

は,LOGICAL の値として評価されなければならない。

(b)  logical_expression

は,各繰返しの終わりに再評価される。

13.10  Return

文  RETURN 文 (return statement,return_stmt)  は,関数又は手続の実行を終了させる。関

数中の RETURN 文は,式を指定しなければならない。この式を評価することによって生成される値は,関

数の結果であり,呼出し点に戻される。その式は,関数で宣言された戻り値の型と整合していなければな

らない。手続中の RETURN 文は,式を指定してはならない。

構文:

276

  return_stmt = RETURN [ ‘(’ expression ‘)’ ] ‘;’ .

規則及び制約:

RETURN

文は,関数又は手続の中にだけ現れなければならない。

123. RETURN 文の分類。

            RETURN(50) ;            (*  関数の場合*)

            RETURN(work_point) ;  (*  関数の場合*)

            RETURN ;                 (*  手続の場合*)


97

B 3700-11-1996 (ISO 10303-11 : 1994)

13.11  Skip

文  SKIP 文 (skip statement,skip_stmt)  は,それが現れている REPEAT 文の本体の最後に,制

御を直接移動させる。このとき,制御条件は,13.9 に従って評価される。

構文:

290

  skip_stmt = SKIP ‘;’ .

規則及び制約:

SKIP

文は,REPEAT 文の有効範囲の中にだけ現れなければならない。

124. SKIP 文は,END_REPEAT に制御を移し,それによって,UNTIL 制御を評価する。

          REPEAT UNTIL (a=1) ;

           ...

           IF (a < 0) THEN

            SKIP;

           END_IF;

           ... -- a < 0 の場合,ここの文は無視される。

          END_REPEAT;

14

組込み定数  EXPRESS は,幾つかの組込み定数を備えており,それらをここで定義する。

備考  組込み定数は,その厳密な値をコンピュータで表現できない場合でも,そのような値をもつと

みなす。

14.1

定数 e (constant e)     CONST_E は,自然対数  (ln)  の底である を表す REAL 型の定数とする。そ

の値は,次の公式で与えられる。

å

1

0

!

i

e

i

14.2

不定値  不定記号“?”は,あいまいな値を表す。これは,すべてのデータ型と整合する。

備考  この不定“?”の最も一般的な使い方は,多重集合,リスト又は集合の上限の指定である。この

使い方は,集合体データ型によって定義された値の要素数に上限がないことを表す。

14.3

  False

  FALSE は,偽 (false) の論理的概念を表す LOGICAL 型の定数とする。これは,BOOLEAN

型とも整合する。

14.4

  Pi

  PI は,直径に対する円周の比である

πを表す REAL 型の定数とする。

14.5

  Self

  SELF は,注目するエンティティインスタンス又は型の値を表す。SELF は,エンティティ宣

言,型宣言又はエンティティ構成子の中に現れてもよい。

備考 SELF は定数ではないが,それが現れる文脈の中では,常に定数として振る舞う。

14.6

  True

  TRUE は,真 (true) の論理的概念を表す LOGICAL 型の定数とする。これは,BOOLEAN 

とも整合する。

14.7

  Unknowm

  UNKNOWN は,論理的条件に評価するのに十分な情報がないことを表す LOGICAL 

の定数とする。これは,BOOLEAN 型とは整合しない。

15.

組込み関数  すべての関数(及び一般に演算)は,厳密な結果を与えるものとみなす。仮引き数及び

結果の型を示すために,各々の組込み関数の形を次に示す。

15.1

  Abs

(算術関数)

FUNCTION ABS ( V:NUMBER) : NUMBER;


98

B 3700-11-1996 (ISO 10303-11 : 1994)

ABS

関数は,ある数の絶対値を戻す。

引き数:は,数値とする。

結果:の絶対値。戻されるデータ型は,V のデータ型と同一とする。

125. ABS ( −10 )  --> 10

15.2

  ACos

(算術関数)

FUNCTION ACOS ( V:NUMBER ) : REAL;

ACOS

関数は,ある余弦値を与える角度を戻す。

引き数:は,ある角度の余弦となる数値とする。

結果:余弦が となる,ラジアンの単位で表現された角度(0

≤ 結果 ≤

π

)。

条件:−0.1

≤ V ≤ 1.0

126. ACOS ( 0.3 )  --> 1.266103...

15.3

  ASin

(算術関数)

FUNCTION ASIN ( V:NUMBER ) : REAL;

ASIN

関数は,ある正弦値を与える角度を戻す。

引き数:V は,ある角度の正弦となる数値とする。

結果:正弦が V となる,ラジアンの単位で表現された角度

)

2

2

(

π

π

≤ 結果

条件

:−0.1

≤ V ≤ 1.0

127.

ASIN ( 0.3 )  --> 3.04692...e-1

15.4

ATam

(算術関数)

FUNCTION ATAN ( V1:NUMBER ; V2:NUMBER ) : REAL;

ATAN

関数は,

2

1

V

V

V

で与えられるある正接値 を与える角度を戻す。

引き数

(a)

V1

は,数値とする。

(b)

V2

は,数値とする。

結果

:正接が

V

となる,ラジアンの単位で表現された角度

)

2

2

(

π

π

≤ 結果

V2

がゼロの場合,結果は,

V1

の符号に基づいて,

2

π

又は

2

π

の値になる。

条件

V1

及び

V2

は,ともにゼロであってはならない。

128.

ATAN ( 

5.53.0 )    −−>  1.071449...

15.5

BLength

進関数)

FUNCTION BLENGTH ( V:BINARY ) : INTEGER;

BLENGTH

関数は,2 進のビット数を戻す。

引き数

V

は 2 進値とする。

結果

:戻す値は,渡された 2 進値の中の実際のビット数。

129.

LOCAL

 n : NUMBER;

 x : BINARY :

 %01010010  ;


99

B 3700-11-1996 (ISO 10303-11 : 1994)

END_LOCAL;

 ...

 n  :

 BLENGTH ( x ); -- n

には値

8

が代入される。

15.6

Cos

(算術関数)

FUNCTION COS ( V : NUMBER ) : REAL;

COS

関数は,ある角度の余弦を戻す。

引き数

:V は,ラジアンの単位で表現された角度を表す数値とする。

結果

:V の余弦(−0.1

≤ 結果 ≤ 1.0)。

130.

COS ( 0.5 )   

−−> 8.77582...E-1

15.7

Exists

(一般関数)

FUNCTION EXISTS ( V : GENERIC ) : BOOLEAN;

EXISTS

関数は,入力された引き数に対し値が存在しているときに

TRUE

を戻し,値が存在していない

ときに

FALSE

を戻す。

EXISTS

関数は,省略可能な属性に対し値が与えられているか又は変数が初期化さ

れているかを確認するのに有用となる。

引き数

:V は式であり,その結果は任意の型となる。

結果

TRUE

又は

FALSE

かは,

V

が実際の値をもつか又は不定“?”をもつかによる。

131.

IF EXISTS ( a ) THEN 

...

15.8

Exp

(算術関数)

FUNCTION EXP ( V:NUMBER ) : REAL;

EXP

関数は,e(自然対数の底)の

V

乗を戻す。

引き数

V

は,数値とする。

結果

e

v

の値。

132.

EXP ( 10 )   

−−> 2.202646...E4

15.9

Format

(一般関数)

FUNCTION FORMAT (N:NUMBER; F:STRING):STRING;

FORMAT

関数は,ある数値を書式付けした文字列表現を戻す。

引き数

(a)

N

は,数値とする(整数又は実数)

(b)

F

は,書式制御コマンドを含む文字列(書式文字列)とする。

結果

:F に従い,N を書式付けした文字列表現。必要に応じて丸めが行われる。

書式文字列は,結果の形を示す特殊文字を含む。書式文字列は,次の三つの方法で書くことができる。

(a)

書式文字列は,出力形を記号表現で記述できる。

(b)

書式文字列は,出力形を編集用表現で記述できる。

(c)

書式文字列が空の場合,既定の出力形が生成される。

15.9.1

記号表現

  記号で書式付けする場合の一般形は,

[sign] width [.decimals] type

とする。

sign

は,数値の符号をどのように表現するかを示す。

sign

を指定しないか又は負符号“−”を指

定した場合,戻される最初の文字は,負の数値に対しては負符号,正の数値(ゼロを含む)に対

しては間隔文字となる。

sign

に正符号“+”を指定すると,戻される最初の文字は,負の数値に

対しては負符号,正の数値に対しては正符号,ゼロに対しては間隔文字となる。

width

は,戻される文字列の文字の総数を指定する。これは,2 以上の整数とする。

width

の先頭


100

B 3700-11-1996 (ISO 10303-11 : 1994)

の文字が 0 の場合,戻される文字列は,数値の前に先行する 0 を含むこととなる。そうでなけれ

ば,先行する 0 が抑制される。書式化される数値が

width

によって指定されたものよりも多くの

文字を必要とする場合,必要とされる文字数の文字列が戻される。

decimals

は,文字列中の小数点の右側に戻される数字の数を指定する。

decimals

を指定する場合,

正の整数とする。指定しない場合,小数点及びそれに続く数字は文字列に戻されない。

− type は,文字列で表す数値の形式を示す英字とする。

type

I

の場合,数値は,整数として表示される。

*

decimals

は,指定してはならない。

*

width

は,2 以上でなければならない。

type

F

の場合,数値は,固定小数点の実数として表示される。

*

decimals

を指定する場合,1 以上でなければならない。

*

decimals

を指定しない場合,既定値として 2 が想定される。

*

width

は,4 以上でなければならない。

type

E

の場合,数値は,指数形式の実数として表示される。

*

decimals

は,

E

形式では常に指定しなければならない。

*

decimals

は,1 以上でなければならない。

*

width

は,7 以上でなければならない。

*

width

の先頭の数字がゼロの場合,仮数のはじめの 2 文字は“

0.

”となる。

*

    指数部は,符号も含めて少なくとも 2 文字分使用する。

*

    表示される“

E

”は,大文字でなければならない。

備考

値の出力に書式付けがどのように影響するかを,

表 20

に示す。

表 20  記号書式化の影響の例

数値

書式

表示

備考

10

7I ‘

    +

10’

ゼロ抑制

10

07I ‘

000010’

ゼロ非抑制

10 10.3E

‘1.000E

01’

123.456789

8.2F ‘

123.46’

123.456789

8.2E ‘1.23E

02’

123.456789

08.2E ‘0.12E

03’

先頭にゼロが付く。

9.876E123 8.2E

‘9.88E

123’

指数部が 3 文字で width が無視される。

32.777 6I

33’

丸め

15.9.2

編集用表現

  編集用書式の各編集文字は,結果として得られる文字列の一つの文字に対応する。使

用する文字を,

表 21

に示す。

表 21  編集用文字

#

(番号記号)

数字を表す。

(コンマ)

分離記号。

(ピリオド)

分離記号。

+  −(正負)

符号を表す。

(

  )(丸括弧) 符号反転を表す。

分離記号の“.

”及び“,”は,次のとおり使用する。


101

B 3700-11-1996 (ISO 10303-11 : 1994)

−  “,

”が書式文字列の中で“.

”より先に現れた場合,

“,

”はけた区切り文字を表し,

“.

”は小数

点を表す。

−  “.

”が書式文字列の中で“,

”より先に現れた場合,

“.

”はけた区切り文字を表し,

“,

”は小数

点を表す。

−  書式文字列の中に分離記号が一つだけ現れた場合,それは,小数点を表す。

その他の文字は,そのまま表示する。

備考

値の出力に書式付けがどのように影響するかを,

表 22

に示す。

表 22  編集書式化の影響の例

数値

書式

表示

備考

10 ###

10’

10 (###)

10’

丸括弧の無視

10

(###)

‘ ( 10)’

7123.456 ###, ###. ##

‘ 7,123.46’

アメリカ式

7123.456 ###. ###, ##

‘ 7.123,46’

ヨーロッパ式

15.9.3

既定表現

  整数の標準的な既定表現は,

 "7I"

とする。実数の既定表現は,

 "10E" 

とする。こ

れらは,

15.9.1

の記号表現による。

15.10

HiBound

(算術関数)

FUNCTIONHIBOUND ( V : AGGREGATE OF GENERIC ) : INTEGER;

HIBOUND

関数は,

ARRAY

の宣言された添字の上限,又は

BAG

LIST

若しくは

SET

の宣言された要

素数の上限を戻す。

引き数

:V は,集合体の値とする。

結果

(a)

V

ARRAY

の場合,戻り値は,宣言された要素数の添字の上限とする。

(b)

V

BAG

LIST

又は

SET

の場合,戻り値は,宣言された上限とする。上下限がともに宣言されてい

ないか又は上限が不定“?”で宣言されていた場合には,不定“?”が戻される。

133.

入れ子になった集合体の値の関数

HIBOUND

の使用例。

LOCAL

a : ARRAY [

3:19] OF SET[2:4] OF LIST[0:?] OF INTEGER;

h1, h2, h3 : INTEGER;

END_LOCAL;

          .

a[

3][1][1] :

2;

 --

  リストに値をおく。

          .

h1 :

 HIBOUND (a) ;

 --

19

(配列の上限)

h2 :

 HIBOUND  (a[

3]) ;

--

4

(集合の上限)

h3 :

 HIBOUND  (a[

3][1]) ;

--

?

[リストの上限(不定)

15.11

Hilndex

(算術関数)

FUNCTION HIINDEX ( V:AGGREGATE OF GENERIC ) : INTEGER;

HIINDEX

関数は,

ARRAY

の添字の上限,又は

BAG

LIST

若しくは

SET

の中の要素数を戻す。


102

B 3700-11-1996 (ISO 10303-11 : 1994)

引き数

V

は,集合体の値とする。

結果

(a)

V

ARRAY

の場合,戻り値は,宣言された添字の上限とする。

(b)

V

BAG

LIST

又は

SET

の場合,戻り値は,集合体の値の実際の要素数とする。

134.

入れ子になった集合体の値の関数

HIINDEX

の使用例。

LOCAL

a : ARRAY[-3:19] OF SET[2:4] OF LIST[0:?] OF INTEGER;

h1, h2, h3 : INTEGER;

END_LOCAL;

a[-3][1][1] :

2;

 --

  リストに値をおく。

h1 :

 HIINDEX(a);

--

19

(配列の上限)

h2 :

 HIINDEX(a[-3]);

 --

 1

(集合の大きさ)

--

  これは集合の上下限か

 --

  ら見ると正しくない。

h3

:

 HIINDEX(a[-3][1]);  --

 1

(リストの大きさ)

15.12

Length

(文字列関数)

FUNCTION LENGTH ( V:STRING ) : INTEGER;

LENGTH

関数は,文字列中の文字数を戻す。

引き数

V

は,文字列データ型の値とする。

結果

:戻り値は,文字列の中の文字数であり,0 以上とする。

135.

関数

LENGTH

の使用例。

LOCAL

 n : NUMBER;

 x1 : STRING :

 ‘abc’;

 x2 : STRING :

 “000025FF000101B5;

END_LOCAL;

 n  :

 LENGTH ( x1 ); -- n

には値

3

が代入される。

 n  :

 LENGTH ( x2 ); -- n

には値

2

が代入される。

15.13

LoBound

(算術関数)

FUNCTION LOBOUND ( V:AGGREGATE OF GENERIC ) : INTEGER;

LOBOUND

関数は,

ARRAY

の宣言された添字の下限,又は

BAG

LIST

若しくは

SET

の宣言された要

素数の下限を戻す。

引き数

V

は,集合体の値とする。

結果

(a)

V

ARRAY

の場合,戻り値は,宣言された添字の下限とする。

(b)

V

BAG

LIST

又は

SET

の場合,戻り値は,宣言された下限とする。下限が宣言されていない場合,

ゼロが戻される。

136.

入れ子になった集合体の値の

LOBOUND

関数の使用例。

LOCAL

 a : ARRAY [-3 : 19] OF SET [2 : 4] OF LIST [0 : ?] OF INTEGER;


103

B 3700-11-1996 (ISO 10303-11 : 1994)

 h1, h2, h3 : INTEGER ;

END_LOCAL ;

 h1  :

 LOBOUND (a) ;

--

=−

3

(配列の下限)

 h2  :

 LOBOUND (a[-3]) ;

 --

2

(集合の下限)

 h3  :

 LOBOUND (a[-3][1]) ; --

0

(リストの下限)

15.14

Log

(算術関数)

FUNCTION LOG ( V:NUMBER ) : REAL;

LOG

関数は,ある数値の自然対数を戻す。

引き数

V

は,数値とする。

結果

V

の自然対数である実数。

条件

V

> 0.0

137.

LOG ( 4.5 )   

−−> 1.504077...E0

15.15

Log2

(算術関数)

FUNCTION LOG2 ( V:NUMBER ) : REAL;

LOG2

関数は,ある数値の底が 2 の対数を戻す。

引き数

V

は,数値とする。

結果

:2 を底とする

V

の対数である実数。

条件

V

>0.0

138.

LOG2 ( 8 )   

−−> 3.00...E0

15.16

Log10

(算術関数)

FUNCTION LOG1O ( V:NUMBER ) : REAL;

LOG10

関数は,ある数値の底が 10 の対数を戻す。

引き数

V

は,数値とする。

結果

:10 を底とする

V

の対数である実数。

条件

V

> 0.0

139.

LOG10 ( 10 )   

−−> 1.00...E0 

15.17

LoIndex

(算術関数)

FUNCTION LOINDEX ( V:AGGREGATE OF GENERIG ) : INTEGER;

LOINDEX

関数は,集合体の値の下限を戻す。

引き数

V

は,集合体の値とする。

結果

(a)

V

ARRAY

の場合,戻り値は,宣言された添字の下限とする。

(b)

V

BAG

LIST

又は

SET

の場合,戻り値は,

1

とする。

140.

  入れ子になった集合体の値の

LOINDEX

関数の使用例。

LOCAL

 a : ARRAY [-3:19] OF SET [2:4] OF LIST [0 : ?] OF INTEGER;

 h1, h2, h3 : INTEGER ;

END_LOCAL ;


104

B 3700-11-1996 (ISO 10303-11 : 1994)

 h1  :

 LOINDEX (a) ;

--

--3

  (配列の下限)

 h2  :

 LOINDEX  (a[

3]) ;

 --

1

(集合の場合)

 h3  :

 LOINDEX  (a[

3] [1]) ; --

1

(リストの場合)

15.18

NVL

(不定値関数)

FUNCTION NVL(V:GENERIC:GEN1; SUBSTITUTE:GENERIC:GEN1):GENERIC:GEN1;

NVL

関数は,入力値を戻すか,又は入力値が不定“?”である場合には代わりの値を戻す。

引き数

(a)

V

は,任意の型の式とする。

(b)

SUBSTITUTE

は,不定“?”と評価されない式とする。

結果

V

が不定“?”でなければ,その値が戻る。それ以外の場合には,

SUBSTITUTE

が戻る。

141.

Z

が不定“?”の場合に,

Z

の値としてゼロ (0.0) を与えるのに NVL 関数を用いている。

ENTITY unit_vector ;

 x, y : REAL ;

 z : OPTIONAL REAL ;

WHERE

 x

**

2

 y

**

2

 NVL(z,  0.0)

**

2

 1.0;

END_ENTITY;

15.19

Odd

(算術関数)

FUNCTION ODD ( V:INTEGER ) : LOGICAL;

ODD

関数は,ある数値が奇数か偶数かによって,それぞれ

TRUE

又は

FALSE

を戻す。

引き数

V

は,整数値とする。

結果

V MOD 2 

  1

の場合,

TRUE

が戻る。その他の場合,

FALSE

が戻る。

条件

:ゼロは,奇数ではない。

142.

ODD ( 121 )   

−−> TRUE 

15.20

RolesOf

(一般関数)

FUNCTION ROLESOF ( V : GENERIC ) : SET OF STRING;

ROLESOF

関数は,文字列の集合を戻す。その文字列の集合は,指定されたエンティティインスタンス

が果たす役割の完全に修飾された名前を含むものとする。完全に修飾された名前とは,それに対応する属

性 の 名 前 を , 属 性 が 宣 言 さ れ た ス キ ー マ 名 及 び エ ン テ ィ テ ィ 名 に よ っ て 修 飾 し た も の ( す な わ

ち,

’SCHEMA. ENTITY. ATTRIBUTE’

)とする。

引き数

V

は,エンティティデータ型の任意のインスタンスとする。

結果

:文字列の値(大文字)の集合。それは,インスタンス V を使用するエンティティインスタンスの属

性の完全に修飾された名前を含むものとする。

名前付きデータ型が

USE

されたり又は

REFERENCE

された場合,元のスキーマ名及びそのスキーマで

の名前が(たとえそれが再命名されたとしても)戻される。

USE

文は連結されてもよいので,すべての連

結されたスキーマ及び各々のスキーマでの名前が戻される。

143.

こ の 例 は , あ る 点  (point) が 円  (circle) の 中 心 (center) と し て 用 い ら れ る こ と を 示 す 。

ROLESOF

関数は,あるエンティティインスタンスが実際に果たしている役割を決定する。

SCHEMA that_schema;

ENTITY point;


105

B 3700-11-1996 (ISO 10303-11 : 1994)

 x, y, z : REAL;

END_ENTITY;

ENTITY line;

 start,

 end : point;

END_ENTITY;

END_SCHEMA;

SCHEMA this_schema;

USE FROM that_schema (point, line);

CONSTANT

 origin : point :

 point  (0.0

0.0

0.0) ;

END_CONSTANT;

ENTITY circle;

 centre : point;

 axis   :  vector;

 radius : REAL;

END_ENTITY;

 ...

LOCAL

 p : point :

 point(1.0

0.0

0.0);

 c : circle :

 circle(p

vector(1

1

1)

1.0) ;

 l : line :

 line(p

origin);

END_LOCAL;

 ...

IF ‘THIS_SCHEMA. CIRCLE. CENTRE’ IN ROLESOF (p) THEN

-- true

 ...

IF ‘THIS_SOHEMA. LINE. START’ IN ROLESOF (p) THEN

 --  true

 ...

IF ‘THAT_SCHEMA. LINE. START’ IN ROLESOF (p) THEN

 --  true

 ...

IF ‘THIS_SCHEMA. LINE. END’ IN ROLESOF (p) THEN

-- false

15.21

Sin

(算術関数)

FUNOTION SIN ( V : NUMBER ) : REAL;

SIN

関数は,ある角度の正弦を戻す。

引き数

V

は,ラジアンの単位で表現された角度を表す数値とする。

結果

V

の正弦  (−0.1

≤ 結果 ≤ 1.0)。

144.

SIN ( pi )   

−−> 0.0 

15.22

SizeOf

(集合体関数)

FUNCTION SIZEOF ( V : AGGREGATE OF GENERIC ) : INTEGER;

SIZEOF

関数は,集合体の値の要素数を戻す。


106

B 3700-11-1996 (ISO 10303-11 : 1994)

引き数

V

は,集合体の値とする。

結果

(a)

V

ARRAY

の場合,戻り値は,集合体データ型での宣言された要素の数とする。

(b)

V

BAG

LIST

又は

SET

の場合,戻り値は,集合体の値での要素の実際の数とする。

145.

 LOCAL

 n : NUMBER;

 y : ARRAY [2:5] OF b;

END_LOCAL;

 n  :

 SIZEOF (y); -- n

には値

4

が代入される。

15.23

Sqrt

(算術関数)

FUNCTION SQRT ( V:NUMBER ) : REAL;

SQRT

関数は,ある数値の非負二乗根を戻す。

引き数

V

は,任意の非負数値とする。

結果

V

の非負二乗根。

146.

SQRT ( 121 )   

−−> 11.0   

15.24

Tan

(算術関数)

FUNCTION TAN ( V:NUMBER ) : REAL;

TAN

関数は,ある角度の正接を戻す。

引き数

V

は,ラジアンの単位で表現された角度を表す数値とする。

結果

:その角度の正接。角度が n

2

π

は奇数)である場合,不定“?”が戻される。

147.

TAN ( 0.0 )   

−−> 0.0 

15.25

TypeOf

(一般関数)

FUNCTION TYPEOF ( V:GENERIO ) : SET OF STRING;

TYPEOF

関数は,引き数が属しているすべてのデータ型の名前を含む文字列の集合を戻す。単純データ

型(

BINARY

BOOLEAN

INTEGER

LOGICAL

NUMBER

REAL

及び

STRING

)及び集合体デー

タ(

ARRAY

BAG

LIST

及び

SET

)を除き,名前は,その型の定義を含むスキーマ名によって修飾する。

備考

この関数の主目的は,与えられた値(変数又は属性値)が,ある目的で用いることができるか

どうかを調べることにある。例えば,二つの値の間で代入の整合性を確実にすることにある。

与えられた型の異なった下位型又は特定化したものは,ある文脈の中で,異なる取扱いをしな

ければならない場合に,この関数を使うことができる。

引き数

V

は,任意の型の値とする。

結果

:戻される文字列値の集合の内容は,値 V が属しているすべての型の名前(大文字)とする。その名

前が単純データ型でも集合体データ型でもない場合,その名前は,この型の定義を含むスキーマ名

(

‘SCHEMA. TYPE’

)

によって修飾する。それは,次のアルゴリズムで導出できる(次のアルゴリズムは,

特定な種類の実装規定をするのではなく仕様を示すためである。)。

(a)

結果の集合は,

(その定義で)

V

が属する型名を用いて,型名が名前付きデータ型のときはスキーマ名

を含め,初期化される。

V

が仮引き数ならば,最初に対応する実引き数に置き換えられる。

V

が集合

体の値ならば,型名は,集合体データ型の名前(

ARRAY

BAG

LIST

及び

SET

)となる。

(b)

結果の集合の要素が増えなくなるまで,次の

(1)

(4)

を繰り返す。


107

B 3700-11-1996 (ISO 10303-11 : 1994)

(1)

結果の集合中のすべての名前に対して,次を繰り返す。

−  現在の名前が単純データ型の名前の場合は,次の名前に進む。

−  現在の名前が集合体データ型(

ARRAY

BAG

LIST

及び

SET

)の名前の場合,次の名前に進

む。

−  現在の名前が列挙データ型の名前の場合,次の名前に進む。

−  現在の名前が選択データ型の名前の場合,

V

によって実際にインスタンス化されている選択リ

スト中のすべての型名(スキーマ名も含めて)を結果の集合に加える。この場合,選択リスト

には,共通の上位型と整合する下位型の型名又は共通のデータ型を特定化した型名を含まれる

ことがあるため(

8.4.2

及び

9.1

参照)

,これは,二つ以上となることもある。

−  現在の名前が他の種類の定義データ型の名前の場合,この型定義で参照される型の名前は,必

要ならばスキーマ名を含めて結果の集合に加えられる。参照された型が集合体データ型ならば,

これは,集合体データ型の名前とする。

−  現在の名前がエンティティの名前の場合で,

V

によって実際にインスタンス化されている下位

型があるときは,そのすべての名前が(必要ならばスキーマ名を含めて)結果の集合に加えら

れる。

(2)

結果の集合中のすべての名前に対して,次を繰り返す。

−  現在の名前が下位型の名前の場合,そのすべての上位型の名前は,結果の集合に加えられる。

−  現在の名前が特定化したものの名前の場合,そのすべての一般化したものの名前は,結果の集

合に加えられる。

(3)

結果の集合中のすべての名前に対して,次を繰り返す。

−  現在の名前が少なくとも一つの選択データ型の型リストの中に現れた場合,現在の名前をもつ

型を基に型定義されているすべての選択データ型の名前は,結果の集合に加えられる。

(4)

結果の集合中のすべての名前に対して,次を繰り返す。

−  現在の名前が

REFERENCE

又は

USE

によってそのスキーマに与えられた場合,インタフェー

スされるスキーマ中の名前をそのスキーマ名によって修飾されたものが結果の集合に加えられ

る。

USE

文は連結されてもよいので,連結されたすべてのスキーマ中の名前をそのスキーマ名

で修飾したものもまた結果の集合に加えられる。

(c)

結果の集合を戻す。

V

が不定“?”に評価された場合,

TYPEOF

は,空集合を戻す。

備考

この関数は,集合体データ型に達した場合,その作業を終了する。集合体の値の基底型に関す

る情報は与えない。必要ならば,この情報は,集合体の値の任意の正当な要素に対し

TYPEOF

関数を適用することによって集めることができる。

148.

次のスキーマの文脈で,

SCHEMA this_schema;

 TYPE

mylist

 LIST [1 : 20] OF REAL;

 END_TYPE;

 ...

 LOCAL

  1st  :  mylist;


108

B 3700-11-1996 (ISO 10303-11 : 1994)

 END_LOCAL;

 ...

END_SCHEMA;

次の条件は

,TRUE

になる。

TYPEOF (1st)

 [‘THIS_SCHEMA. MYLIST’, ‘LIST’]

TYPEOF (1st [17])

 [‘REAL’

’NUMBER’]

149.

148.

に基づいた USE 又は REFERENCE の効果を示す。

SCHEMA another_schema;

 REFERENCE FROM this_schema (mylist AS hislist);

...

  1st  :  hislist;

 ...

END_SCHEMA;

したがって,次のことがいえる。

TYPEOF (1st)

 [‘ANOTHER_SCHEMA. HISLIST’, ‘THIS_SCHEMA. MYLIST’,

’LIST’]

15.26

UsedIn

(一般関数)

FUNCTION USEDIN ( T : GENERIC R:STRING) : SET OF GENERIC;

USEDIN

関数は,指定されたエンティティインスタンスを指定された役割に使っている各エンティティ

インスタンスを戻す。

引き数

(a)

T

は,任意のエンティティデータ型の任意のインスタンスとする。

(b)

R

は,

15.20

で定義に従い完全に修飾された属性(役割)名を含む文字列とする。

結果

:指定されたインスタンスを指定された役割に使っているすべてのエンティティインスタンスが集合

中に戻る。インスタンス

T

が何の役割も果たさないか,役割

R

が見つからなかった場合,空集合が戻され

る。

R

が空文字列ならば,

T

のあらゆる使用法が報告される。

T

に対するすべての関係が調べられる。関係

が名前

R

をもつ属性から発生している場合,その属性を含んでいるエンティティインスタンスは,結果の

集合に付け加えられる。

T

が用いられない場合,空集合が戻る。

150.

この例は,円 (circle) の中心 (centre) として用いられているある点 (point) が原点に存在しな

ければならないということを調べるのに,規則がどのように用いられるかを示している。この

例では,query 式(

12.6.7

参照)を

SIZEOF

関数の引き数として用いていることに注意すること。

ENTITY point;

 x, y, z : REAL;

END_ENTITY;

ENTITY circle;

 centre : point;

 axis

: vector;

 radius : REAL;

END_ENTITY;


109

B 3700-11-1996 (ISO 10303-11 : 1994)

          (

*

          次の規則は,円の中心として使われているすべての点を見つけ,それらの点の少なくとも一つ

          が必ず原点にあるようにする。

*)

          .

RULE example FOR (point);

LOCAL

 centre_points : SET OF circle :

[];

--

円の空集合

END_LOCAL;

REPEAT i :

 LOINDEX(point)TO  HIINDEX(point);

 centre_points  :

 centre_points

 USEDIN(point[i],’THIS_SCHEMA.CIRCLE.CENTRE’);

END_REPEAT;

WHERE R1 : SIZEOF(

 QUERY(

 --  query

の開始

at_zero <* centre_points |

(at_zero.centre

 point(0.0

0.0

0.0))

                        )

--

円のうち,中心が

(0

0

0)

--

にあるものが

--

少なくとも一つ以上

) >

 1;

--

存在する。

END_RULE;

15.27

Value

(算術関数)

FUNCTION VALUE ( V : STRING ) : NUMBER;

VALUE

関数は,文字列の数値表現を戻す。

引き数

V

は,実数リテラル又は整数リテラルを含む文字列(

7.5

参照)。

結果

:文字列表現に対応する数値。

実数リテラル又は整数リテラルいずれにも文字列を解釈できない場合,

不定“?”が戻される。

151.

VALUE ( ‘1.234’ )  --> 1.234 (REAL)

VALUE ( ‘20’ )

 -->  20

(INTEGER)

VALUE ( ‘abc’ )

--> ?

    (不定)

15.28

Value in

(帰属関数)

FUNCTION VALUE_IN ( C:AGGREGATE OF GENERIC:GEN; V:GENERIC:GEN ) :

LOGICAL;

VALUE_IN

関数は,ある値が集合体に属しているか否かによって,

LOGICAL

値を戻す。

引き数

(a)

C

は,任意の型の集合体とする。

(b)

V

は,

C

の基本データ型に代入可能な式とする。

結果

(a)

V

又は

C

のいずれかが不定“?”の場合,

UNKNOWN

が戻される。


110

B 3700-11-1996 (ISO 10303-11 : 1994)

(b)

C

のいずれかの要素が

V

の値と等しい場合,

TRUE

が戻される。

(c)

C

のいずれかの要素が不定“?”の場合,

UNKNOWN

が戻される。

(d)

それ以外の場合は,

FALSE

が戻される。

152.

次の

IF

文は,原点位置に少なくとも一つの

point

があるかどうかを検査する。

LOCAL

points : SET OF point;

END_LOCAL;

...

IF VALUE_IN (points, point(0.0

0.0

0.0)) THEN ...

15.29

Value_unique

(一意性関数)

FUNCTION VALUE_UNIQUE ( V : AGGREGATE OF GENERIC) : LOGICAL;

VALUE_UNIQUE

関数は,集合体の要素に値の一意性があるか否かによって

LOGICAL

値を戻す。

引き数

V

は,任意の型の集合体とする。

結果

(a)

V

が不定“?”の場合,

UNKNOWN

が戻される。

(b)

V

のいずれかの二つの要素が値等価の場合,

FALSE

が戻される。

(c)

V

のいずれかの要素が不定“?”の場合,

UNKNOWN

が戻される。

(d)

それ以外の場合には,

TRUE

が戻される。

153.

次の IF 文は,集合中のそれぞれの点が異なる位置にあるかどうかを検査する(集合の定義によ

って,それらは別個,すなわちインスタンスが一意である。

IF VALUE_UNIQUE (points) THEN ...

16.

組込み手続

  EXPRESS は,二つの組込み手続を備えており,いずれもリスト操作に使用する。それら

の手続を次に規定する。

各々の手続の頭部は,仮引き数のデータ型を示すために付ける。

PROCEDURE INSERT ( VAR L : LIST OF GENERIC : GEN ; E : GENERIC : GEN ; P : INTEGER ) ;

INSERT

手続は,リストの特定の位置に要素を挿入 (insert) する。

引き数

(a)

L

は,要素が挿入されるリストの値とする。

(b)

E

は,

L

に挿入されるインスタンスとする。

E

は,手続の頭部の型ラベルで指示されたとおり,

L

基本型と整合していなければならない。

(c)

P

は,

E

を挿入する

L

中の位置を示す整数とする。

結果

L

は,

E

L

の中の指定された位置に挿入することによって修正される。位置 P にある要素の直後

に挿入される。したがって,

  0

のときは,

E

が先頭の要素となる。

条件

:0

≤ P ≤ SIZEOF (L)

16.2

Remove

PROCEDURE REMOVE (VAR L : LIST OF GENERIC ; P : INTEGER ) ;

REMOVE

手続は,リストの特定の位置から要素を除去 (remove) する。

引き数

(a)

L

は,要素が除去されるリストの値とする。


111

B 3700-11-1996 (ISO 10303-11 : 1994)

(b)

P

は,

L

の中の除去される要素の位置を示す整数とする。

結果

L

は,指定された位置 P の要素を除去することによって修正される。

条件

:1

≤ P ≤ SIZEOF (L)


112

B 3700-11-1996 (ISO 10303-11 : 1994)

附属書 A(規定)  EXPRESS 言語文法

この附属書は,言語の字句要素及びそれらの要素が従う文法規則を定義する。

備考

この構文定義は,そのまま使った場合にはあいまいな構文解析系になることがある。これは,

識別子の使用に関する情報を伝えるために示す。解釈された識別子は,既定義の識別子を参照

する字句を定義し,したがって simple_id まで分解すべきではない。このために,構文解析系開

発者は,検索表又は同様なものを用意し,識別子参照の問題を解決し,かつ必要な参照字句を

文法規則検査系に返すようにする必要がある。この方法は,構文解析系の実装者を支援するた

めに使われてきた方法であって,識別子の使用に関して,あいまいさがないようにできる。

A.1

字句

  次の規則は,EXPRESS で用いる字句を規定する。空白又は注釈は,構文規則の中で明示的に示

す場合を除いて,

A.1.1

A.1.2

A.1.3

及び

A.1.5

に示す一つの構文規則に合致したテキスト内に現れては

ならない。

A.1.1

予約語

  EXPRESS の予約語を表現するために用いる規則を次に示す。

備考

ここでは,

本体 6.1

に示す記法に従う。すなわち,個々の予約語は,左辺を大文字の予約語と

する構文規則で表現する。構文規則における文字列リテラルは大文字と小文字とを区別しない

ため,これらの予約語は,形式仕様では,大文字,小文字,又はその両方が混在した形で用い

てよい。

 0

ABS

 ‘abs’  .

 1

ABSTRACT

 ‘abstract’  .

 2

ACOS

 ‘acos’  .

 3

AGGREGATE

 ‘aggregate’  .

 4

ALIAS

 ‘alias’  .

 5

AND

 ‘and’  .

 6

ANDOR

 ‘andor’  .

 7

ARRAY

 ‘array’  .

 8

AS

 ‘as’  .

 9

ASIN

 ‘asin’

10

ATAN

 ‘atan’  .

11

BAG

 ‘bag’  .

12

BEGIN

 ‘begin’  .

13

BINARY

 ‘binary’  .

14

BLENGTH

 ‘blength’  .

15

BOOLEAN

 ‘boolean’  .

16

BY

 ‘by’  .

17

CASE

 ‘case’  .

18

CONSTANT

 ‘constant’  .

19

CONST_E

 ‘const_e’  .

20

CONTEXT

 ‘context’  .


113

B 3700-11-1996 (ISO 10303-11 : 1994)

21

COS

 ‘cos’  .

22

DERIVE

 ‘derive’  .

23

DIV

 ‘div’  .

24

ELSE

 ‘else’  .

25

END

 ‘end’  .

26

END_ALIAS

 ‘end_alias’  .

27

END_CASE :

 ‘end_case’  .

28

END_CONSTANT

 ‘end_constant’  .

29

END_OONTEXT

 ‘end_context’  .

30

END_ENTITY

 _ ‘end_entity’ .

31

END_FUNCTION

 ‘end_function’  .

32

END_IF

 ‘end_if’  .

33

END_LOCAL

 ‘end_local’  .

34

END_MODEL

 ‘end_model’  .

35

END_PROCEDURE : _

 ‘end_procedure’  .

36

END_REPEAT

 _ ‘end_repeat’ .

37

END_RULE

 ‘end_rule’  .

38

END_SCHEMA

 ‘end_schema’  .

39

END_TYPE _

 ‘end_type’  .

40

ENTITY

 ‘entity’  .

41

ENUMERATION

 ‘enumeration’  .

42

ESCAPE

 ‘escape’  .

43

EXISTS

 ‘exists’  .

44

EXP

 ‘exp’  .

45

FALSE

 ‘false’  .

46

FIXED

 ‘fixed’  .

47

FOR

 ‘for’  .

48

FORMAT

 ‘format’  .

49

FROM

 ‘from’  .

50

FUNCTION

 ‘function’  .

51

GENERIC

 ‘generic’  .

52

HIBOUND

 ‘hibound’  .

53

HIINDEX

 ‘hiindex’  .

54

IF

 ‘if’  .

55

IN

 ‘in’  .

56

INSERT

 ‘insert’  .

57

INTEGER

 ‘integer’  .

58

INVERSE

 ‘inverse’  .

59

LENGTH

 ‘length’  .

60

LIKE

 ‘like’  .


114

B 3700-11-1996 (ISO 10303-11 : 1994)

61

LIST

 ‘list’  .

62

LOBOUND

 ‘lobound’  .

63

LOCAL

 ‘local’  .

64

LOG

 ‘log’  .

65

LOG10

 ‘log10’  .

66

LOG2

 ‘log2’  .

67

LOGICAL

 ‘logical’  .

68

LOINDEX

 ‘loindex’  .

69

MOD

 ‘mod’  .

70

MODEL

 ‘model’  .

71

NOT

 ‘not’  .

72

NUMBER

 ‘number’  .

73

NVL

 ‘nvl’  .

74

ODD

 ‘odd’  .

75

OF

 ‘of’  .

76

ONEOF

 ‘oneof’  .

77

OPTIONAL

 ‘optional’  .

78

OR

 ‘or’  .

79

OTHERWISE

 ‘otherwise’  .

80

PI

 ‘pi’  .

81

PROCEDURE

 ‘procedure’  .

82

QUERY

 ‘query’  .

83

REAL

 ‘real’  .

84

REFERENCE

 ‘reference’  .

85

REMOVE

 ‘remove’  .

86

REPEAT

 ‘repeat’  .

87

RETURN

 ‘return’  .

88

ROLESOF

 ‘rolesof’  .

89

RULE

 ‘rule’  .

90

SCHEMA

 ‘schema’  .

91

SELECT

 ‘select’  .

92

SELF

 ‘self’  .

93

SET

 ‘set’  .

94

SIN

 ‘sin’

95

SIZEOF

 ‘sizeof’  .

96

SKIP

 ‘skip’  .

97

SQRT

 ‘sqrt’  .

98

STRING

 ‘string’  .

99

SUBTYPE

 ‘subtype’  .

100

SUPERTYPE

 ‘supertype’  .


115

B 3700-11-1996 (ISO 10303-11 : 1994)

101

TAN

 ‘tan’  .

102

THEN

 ‘then’  .

103

TO

 ‘to’  .

104

TRUE

 ‘true’  .

105

TYPE

 ‘type’  .

106

TYPEOF

 ‘typeof’  .

107

UNIQUE

 ‘unique  ‘

108

UNKNOWN

 ‘unknown’  .

109

UNTIL

 ‘until’  .

110

USE

 ‘use’  .

111

USEDIN

 ‘usedin’  .

112

VALUE

 ‘value’  .

113

VALUE_IN

 ‘value_in’  .

114

VALUE_UNIQUE

 ‘value_unique’  .

115

VAR

 ‘var’  .

116

WHERE

 ‘where’  .

117

WHILE

 ‘while’  .

118

XOR

 ‘xor’  .

A.1.2

文字の組

  次の規則は,

A.1.3

の字句を構成するのに使用する種々の文字の組を定義する。

119

bit ‘0’ | ‘1’ .

120

digit

 ‘0’ | ‘1’ | ‘2’ | ‘3’ | ‘4’ | ‘5’ | ‘6’ | ‘7’ | ‘8’ | ‘9’ .

121

digits

 digit { digit } .

122

encoded_character

 octet octet octet octet .

123

hex digit

 digit | ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ .

124

letter

 ‘a’ | ‘b’ | ‘c’ | ‘d’ | ‘e’ | ‘f’ | ‘g’ | ‘h’ | ‘i’ | ‘j’ | ‘k’ | ‘l’ |

 ‘m’ | ‘n’ | ‘o’ | ‘p’ | ‘q’ | ‘r’ | ‘s’ | ‘t’ | ‘u’ | ‘v’ | ‘w’ | ‘x’ |

 ‘y’ | ‘z’ .

125

1paren_not_star

 ‘(’ not_star .

126

not_lparen_star

 not_paren_star | ‘)’ .

127

not_paren_star

 letter | digit | not_paren_star_special .

128

not_paren_star_quote_special

 ‘!’ | ‘“’ | ‘#’ | ‘$’ | ‘%’ | ‘&’ | ‘

’ | ‘,’

|

 ‘-’ | ‘.’ | ‘/’ | ‘:’ | ‘;’ | ‘<‘ | ‘

’ | ‘>’

|

 ‘?’ | ‘@’ | ‘[‘ | ‘

’ | ‘]’ | ‘_’ | ‘‘’|

 ‘{’ | ‘|’ | ‘}’ | ‘~’ .

129

not_paren_star_special

 not_paren_star_quote_special  |

’’’’ .

130

not_quote

not_paren_star_quote_specnal | letter | digit | ‘(’ | ‘)’ | ‘

’ .

131

not_rparen

 not_paren_star | ‘

’ | ‘(’ .

132

not_star

 not_paren_star | ‘(’ | ‘)’ .


116

B 3700-11-1996 (ISO 10303-11 : 1994)

133

octet

 hex_digit hex_digit .

134

special

 not_paren_star_quote_special | ‘(’ | ‘)’ | ‘

’ | ‘‘’’ .

135

star_not_rparen

 ‘

’ not_rparen .

A.1.3

字句要素

  次の規則は,文字の組合せが,言語においてどのように字句要素として解釈されるかに

ついて規定する。

136

binary_literal

 ‘%’ bit { bit } .

137

encoded_string_literal

 ‘“’ encoded_character { encoded_character } ‘“’ .

138

integer_literal

 digits  .

139

real_literal

 digits ‘.’ [ digits ] [ ‘e’

 sign ] digits

.

140

simple_id

 letter { letter | digit | ‘_’ } .

141

simple_string_literal

q

(

q

q ) | not_quote |

s |

o |

q .

A.1.4

注釈

  次の規則は,EXPRESS の注釈の構文を規定する。

142

embedded_remark

 ‘(

’ { not_1paren_star | 1paren_not_star | star_not_rparen

|

embedded_remark } ‘

)’ .

143

remark

 embedded_remark | tail_remark .

144

tail_remark

 ‘--’  {

a |

s |

o }

n .

A.1.5

解釈される識別子

  次の規則は,特定の意味をもつことが分かっている(すなわち,他の箇所で型,

関数などとして宣言された)識別子を表現する。

備考

次の構文規則に合致する識別子は,実装で認識できることが期待される。実装がその情報を得

る方法は,言語の定義では関与しない。この情報を得る一つの方法は,多重パス構文解析であ

る。すなわち,最初のパスでそれらの宣言から識別子を集めておけば,後続のパスで,例えば

variable_ref

function_ref

とを区別することができる。

145

attribute_ref

 attribute_id  .

146

constant_ref

 constant_id  .

147

entity_ref

 _ entity_id .

148

enumeration_ref

 enumeration_id  .

149

function_ref

 function_id  .

150

parameter_ref

 parameter_id  .

151

procedure_ref

 procedure_id  .

152

schema_ref

 schema_id  .

153

type label_ref

 type label_id .

154

type_ref

 type_id  .

155

variable_ref

 variable_id  .

A.2

文法規則

  次の規則は,

A.1

の字句要素が EXPRESS の構成要素に組み込まれる方法を規定する。空白

及び/又は注釈は,これらの規則では任意の二つの字句の間に現れてよい。EXPRESS の開始構文規則は,

syntax

とする。

156

abstract_supertype_declaration

 ABSTRACT SUPERTYPE [ subtype_constraint ] .

157

actual parameter list

 ‘(’ parameter { ‘,’ parameter } ‘)’ .


117

B 3700-11-1996 (ISO 10303-11 : 1994)

158

add_like_op

 ‘

’ | ‘-’ | OR | XOR .

159

aggregate_initializer

 ‘[’[ element { ‘,’ element }] ‘]’ .

160

aggregate_source

 simple_expression  .

161

aggregate_type

 AGGREGATE [ ‘:’ type_label ] OF parameter_type .

162

aggregation_types

 array_type | bag_type | list_type | set_type .

163

algorithm_head

 { declaration } [ constant_decl ] [ local_decl ] .

164

alias_stmt

  ALIAS variable id FOR general_ref { qualifier } ‘;’ stmt { stmt }

END_ALIAS ‘;’

165

array_type

 ARRAY bound spec OF [ OPTIONAL ] [ UNIQUE ] base_type .

166

assignment_stmt

 general_ref { qualifier } ‘:

’ expression ‘;’ .

167

attribute_decl

 attribute_id | qualified_attribute .

168

attribute_id

 simple_id  .

169

attribute_qualifier

 ‘.’ attribute_ref .

170

bag_type

 BAG [ bound_spec ] OF base_type .

171

base_type

 aggregation_types | simple_types | named_types .

172

binary_type

 BINARY [ width_spec ] .

173

boolean_type

 BOOLEAN  .

174

bound_1

 numeric_expression  .

175

bound_2

 numeric_expression  .

176

bound_spec

 ‘[’ bound_1 ‘:’ bound_2 ‘]’ .

177

built_in_constant

 CONST_E | PI | SELF | ‘?’ .

178

built_in_function

 ABS | ACOS | ASIN | ATAN | BLENGTH | COS | EXISTS |

EXP | FORMAT | HIBOUND | HIINDEX | LENGTH |

LOBOUND | LOINDEX | LOG | LOG2 | LOG10 | NVL | ODD |

ROLESOF | SIN | SIZEOF | SQRT | TAN | TYPEOF |

USEDIN | VALUE | VALUE_IN | VALUE_UNIQUE .

179

built_in_procedure

 INSERT | REMOVE .

180

case_action

 case_label  { ‘,’ case_label } ‘:’ stmt .

181

case_label

 expression  .

182

case_stmt

 CASE selector OF { case_action } [ OTHERWISE ‘:’ stmt ]

END_CASE ‘;’

183

compound_stmt

 BEGIN stmt { stmt } END ‘;’ .

184

constant_body

 constant_id ‘:’ base_type ‘:

’ expression ‘;’ .

185

constant_decl

 CONSTANT constant_body { constant_body } END_CONSTANT ‘;’ .

186

constant_factor

 built_in_constant | constant_ref .

187

constant_id

 simple_id  .

188

constructed_types

 enumeration_type | select_type .

189

declaration

 entity_decl | function_decl | procedure_decl | type_decl .

190

derived_attr

 attribute_decl ‘:’ base_type ‘:

’ expression ‘;’ .

191

derive_clause

 DERIVE derived_attr { derived_attr } .


118

B 3700-11-1996 (ISO 10303-11 : 1994)

192

domain_rule

 [ label ‘:’ ] logical_expression .

193

element

 expression [ ‘:’ repetition ] .

194

entity_body

 { explicit_attr } [ derive_clause ] [ inverse_clause ]

 [ unique_clause ] [ where_clause ]

195

entity_constructor

 entity_ref ‘(’ [ expression { ‘,’ expression }] ‘)’

196

entity_decl

 entity_head entity_body END_ENTITY ‘;’ .

197

entity_head

 ENTITY entity_id [ subsuper ] ‘;’ .

198

entity_id

 simple id .

199

enumeration_id

 simple_id  .

200

enumeration_reference

 [ type_ref ‘.’ ] enumeration_ref .

201

enumeration_type

 ENUMERATION OF ‘(’ enumeration_id { ‘,’ enumeration_id }

‘)’ .

202

escape_stmt

 ESCAPE ‘;’ .

203

explicit_attr

 attribute_decl { ‘,’ attribute_decl } ‘:’ [ OPTIONAL ]

 base_type ‘;’ .

204

expression

 simple_expression [ rel_op_extended simple_expression ] .

205

factor

 simple_factor [ ‘

**

’ simple_factor ] .

206

formal_parameter

 parameter_id { ‘,’ parameter_id } ‘:’ parameter_type .

207

function_call

 ( built_in_function | function_ref )

[ actual_parameter_list ] .

208

function_decl

 function_head [ algorithm_head ] stmt { stmt } END_FUNCTION

‘;’ .

209

function_head

 FUNCTION function_id [ ,(, formal_parameter

 { ‘;’ formal_parameter }) ] parameter_type ‘,’ .

210

function_id

 simple_id  .

211

generalized_types

 aggregate_type | general_aggregation_types |

generic_type .

212

general_aggregation_types

 general_array_type | general_bag_type |

 general list_type | general set_type .

213

general_array_type

 ARRAY [ bound_spec ] OF [ OPTIONAL ] [ UNIQUE ]

parameter_type .

214

general_bag_type

 BAG [ bound spec ] OF parameter type .

215

general_list_type

 LIST [ bound spec ] OF [ UNIQUE ] parameter_type .

216

general_ref

 parameter_ref | variable_ref .

217

general_set_type

 SET [ bound_spec ] OF parameter_type .

218

generic_type

 GENERIC [ ‘:’ type_label ] .

219

group_qualifier

 ‘

’, entity_ref .

220

if_stmt

 IF logical expression THEN stmt { stmt } [ ELSE stmt { stmt }]

END_IF ‘;’ .

221

increment

 numeric_expression  .


119

B 3700-11-1996 (ISO 10303-11 : 1994)

222

increment_control

 variable_id ‘:

’ bound_1 TO bound_2 [ BY increment ] .

223

index

 numeric_expression  .

224

index_1

 index  .

225

index_2

 index  .

226

index_qualifier

 ‘[’ index_1 [ ‘:’ index_2 ]‘]’ .

227

integer_type

 INTEGER  .

228

interface_specification

 reference_clause | use_clause .

229

interval

 ‘{’ interval_low interval_op interval_item interval_op

interval_high ‘}’ .

230

interval_high

 simple_expression  .

231

interval_item

 simple_expression  .

232

interval_low

 simple_expression  .

233

interval_op

 ‘<’ | ‘<

’ .

234

inverse_attr

  attribute_decl ‘:’ [( SET | BAG ) [ bound_spec ] OF ]entity_ref

FOR attribute_ref ‘;’

235

inverse_clause

 INVERSE inverse_attr { inverse_attr } .

236

label

 simple_id  .

237

list_type

 LIST [ bound_spec ] OF

 UNIQUE J base_type .

238

literal

 binary_literal | integer_literal | logical_literal | real_literal

|

 string_literal  .

239

local_decl

 LOCAL local_variable { local_variable } END_LOCAL ‘;’ .

240

local_variable

 variable_id { ‘,’ variable_id } ‘:’ parameter_type

[ ‘:

’ expression ] ‘;’ .

241

logical_expression

 expression  .

242

logical_literal

 FALSE | TRUE | UNKNOWN .

245

logical_type

 LOGICAL  .

244

multiplication_like_op

 ‘

’ | ‘/’ | DIV | MOD | AND | ‘| |’ .

245

named_types

 entity_ref | type_ref .

246

named_type_or_rename

 named_types [ AS ( entity_id | type_id )] .

247

null_stmt

 ‘;’  .

248

number_type

 NUMBER  .

249

numeric_expression

 simple_expression  .

250

one_of

 ONEOF ‘(‘ supertype_expression { ‘,’ supertype_expression } ‘)’ .

251

parameter

 expression  .

252

parameter_id

 simple_id  .

253

parameter_type

 generalized_types | named_types | simple_types .

254

population

 entity_ref  .

255

precision_spec

 numeric_expression  .

256

primary

 literal | ( qualifiable_factor { qualifier }) .


120

B 3700-11-1996 (ISO 10303-11 : 1994)

257

procedure_call_stmt

 ( built_in_procedure | procedure_ref )

[ actual parameter list ] ‘;’ .

258

procedure_decl

 procedure_head

 algorithm head ] { stmt } END_PROCEDURE ‘;’ .

259

procedure_head

 PROCEDURE procedure_id [ ‘(’[ VAR ] formal_parameter

{ ‘;’ [ VAR ] formal_parameter } ‘)’ ] ‘;’ .

260

procedure_id

 simple_id  .

261

qualifiable_factor

 attribute_ref | constant_factor | function call |

 general_ref | population .

262

qualified_attribute

 SELF group_qualifier attribute_qualifier .

263

qualifier

 attribute_qualifier | group_qualifier | index_qualifiser .

264

query_expression

 QUERY ‘(’ variable_id ‘<

’ aggregate source ‘|’

logical expression ‘)’ .

265

real_type

 REAL [ ‘(’ precision spec ‘)’ ] .

266

referenced_attribute

 attribute_ref | qualified_attribute .

267

reference_clause

 REFERENCE FROM schema_ref [ ‘(’ resource_or_rename

{ ‘,’ resource or rename } ‘)’ ] ‘;’ .

268

rel_op

 ‘<’ | ‘>’ | ‘<

’ | ‘>

’ | ‘<>’ | ‘

’ | ‘:<> ’ | ‘:

:’

269

rel_op_extended

 rel_op | IN | LIKE .

270

rename_id

 constant_id | entity_id | function_id | procedure_id | type_id .

271

repeat_control

 [ increment_control ] [ while_control ] [ until_control ] .

272

repeat_stmt

 REPEAT repeat_control ‘;’ stmt { stmt } END_REPEAT ‘;’ .

273

repetition

 numeric_expression  .

274

resource_or_rename

 resource_ref [ AS rename_id ] .

275

resource_ref

 constant_ref | entity_ref | function_ref | procedure_ref |

type ref .

276

return_stmt

 RETURN [ ‘(’ expression ‘)’ ] ‘;’

277

rule_decl

 rule_head [ algonthm_head ] { stmt } where_clause END_RULE ‘;’ .

278

rule_head

 RULE rule_id FOR ‘(’ entity_ref { ‘,’ entity_ref } ‘)’ ‘;’ .

279

rule_id

 simple_id  .

280

schema_body { interface_specification } [ constant_decl ]

{ declaration | rule_decl } .

281

schema_decl

 SCHEMA schema_id ‘;’ schema_body END_SCHEMA ‘;’ .

282

schema_id

 simple_id  .

283

selector

 expression  .

284

select_type

 SELECT ‘(’ named_types { ‘,’ named_types } ‘)’ .

285

set_type

 SET [ bound_spec ] OF base_type .

286

sign

 ‘

’ | ‘

’ .

287

simple_expression

 term { add_like_op term } .

288

simple_factor

 aggregate_initializer | entity_constructor |

 enumeration reference | interval | query_expression |


121

B 3700-11-1996 (ISO 10303-11 : 1994)

 ( [ unary_op | ( ‘(’ expression ‘)’ | primary ) ) .

289

simple_types

 binary_type | boolean_type | integer_type | logical_type |

number_type | real_type | string_type .

290

skip_stmt

 SKIP ‘;’ .

291

stmt

 alias_stmt | assignment_stmt | case_stmt | compound_stmt | escape_stmt |

if stmt | null_stmt | procedure call_stmt | repeat_stmt | return_stmt |

skip stmt .

292

string literal

 simple_string_literal | encoded_string_literal .

293

string type

 STRING

 width_spec ] .

294

subsuper

 [ supertype_constraint ] [ subtype_declaration ] .

295

subtype_constraint

 OF ‘(’ supertype_expression ‘)’ .

296

subtype_declaration

 SUBTYPE OF ‘(’ entity_ref { ‘,’ entity_ref } ‘)’ .

297

supertype_constraint

 abstract_supertype_declaration | supertype_rule .

298

supertype_expression

 supertype_factor { ANDOR supertype_factor } .

299

supertype_factor

 supertype_term { AND supertype_term } .

300

supertype_rule

 SUPERTYPE subtype_constraint .

301

supertype_term

 entity_ref | one_of | ‘(’ supertype_expression ‘)’ .

302

syntax

 schema_decl { schema_decl } .

303

term

 factor { multiplication like_op factor } .

304

type_decl

 TYPE type_id ‘

’ underlying_type ‘;’ [ where_clause ] END_TYPE

‘;’ .

305

type_id

 simple_id  .

306

type_label

 type_label_id | type_label_ref .

307

type_label_id

 simple_id  .

308

unary_op

 ‘

’ | ‘

’ | NOT .

309

underlying_type

 constructed_types | aggregation_types | simple_types |

 type_ref  .

310

unique_clause

 UNIQUE unique_rule ‘;’ { unique rule ‘;’ } .

311

unique_rule

 [ label ‘:’ ] referenced_attribute { ‘,’ referenced attribute } .

312

until_control

 UNTIL logical_expression .

313

use_clause

 USE FROM schema_ref [ ‘(’ named_type_or_rename

 { ‘,’ named_type_or_rename } ‘)’ ] ‘;’

314

variable_id

 simple_id  .

315

where clause

 WHERE domain_rule ‘;’ { domain_rule ‘;’ } .

316

while control

 WHILE logical expression .

317

width

 numeric_expression  .

318

width_spec

 ‘(’ width ‘)’ [ FIXED ] .

A.3

相互参照一覧

  左側の生成規則は,右側に示された番号の生成規則で用いる。


122

B 3700-11-1996 (ISO 10303-11 : 1994)

0

ABS |

178

1

ABSTRACT |

156

2

ACOS |

178

3

AGGREGATE |

161

4

ALIAS |

164

5

AND |

244

299

6

ANDOR |

298

7

ARRAY |

165

213

8

AS |

246

274

9

ASIN |

178

 10

ATAN |

178

 11

BAG |

170

214

234

 12

BEGIN |

183

 13

BINARY |

172

 14

BLENGTH |

178

 15

BOOLEAN |

173

 16

BY |

222

 17

CASE |

182

 18

CONSTANT |

185

 19

CONST_E |

177

 20

CONTEXT |

 21

COS |

178

 22

DERIVE |

191

 23

DIV |

244

 24

ELSE |

220

 25

END |

183

 26

END_ALIAS |

164

 27

END_CASE |

182

 28

END_CONSTANT |

185

 29

END_CONTEXT |

 30

END_E NTITY

|

196

 31

END_FUNCTION |

208

 32

END_IF |

220

 33

END_LOCAL |

239

 34

END_MODEL |

 35

END_PROCEDURE |

258

 36

END_REPEAT |

272

 37

END_RULE |

277

 38

END_SCHEMA |

281

 39

END_TYPE |

304


123

B 3700-11-1996 (ISO 10303-11 : 1994)

 40

ENTITY |

197

 41

ENUMERATION |

201

 42

ESCAPE |

202

 43

EXISTS |

178

 44

EXP |

178

 45

FALSE |

242

 46

FIXED |

318

 47

FOR |

164

234

278

 48

FORMAT |

178

 49

FROM |

267

313

 50

FUNCTION |

209

 51

GENERIC |

218

 52

HIBOUND |

178

 53

HIINDEX |

178

 54

IF |

220

 55

IN |

269

 56

INSERT |

179

 57

INTEGER |

227

 58

INVERSE |

235

 59

LENGTH |

178

 60

LIKE |

269

 61

LIST |

215

237

 62

LOBOUND |

178

 63

LOCAL |

239

 64

LOG |

178

 65

LOG10 |

178

 66

L OG2

|

178

 67

LOGICAL |

245

 68

LOINDEX |

178

 69

MOD |

244

 70

MODEL |

 71

NOT |

308

 72

NUMBER |

248

 73

NVL |

178

 74

ODD |

178

 75

OF |

161

165

170

182

201

213

214

215

217

234

237

285

295

296

 76

ONEOF |

250

 77

OPTIONAL |

165

203

213

 78

OR |

158


124

B 3700-11-1996 (ISO 10303-11 : 1994)

 79

OTHERWISE |

182

 80

PI |

177

 81

PROCEDURE |

259

 82

QUERY |

264

 83

REAL |

265

 84

REFERENCE |

267

 85

REMOVE |

179

 86

REPEAT |

272

 87

RETURN |

276

 88

ROLESOF |

178

 89

RULE |

278

 90

SCHEMA |

281

 91

SELECT |

284

 92

SELF |

177

262

 93

SET |

217

234

285

 94

SIN |

178

 95

SIZEOF |

178

 96

SKIP |

290

 97

SQRT |

178

 98

STRING |

293

 99

SUBTYPE |

296

100

SUPERTYPE |

156

300

101

TAN |

178

102

THEN |

220

103

TO |

222

104

TRUE |

242

105

TYPE |

304

106

TYPEOF |

178

107

UNIQUE |

165

213

215

237

310

108

UNKNOWN |

242

109

UNTIL |

312

110

USE |

313

111

USEDIN |

178

112

VALUE |

178

113

VALUE_IN |

178

114

VALUE_UNIQUE |

178

115

VAR |

259

116

WHERE |

315

117

WHILE |

316

118

XOR |

158


125

B 3700-11-1996 (ISO 10303-11 : 1994)

119

bit |

136

120

digit |

121

123

127

130

140

121

digits |

138

139

122

encoded_character |

137

123

hex_digit |

133

124

letter |

127

130

140

125

lparen_not_star |

142

126

not_lparen_star |

142

127

net_paren_star |

126

131

132

128

net_paren_star_qnote_special |

129

130

134

129

not_paren_star_special |

127

130

not_qnote |

141

131

not_rparen |

135

132

net_star |

125

133

octet |

122

134

special |

135

star_net_rparen |

142

136

binary_literal |

238

137

encoded_string_literal |

292

138

integer_literal |

238

139

real_literal |

238

140

simple_id |

168

187

198

199

210

236

252

260

279

282

305

307

314

141

simpie_string_literal |

292

142

embedded_remark |

142

143

143

remark |

144

tail_remark |

143

145

attribute_ref |

169

234

261

266

146

constant_ref |

186

275

147

entity_ref |

195

219

234

245

254

275

278

296

301

148

enumeration_ref |

200

149

function_ref |

207

275

150

parameter_ref |

216

151

procedure_ref |

257

275

152

schema_ref |

267

313

153

type_label_ref |

306

154

type_ref |

200

245

275

309

155

variable_ref |

216

156

abstract_supertype_declaration |

297

157

actual_parameter_list |

207

257


126

B 3700-11-1996 (ISO 10303-11 : 1994)

158

add_like_op |

287

159

aggregate_initializer |

288

160

aggregate_source |

264

161

aggregate_type |

211

162

aggregation_types |

171

309

163

algorithm_head |

208

258

277

164

alias_stmt |

291

165

array_type |

162

166

assignment_stmt |

291

167

attribute_decl |

190

205

234

168

attribute_id |

145

167

169

attribute_qualifier |

262

263

170

bag_type |

162

171

base_type |

165

170

184

190

203

237

285

172

binary_type |

289

173

boolean_type |

289

174

bound_1 |

176

222

175

bound_2 |

176

222

176

bound_spec |

165

170

213

214

215

217

234

237

285

177

built_in_constant |

186

178

built_in_function |

207

179

built_in_procedure |

257

180

case_action |

182

181

case_label |

180

182

case_stmt |

291

183

compound_stmt |

291

184

constant_body |

185

185

constant_decl |

165

280

186

constant_factor |

261

187

constant_id |

146

184

270

188

constructed_types |

309

189

declaration |

163

280

190

derived_attr |

191

191

derive_clause |

194

192

domain_rule |

315

193

element |

159

194

entity_body |

196

195

entity_constructor |

288

196

entity_decl |

189

197

entity_head |

196


127

B 3700-11-1996 (ISO 10303-11 : 1994)

198

entity_id |

147

197

246

270

199

enumeration_id |

148

201

200

enumeration_reference |

288

201

enumeration_type |

188

202

escapc_stmt |

291

203

explicit_attr |

194

204

expression |

166

181

184

190

193

195

240

241

251

276

283

288

205

factor |

303

206

formal_parameter |

209

259

207

function_call |

261

208

function_decl |

189

209

function_head |

208

210

function_id |

149

209

270

211

generalized_types |

253

212

general_aggregation_types |

211

213

general_array_type |

212

214

general_bag_type |

212

215

general_list_type |

212

216

general_ref |

164

166

261

217

general_set_type |

212

218

generic_type |

211

219

group_qualifier |

262

263

220

if_stmt |

291

221

increment |

222

222

increment_control |

271

223

index |

224

225

224

index_1 |

226

225

index_2 |

226

226

index_qualifier |

265

227

integer_type |

289

228

interjace_specification |

280

229

interval |

288

230

interval_high |

229

231

interval_item |

229

232

interval_low |

229

233

interval_op |

229

234

inverse_attr |

235

235

inverse_clause |

194

236

label |

192

311


128

B 3700-11-1996 (ISO 10303-11 : 1994)

237

list_type |

162

238

literal |

256

239

local_decl |

165

240

local_variable |

239

241

logical_expression |

192

220

264

312

316

242

logical_literal |

238

243

logical_type |

289

244

multiplication_like_op |

303

245

named_types |

171

246

253

284

246

named_type_or_rename |

313

247

null_stmt |

291

248

number_type |

289

249

numeric_expression |

174

175

221

223

255

273

317

250

one_of |

301

251

parameter |

157

252

parameter_id |

150

206

253

parameter_type |

161

206

209

213

214

215

217

240

254

population |

261

255

precision_spec |

265

256

primary |

288

257

procedure_call_stmt |

291

258

procedure_decl |

189

259

procedure_head |

258

260

procedure_id |

151

259

270

261

qualifiable_factor |

256

262

qualified_attribute |

167

266

263

qualifier |

164

166

256

264

query_expression |

288

265

real_type |

289

266

referenced_attribute |

311

267

reference_clause |

228

268

rel_op |

269

269

rel_op_extended |

204

270

rename_id |

274

271

repeat_control |

272

272

repeat_stmt |

291

273

repetition |

193

274

resource_or_rename |

267

275

resource_ref |

274

276

return_stmt |

291


129

B 3700-11-1996 (ISO 10303-11 : 1994)

277

rule_decl |

280

278

rule_head |

277

279

ruIe_id |

278

280

schema_body |

281

281

schema_decl |

302

282

schema_id |

152

281

283

selector |

182

284

select_type |

188

285

set_type |

162

286

sign |

139

287

simple_expression |

160

204

230

231

232

249

288

simple_factor |

205

289

simple_types |

171

253

309

290

skip_stmt |

291

291

stmt |

164

180

189

183

208

220

258

272

277

292

string_literal |

238

293

string_type |

289

294

subsuper |

197

295

subtype_constraint |

156

300

296

subtype_declaration |

294

297

supettype_constraint |

294

298

supettype_expression |

250

295

301

299

supertype_factor |

298

300

supertype_rule |

297

301

supertype_term |

299

302

syntax |

303

term |

287

304

type_decl |

189

305

type_id |

154

246

270

304

306

type_label |

161

218

307

type_label_id |

153

306

308

unary_op |

288

309

underlying_type |

304

310

unique_clause |

194

311

unique_rule |

510

312

until_control |

310

313

use_clause |

228

314

variable_id |

155

164

222

240

264

315

where_clause |

194

277

304

316

while_control |

271


130

B 3700-11-1996 (ISO 10303-11 : 1994)

317

width |

318

318

width_spec |

172

293


131

B 3700-11-1996 (ISO 10303-11 : 1994)

附属書 B(規定)  許容されるエンティティインスタンスの決定

特定の上位型・下位型のグラフに対して,インスタンス化の可能な多数の複合エンティティデータ型及

び単純エンティティデータ型が存在する。この附属書は,一般的な上位型・下位型のグラフ宣言でこれら

のエンティティインスタンスを導出する方法を示す。

備考

幾つかの要点を説明するため,自然数の集合 [1,2,3,

.]  を考える。この集合は,多くの

異なる方法で区分することができる。

−  偶数及び奇数:     [2,4,6,

.]  及び [1,3,5,7,

.]

−  素数:     [2,3,5,7,

.]

−  3 の倍数:     [3,6,9,12,

.]

−  4 の倍数:     [4,8,12,16,

.]

EXPRESS

では,自然数の集合は上位型として,その他の集合はその下位型としてモデル化で

きる。下位型には,要素が重複しない下位型(例えば,

“偶数”及び“奇数”

)もあれば,要素

を共有する下位型(例えば,下位型“3 の倍数”及び“4 の倍数”は, [12,24,

.]  の共通

要素をもつ。

)もある。

B.1

形式的な方法

  上位型・下位型によって関係付けられたエンティティデータ型のグループは,インス

タンス化の可能性をもった上位型・下位型のグラフとみなすことができる。ここで規定する形式的な方法

では,これらエンティティデータ型のグループを部分複合エンティティデータ型と呼ぶ。一つのエンティ

ティデータ型はインスタンス化できる可能性があるので,部分複合エンティティデータ型は,一つのエン

ティティデータ型であってもよい。部分複合エンティティデータ型は,それを構成するエンティティデー

タ型の名前を&文字で区切って表示する。部分複合エンティティデータ型は,他の部分複合エンティティ

データ型を形成するために組み合わせてもよい。部分複合エンティティデータ型は,複合エンティティデ

ータ型であってもよい。これを確認するには,評価を完全にしなければならない。複合エンティティイン

スタンスは,複合エンティティデータ型のインスタンスとし,対象とするオブジェクトを表す。

次の恒等式は,任意の部分複合エンティティデータ型に対し成立する。

−  A&AA

すなわち,特定のエンティティデータ型は,与えられた部分複合エンティティデータ型内に一度

だけ現れる。

−  A&BB&A

すなわち,部分複合エンティティデータ型のグループ化は,可換則に従う。

−  A& (B&C)  ≡  (A&B) &CA&B&C

すなわち,部分複合エンティティデータ型のグループ化は,結合則に従う。括弧は,評価の優先

度を示すが,この場合差異はない。

評価集合は,部分複合エンティティデータ型の数学的集合として定義される。それは,角括弧に

囲まれ,かつコンマ (,) によって区切られた部分複合エンティティデータ型で表される。空の評価

集合は,

[  ]によって表される。

二つの演算子が,部分複合エンティティデータ型と評価集合とを結合するために用いられる。

−  A  +  [B1,B2]  ≡  [B1,B2]  +  A≡  [AB1,B2]


132

B 3700-11-1996 (ISO 10303-11 : 1994)

演算子+は,部分複合エンティティデータ型を新しい要素として評価集合に加える。一つの評価

集合では同じ部分複合エンティティデータ型が 2 回以上現れてはならない。

−  A& [B1,B2]  ≡  [B1,B2] &A  ≡  [A&B1,A&B2]

演算子&は,部分複合エンティティデータ型をその評価集合内のすべての部分複合エンティティ

データ型に加える。これによって,評価集合上で分配則が成立する。

評価集合同士は,上と同じ二つの方法で結び付けてもよい。

−  [A1,A2]  +  [B1,B2]  ≡  [A1,A2,B1,B2]

評価集合は,結合された二つの集合のすべての要素を含んだものからなる。これは,二つの集合

の和である。

−  [A1,A2] & [B1,B2]  ≡  [A1&B1,A1&B2,A2&B1,A2&B2]

評価集合は,最初の評価集合のそれぞれの要素を,&の分配則によって 2 番目の評価集合に繰り

返し適用して生成される。

評価集合は,新しい評価集合を生成するために,演算子/を用いて選別してもよい。

−  [AA&BA&CA&B&DB&CD] /A  ≡  [AA&BA&CA&B&D]

新しい評価集合は,元の評価集合内で,与えられた部分複合エンティティデータ型を含んだもの

だけを含む。

−  [AA&BA&CA&B&DB&CD] / [BD]  ≡  [A&BA&B&DB&CD]

新しい評価集合は,最初の評価集合を 2 番目の評価集合の個々の部分複合エンティティデータ型

により繰り返して選別し,その結果を演算子+を用いて結合することによって生成される。

評価集合同士は,新しい評価集合を生成するために演算子−を用いて差をとってもよい。

−  [A1,A2,B1,B2]  −  [A2,B1]  ≡  [A1,B2]

評価集合は,最初の評価集合に含まれるすべての要素から 2 番目の評価集合を除いた要素で生成

できる。

次の恒等式が,任意の評価集合に対して成立する。

−  [AB]  ≡  [BA]

評価集合は,その要素の順序に影響されない。

−  [AAB]  ≡  [AB]

特定の複合エンティティデータ型は,任意の評価集合中で一度しか現れない。

−  [A,[BC]]≡  [ABC]

評価集合は,入れ子になってもよい。

B.2

上位型演算子

  EXPRESS の上位型式は,

B.1

に従って,評価集合で書き換えることができる。

上位型の項(

ONEOF

AND

又は

ANDOR

)がなくなるまで,

B.2.1

B.2.3

に示す書換え則が再帰的に適

用される。

これらの書換え則だけでは,上位型演算子(特に

ONEOF

)の意味を完全には記述できない。したがっ

て,

B.3

に示す完全なアルゴリズムが必要となる。

B.2.1

ONEOF

ONEOF

のリストは,そのリスト中の要素を含む評価集合となる。

ONEOF

 (A

B

.)  →  [AB

.]

B.2.2

AND

  演算子 AND は,演算子&と等価で,部分複合エンティティデータ型又は評価集合を生成す

るため,部分複合エンティティデータ型又は評価集合に作用する。


133

B 3700-11-1996 (ISO 10303-11 : 1994)

A

AND

 B

→  [A&B]

A

AND ONEOF

 (B1

B2)  →  A& [B1,B2]  =  [A&B1,A&B2]

ONEOF

=  (A1,A2)

AND

ONEOF

 (B1

B2)  →  [A1,A2] & [B1,B2]  =  [A1&B1,A1&B2,A2&B1,A2 &

B2]

B.2.3

ANDOR

  演算子

ANDOR

は,それぞれの被演算子と演算子&で結合された被演算子とを含む評価

集合を生成する。

ANDOR

は,部分複合エンティティデータ型又は評価集合に作用する。

A

ANDOR

 B

→  [ABA&B]

A

ANDOR ONEOF

 (B1

B2)  →  [A,[B1,B2]  ,A& [B1,B2]]=  [AB1,B2,A&B1,A&B2]

ONEOF

 (A1

A2)

ANDOR

ONEOF

 (B1

B2)  → [[A1,A2]  ,  [B1,B2]  ,A1,A2]& [B1,B2]]=  [A1,A2,

B1

B2,A1&B1,A1&B2,A2&B1,A2&B2]

B.2.4

演算子の優先順位

  評価集合は,

9.2.4.5

に規定するとおり,最も優先順位の高いものから順に,左

から右へと評価される。

例 154.

  式は,次のとおり評価される。

A ANDOR B AND C

 [A

B&C]

A& [B&C]

]=

 [A

B&C

A&B&C]

B.3

可能な複合エンティティデータ型の解釈

  宣言された構造から得られる情報を付け加えて上位型式を

解釈することによって,EXPRESS スキーマの開発者は,それらの宣言でインスタンス化できる可能性のあ

る複合エンティティデータ型を決定できる。これを決定するために,上位型・下位型のグラフで使う複合

エンティティデータ型の評価集合を生成してよい。このため,次の用語を定義する。

多重継承下位型

  (

multiply inheriting subtype

)

  この型は,下位型宣言で二つ以上の上位型を識別

している下位型とする。

根上位型

  (

root supertype

)

  根上位型は,下位型となることのない上位型とする。

複合エンティティデータ型の評価集合 は,次の手順で計算される。

(a)

上位型・下位型のグラフを作るすべてのエンティティ宣言を識別する。

備考

複雑な上位型・下位型のグラフの場合,この手順は,複数回の繰返しを必要とすることもある。

(b)

上位型・下位型のグラフ内の各上位型に対して,完全な上位型式を生成する。この場合,上位型式に

書かれていない下位型に関する暗黙の

ANDOR

制約も含めて生成する。

(c)

上位型・下位型のグラフ内の各上位型 に対して,その直接の下位型間の制約を表す評価集合を生成

する。この場合,

(b)

で与えられる完全な上位型式に,

B.2

の書換え則及び

B.1

の恒等式を適用するこ

とにより生成する。とその結果とを,&を用いて結合する。が抽象上位型でない場合は,をその

結果に+を用いて加える。これによって生成された結果の集合を E

i

と呼ぶ。

(d)

上位型・下位型のグラフにおける各々の根上位型 に関して次のとおり E

r

を展開する。

(1)

  r

における下位型 に関して,E

r

における のすべての出現を,

(部分複合エンティティデタ型内部

での出現を含め)E

s

があれば,それと置き換える。そして,

B.2

の書換え則を実行する。

(2)

再帰的に

(d)(1)

を個々の に適用して,

E

s

が存在しない)葉のエンティティに至るまで の下位型

を展開する。

備考

上位型・下位型のグラフは循環をもたないので,この再帰は,終了する。

(e)

根集合を組み合わせる。

å

r

r

r

r

E

E

E

R

2

1

。すなわち,は,

(d)

で生成された集合の和である。

(f)

各多重継承下位型 に対して,次の手順を行う。


134

B 3700-11-1996 (ISO 10303-11 : 1994)

(1)

その直接の上位型 の各々に対して,中の と との両方を含む複合データ型の集合 R/m/を生

成する。

(2)

m

によって許された上位型の組合せの評価集合 P

m

R/m/s1&R/m/s2&.

.を生成する。すなわち

(f)(1)

で得られた評価集合を&を用いて結合する。

(3)

m

と上位型のすべて又は一部を含む組合せの評価集合

å

s

m

s

m

R

X

/

/

を生成する。すなわち(f)(1)

得られた評価集合の和を求める。

(4)

  R

=  (RX

m

)

P

m

とする。

(g)

 ONEOF

(S

1

S

2

.)  の形の上位型の項 に対して次の手順を行う。

(1)

  k

における部分式の組合せ S

i

S

j

 (i

j)  に関して,ONEOF (S

i

S

j

)

で許容されない組合せの集合

j

i

k

D

,

[S

i

&S

j

]

を計算する。さらに,

j

i

k

D

,

に B.2 の書換え則及び B.1 の恒等式に従って書き換える。

(2)

å

j

i

j

i

k

k

D

D

,

,

とする。すなわち(g)(1)の和を取る。

(3)

  R

=  R  −  (R/D

k

)

とする。

(h)

  S

1

 AND S

2

の形の上位型の項 に対して次の手順を行う。

(1)

  k

において要求される組合せの集合 Q

k

=  [S

1

&S

2

]

を計算する。さらに,Q

k

に B.2 の書換え則及び

B.1

の恒等式に従って書き換える。

(2)

  k

内のエンティティデータ型 に対して,を含むエンティティの組合せであって で許されないも

のの集合を計算する

i

k

D

R

/

i

R

/ (

Q

k

/

i

)

(3)

å

i

k

i

k

D

D

とする。D

k

は,

(h)(2)

で計算した集合の和である。

(4)

R

R

D

k

とする。

(i)

最終的な評価集合 は,入力された上位型・下位型のグラフに対する評価集合とする。

155.

この例では,エンティティの上位型及び下位型の宣言だけを示す。それは,複合エンティティ

データ型を解釈するのに十分な情報だからである。

SCHEMA example;

ENTITY p SUPERTYPE OF (ONEOF(m, f) AND ONEOF (C, a));

ENTITY m SUBTYPE OF (p);

ENTITY f SUBTYPE OF (p);

ENTITY c SUBTYPE OF (p);

ENTITY a ABSTRACT SUPERTYPE OF (ONEOF(1, i)) SUBTYPE OF (p);

ENTITY 1 SUBTYPE OF (a);

ENTITY i SUBTYPE OF (a);

END_SOHEMA;

これを,

附属書 B

図 B.1

において EXPRESS

-

G

によって示す。

とり得る複合エンティティデータ型は,次のとおり決定できる。


135

B 3700-11-1996 (ISO 10303-11 : 1994)

附属書 図 B.1  例 155.のための EXPRESS-G 

上の EXPRESS は,手順

(a)

及び手順

(b)

で要求されるエンティティ宣言と完全な上位型式とのすべ

てを示している。

手順

(c)

を適用して,次が得られる。

E

p

  [

p

&

m

&

c

p

&

m

&

a

p

&

f

&

c

p

&

f

&

a

p

]

E

a

  [

a

&

l

a

&

i

]

根エンティティ の宣言を,手順

(d)

を適用して展開する。結果の集合は,次のとおりになる。

E

p

 [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

手順

(e)

で根集合を組み合わせて,次が得られる。

R

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

多重継承下位型は存在しないので,手順

(f)

は無視する。

手順

(g)

を各々の制約に適用して,次が得られる。

ONEOF

 (

m

f

)

の場合:

2

,

1

1

D

  [

m

&

f

]

  D

1

  [

m

&

f

]

手順

(g)(3)

に従って から D

1

を除去しても,は変更されない。したがって残りは,次のとお

りとなる。

R

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

ONEOF

 (

c

a

)

の場合:

2

,

1
2

D

  [

c

&

a

]

  D

2

  [

c

&

a

]

手順

(g)(3)

に従って から D

2

を除去しても,は変更されない。したがって残りは,次のとお

りとなる。

R

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

ONEOF

(

l

i

)

の場合:

2

,

1
3

D

  [

l

&

i

]


136

B 3700-11-1996 (ISO 10303-11 : 1994)

  D

3

  [

l

&

i

]

手順

(g)(3)

に従って から D

3

を除去しても,は変更されない。したがって残りは,次のとお

りとなる。

R

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

AND

制約に手順

(h)

を適用して,次が得られる。

ONEOF 

(

m

f

) AND ONEOF (

c

a

)

の場合:

  Q

1

  [

m

&

c

m

&

a

f

&

c

f

&

a

]

m

D

1

=[

f

D

1

=[

c

D

1

=[

a

D

1

=[

D

1

=[

手順

(h)(4)

に従って から D

1

を除去しても,は変更されない。したがって残りは,次のとお

りとなる。

R

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

手順

(i)

に従って結果は次のとおりになる。

E

p

  [

p

&

m

&

c

p

&

m

&

a

&

l

p

&

m

&

a

&

i

p

&

f

&

c

p

&

f

&

a

&

l

p

&

f

&

a

&

i

p

]

この例は,エンティティに分かりやすい名前を付ければ,現実的な例となる。例えば,

p

m

f

c

a

l

及び

i

に,それぞれ

person

male

female

citizen

alien

legal_alien

及び

illegal_alien

と名前を

付けると,現実的になる。

これによって,最終的な評価集合中の要素は,次のように読める。

  person

  male

であり

citizen

である

person

  male

であり

alien

であり

illegal_alien

である

person

.である

person

156. ONEOF

は多重継承に優先する大域的な制約である場合を,この例は示している。

SCHEMA diamond;

ENTITY a SUPERTYPE OF (ONEOF(b, c));

ENTITY b SUPERTYPE OF (d) SUBTYPE OF (a);

ENTITY c SUPERTYPE OF (d) SUBTYPE OF (a);

ENTITY d SUBTYPE OF (b, c);

END_SCHEMA;

これを,

附属書 B

図 B.2

において EXPRESS

-

G

によって示す。

とり得る複合エンティティデータ型は,次のとおり決定できる。


137

B 3700-11-1996 (ISO 10303-11 : 1994)

附属書 図 B.2  例 156.のための EXPRESS-G 

上の EXPRESS は,手順

(a)

及び手順

(b)

で要求されるエンティティ宣言と完全な上位型式とのすべ

てを示している。

手順

(c)

を適用して,次が得られる。

E

a

  [

a

&

b

a

&

c

a

]

E

b

  [

b

&

d

b

]

E

c

  [

c

&

d

c

]

E

d

  [

d

]

根エンティティ の宣言を,手順

(d)

を適用して展開する。結果の集合は,次のとおりになる。

E

a

  [

a

&

b

&

d

a

&

b

a

&

c

&

d

a

&

c

a

]

手順

(e)

で根集合を組み合わせて,次が得られる。

R

  [

a

&

b

&

d

a

&

b

a

&

c

&

d

a

&

c

a

]

各々の多重継承下位型に対して手順

(f)

を適用すると,次が得られる。

●  エンティティ の場合:

b

d

C

  [

a

&

b

&

d

]

c

d

C

  [

a

&

c

&

d

]

Pd

  [

a

&

b

&

d

&

c

]

Xd

  [

a

&

b

&

d

a

&

c

&

d

]

新しい集合 R

  (

R

X

d

)

Pd

は,次のとおりとなる。

[

a

&

b

a

&

c

aa

&

b

&

d

&

c

]

手順

(g)

を各々の

ONEOF

制約に適用して,次が得られる。

ONEOF 

(

b

c

)

の場合:

2

,

1

1

D

  [

b

&

c

]

D

1

  [

b

&

c

]

手順

(g)(3)

に従うと から次の要素が除去される。

  [

a

&

b

&

d

&

c

]

したがって残りは,


138

B 3700-11-1996 (ISO 10303-11 : 1994)

R

  [

a

&

b

a

&

c

a

]

 AND

を用いる上位型式が存在しないので手順

(h)

は無視する。

手順

(i)

に従って,結果は,次のとおりになる。

R

  [

a

&

b

a

&

c

a

]

157.

この例は,各種の制約を少なくとも一つづつ含んでおり,複雑な構造に制約を適用したときの

影響を示す。

この例は,意味のある概念をモデル化することを意図しておらず,単にアルゴリズムの説明

のために用いられる。

SOHEMA complex;

ENTITY a SUPERTYPE OF (ONEOF(b,c) AND d ANDOR f);

ENTITY b SUBTYPE OF (a);

ENTITY c SUBTYPE OF (a);

ENTITY d ABSTRACT SUPERTYPE OF (ONEOF(k,l)) SUBTYPE OF (a);

ENTITY f SUBTYPE OF (a,z);

ENTITY k SUBTYPE OF (d);

ENTITY l SUBTYPE OF (d,y);

ENTITY x SUBTYPE OF (z);

ENTITY y SUPERTYPE OF (l) SUBTYPE OF (z);

ENTITY z SUPERTYPE OF (f ANDOR x ANDOR y);

END_SCHEMA;

これを,

附属書 B

図 B.3

において EXPRESS

-

G

によって示す。

とり得る複合エンティティデータ型は,次のとおり決定できる。

附属書 図 B.3  例 157.のための EXPRESS-G 

上の EXPRESS は,手順

(a)

及び手順

(b)