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

 

日本工業規格          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

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


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で定義されたデータ仕様記述言語とする。この言語は,あいまいさなくデー

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

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

− データ型 

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

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

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

− ファイル様式の定義 


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)  エンティティの一つの表現。エンティティデータ型は,

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


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より大でなければなら

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


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.2,D.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言語で書いたスキーマには,定義域を設定する条件の集合を記述する。インスタンスは,それ

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

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

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

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


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 ʻ]ʼ . 


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 

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

法を使う。 

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

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

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

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

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

 

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

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


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 = ʻ!ʼ | ʻ”ʼ | ʻ#ʼ | ʻ$ʼ | ʻ%ʼ | ʻ&ʼ | ʻ+ʼ | ʻ,ʼ | 

                      ʼ-ʼ | ʻ.ʼ | ʻ/ʼ | ʻ:ʼ | ʻ;ʼ | ʻ<ʻ | ʻ=ʼ | ʻ>ʻ | 

                      ʼ?ʼ | ʻ@ʼ | ʻ[ʻ | ʻ\ʼ | ʻ]ʼ | ʻ^ʼ | ʻ̲ʼ | ʻʻʻ | 

                      ʼ{ʻ | ʻ|ʼ | ʻ}ʼ | ʻ~ʼ . 


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)は,二つの字句の間又は明示的な

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

7.1.5.2 

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

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

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

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

7.1.5.3 

その他の文字 7.1.1〜7.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̲CONTEXT,MODEL及び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) を,表2に示す。これら演

算子の定義は,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) の名前を,表3に示す。これら定数の定義は,14.によ

る。 

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

SELF 

CONST̲E 

PI 

FALSE 

TRUE 

UNKNOWN 

 

7.2.4 

組込み関数 組込み関数 (built-in function) の名前を,表4に示す。これら関数の定義は,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) の名前を,表5に示す。これら手続の定義は,16.に

よる。 

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

INSERT 

REMOVE 

7.3 

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

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

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

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

に示す。 


12 

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

表6 EXPRESSの記号 

' 

* 

+ 

= 

\ 

<= 

<> 

>= 

<* 

:= 

|| 

** 

-- 

(* 

*) 

:=: 

: <> : 

 

 

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) は,論理データ型又はブールデータ型の値を表現し,

組込み定数TRUE,FALSE又は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データ型は,その定義域として,三つのリテラルTRUE,FALSE及び

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を下限,nを上限とすると,その配列は,n−m+1個の要素を含む。これらの各要素には,m〜nの添

字を付ける(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が省略されている場合,上下限は, [0 : ?] となる。 

例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が省略されている場合,上下限は, [0 : ?] となる。 

(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は,同値類の作成を可能にする次の特性をもつほうがよい。次に示すSは,

検討中のオブジェクトの集合とする。my̲equa1 (i,j) は,TRUE,FALSE又UNKNOWNはの

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

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

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

ことを必要としない。)。 

(b) 集合Sのすべての要素i,jに対して,my̲equal (i,j) =my̲equa1 (j,i) が成立する。 

(c) 集合Sのすべての要素i,j及びkに対して,(my̲equa1(i,j) =TRUE) かつ (my̲equa1(j,

k) =TRUE)ならば(my̲equa1(i,k) =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. a及びbがcの下位型であり,それらがANDOR式で関係付けられ,かつSELECT(a,b)で定義

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

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

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

付ける。取付け方法は,更に細分化される。wall̲mountingの値は,nail,screw,glue又は

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に示す。 

表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) 各定義域規則は,論理値(TRUE,FALSE又はUNKNOWN)又は不定“?”に評価される。 

(b) キーワードSELF(14.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,b及びcという名前の三つの属性をもつエンティティは,次のとおりに書ける。 

     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) 各定義域規則の式は,論理値(TRUE,FALSE又は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に評価される。 

省略可能な属性が不定“?”であるとき,適切な値を得るために関数NVL(15.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点(centre,p2及びp3)は明示属性だが,radius,axis及

び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 (a,b,c) という句は,“インスタンスは,エンティティデータ型a,b又はcのいずれ

かからなる。”と読む。 

例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 cという句は,“インスタンスは,b型及び/又はc型からなる。”と読む。 

例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 cという句は,“インスタンスは,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 

上位型演算子の優先順位 上位型式の評価は,左から右へ,最も高い優先順位の演算子から先に

評価しつつ行う。表8に,上位型式の演算子に対する優先順位の規則をまとめて示す。同一の行にある演

算子は,同一の優先順位をもち,行は優先順位の高い順に並んでいる。 


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をARRAY,BAG,LIST又は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がBINARY,STRING又は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) 関数では,次の場合,有効範囲の外で宣言された局所変数又は引き数を変更することができる。すな

わち,注目する関数がFUNCTION,PROCEDURE又は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) 

規則及び制約: 

手続は,次の場合,有効範囲の外で宣言された局所変数又は引き数を変更することができる。すなわち,

注目する手続がFUNCTION,PROCEDURE又は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,BAG,LIST及び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を使用するのがよい。 

− 基底型がGENERIC,AGGREGATE又は一般化集合体データ型のいずれかである集合体。 

例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(規定)参

照]によって定まる。 

ここでは,表9で規定するそれぞれの項目について,有効範囲が定義されるならば,それを規定すると

ともに,識別子の可視性の一般的な規則及びその詳細を規定する。 

10.1 有効範囲の規則 EXPRESS言語で許される有効範囲定義のすべての形に適用できる一般的な規則は,

次のとおりとする。有効範囲を定義する項目を,表9に示す。 

規則及び制約: 

(a) 宣言は,ある有効範囲内に存在しなければならない。 

(b) 識別子は,一つの有効範囲内で,1回だけ宣言してもよいし,1回だけ明示的にインタフェース(11.

参照)してもよい。同一の宣言から複数の経路を介して,注目のスキーマに明示的にインタフェース

されたエンティティ又は型の識別子は,1回だけのインタフェースと数える。 

(c) 有効範囲は,正しく入れ子になっていなければならない。すなわち,有効範囲は,ずれて重なってい

てはならない(これは,言語の構文で規定される。)。 

入れ子の最大の深さはこの規格では規定しないが,EXPRESS構文解析系の実装では,入れ子の最大の深

さを規定してもよい。 

10.2 可視性の規則 識別子の可視性規則を,次に規定する。識別子を宣言するEXPRESS項目を表9に示

す。名前付きデータ型の識別子に対する可視性の規則は,他の識別子のそれとは多少異なる。これらの違

いは,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) 有効範囲Pで可視である識別子iがPの内側の有効範囲Qで再宣言されているとき,有効範囲Q及び

Q内で宣言されている有効範囲で,Qで宣言されている識別子iだけが可視とする。有効範囲Pで宣

言されているiは,有効範囲Pとiを再宣言していない内側の有効範囲とで可視とする。 

(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)に対するものとする。すなわち,次のいずれか

が成立している場合,有効範囲Pで宣言されているエンティティ又は定義データ型の識別子iは,内側の

有効範囲Qで再宣言されていたとしても,Q中で可視のままとする。 

(a) 有効範囲Qがエンティティ宣言で定義されており,かつiがその有効範囲で属性として宣言される。 

(b) 有効範囲Qが関数,手続又は規則の宣言で定義されており,かつiがその有効範囲で仮引き数又は変

数として宣言される。 

例72. entity1中で,dは,エンティティデータ型及び属性の両方として使われている。 

     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の結

果(TRUE,FALSE又は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 演算子の優先順位 

優先順位 

記述 

演算子 

要素参照 [ ] . ¥ 

単項演算子 + − NOT 

べき乗 

** 

乗算・除算 */DIV MOD AND | | (1)  

加算・減算 − + OR XOR 

関係 

= <> <= >= < > :=: : <> : IN LIKE 

注(1) これは,複合エンティティ構成演算子である。 

優先順位の異なる二つの演算子間に置かれた被演算子は,優先順位の高い演算子に結びつけられる。同

じ優先順位の演算子間に置かれた被演算子は,左側のものに結びつけられる。 

例82. −10**2は, (−10) **2として評価され,値100を生じる。10/20*30は, (10/20) *30とし

て評価され,値15を生じる。 

12.1 算術演算子 一つの被演算子を必要とする算術演算子は,恒等 (+) 及び符号反転 (−) とする。被

演算子は,数値をもつ型(NUMBER,INTEGER又はREAL)とする。演算子が+の場合,結果は被演算

子に等しく,演算子が一の場合,結果は被演算子を符号反転したものとなる。被演算子が不定“?”の場合,

どの演算子が使われようと,結果は不定“?”となる。 

二つの被演算子を必要とする算術演算子は,加算 (+) ,減算 (−) ,乗算 (*) ,除算 (/) ,べき乗 (*

*) ,整数除算 (DIV) 及び剰余 (MOD) とする。被演算子は,数値をもつ型(NUMBER,INTEGER又

はREAL)でなければならない。 

加算,減算,乗算,除算及びべき乗の演算子は,その名前の示す数学演算を実行する。除算の場合を除

き,これらは,両方の被演算子のデータ型がINTEGERならばINTEGERの結果を生じ,そうでなければ

REALの結果を生じる(いずれの被演算子も不定“?”と評価できない場合。)。実数除算 (/) は,実数の結

果を生じる(いずれの被演算子も不定“?”と評価できない場合。)。 

剰余及び整数除算は,常にINTEGERの結果を生じる(いずれの被演算子も不定“?”と評価できない

場合。)。 

いずれか一方の被演算子のデータ型がREALの場合は,演算の前に小数点以下が切り捨てられ,

INTEGERにされる。a及びbが整数ならば,(a DIV b) *b+ (a MOD b) = aは,常に真となる。a MOD 

bの絶対値はbの絶対値より小さくなるし,a MOD bの符号はbの符号と同じになる。 

算術演算子に対する被演算子のいずれかが,不定“?”であるならば,その演算の結果は,不定“?”と

なる。 

実数の丸め 必要な場合,丸めは,精度p[REAL型に対して明示的に示すか又は附属書E(規定)の

とおり実装上の制限として示す。]から,次のアルゴリズムを用いて,決めなければならない。 

(a) 数値の表現を,すべての先行するゼロを取り除いた指数形式に変換する。 

(b) 小数点の右側から数えてpけた目の数字の位置をけたポインタkに設定する。 

(c) 実数値が正ならば,次を行う。 

− 小数点以下kけた目の数字が5〜9の範囲にあるならば,小数点以下k−1けた目の数字に1を加

え,小数点以下kけた目とそれ以降の全数字とを無視し,(e)へ進む。 


68 

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

− 小数点以下kけた目の数字が0〜4の範囲にあるならば,小数点以下kけた目とそれ以降の全数字

とを無視し,(h)へ進む。 

(d) 実数値が負ならば,次を行う。 

− 小数点以下kけた目の数字が6〜9の範囲にあるならば,小数点以下k−1けた目の数字に1を加

え,小数点以下kけた目とそれ以降の全数字とを無視し,(e)へ進む。 

− 小数点以下kけた目の数字が0〜5の範囲にあるならば,小数点以下kけた目とそれ以降の全数字

とを無視し,(h)へ進む。 

(e) けたポインタkの値を1だけ減らす。 

(f) 小数点以下kけた目の数字が0〜9の範囲にあるなら,(h)に進む。 

(g) 小数点以下kけた目の数字が値10をもつなら,小数点以下k−1けた目の数字に1を加え,小数点以

下kけた目の数字を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の値(TRUE,FALSE又は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=b又はa > b の一つがTRUE。 

(b) a <=bは,(a < b) OR (a=b) に等しい。 

(c) a >=bは,(a > b) OR (a=b) に等しい。 

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と配列bとは,aの各要素が同じ位置にあるbの要素と値比較で等しいとき,すなわち,

a[i] = b[i](12.6.1参照)のときにだけ,等しい。 


70 

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

− リストaとリストbとは,aの各要素が同じ位置にあるbの要素と値比較で等しいときにだけ,

等しい。 

− aとbとが多重集合又は集合である場合,次の条件がともに成立するときに,aとbとは等しい。 

(a) aの各要素について,aにおけるその値の出現回数とbにおけるその値の出現回数とが等しい。 

(b) bの各要素について,bにおけるその値の出現回数とaにおけるその値の出現回数とが等しい。 

備考 たとえ多重集合が同じインスタンスの複数の出現を含むときでも,多重集合は集合値で等しく

なってもよい。それは,値比較によって等しい要素の個数を調べるからである。 

12.2.1.7 エンティティ値比較 二つのエンティティインスタンスの各属性が値比較で等しい場合,その二

つのエンティティインスタンスは値比較で等しい。エンティティインスタンスはエンティティデータ型で

表される属性をもつこともあるので,インスタンスは,自己参照することができる。その場合,エンティ

ティインスタンスは,単純デタ型で表される属性のすべてが同じ値をもち,かつ両方のエンティティイン

スタンスが自己参照ならば,値比較で等しいとする。 

ここで,より正確に示す。二つの比較するインスタンスをlとrとする。ここで,l :=: rの場合,l

=rとする。 

その他の場合は,次の定義に従う。 

− 考慮中のインスタンスの集団上で順序付けを定義する。実際には,この集団は有限なので,順序

付けを行うことができる。 

− ここでの利便のためにだけ,この順序づけに従う集合体添字演算子を次のとおり定義する。すな

わち,任意の集合体agg並びに任意の添字i及び添字jに対し,条件i < jは,条件agg [i] < agg [j] 

と等価とする。 

− 一つ以上の属性参照又は添字参照の列である参照パスを定義する。参照パスSをインスタンスi

に適用したものを,s(i)と書く。最終の参照を除き,すべての参照が不定“?”でないならば,s (i) 

は,評価可能とする。 

このとき,l = rの値は,次の条件を順次調べ,最初に成立した箇所で定まる。 

(a) TYPEOF(l) <> TYPEOF (r) の場合,l = rは,FALSEとする。 

(b) s(l)及びs (r) のうちの一方だけが評価可能であるような参照パスsがある場合,l = rは,FALSE

とする。 

(c) s(l)及びs (r) の両方が単純型の値になるような参照パスsがあり,かつs(l) <> s (r) の場合,l = 

rは,FALSEとする。 

(d) NOT EXISTS (s(l))又はNOT EXISTS (s(r))であるような参照パスsがある場合,l = rは,

UNKNOWNとする。 

(e) その他の場合,l = rは,TRUEとする。 

例85. 次のアルゴリズムは,上の値比較を検査するための実装の例である。このアルゴリズムは,例

示であり,特定の実装を規定することを意図していない。 

このアルゴリズムでは,l及びrは,GENERIC型の変数とする。 

(a) lを左辺のエンティティインスタンスに,rを右辺のエンティティインスタンスに初期化する。 

(b) インスタンスが同じ(すなわち,l :=: r)であるならば,式は,TRUEに評価する。 

(c) エンティティインスタンスの識別子の順序対を含むリストplistは,空リストに初期化する。 

備考 インスタンス識別子の表現は,実装による。 

(d) 次に示す深等価アルゴリズムを用いて,lとrとを比較する。 


71 

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

(e) 式は,この深等価アルゴリズムによって戻される値に評価する。 

深等価アルゴリズム 

(a) l及びrの一方,又はその両方が不定“?”であるならば,アルゴリズムは,UNKNOWNを戻す。 

(b) TYPEOF(l) <> TYPEOF (r) ならば,アルゴリズムは,FALSEを戻す。 

(c) l及びrの両方がエンティティインスタンスでないならば,適切な等価検査によって,l = rの値を

戻す。 

(d) lとrとがエンティティインスタンスが同じ(すなわち,l :=: r)であるならば,アルゴリズムは,

TRUEを戻す。 

(e) インスタンスの対 (l,r) がplist中にあるならば,アルゴリズムは,TRUEを戻す。 

(f) インスタンスの対 (l,r) がplist中にないならば,アルゴリズムは,次のことを行う。 

(1) 対 (l,r) をplistに加える。 

(2) l及びrに対し定義された各属性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と配列bとは,aの各要素が同じ位置にあるbの要素と同じインスタンスのとき[すなわ

ち,a [i]  :=: b [i] (12.6.1参照)]にだけ,等しい。 

− リストaとリストbとは,aの各要素が同じ位置にあるbの要素と同じインスタンスのときにだ

け,等しい。 

− 多重集合aと多重集合bとは,aに帰属する各要素が同じ回数だけbに帰属し,かつbに帰属す

る各要素が同じ回数だけaに帰属するときにだけ,等しい。 

− 集合aと集合bとは,aに帰属する各要素がbに帰属し,かつbに帰属する各要素がaに帰属す

るときにだけ,等しい。 

− 多重集合と集合とは,集合中の各要素が多重集合中でただ1回だけ帰属し,かつ多重集合が集合

中にない要素を含まないときにだけ,等しい。 

例87. 二つの配列のインスタンス比較 

     LOCAL 

      a1, a2 : ARRAY [1 : 10]  OF b ; 

     END̲LOCAL ; 

     IF (a1 :=: a2) THEN ... 

12.2.2.2 エンティティインスタンス比較 エンティティインスタンス等価 (:=:) 及びエンティティイン

スタンス非等価 (:<>:) の演算子は,二つの整合する被演算子をとり,LOGICALの値に評価する。 

a :=: bは,aがbと同じエンティティインスタンスに評価されるとき,すなわち,実装に依存する

識別子が同じであるとき,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 IN(15.28参照)は,集合体の要素が特定の値をもつか否かを決めるために使って

よい。 

モデラで要素の帰属を調べるために,次の疑似コードで表されるmy̲equa1(8.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̲1〜index̲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 論理演算子 論理演算子は,NOT,AND,OR及びXORからなる。それぞれの演算子は,論理型

の結果を生じる。AND,OR又は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̲1〜index̲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に示す。結果の集合体値は,0から不定“?”までの上下限

をもち,表16で指定された型の集合体として,暗黙に宣言される。被演算子の基本データ型は,整合する

ものでなければならない(12.11参照)。二つの被演算子の積が要素を含まないならば,結果の集合体値の

大きさは,ゼロ(0)になる。 

被演算子のどちらかが集合ならば,結果は,被演算子の両方に帰属するそれぞれの要素を含む集合とな

る。 

両方の被演算子が多重集合で,特定の要素eが一方にはm回帰属し,他方にはn回 (m

n) 帰属するな

らば,結果にはeがm回帰属する。 

表16 積演算子−被演算子及び結果の値 

1番目の被演算子 2番目の被演算子 結果 

Bag 

Bag 

Bag 

Bag 

Set 

Set 

Set 

Set 

Set 

Set 

Bag 

Set 

12.6.3 和演算子 和演算子 (+) は,集合体値を含む二つの被演算子をとり,集合体値に評価する。許さ

れる被演算子の型及び対応する結果の型を,表17に示す。和演算子は,被演算子の型及びそれらの並び方

に従って,次のとおりに定義される。 

− 一方の被演算子Eの型が他方の被演算子Aの基本型に整合している場合,次のとおりEをAに

加える。 

・ Aが集合値の場合,E IN Aでないときに限り,結果の集合は,AにEを加えたものとする。 

・ Aがリスト値の場合,Eが第1被演算子であるとき,結果のリストはAの1番目の位置に

Eを加えたものとし,Eが第2被演算子であるとき,結果のリストはAのSIZEOF (A) +

1番目の位置にEを加えたものとする。 

備考 結果のリストは,リストの被演算子がLIST OF UNIQUEと宣言されていた場合でも,重複す

る要素を含んでよい。 

・ Aが多重集合値である場合,結果の多重集合は,AにEを加えたものとする。 

− 両方の被演算子が整合するリストの場合,結果のリストは,第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被演算子のものと同じになる。両方の被演算子が多重集合で,要素eが第1被演算子中にm回帰属し,

第2被演算子中にn回帰属した場合,mがnより大きいとき,eは結果にm−n回帰属し,mがn以下のと

き,eは結果に帰属しない。第2被演算子が第1被演算子中にない要素を含んでいる場合,これらの要素

は,無視され,結果の集合体値の一部にはならない。 

表18 差演算子−被演算子及び結果の型 

1番目の被演算子 2番目の被演算子 結果 

Bag 

Bag 

Bag 

Bag 

Set 

Bag 

Bag 

Element 

Bag 

Set 

Set 

Set 

Set 

Bag 

Set 

Set 

Element 

Set 

例101. Aが整数の多重集合 [1,2,1,3] の場合,次のものは, [1,2,3] と評価され,これは [2,

1,3] と等価とする。 

     A − 1 


82 

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

12.6.5 部分集合演算子 部分集合演算子 (<=) は,表19に定義する二つの被演算子をとり,LOGICAL

に評価する。 

第1被演算子中にn回帰属する任意の要素eに関して,eが第2被演算子中に少なくともn回帰属する

場合にだけ,式は,TRUEに評価される。どちらかの被演算子が不定“?”のとき,式はUNKNOWNに評価

される。このどちらでもない場合には,FALSEと評価される。 

二つの被演算子は,整合する型でなければならない(12.11参照)。 

12.6.6 超集合演算子 超集合演算子 (>=) は,表19に定義する二つの被演算子をとり,LOGICALに評

価する。 

第2被演算子中にn回帰属する任意の要素eに関して,eが第1被演算子中に少なくともn回帰属する

場合にだけ,式は,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は,集合体値(ARRAY,BAG,LIST又は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) の

動作を定義する。これらの文は,FUNCTION,PROCEDURE又は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 statement,compound 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) の底であるeを表すREAL型の定数とする。そ

の値は,次の公式で与えられる。 

1

0!i

e

i=

 

14.2 不定値 不定記号“?”は,あいまいな値を表す。これは,すべてのデータ型と整合する。 

備考 この不定“?”の最も一般的な使い方は,多重集合,リスト又は集合の上限の指定である。この

使い方は,集合体データ型によって定義された値の要素数に上限がないことを表す。 

14.3 False FALSEは,偽 (false) の論理的概念を表すLOGICAL型の定数とする。これは,BOOLEAN

型とも整合する。 

14.4 Pi PIは,直径に対する円周の比である

瀰銈栰

謰湛驥瀰栰夰謰

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は,数値とする。 

結果:Vの絶対値。戻されるデータ型は,Vのデータ型と同一とする。 

例125. ABS ( −10 )  --> 10 

15.2 ACos(算術関数) 

FUNCTION ACOS ( V:NUMBER ) : REAL; 

ACOS関数は,ある余弦値を与える角度を戻す。 

引き数:Vは,ある角度の余弦となる数値とする。 

結果:余弦がVとなる,ラジアンの単位で表現された角度(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=

で与えられるある正接値Vを与える角度を戻す。 

引き数: 

(a) V1は,数値とする。 

(b) V2は,数値とする。 

結果:正接がVとなる,ラジアンの単位で表現された角度

)

2

2

(

結果

。V2がゼロの場合,結果は,

V1の符号に基づいて,2

2

の値になる。 

条件:V1及びV2は,ともにゼロであってはならない。 

例128. ATAN ( −5.5,3.0 )  −−> −1.071449... 

15.5 BLength(2進関数) 

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は,数値とする。 

結果:evの値。 

例132. EXP ( 10 )  −−> 2.202646...E+4 

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は,ラジアンの単位で表現された角度を表す数値とする。 
結果:その角度の正接。角度がn2

nは奇数)である場合,不定“?”が戻される。 

例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にある要素の直後

に挿入される。したがって,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&A≡A 

すなわち,特定のエンティティデータ型は,与えられた部分複合エンティティデータ型内に一度

だけ現れる。 

− A&B≡B&A 

すなわち,部分複合エンティティデータ型のグループ化は,可換則に従う。 

− A& (B&C) ≡ (A&B) &C≡A&B&C 

すなわち,部分複合エンティティデータ型のグループ化は,結合則に従う。括弧は,評価の優先

度を示すが,この場合差異はない。 

評価集合は,部分複合エンティティデータ型の数学的集合として定義される。それは,角括弧に

囲まれ,かつコンマ (,) によって区切られた部分複合エンティティデータ型で表される。空の評価

集合は,[ ]によって表される。 

二つの演算子が,部分複合エンティティデータ型と評価集合とを結合するために用いられる。 

− A + [B1,B2] ≡ [B1,B2] + A≡ [A,B1,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番目の評価集合に繰り

返し適用して生成される。 

評価集合は,新しい評価集合を生成するために,演算子/を用いて選別してもよい。 

− [A,A&B,A&C,A&B&D,B&C,D] /A ≡ [A,A&B,A&C,A&B&D]  

新しい評価集合は,元の評価集合内で,与えられた部分複合エンティティデータ型を含んだもの

だけを含む。 

− [A,A&B,A&C,A&B&D,B&C,D] / [B,D] ≡ [A&B,A&B&D,B&C,D]  

新しい評価集合は,最初の評価集合を2番目の評価集合の個々の部分複合エンティティデータ型

により繰り返して選別し,その結果を演算子+を用いて結合することによって生成される。 

評価集合同士は,新しい評価集合を生成するために演算子−を用いて差をとってもよい。 

− [A1,A2,B1,B2] − [A2,B1] ≡ [A1,B2]  

評価集合は,最初の評価集合に含まれるすべての要素から2番目の評価集合を除いた要素で生成

できる。 

次の恒等式が,任意の評価集合に対して成立する。 

− [A,B] ≡ [B,A]  

評価集合は,その要素の順序に影響されない。 

− [A,A,B] ≡ [A,B]  

特定の複合エンティティデータ型は,任意の評価集合中で一度しか現れない。 

− [A,[B,C]]≡ [A,B,C]  

評価集合は,入れ子になってもよい。 

 

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,...) → [A,B,...]  

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 → [A,B,A&B]  

A ANDOR ONEOF (B1,B2) → [A,[B1,B2] ,A& [B1,B2]]= [A,B1,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)  根上位型は,下位型となることのない上位型とする。 

複合エンティティデータ型の評価集合Rは,次の手順で計算される。 

(a) 上位型・下位型のグラフを作るすべてのエンティティ宣言を識別する。 

備考 複雑な上位型・下位型のグラフの場合,この手順は,複数回の繰返しを必要とすることもある。 

(b) 上位型・下位型のグラフ内の各上位型に対して,完全な上位型式を生成する。この場合,上位型式に

書かれていない下位型に関する暗黙のANDOR制約も含めて生成する。 

(c) 上位型・下位型のグラフ内の各上位型iに対して,その直接の下位型間の制約を表す評価集合を生成

する。この場合,(b)で与えられる完全な上位型式に,B.2の書換え則及びB.1の恒等式を適用するこ

とにより生成する。iとその結果とを,&を用いて結合する。iが抽象上位型でない場合は,iをその

結果に+を用いて加える。これによって生成された結果の集合をEiと呼ぶ。 

(d) 上位型・下位型のグラフにおける各々の根上位型rに関して次のとおりErを展開する。 

(1) rにおける下位型sに関して,Erにおけるsのすべての出現を,(部分複合エンティティデタ型内部

での出現を含め)Esがあれば,それと置き換える。そして,B.2の書換え則を実行する。 

(2) 再帰的に(d)(1)を個々のsに適用して,(Esが存在しない)葉のエンティティに至るまでsの下位型

を展開する。 

備考 上位型・下位型のグラフは循環をもたないので,この再帰は,終了する。 

(e) 根集合を組み合わせる。

r

r

r

r

E

E

E

R

2

1

...。すなわち,Rは,(d)で生成された集合の和である。 

(f) 各多重継承下位型mに対して,次の手順を行う。 


134 

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

(1) その直接の上位型sの各々に対して,R中のmとsとの両方を含む複合データ型の集合R/m/sを生

成する。 

(2) mによって許された上位型の組合せの評価集合Pm=R/m/s1&R/m/s2&...を生成する。すなわち(f)(1)

で得られた評価集合を&を用いて結合する。 

(3) mと上位型のすべて又は一部を含む組合せの評価集合

s

m

s

m

R

X

/

/

を生成する。すなわち(f)(1)で

得られた評価集合の和を求める。 

(4) R = (R−Xm) +Pmとする。 

(g) ONEOF (S1,S2,...) の形の上位型の項kに対して次の手順を行う。 

(1) kにおける部分式の組合せSiSj (i<j) に関して,ONEOF (Si,Sj) で許容されない組合せの集合

j

ik

D,= 

[Si&Sj] を計算する。さらに,

j

ik

D,にB.2の書換え則及びB.1の恒等式に従って書き換える。 

(2) 

j

i

j

ik

k

D

D

,

,

とする。すなわち(g)(1)の和を取る。 

(3) R = R − (R/Dk) とする。 

(h) S1 AND S2の形の上位型の項kに対して次の手順を行う。 

(1) kにおいて要求される組合せの集合Qk = [S1&S2] を計算する。さらに,QkにB.2の書換え則及び

B.1の恒等式に従って書き換える。 

(2) k内のエンティティデータ型iに対して,iを含むエンティティの組合せであってkで許されないも

のの集合を計算する

ik

D= R/i − R/ (Qk/i)  

(3) 

ik

i

k

D

D=

とする。Dkは,(h)(2)で計算した集合の和である。 

(4) R = R − Dkとする。 

(i) 最終的な評価集合Rは,入力された上位型・下位型のグラフに対する評価集合とする。 

例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図B.1 例155.のためのEXPRESS-G図 

− 上のEXPRESSは,手順(a)及び手順(b)で要求されるエンティティ宣言と完全な上位型式とのすべ

てを示している。 

− 手順(c)を適用して,次が得られる。 

Ep → [p&m&c,p&m&a,p&f&c,p&f&a,p]  

Ea → [a&l,a&i]  

− 根エンティティPの宣言を,手順(d)を適用して展開する。結果の集合は,次のとおりになる。 

Ep [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,11

D= [m&f]  

 D1 = [m&f]  

手順(g)(3)に従ってRからD1を除去しても,Rは変更されない。したがって残りは,次のとお

りとなる。 

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,12

D= [c&a]  

 D2 = [c&a]  

手順(g)(3)に従ってRからD2を除去しても,Rは変更されない。したがって残りは,次のとお

りとなる。 

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,13

D= [l&i]  


136 

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

 D3 = [l&i]  

手順(g)(3)に従ってRからD3を除去しても,Rは変更されない。したがって残りは,次のとお

りとなる。 

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) の場合: 

 Q1 = [m&c,m&a,f&c,f&a]  

m

D1=[ ] 

f

D1=[ ] 

c

D1=[ ] 

a

D1=[ ] 

D1 =[ ] 

手順(h)(4)に従ってRからD1を除去しても,Rは変更されない。したがって残りは,次のとお

りとなる。 

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)に従って結果は次のとおりになる。 

Ep = [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図B.2 例156.のためのEXPRESS-G図 

− 上のEXPRESSは,手順(a)及び手順(b)で要求されるエンティティ宣言と完全な上位型式とのすべ

てを示している。 

− 手順(c)を適用して,次が得られる。 

Ea → [a&b,a&c,a]  

Eb → [b&d,b]  

Ec → [c&d,c]  

Ed → [d]  

− 根エンティティaの宣言を,手順(d)を適用して展開する。結果の集合は,次のとおりになる。 

Ea = [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)を適用すると,次が得られる。 

● エンティティdの場合: 

bd

C= [a&b&d]  

cd

C= [a&c&d]  

Pd = [a&b&d&c]  

Xd = [a&b&d,a&c&d] 

新しい集合R = (R−Xd) + Pdは,次のとおりとなる。 

[a&b,a&c,a,a&b&d&c]  

− 手順(g)を各々のONEOF制約に適用して,次が得られる。 

● ONEOF (b,c) の場合: 

2,11

D= [b&c]  

D1  = [b&c]  

手順(g)(3)に従うとRから次の要素が除去される。 [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図B.3 例157.のためのEXPRESS-G図 

− 上のEXPRESSは,手順(a)及び手順(b)で要求されるエンティティ宣言と完全な上位型式とのすべ

てを示している。 

− 手順(c)を適用して次が得られる。 


139 

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

Ea → [a,a&b&d,a&b&d&f,a&c&d,a&c&d&f,a&f]  

Ed → [d&k,d&l]  

Ey → [l&y,y]  

Ez → [f&x&y&z,f&x&z,f&y&z,f&z,x&y&z,x&z,y&z,z]  

− 根エンティティのa及びzの宣言を,手順(d)を適用して展開する。結果の集合は,次のとおりに

なる。 

Ea = [a,a&b&d&k,a&b&d&l,a&b&d&f&k,a&b&d&f&l,a&c&d&k, 

   a&c&d&l,a&c&d&f&k,a&c&d&f&l,a&f]  

Ez = [f&l&x&y&z,f&l&y&z,f&l&y&z,f&x&z,f&y&z,f&z, 

   l&x&y&z,l&y&z,x&y&z,y&z,z]  

− 手順(e)で根集合を組み合わせて,次が得られる。 

R = [a,a&b&d&k,a&b&d&l,a&b&d&f&k,a&b&d&f&l,a&c&d&k, 

   a&c&d&l,a&c&d&f&k,a&c&d&f&l,a&f,f&l&x&y&z,f&l&y&z, 

   f&x&y&z,f&x&z,f&y&z,f&z,l&x&y&z,l&y&z,x&y&z, 

   x&z,y&z,z]  

− 各々の多重継承下位型に対して手順(f)を適用すると,次が得られる。 

● エンティティfの場合: 

af

C= [a&b&d&k&f,a&b&d&l&f,a&c&d&k&f,a&c&d&l&f,a&f]  

zf

C= [f&l&x&y&z,f&l&y&z,f&x&y&z,f&x&z,f&y&z,f&z]  

Pf = [a&b&d&f&k&z,a&b&d&f&k&x&z,a&b&d&f&k&l&y&z, 

   a&b&d&f&k&y&z,a&b&d&f&k&l&x&y&z, 

   a&b&d&f&k&x&y&z,a&b&d&f&l&z,a&b&d&f&l&x&z, 

   a&b&d&f&l&y&z,a&b&d&f&l&x&y&z,a&c&d&f&k&z, 

   a&c&d&f&k&x&z,a&c&d&f&k&l&y&z,a&c&d&f&k&y&z, 

   a&c&d&f&k&l&x&y&z,a&c&d&f&k&x&y&z,a&c&d&f&l&z, 

   a&c&d&f&l&x&z,a&c&d&f&l&y&z,a&c&d&f&l&x&y&z,a&f&z, 

   a&f&x&z,a&f&l&y&z,a&f&y&z,a&f&l&x&y&z, 

   a&f&x&y&z]  

Xf = [a&b&d&f&k,a&b&d&f&l,a&c&d&f&k,a&c&d&f&l,a&f, 

   f&l&x&y&z,f&l&y&z,f&x&y&z,f&x&z,f&y&z,f&z]  

新しい集合R = (R − Xf) + Pfは,次のとおりとなる。 

[a,a&b&d&f&k&z,a&b&d&f&k&x&z,a&b&d&f&k&l&y&z, 

a&b&d&f&k&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&k&x&y&z, 

a&b&d&f&l&z,a&b&d&f&l&x&z,a&b&d&f&l&y&z, 

a&b&d&f&l&x&y&z,a&b&d&k,a&b&d&l a&c&d&f&k&z, 

a&c&d&f&k&x&z,a&c&d&f&k&l&y&z,a&c&d&f&k&y&z, 

a&c&d&f&k&l&x&y&z,a&c&d&f&k&x&y&z,a&c&d&f&l&z, 

a&c&d&f&l&x&z,a&c&d&f&l&y&z,a&c&d&f&l&x&y&z, 

a&c&d&k,a&c&d&l,a&f&z,a&f&x&z,a&f&l&y&z,a&f&y&z, 

a&f&l&x&y&z,a&f&x&y&z,l&x&y&z,l&y&z,x&y&z,x&z,y&z,z]  


140 

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

● エンティティlの場合: 

dl

C= [a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z, 

   a&b&d&f&l&z,a&b&d&f&l&x&z,a&b&d&f&l&y&z, 

   a&b&d&f&l&x&y&z,a&b&d&l,a&c&d&f&k&l&y&z, 

   a&c&d&f&k&l&x&y&z,a&c&d&f&l&z,a&c&d&f&l&x&z, 

   a&c&d&f&l&y&z,a&c&d&f&l&x&y&z,a&c&d&l]  

yl

C= [a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z, 

   a&b&d&f&l&y&z,a&b&d&f&l&x&y&z, 

   a&c&d&f&k&l&y&z,a&c&d&f&k&l&x&y&z, 

   a&c&d&f&l&y&z,a&c&d&f&l&x&y&z, 

   a&f&l&y&z,a&f&l&x&y&z,l&x&y&z,l&y&z]  

Pl = [a&b&c&d&f&k&l&y&z,a&b&c&d&f&k&l&x&y&z, 

   a&b&c&f&l&y&z,a&b&c&f&l&x&y&z,a&b&d&f&k&l&&z, 

   a&b&d&f&k&l&x&y&z,a&b&d&f&l&y&z,a&b&d&f&l&x&y&z, 

   a&b&d&l&x&y&z,a&b&d&l&y&z,a&c&d&f&k&l&y&z, 

   a&c&d&f&k&l&x&y&z,a&c&d&f&l&y&z,a&c&d&f&l&x&y&z, 

   a&c&d&l&x&y&z,a&c&d&l&y&z] 

Xl = [a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&l&z, 

   a&b&d&f&l&x&z,a&b&d&f&l&y&z,a&b&d&f&l&x&y&z, 

   a&b&d&l,a&c&d&f&k&l&y&z,a&c&d&f&k&l&x&y&z, 

   a&c&d&f&l&z,a&c&d&f&l&x&z,a&c&d&f&l&y&z, 

   a&c&d&f&l&x&y&z,a&c&d&l,a&f&l&x&y&z,a&f&l&x&y&z, 

   l&x&y&z,l&y&z]  

新しい集合R = (R−Xl) + Plは,次のとおりとなる。 

[a,a&b&c&d&f&k&l&y&z, 

a&b&c&d&f&k&l&x&y&z,a&b&c&f&l&y&z,a&b&c&f&l&x&y&z, 

a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&k&x&z, 

a&b&d&f&k&y&z,a&b&d&f&k&x&y&z,a&b&d&f&k&z, 

a&b&d&f&l&y&z,a&b&d&f&l&x&y&z,a&b&d&k,a&b&d&l&x&y&z, 

a&b&d&l&y&z,a&c&d&f&k&l&x&y&z,a&c&d&f&k&l&y&z, 

a&c&d&f&l&y&z,a&c&d&f&l&x&y&z,a&c&d&f&k&x&z, 

a&c&d&f&k&y&z,a&c&d&f&k&x&y&z,a&c&d&f&k&z,a&c&d&k, 

a&c&d&l&x&y&z,a&c&d&l&y&z,a&f&z,a&f&x&z,a&f&y&z, 

a&f&x&y&z,x&y&z,x&z,y&z,z]  

− 手順(g)を各々のONEOF制約に適用して,次が得られる。 

● ONEOF (b,c) の場合: 

2,11

D= [b&c]  

 D1 = [b&c]  

手順(g)(3)に従うと,Rから次の要素が削除される。 

[a&b&c&d&f&k&l&y&z,a&b&c&d&f&k&l&x&y&z,a&b&c&f&l&y&z, 


141 

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

a&b&c&f&l&x&y&z 

したがって,残りは次のとおりとなる。 

R = [a,a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&k&x&z, 

   a&b&d&f&k&y&z,a&b&d&f&k&x&y&z,a&b&d&f&k&z, 

   a&b&d&f&l&y&z,a&b&d&f&l&x&y&z,a&b&d&k, 

   a&b&d&l&x&y&z,a&b&d&l&y&z,a&c&d&f&k&l&x&y&z, 

   a&c&d&f&k&l&y&z,a&c&d&f&l&y&z,a&c&d&f&l&x&y&z, 

   a&c&d&f&k&x&z,a&c&d&f&k&y&z,a&c&d&f&k&x&y&z, 

   a&c&d&f&k&z,a&c&d&k,a&c&d&l&x&y&z,a&c&d&l&y&z, 

   a&f&z,a&f&x&z,a&f&y&z,a&f&x&y&z,x&y&z,x&z,y&z,z]  

● ONEOF (k,l) の場合: 

2,12

D= [k&l]  

D2 = [k&l]  

手順(g)(3)に従うと,Rから次の要素が削除される。 

[a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&c&d&f&k&l&y&z, 

 a&c&d&f&k&l&x&y&z]  

したがって,残りは次のとおりとなる。 

R = [a,a&b&d&f&k&x&z,a&b&d&f&k&y&z,a&b&d&f&k&x&y&z, 

   a&b&d&f&k&z,a&b&d&f&l&x&y&z,a&b&d&f&l&y&z,a&b&d&k, 

   a&b&d&f&l&x&y&z,a&b&d&l&y&z,a&c&d&f&l&y&z, 

   a&c&d&f&l&x&y&z,a&c&d&f&k&x&z,a&c&d&f&l&k&y&z, 

   a&c&d&f&k&x&y&z,a&c&d&f&k&z,a&c&d&k,a&c&d&l&x&y&z, 

   a&c&d&l&y&z,a&f&z,a&f&x&z,a&f&y&z,a&f&x&y&z,x&y&z, 

   x&z,y&z,z]  

各AND制約に手順(h)を適用して,次が得られる。 

● ONEOF (b,c) AND dの場合 

Q1 = [b&d,c&d]  

b

D1=[ ] 

c

D1=[ ] 

d

D1=[ ] 

D1 =[ ] 

手順(h)(4)に従ってRからD1を除去しても,Rは変更されない。したがって残りは,次のとおり

となる。 

R = [a,a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&k&x&z, 

   a&b&d&f&k&y&z,a&b&d&f&k&x&y&z,a&b&d&f&k&z, 

   a&b&d&f&l&y&z,a&b&d&f&l&x&y&z,a&c&d&f&k&l&y&z, 

   a&b&d&k,a&b&d&l&x&y&z,a&b&d&l&y&z,a&c&d&f&k&l&x&y&z, 

   a&c&d&f&l&y&z,a&c&d&f&l&x&y&z,a&c&d&f&k&x&z, 

   a&c&d&f&k&y&z,a&c&d&f&k&x&y&z,a&c&d&f&k&z,a&c&d&k, 

   a&c&d&l&x&y&z,a&c&d&l&y&z,a&f&z,a&f&x&z,a&f&y&z, 


142 

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

   a&f&x&y&z,x&y&z,x&z,y&z,z]  

− 手順(i)に従って結果は次のとおりになる。 

R = [a,a&b&d&f&k&l&y&z,a&b&d&f&k&l&x&y&z,a&b&d&f&k&x&z, 

   a&b&d&f&k&y&z,a&b&d&f&k&x&y&z,a&b&d&f&k&z, 

   a&b&d&f&l&y&z,a&b&d&f&l&x&y&z,a&c&d&f&k&l&y&z, 

   a&b&d&k,a&b&d&l&x&y&z,a&b&d&l&y&z, 

   a&c&d&f&k&l&x&y&z,a&c&d&f&l&y&z,a&c&d&f&l&x&y&z, 

   a&c&d&f&k&x&z,a&c&d&f&k&y&z,a&c&d&f&k&x&y&z, 

   a&c&d&f&k&z,a&c&d&k,a&c&d&l&x&y&z,a&c&d&l&y&z, 

   a&f&z,a&f&x&z,a&f&y&z,a&f&x&y&z,x&y&z,x&z,y&z,z]  


143 

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

附属書C(規定) インタフェース仕様によって制約される 

インスタンスの限界 

複雑な上位型・下位型のグラフがインタフェースされる場合,正当な複合エンティティデータ型は,本

体11.及び附属書B(規定)で与えられる規則を拡張して計算する。注目するスキーマで必要となるエンテ

ィティだけを指定することで,他のスキーマで定義された上位型・下位型のグラフを,注目するスキーマ

中で使うために簡略化してよい。 

この附属書は,ある上位型・下位型グラフ中に元々あった数個のエンティティデータ型がインタフェー

スされなかった場合に,そのグラフを解くのに必要な規則を与える。これらの失われたエンティティデー

タ型は,上位型の表現で穴になってしまう。そうした穴をここでは< >で示す。上位型式からこれらの穴を

除くには,次の書換え規則を用いる。 

− ONEOF (A,< >,...) → ONEOF (A,...)  

− ONEOF (< >) → < > 

− ONEOF (A) → A  

− A AND < > → ONEOF (A,A)  

− A ANDOR < > → A 

ANDの処理は,次のことを確実にする。すなわち,もとのスキーマでは結合するべきエンティティデー

タ型がインタフェースされていない場合には,結合するように制約されていたエンティティデータ型が,

このスキーマでは存在することを許されない。これは,ONEOF (A,A) で確実にされる。 

他のスキーマとインタフェースするスキーマの正当な複合エンティティデータ型の評価集合は,次のア

ルゴリズムで計算される。 

(a) 注目するスキーマの完全なエンティティプールを生成する。完全なエンティティプールは,次のもの

から構成される。 

(1) 注目するスキーマで定義されたすべてのエンティティ 

(2) 注目するスキーマにUSE又はREFERENCEされたすべてのエンティティ 

(3) 注目するスキーマに暗黙にインタフェースされたすべてのエンティティ 

備考 完全なエンティティプールは,同じ名前の複数のエンティティを含むかもしれないし(複数の

スキーマからの暗黙のREFERENCEの場合),異なる名前で同じエンティティを含むかもしれ

ない(USE FROM ...ASの場合)。前者の場合,エンティティプールは同一名のエンティティの

それぞれを含むのに対し,後者の場合,エンティティプールは複数の名前にもかかわらず単一

のエンティティだけを含む。 

(b) エンティティプールの各上位型式について,エンティティプールにないエンティティへのすべての参

照を取り除いて,上位型式を簡略化する。上の書換えを繰り返し適用して,このようにして生成され

た穴を取り除いて,エンティティプール内のエンティティだけを参照する正当な上位型式を作る。 

(c) エンティティプールの各上位型について,上位型式には書かれない下位型に関する暗黙のANDOR制

約を含め,完全な上位型式を書き下す。 

備考 暗黙のANDOR制約は,それを宣言しているスキーマでの下位型ばかりでなく,それを宣言し

ているスキーマ以外のスキーマで加えられた下位型も含む。 


144 

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

(d) 附属書B(規定)のアルゴリズムに従い,手順(c)から始めて評価集合を計算する。 

評価集合中の複合エンティティデータ型は,局所的に宣言されたエンティティ又はUSEされたエンティ

ティを一つ以上含む場合,独立にインスタンス化してよい。そうでない複合エンティティデータ型は,注

目するスキーマでは独立にインスタンス化できない。 

備考 結果の評価集合のいずれの複合エンティティデータ型にも含まれない明示的にインタフェース

されたエンティティがある場合,このエンティティは,インスタンス化できない。そのような

エンティティは,誤ってインタフェースされた可能性が高い。 

例158. このアルゴリズムを例示するために,スキーマexample(附属書Bの例155.参照)を用いる。 

      SCHEMA test; 

      USE FROM example (1); 

      REFERENCE FROM example (m); 

      END̲SCHEMA; 

許容される複合エンティティデータ型は,次のように決められる。 

− エンティティプールは,l,m,a,及びpである。l及びmは,明示的にインタフェースさ

れている。a及びpは,lの上位型の連なりの中にあるので暗黙にインタフェースされてい

る。 

− pの上位型式を手順(b)を適用すると,次が得られる。 

                     ONEOF(m,f)AND ONEOF (c,a) 

                  ONEOF(m,< >)AND ONEOF (< >,a) 

                       ONEOF (m) AND ONEOF (a) 

                                 m AND a 

aについては,同様に,次が得られる。 

                             ONEOF (l,i) 

                            ONEOF (l,< >) 

                               ONEOF (l) 

                                    l 

− この場合,上位型式は,手順(c)の要件を既に満たしている。 

− 手順(d)の評価集合アルゴリズムを適用すると,評価集合R = [p,a&l&m&p] が得られる。 

複合エンティティデータ型a&l&m&pは,明示的にUSEされたエンティティlを含んでお

り,独立にインスタンス化できる。これに対し,pは,注目するスキーマでは独立にイン

スタンス化できない。 

例159. 次のスキーマがあるものとする。 

      SCHEMA sl; 

      ENTITY el SUPERTYPE OF (ell ANDOR e12); END̲ENTITY; 

      ENTITY ell SUBTYPE OF (el); END̲ENTITY; 

      ENTITY e12 SUBTYPE OF (el); END̲ENTITY; 

      END̲SCHEMA; 

      SCHEMA s2; 

      USE : FROM s1 (ell AS f); 

      ENTITY e211 SUBTYPE OF (f); END̲ENTITY; 


145 

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

      ENTITY e212 SUBTYPE OF (f); END̲ENTITY; 

      END̲SCHEMA; 

      SOHEMA s3; 

      USE FROM s1 (e12 AS g); 

      ENTITY e321 SUBTYPE OF (g); END̲ENTITY; 

      ENTITY e322 SUBTYPE OF (g); END̲ENTITY; 

      END̲SCHEMA; 

これらのスキーマの評価集合は,次のとおりになる。 

s1 [e1,e1&e11,e1&e12,e1&e11&e12]  

s2 [e1&f,e1&f&e211,e1&f&e212,e1&f&e211&e212]  

s3 [e1&g,e1&g&e321,e1&g&e322,e1&g&e321&e322]  

スキーマtestが次のように定義されるとする。 

      SCHEMA test; 

      USE FROM s2 (e211); 

      USE FROM s3 (e322); 

      END̲SCHEMA; 

このスキーマtestに許容される複合エンティティデータ型は,次のように決まる。 

− エンティティプールは,e211,e322,f,g,及びe1である。e211及びe322は,明示的に

インタフェースされている。f,g及びe1は,e211及びe322の上位型の連なりの中にある

ので暗黙にインタフェースされている。f及びgは,それぞれe11及びe12の名前を変えた

ものなので、e11及びe12は,実質的にエンティティプールの要素である。 

− e1の上位型に手順(b)を適用すると,次が得られる。 

e11 ANDOR e12 

f ANDOR g 

fについては,次が得られる。 

e211 ANDOR e212 

e211 ANDOR < > 

e211 

gについては,次が得られる。 

e321 ANDOR e322 

< > ANDOR e322 

e322 

− この場合,上位型式は,手順(c)の要件を既に満たしている。 

− 手順(d)の評価集合アルゴリズムを適用すると,評価集合R = [e1,e1&f,e1&g,e1&f&g,

e1&f&e211,e1&f&g&e211,e1&g&e322,e1&f&g&e322,e1&f&g&e211&e322] が得られる。

複合エンティティデータ型e1&f&e211,e1&f&g&e211,e1&g&e322,e1&f&g&e322,

e1&f&g&e211&e322は,明示的にUSEされたエンティティe211又はe322の一つを含んで

おり,独立にインスタンス化できる。これに対し,e1,e1&f,e1&g,e1&f&gは,注目す

るスキーマでは独立にインスタンス化できない。 


146 

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

附属書D(規定) EXPRESS-G : EXPRESSの部分集合図式記法 

 

D.1 概要 EXPRESS-Gは,EXPRESS言語で定義されたデータ仕様を表示するための形式的な図式記法と

する。この記法は,EXPRESS言語の部分集合に対応する。 

EXPRESS-Gは,次の機能をもつ。 

− 種々の水準のデータの抽象化。 

− 2ページ以上にわたる図式。 

− 計算機の最小の図形表示機能を用いた図式。非図形記号だけを用いる場合を含む。 

EXPRESS-Gは,図式を作成する図形記号で表現する。表記には,次の3種類の記号を用いる。 

定義記号 単純データ型,名前付きデータ型,構成データ型及びスキーマ宣言を示す記号。 

関係記号 定義の間に存在する関係を記述する記号。 

構成記号 図式を2ページ以上にわたって表示できるようにする記号。 

EXPRESS-Gは,単純データ型,名前付きデータ型,構成データ型,関係及び基数を備える。さらに,

EXPRESS-Gは,一つ以上のスキーマの記法も備える。EXPRESS-Gは,EXPRESS言語が備える制約の仕方

については扱わない。 

備考 EXPRESS-Gを,それ自身でデータ仕様記述言語として用いてもよい。すなわち,それに関連す

るEXPRESSによる仕様は,なくてもよい。 

例160. 図D.1及び図D.2に,例171.(附属書H参照)で与えられた単一EXPRESSスキーマに対する

EXPRESS-G図式を示す。この図式は,複数ページの使用を例示するために分割されている。 

personは,特定の定義上の特性をもっており,その特性には,姓 (last name) ,名 (first name) ,

省略可能なニックネーム (nickname) ,誕生日 (birth date) ,及び髪の毛 (hair) の記述が含ま

れる。personは,male又はfemaleのいずれかである。maleはfemaleの妻 (wife) をもつこと

ができ,その場合,femaleはmaleの夫 (husband) をもつ。personは子供 (children) をもっこ

とができ,その子供もまたpersonである。 


147 

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

 

附属書D図D.1 例171.の完全エンティティレベル図式(2ページ中の第1ページ) 

 

附属書D図D.2 例171.の完全エンティティレベル図式(2ページ中の第2ページ) 

 

D.2 定義記号 図式内のデータ型及びスキーマの定義は,箱によって表示し,その箱の中に定義する項目

の名前を書く。項目間の関係は,箱同士を結び付ける線によって表示する。綿種の違いで,定義又は関係

の種類についての情報を与える。 

D.2.1 単純データ型の記号 EXPRESS単純データ型の記号は,箱の右端に二重の垂直な線の付いた長方形

の実線の箱とする。図D.3に示すように,データ型の名前は,箱の中に入れる。 

 

附属書D図D.3 EXPRESS単純データ型の記号 

D.2.2 構成データ型の記号 EXPRESSの構成データ型,すなわちSELECT型及びENUMERATION型の

記号は,破線の箱とする。図D.4に示すように,データ型の名前は,箱の中に入れる。 

 

附属書D図D.4 EXPRESS構成データ型の記号 

SELECTデータ型の記号は,箱の左端に二重の垂直な線の付いた破線の箱とする。 

ENUMERATIONデータ型の記号は,箱の右端に二重の垂直な線の付いた破線の箱とする。EXPRESS-G

は,列挙項目を表現できない。 


148 

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

備考 ENUMERATIONデータ型の記号は,2番目の垂直な線を右側にもつ点で単純データ型の記号

と似ている。これは,単純データ型及びENUMERATIONデータ型がEXPRESS-Gでは基本と

なるデータ型であることによる。 

EXPRESSでは,SELECTデータ型及びENUMERATIONデータ型は,定義データ型を表す

ためだけに用いる。EXPRESS-Gは,そのための簡略化記法を備えている。その場合には,図

D.5に示すように,SELECTデータ型又はENUMERATIONデータ型を表す破線の箱の中にデ

ータ型名の代わりに定義データ型名を書き,定義データ型の記号は与えない(D.5.4参照)。 

 

附属書D図D.5 定義データ型の表現として用いられるときのEXPRESS構成データ型の簡略化記号 

例161. 図D.6の次の二つの図式は,等価である。 

 

附属書D図D.6 ENUMERATIONを表現する二つの方法の例 

EXPRESS-G編集ツールの実装には,構成データ型の表現の完全な形式,簡略化された形式又はその両方

を用いてよい。EXPRESS-G編集ツールの実装者は,これらの形式のいずれを用いているかを附属書E(規

定)を用いて示さなければならない。 

D.2.3 定義データ型の記号 定義データ型の記号は,図D.7に示すように,TYPEの名前を囲む破線の箱

とする。 

 

附属書D図D.7 EXPRESS定義データ型の記号 

D.2.4 エンティティデータ型の記号 ENTITYデータ型の記号は,図D.8に図示するように,ENTITYの

名前を囲む実線の長方形の箱とする。 

 

附属書D図D.8 EXPRESSエンティティデータ型の記号 

D.2.5 関数及び手続の記号 EXPRESS-Gには,FUNCTION定義及びPROCEDURE定義のいずれの記法も

ない。 

D.2.6 規則の記号 EXPRESS-Gには,RULE定義の記法はない。RULEにおいて引き数となっているエン

ティティの名前には,アステリスク“*”で印をつける(D.5.3参照)。 

D.2.7 スキーマの記号 SCHEMAの記号(図D.9)は,長方形の実線の箱とし,上半分にSCHEMAの名

前を書き,水平な線によって箱の下半分と分ける。記号の下半分は,空とする。 

 

附属書D図D9 スキーマの記号 


149 

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

 

D.3 関係記号 関係記号は,図D.10に示すとおり,定義の記号をつなぐ種々の形式の線とする。 

 

附属書D図D.10 関係記号 

エンティティデータ型の省略可能な属性の関係は,破線で示す。スキーマ間の参照は,破線で示す。継

承関係(すなわち,下位型と上位型との関係)は,太線で示す。他のすべての関係は,実線で示す。 

関係には両方向あるが,二つの方向のうち一つが強調される。エンティティAに明示属性があり,それ

がエンティティBならば,強調される方向は,AからBとする。EXPRESS-Gでは,関係の強調される方

向に,この場合は線のB側の端に,円で印を付ける。継承関係の場合,強調される方向は,下位型への方

向とする。すなわち,円は,線の下位型の側にある。 

例162. 関係の方向を図D.11で図解する。これは,例172.(附属書H参照)に与えられているEXPRESS

による表現を部分的に図式にしたものである。図式は,6個のエンティティデータ型,3個の定義データ型

及び幾つかの単純データ型からなる。エンティティsuperには,二つの下位型,すなわちsub̲1及びsub̲2

がある。エンティティsub̲2には属性があり,それはchoiceと呼ばれる選択データ型であって,an̲ent

と名付けられたエンティティデータ型又は定義データ型nameのいずれかを選択する。エンティティデー

タ型an̲entは整数データ型を属性としてもつが,nameは文字列データ型である。 

エンティティデータ型sub̲1は,属性としてエンティティデータ型from̲entをもつ。from̲entは,省

略可能な属性としてto̲entをもち,必す(須)の属性として実数データ型をもつ。そのエンティティデー

タ型to̲entは,今度は,必す(須)の属性としてstringsと呼ばれる定義データ型をもつ。このstringsは,

文字列データ型のリスト(この図では示されていない。)である。 

備考1. 例の図は直線の関係線だけで示してあるが,線はどのように引いてもよい(例えば,曲線で

もよい。)。 

2. 関係線を互いに交差させることなしに図を作るのがいつも都合がよいとは限らない。交差点

を区別する方法は,図の作成者に任される。 


150 

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

 

附属書D図D.11 例172.に基づく,関係の方向を示す部分エンティティレベル図式(1ページ中の第1ペ

ージ) 

 

D.4 構成記号 図式の表現は,2ページ以上にわたることができる。各ページには番号を付ける。ページ

間の参照をするための記号を,図D.12に示す。 

スキーマは,他のスキーマでの定義を参照することができる。スキーマ間参照の記号も,図D.13に示す。 

 

附属書D図D.12 構成記号:ページ参照 

D.4.1 ページ参照 別々のページにある定義間に関係があるような場合,二つのページの関係線の終端に

は丸い箱をつける。丸い箱には,図D.12に示すようにページ番号及び参照番号を入れる。ページ番号は,

参照先の定義があるページの番号とする。参照番号は,1ページの中の複数の参照を区別するために用い

る。参照元のページの構成記号には,参照先の定義の名前も入れる。参照先のページの丸い参照箱には,

参照元のページ番号を丸括弧で囲んだリストをつける。 

備考 ページ参照の使い方は,図D.1及び図D.2に示されている。personから出ている,“2,5”とラ

ベル付けされた丸い箱は,その定義がその図式の第2ページの参照5として見つけられるもの

であることを示している。図D.2に示される図式の第2ページでは,dateを参照する丸い箱の

記号は,この定義がその図式の他のページの他の定義から参照されていることを表している。

丸括弧内の数字は,参照元の項目が図式の第1ページで見つけられることを示している。 

D.4.2 スキーマ間参照 スキーマ間参照は,図D.13に示すように,スキーマ名によって修飾された定義の

名前を囲んだ丸い箱によって示す。 


151 

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

REFERENCE文を用いて他のスキーマから定義を参照する場合には,その定義を破線の長方形の箱によ

って囲む。定義名を変えた場合には,その新しい名前を箱の中の丸い箱の下に書くことができる。 

USE文を用いて他のスキーマから定義を参照する場合には,その定義を実線の長方形の箱によって囲む。

定義名を変えた場合には,その新しい名前を箱の中の丸い箱の下に書くことができる。 

備考 スキーマ間参照の利用法を,図D.17に示す。 

 

附属書D図D.13 構成記号:スキーマ間参照 

 

D.5 エンティティレベル図式 EXPRESS-Gは,一つのスキーマを構成する定義及びそれらの関係を表現す

るのに用いてよい。この図式の構成要素は,単純データ型,定義データ型,エンティティデータ型及び(適

当な役割情報及び基数情報を含めた)関係記号からなり,それによって単一のスキーマの内容を表現する。 

D.5.1 役割名 EXPRESSにおいては,エンティティデータ型の属性は,インスタンスがその属性で定まる

関係に加わっている場合に,参照されているデータ型の役割の名前が付けられる。役割名を表す文字列は,

エンティティデータ型の記号とその属性の記号とを結ぶ関係線上におく。これらの役割名は,本体10.で定

義した有効範囲及び可視性の規則に合致しなければならない。 

D.5.2 基数 エンティティデータ型及び定義データ型の属性は,集合体データ型(すなわち,LIST,SET,

BAG及びARRAY)で表現できる。EXPRESS-Gでは,集合体は,属性の関係線上に,属性名に続いて表

示する。集合体データ型の最初の文字だけ(すなわち,A,B,L又はS)を使い,OFは省略する。集合

体が指定されていなければ,その基数は,必す(須)の関係に対しては1とし,省略可能な属性に対して

は0又は1とする。 

備考 図D.14に,例172.のEXPRESSを,EXPRESS-Gを使って完全に表示する。SELECTデータ型

の構成要素には,役割名は付かない。 


152 

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

 

附属書D図D.14 例172.の完全エンティティレベル図式(1ページ中の第1ページ) 

D.5.3 制約 EXPRESS-Gは,基数を除き,制約を定義する方法は定めない。あるものがEXPRESSデータ

仕様の中で制約されている場合には,次の規則に従ってその名前の前にアステリスク“*”記号を付けて表

してもよい。 

− あるエンティティがEXPRESSのRULE中で引き数である場合は,そのエンティティの名前の前

にアステリスクを付ける。 

− エンティティの属性が,そのエンティティの中でUNIQUE節又はWHERE節で制約されている

場合には,その属性の名前の前にアステリスクを付ける。 

− 定義型がWHEREで制約されている場合には,その定義型の名前の前にアステリスクを付ける。 

− 集合体データ型がキーワードUNIQUEで制約されている場合には,その集合体の先頭の文字にア

ステリスクを付ける。 

D.5.4 構成データ型及び定義データ型 SELECTデータ型は,選択データ型の記号(図D.4参照)に,選

択可能な項目の各々に対する関係及びデータ型定義を付けて表現する。この関係に対しては,基数及び役

割名は,指定しない。 

ENUMERATIONデータ型は,その記号(図D.4参照)によってだけ表現される。 

備考 EXPRESS-Gは,列挙項目を書き表す機能を提供しない。 

定義データ型は,その定義名を囲った型定義の記号(図D.7参照),基底データ型の定義,及

び(定義データ型の定義から基底データ型の定義に引いた)関係線によって表現する。関係線

の上に表現の基数を書いてもよい。 

備考 定義データ型の表現は,図D.14のstrings型に示されている。 

D.5.5 エンティティデータ型 EXPRESS-Gでは,ENTITY定義に対して実線の箱の記号(図D.8参照)を

用いる。エンティティデータ型の名前は,その箱の中に入れる。 

EXPRESS-Gでは,ENTITYは,次のとおりとする。 

− 非巡回継承グラフの一部であってもよい。 


153 

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

− 明示属性をもってもよい。 

− 誘導属性をもってもよい。 

− 逆属性をもってもよい。 

EXPRESSエンティティの明示属性又は誘導属性は,それぞれ対応するEXPRESS-G図式の関係の起点と

なる。属性の役割名は,関係線上に書いてもよく,それに続けて基数を書いてもよい。誘導属性は,丸括

弧で囲んだ文字DER,すなわち“ (DER) ”を属性の名前の前に付けることで,明示属性と区別する。 

ある属性に対し逆属性が定義されている場合には,その属性の名前と基数とを,関係線を挟んで,逆属

性で参照された属性の名前と反対側に書く。名前の前には丸括弧で囲んだ文字INV,すなわち“ (INV) ”

を付ける。 

備考1. 典型的なエンティティレベル図式を,図D.1及び図D.14に示す。 

2. 属性に適用された定義域規則があることを示す例は,図D.1の役割のhusband及び

maiden-nameである。 

3. 規則によるエンティティの制約の例は,図D.1のmale及びfemaleのエンティティである。 

上位型及び下位型 継承グラフを形成するエンティティは,太線によって結ぶ。関係線の,円のついた末

端は,関係線の下位型側の末端を示す。上位型が抽象上位型の場合には,丸括弧で囲んだ文字ABS,すな

わち“ (ABS) ”を,エンティティ記号の箱の中のエンティティの名前の前に付ける。 

EXPRESS-Gは,継承グラフの論理構造を示すための限定された記法を備えている。ONEOF関係は,上

位型から,互いにONEOF関係である各下位型へ分岐する関係線,及びその分岐点に置かれた数字1によ

って示す。 

備考1. 図D.15は,例173.(附属書H参照)のEXPRESS-G図式であり,sub2が抽象上位型であるこ

とを示している。 

2. 図D.15の図式は,エンティティsub1,sub2及びsub5が上位型superの下位型であることを

示している。下位型間の論理的関係についてはなんの意味付けもなされていない。すなわち,

AND関係又はANDOR関係である。superは,ABSTRACT上位型ではないので,そのイン

スタンスには下位型がなくてもよい。エンティティsub3及びsub4は,上位型sub2の下位

型である。エンティティsub3及びsub4は,互いにONEOF関係である。 

 

附属書D図D.15 例173.の継承グラフの完全エンティティレベル図式(1ページ中の第1ページ) 

EXPRESSは,再宣言された属性が上位型属性の型の特定化である場合に限り,下位型内で上位型属性を

再宣言することを許している。EXPRESS-Gでは,再宣言された属性は,その上位型属性と同じように表現

する。ただし,その属性の名前の前に,丸括弧で囲んだ文字RT (redeclared type) ,すなわち“ (RT) ”を

付ける。 

備考 図D.16は,EXPRESSの例174.(附属書H参照)で与えられている属性の再定義の形態の幾つ


154 

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

かを説明している。エンティティsub̲aは,上位型属性attrを再宣言して,その上位型属性の

下位型としている。エンティティsup̲bにはNUMBER型の省略可能な属性がある。その下位

型では,これを再宣言してREAL型の必す(須)の属性としている。 

 

附属書D図D.16 下位型での属性の再定義を示す例174.の完全エンティティレベル図式 

(1ページ中の第1ページ) 

D.5.6 スキーマ間参照 あるスキーマの定義を別のスキーマの定義から参照する場合,スキーマ間参照記

号としてその定義に修飾名を付ける。 

備考 図D.17は,単一スキーマのエンティティレベル図式を表す。この図式のEXPRESSによる表現

は,例175.(附属書H参照)に示す。完全な図式は,二つのスキーマ,topとgeomとからな

り(図D.18参照),topスキーマエンティティの幾つかは,geomスキーマの定義を用いる属性

をもつ。エンティティレベル図式は,単一スキーマの中で定義されたものだけから構成される

ので,この例のtopスキーマを表現するには,図に示すスキーマ間参照が必要となる。 

 

附属書D図D.17 スキーマ間参照を示す例175.のtopスキーマの完全エンティティレベル図式 

(1ページ中の第1ページ) 

 

D.6 スキーマレベル図式 スキーマレベル図式は,複数のスキーマとそれらのインタフェースとからなる。 


155 

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

スキーマレベル図式の内容は,図式を構成するスキーマ及びスキーマインタフェースだけとする。これ

には,次のものが含まれる。 

− USEによって他のスキーマを参照するスキーマ。 

− REFERENCEによって他のスキーマを参照するスキーマ。 

− REFERENCE又はUSEされるものの名前。 

USEインタフェースは,USEするスキーマからUSEされているスキーマへ向かう実線の関係線によっ

て示し,USEされるスキーマを示す白丸を付ける。REFERENCEインタフェースは,REFERENCEする

スキーマからREFERENCEされているスキーマへ向かう破線の関係線によって示し,REFERENCEされ

るスキーマを示す白丸を付ける。 

USE又はREFERENCEされた定義は,関連する関係線の近くに,その名前のリストで示し,矢印の付

いた線で関係線と結び付けてもよい。定義の別名は,元の定義名の後に大なり記号“>”と別名とを書い

て示す。 

備考 二つのスキーマからなる図式を図D.18に示す。topスキーマには,geomスキーマへのインタ

ーフェースがある。個々には,topスキーマは,geomスキーマからsurfaceをREFERENCEし,

curve及びpointの定義をUSEする。pointの定義は,topスキーマの中でnodeという別名が与

えられる。 

 

附属書D図D.18 例175.の完全スキーマレベル図式(1ページ中の第1ページ) 

スキーマレベルモデルが2ページ以上にわたり,スキーマインタフェースがページの境界を超える場合

には,ページ参照記号を使う。 

備考 例176.(附属書H参照)は,あるスキーマレベル図式の簡略版をEXPRESSで表現したもので

ある。この例に対するEXPRESS-Gスキーマ図式を図D.19に示す。 

 

附属書D図D.19 例176.の完全スキーマレベル図式(1ページ中の第1ページ) 

 


156 

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

D.7 完全EXPRESS-G図式 EXPRESS-Gにおいて,完全図式は,EXPRESS-Gの記法の制約の中で,エン

ティティレベル図式又はスキーマレベル図式のいずれかを使用して,すべての定義,関係及び制約を正確

に表現したものとする。 

D.7.1 完全エンティティレベル図式 単一スキーマの完全図式を表現する図式は,次の規則によって定義

される内容をもつ。 

(a) 各ページには,“...の完全エンティティレベル図式”という語で終わる題名を付ける。 

(b) 図式を形成する全ページ数をN,その中の特定のページをXとした場合,各ページには,“Nページ

中の第Xページ”の形式で番号を付ける。 

(c) その単一のスキーマの中で使用されるすべてのエンティティデータ型,定義データ型及び単純データ

型の記号を表示する。 

(d) スキーマ記号は,表示しない。 

(e) すべての関係,属性名及び基数を表示する。 

(f) 明示属性,誘導属性及び逆属性を含むすべての属性を表示する。 

(g) すべての継承関係(すなわち,上位型及び下位型の関係)を表示する。 

(h) すべてのABSTRACT上位型に印を付ける。 

(i) すべてのONEOF下位型関係に印を付ける。 

(j) 他のスキーマからUSE又はREFERENCEされたすべての定義は,適当な形式(すなわち,USEされ

た定義は実線,REFERENCEされた定義は破線)の長方形で囲まれた丸い箱によって表示する。 

(k) 別名は,関連するスキーマ間参照記号で表示する。 

(l) RULEによって制約されたすべてのエンティティには,アステリスク“*”の印を付ける。 

(m) 制約をもつすべての属性には,アステリスク“*”の印を付ける。 

(n) 制約をもつすべての定義型には,アステリスク“*”の印を付ける。 

(o) 制約をもつすべての集合体型には,アステリスク“*”の印を付ける。 

逆属性の印が付いていないすべてのエンティティ間関係は,0個以上の基数があると解釈する。印の付

いていない下位型関係からは,ONEOF関係でないこと以外,どんな論理構造も導出してはならない。 

D.7.2 完全スキーマレベル図式 完全スキーマレベル図式を表現する図式は,次の規則によって定義され

る内容をもつ。 

(a) 各ページは,“...の完全スキーマレベル図式”という語で終わる題名を付ける。 

(b) 各ページは,図式を形成する全ページ数をN,そのページ中の特定のページをXとした場合,各ペー

ジには,“Nページ中の第Xページ”の形式で番号を付ける。 

(c) 用いられているすべてのスキーマを表示する。 

(d) エンティティ,型及び単純記号を表示してはならない。 

(e) すべてのスキーマ間関係,USE及びREFERENCEを表示する。 

(f) USE又はREFERENCEされるすべての定義の名前を,新しい名前があればそれを付けて,関連する

関係線に付ける。関係線に名前が付けられていない場合には,スキーマ全体がUSE又はREFERENCE

されるという意味に解釈する。 

備考 モデルを開発したり,図式を表示するときには,種々の抽象化の程度で図式を表示できれば有

用である。例えば,図式にすべての属性は与えないとか,役割名は示さないなどである。こう

した使い方はEXPRESS-Gの範囲外のことであるが,モデルの開発を始める前に,抽象化の程

度について合意を図り,文書化しておくことが望ましい。さらに,用いられている抽象化を反


157 

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

映した図式の題名を付けることが望ましい。 


158 

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

附属書E(規定) プロトコル実装適合性宣言 (PICS)  

EXPRESS言語の構文解析系又は検証系の場合,E.1に答えて下さい。 

EXPRESS-Gの編集ツールの場合,E.2に答えて下さい。 

 

E.1 EXPRESS言語構文解析系 主張する実装水準は,次のいずれですか。 

     水準1−参照検査 

     水準2−型検査 

     水準3−値検査 

     水準4−完全検査 

(備考 ある水準を実装していると主張するためには,それより低い水準も,すべて実装していなければ

なりません。) 

最大の整数値[整数リテラル]: 

…………………………………… :

実数の最大精度[実数リテラル]: 

…………………………………… :

実数の最大指数[実数リテラル]: 

…………………………………… :

文字列の最大長(文字数)[単純文字列リテラル]: 

…………………………………… :

文字列の最大長(オクテット数)[符号化文字列リテラル]: 

…………………………………… :

2進値の最大長(ビット数)[2進リテラル]: 

…………………………………… :

宣言できる識別子の数に限度がある場合には,その最大個数: 

…………………………………… :

識別子として使う文字の長さに限度がある場合には,その最大長: 

…………………………………… :

有効範囲の入れ子の深さに限度がある場合には,その最大深さ: 

…………………………………… :

複数のスキーマ名が現れてもよい多重の名前有効範囲の概念を実装して

いる場合には,その有効範囲の名前: 

…………………………………… :

標準定数“?”[組込み定数]の表現方法: 

…………………………………… :

 

E.2 EXPRESS-G編集ツール 主張する実装水準は,次のいずれですか。 

     水準1−記号検査 

     水準2−完全検査 

(備考 ある水準を実装していると主張するためには,それより低い水準も,すべて実装していなければ

なりません。) 

宣言できる識別子の数に限度がある場合には,その最大個数: 

……………… :

識別子として使う文字の長さに限度がある場合には,その最大長: 

……………… :

モデルのページ当たりのオブジェクト数に限度がある場合には,その最大個数: 

……………… :

モデルで利用可能なページ数に限度がある場合には,その最大数: 

……………… :

複数のスキーマ名が現れてもよい多重の名前有効範囲の概念を実装している場合には,そ

の有効範囲の名前: 

……………… :

構成データ型表現では,完全形式,省略形式又はその両方のいずれを実装していますか:……………… :


159 

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

附属書F(規定) 情報オブジェクトの登録 

開放型システムで情報オブジェクトをあいまいさなく識別するために,次のオブジェクト識別子をこの

規格自身に割り当てる。この値の意味は,ISO/IEC 8824-1で定義され,JIS B 3700-1に記述されている。 

{ iso standard 10303 part(11) version(1)}  


160 

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

附属書G(参考) 関係 

 

G.1 属性を介しての関係付け EXPRESSにおいては,ある属性を一つのエンティティデータ型で宣言する

と,その属性が他のデータ型(表現データ型)を定義域としている場合には,これら二つのデータ型を明

示的に関係付ける。この関係は,単純な関係と呼び,宣言しているエンティティの一つのインスタンスと

表現データ型の一つのインスタンスとを関係付ける。 

集合体を値とする属性によって定まる関係を特徴付けるために,データ型の根元基本型を非集合体デー

タ型として,次のとおり定義する。 

− 非集合体データ型の根元基本型は,そのデータ型自身とする。 

− 被集合体データ型の根元基本型は,その基本型の根元基本型とする。 

属性Aの根元基本型がTの場合,Aは,Tを基礎とするという。 

ある属性を一つのエンティティデータ型で宣言すると,その属性がある根元基本型を基礎とする集合体

データ型を定義域としている場合には,次の2種類の関係が定まる。 

− 宣言しているエンティティと集合体データ型との間の集団の関係。これは,宣言しているエンテ

ィティのインスタンスをその根元基本型のインスタンスの集団と関係付ける。 

− 宣言しているエンティティと根元基本型との間の個別の関係。これは,宣言しているエンティテ

ィのインスタンスを根元基本型の一つ以上のインスタンスと個別に関係付ける。 

備考 この手法は,他のモデル化言語の幾つかと異なっている。例えば,エンティティリレーション

シップ (ER) モデルにおいては,エンティティと関係とは,別々の構成要素によってモデル化

される。 

単純な関係及び個別の関係は,それぞれ宣言しているエンティティから他のデータ型へと方向付けられ

る。これらの関係の基数を(宣言しているエンティティの側から)検討するのは有意義である。この基数

がm : n 

)

0(

n

m

 の場合,宣言しているエンティティのすべてのインスタンスは,相手のデータ型のm

〜n個のインスタンスと結び付く。nが不定“?”の場合,宣言しているエンティティのインスタンスが結

び付く可能性のある相手のデータ型のインスタンスの数に上限はない。 

単純な関係又は個別の関係の逆方向の関係(逆関係)を検討するのは有意義である。この関係は,常に

暗黙に存在しており,0 : ?の基数をもっている。この関係は,明示的に名前付けされてもよく,表現デー

タ型がエンティティデータ型である場合,表現データ型内での逆属性宣言によって,付加的に制約を指定

してもよい。 

例163. この例では,エンティティデータ型firstとsecondとの間に単純な関係があり,secondはref

の役割をしている。この場合のfirstから見た関係の基数は,1 : 1である(すなわち,firstのそ

れぞれのインスタンスは,secondの一つのインスタンスに関係付けられている。)。secondから

見た関係の基数は,0 : ?であり,制約されていない(すなわち,secondの一つのインスタンス

は,firstの0個以上のインスタンスと関係付けられてもよい。)。これは,逆関係の暗黙の基数で

ある。 

     ENTITY first; 

      ref    : second; 

      fattr : STRING; 


161 

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

     END̲ENTITY; 

     ENTITY second; 

      sattr : STRING; 

     END̲ENTITY 

エンティティデータ型Eがデータ型Tと,属性Aによって定められた関係をもつ場合,この関係は,次

のとおり図式化される。 

 

ここで,

n

m

0

q

p

0

とする。m : nは,EからTへの順関係の基数とする。一方,p : qは,Tか

らEへの逆関係の基数とする。 

3種類の関係及びそれに結び付く基数を,より形式的に次に示す。 

G.1.1 単純な関係 単純な関係は,他のエンティティデータ型で表現される属性によって定められた関係

とする。この関係は,関連する二つのエンティティデータ型の間で定まる。 

単純な関係は,宣言しているエンティティのインスタンスと,高々一つの表現エンティティのインスタ

ンスとの間に常に存在する。これを図式化すると次のとおりになる。 

 

ここで,

1

0

m

q

p

0

とする。 

これは,Eのすべてのインスタンスに対し,役割Aを果たすT型のインスタンスがないか又は1個であ

るかを意味している。Tのすべてのインスタンスにとって,それが役割Aを果たすEのインスタンスの数

は,p〜q個でなければならない。 

次のp及びqの値は,EとTとの間の単純な関係を制約する意味のあるクラスである。 

− q=1の場合,役割Aには次の制約がある。すなわち,Tのインスタンスは,Eの複数のインスタ

ンス中では,役割Aを果たせない。 

− 

p

1

の場合,Tには存在の制約がある。すなわち,Tのすべてのインスタンスに対し,それが役

割Aを果たすEのインスタンスは,p個以上(かつq個以下)存在しなければならない。 

単純な関係及びその逆関係の基数を制約するために,次のような幾つかの異なったEXPRESSの構成要

素を使う。 

− m=0の場合は,属性AをOPTIONALと宣言することによって得られる。AがOPTIONALと宣

言されていなければ,m=1となる。 

− q=1の場合は,単純な逆属性を宣言することか又はE.Aに一意性規則を加えることによって得ら

れる。このとき,Eの母集団中の各役割Aは異なるインスタンスを用いなければならず,従って

Tのインスタンスは高々一つのE.Aに用いられる。 

− 逆関係の基数に対する他の制約は,TでINVERSE属性に,INVERSE I : SET [p : q] OF E FOR A

と宣言することによって表現される。p=q=1のときは,INVERSE I : E FOR Aと簡略化するこ

とができる。 

単純な関係及びそれと結びつく基数制約の幾つかの例を,次に示す。 

例164. 

 

すべてのCIRCLEは,CENTERの役割を果たすPOINTを一つだけもつ。POINTは,CIRCLE


162 

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

のCENTERの役割を0回以上果たすことができる。この関係は,次のとおり宣言できる。 

     ENTITY point;  

      ... 

     END̲ENTITY; 

     ENTITY circle; 

      center : point; 

     END̲ENTITY; 

例165. 

 

すべてのPRODUCT̲VERSIONは,それがBASE̲PRODUCTの役割を果たすPRODUCTを

一つだけもつ。PRODUCTは,PRODUCT̲VERSIONに対してBASE̲PRODUCTの役割を何

回果たしてもよいが,少なくとも1回はこの役割を担わなければならない(存在の依存性)。こ

れは,次のとおり宣言される。 

     ENTITY product̲version; 

      base̲product : product; ... 

     END̲ENTITY; 

     ENTITY product; 

      ... 

     INVERSE 

      versions : SET [1 : ?] OF product̲version FOR base̲product; 

      ... 

     END̲ENTITY; 

例166. 

 

PERSONは,LUNCHの役割を果たすMEALをとることができる。MEALは,任意の数の

PERSONのLUNCHの役割を果たしてもよい(MEALは,十分大きいに違いない。)。これは,

次のとおり宣言される。 

     ENTITY person; 

      lunch : OPTIONAL meal; 

      ... 

     END̲ENTITY; 

     ENTITY meal; 

      calories : energy̲measure; 

      amount : weight̲measure; 

      ... 

     END̲ENTITY; 

G.1.2 集団の関係 エンティティデータ型の集合体を値とする属性は,エンティティデータ型とその属性

を表現するのに使う集合体データ型との間の集団の関係を定める。 

備考 集団の関係は,集合体属性値の根元となるエンティティインスタンスを含まない。その代わり,

これらのインスタンスは,個別の関係に属する(G.1.3参照)。 

集団の関係は,非集合体データ型の場合の単純な関係と同様である。集団の関係は,宣言しているエン


163 

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

ティティのインスタンスと,表現集合体データ型の高々一つのインスタンスとの間に,常に存在する。単

純な関係の場合と同様に,この関係は,次のとおり宣言される。 

 

ここで,

1

0

m

s

r

0

とする。 

次のr及びsの値は,EとTとの間の集団の関係を制約する意味のあるクラスである。 

− s=1の場合,属性Aの集合値には一意性の制約がある。 

− 

r

1

の場合,Tには存在の制約がある。 

単純な関係と同様に,AをOPTIONALと宣言することによって,m=0とすることができる。s=1とい

う一意性の制約は,単純な関係の場合と同様に,Eの宣言内でAの一意性規則を書くことによって設定で

きる。こうしない限り,r及びsを制約することはできない。 

集団の関係及びこれと結び付いている基数の幾つかの例を,次に示す。 

例167. 

 

POLY̲CURVEは,役割COEFを果たすREALのリストをもつ。LIST [1 : ?] OF REALは,

POLY̲CURVEの役割COEFを何回(0回も含む。)でも果たしてよい。これは,次のとおり宣

言される。 

     ENTITY poly̲curve; 

      coef : LIST [1 : ?] OF REAL; 

      ... 

     END̲ENTITY; 

例168. 

 

LOOPは,役割EDGES(複数のEDGE)を果たすEDGEのリストをもってもよい。LIST [1 : ?] 

OF EDGEは,高々一つのLOOPインスタンスの役割EDGESを果たしてもよい。この関係は,

次のとおり宣言される。 

     ENTITY loop; 

      edges : OPTIONAL LIST [1 : ?] OF edge; 

      ... 

     UNIQUE 

      un1 : edges; 

     END̲ENTITY; 

     ENTITY edge; 

        ... 

     END̲ENTITY; 

G.1.3 個別の関係 G.1.2の集団の関係に加えて,集合体を値とする属性は,エンティティデータ型と,そ

の属性を表現するのに使う集合体データ型の根元基本型との間の個別の関係を定める。 

個別の関係は,宣言しているエンティティのインスタンスを,根元基本型の任意の数のインスタンスと

個別に関係付ける。この関係の基数は,属性を表現するのに使用する集合体データ型の基数によって制約

される。属性型の根元基本型をFUND (T) と書くことによって,個別の関係は次のとおり図式化できる。 


164 

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

 

ここで,

l

k

0

q

p

0

とする。 

これは,Eのすべてのインスタンスについて,属性Aは,k〜l個のFUND (T) のインスタンスからなる

ことを意味する。FUND (T) のインスタンスは,p〜q個のEのインスタンスに役割Aで現れてよい。 

次のp及びqの値は,EとFUND (T) との間の個別の関係を制約する意味のあるクラスである。 

− q=1の場合,Tのインスタンスには次の制約がある。Tのインスタンスは,役割AでEの複数の

インスタンスに現れてはならない。 

− 

p

1

の場合,FUND (T) には存在の制約がある。すなわち,FUND (T) のすべてのインスタンス

について,それを役割Aに含んでいるEのインスタンスがp〜q個存在しなければならない。 

個別の関係の基数及びその逆関係を制約するために,次のEXPRESS構成要素を使う。 

− k及びlの値は,Aを表現するのに使用する集合体データ型の上下限仕様によって設定される。最

も簡単な場合,属性のデータ型は,単にSET [k : 1] OF FUND (T) (又は同様なBAG若しくは

LISTのデータ型)と表せる。 

備考 関係に対するこの方法は,集合体値が1次元であるか多次元であるかにかかわらず有効である。 

− 個別の関係において,E.Aに一意性規則を付け加えてもq=1には設定できない。その代わり,

FUND (T) でINVERSE属性を宣言し,INVERSE I : E FOR Aとして制約する。 

− 逆関係の基数に対する他の制約は,INVERSE I : SET [p : q] OF E FOR Aとして,FUND (T) で

INVERSE属性を宣言することによって表される。p=q=1の場合は,INVERSE I : E FOR Aと

省略することができる。 

個別の関係及びそれと結び付く基数制約の幾つかの例を次に示す。 

例169. この例を,例167.と対比すること。 

 

POLY̲CURVEは,役割COEFを果たすREALを少なくとも一つもっている。特定のREAL

は,不特定多数(0個の場合を含む。)のPOLY̲CURVEの属性COEFで使用してもよい。こ

れは,次のとおり宣言される。 

     ENTITY poly̲curve; 

      coef : LIST [1 : ?] OF REAL; 

     ... 

     END̲ENTITY; 

例170. この例を,例168.と比較すること。 

 

LOOPは,任意個(0個の場合を含む。)のEDGEからなる。EDGEは,ちょうど二つの異なる

LOOPで使用しなければならない。これは,次のとおり宣言される。 

     ENTITY loop; 

      edges : OPTIONAL LIST [1 : ?] OF edge; 

      ... 

     UNIQUE 

      un1 : edges; 


165 

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

      END̲ENTITY; 

     ENTITY edge; 

      ... 

     INVERSE 

      loops : SET [2 : 2] OF loop FOR edges; 

      ... 

     END̲ENTITY; 

G.1.4 逆属性 属性によって定められたすべての関係は,暗黙の逆関係をもつ。この逆関係は,通常無視

される。すなわち,参照されないし,基数も制約されない。単純な関係を宣言している属性への一意性規

則は,実質的に逆関係の基数を制約する。EXPRESSは,逆関係に名前を付けたり,制約を付けたりする構

成要素を備えている。これらの構成要素は,これまでに示した関係で部分的に触れてきたが,次に要約す

る。 

逆関係は,INVERSE属性の宣言によって,識別子が与えられる。INVERSE属性の型によって,逆関係

の基数を制約できる。 

EXPRESSの特定の構成要素及びそれが逆方向の基数に及ぼす影響を次に示す。ここでは,エンティティ

Eは,データ型Tの属性Aを宣言しているものとする。Tが集合体データ型の場合,その根元基本型は,

FUND (T) とする。表現エンティティ[FUND (T) 又はT]は,Rで示す。逆関係は,R内でINVERSE

属性Iによって宣言しているものとする。 

− Aが一意性規則をもつ非集合体データ型の場合,単純な関係は,Eの母集団において個々のAが

一意であるように制約される。すなわち,Tのインスタンスは,Eの一つのインスタンスだけで

役割Aを果たすことができる (q=1) 。これは,INVERSE I : SET [0 : 1] OF E FOR Aと等しい。 

− Aが一意性規則をもつ集合体属性の場合,集団の関係は,s=1として制約される。すなわち,(集

合体である)Tのインスタンスは,Eの一つのインスタンスだけで役割Aを果たすことができる。

個別の関係には,制約はない。すなわち,Rのインスタンスは,Eの任意個のインスタンスで役

割Aを果たしてよい。 

− Iを,INVERSE I : BAG [p : q] OF E FOR Aと宣言した場合,単純な関係又は個別の関係の逆方

向の基数は,p及びqの値によって制約される。すなわち,Rの特定のインスタンスは,Eのp

〜q個のインスタンスで役割Aを果たしてよい。BAGはインスタンス等価な複数の要素を認める

ので,Rの一つの特定のインスタンスは,Eの一つの特定のインスタンスで複数回この役割を果

たしてもよい。これは,Tが重複した要素を認める集合体データ型のときだけ意味をもつ。 

− Iを,INVERSE I : SET [p : q] OF E FOR Aと宣言した場合,単純な関係又は個別の関係の逆方向

の基数は,p及びqの値によって制約される。すなわち,Rのインスタンスは,Eのp〜q個のイ

ンスタンスで役割Aを果たしてよい。SETは重複した要素を認めないので、Rの一つの特定のイ

ンスタンスは,Eの一つの特定のインスタンスでは1回しかこの役割を果たすことができない。 

− Iを,INVERSE I : E FOR Aと宣言した場合,その効果は,Eの代わりにSET [1 : 1] OF Eと宣言

したのと同じである。すなわち,Rのインスタンスは,Eのただ一つのインスタンスだけで役割

Aを果たさなければならない。 

− Iを,p

1のBAG若しくはSETであるか又はBAG若しくはSETではないと宣言した場合,R

上での存在の制約が定まる。すなわち,Rのインスタンスは,Eの少なくとも1個のインスタン

スで役割Aを果たさなければならない。 


166 

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

 

G.2 上位型関係及び下位型関係 エンティティ内で下位型宣言をすることによって,下位型エンティティ

と指定された上位型エンティティとの間の関係が指定される。 

下位型Cをもつ上位型エンティティPがあるとき,この関係は,次のとおり図式化できる。 

 

ここで,

1

0

n

とする。これは,Pのすべてのインスタンスには,Cのインスタンスが0個又は1個

あることを意味する。Cのすべてのインスタンスには,Pのインスタンスが1個ある。 

PがABSTRACT上位型であるとき,関係は,次のとおりである。 

 

これは,Pのすべてのインスタンスには,Cのインスタンスが1個あることを意味する。Cのすべての

インスタンスには,Pのインスタンスが1個ある。 


167 

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

附属書H(参考) EXPRESS-Gで図示した例のEXPRESSモデル 

この附属書では,EXPRESS-Gモデルを図示するのに用いた幾つかの例をEXPRESSの様式で示す。 

これらが現実的なモデルであるか,又はよいモデルであるかは,問わない。これらのモデル例は,この

規格群の他の規格のモデルとは全く関係がない。 

 

H.1 単一スキーマモデルの例 次の例171.のモデルでは,人間は,男性か女性でなければならないことを

基本的に示している。すべての人間は,姓名,誕生日,髪の毛の種類,0人以上の子供(子供もまた人間

である。)などのような,固有の特性をもっている。男性は女性と結婚でき,その場合,女性は男性への逆

関係をもつ。 

人間の年令 (age) は,誘導属性で,引き数として入力した日付と現在の日付との間の年数を出力する関

数yearsによって算出される。 

personは,子供である人間をその親に関連付ける逆属性をもつ。この逆属性の下限は,家系図全体を与

える必要がないことを明示するために,0とする。 

備考 parentsが明示属性でchildrenが逆属性の場合,家系図は,時間をさかのぼる方向に展開しなけ

ればならない。 

例171. 単一スキーマのEXPRESSモデル 

     SCHEMA example; 

     TYPE date = ARRAY [1 : 3] OF INTEGER; 

     END̲TYPE; 

     TYPE hair̲type = ENUMERATION OF 

       (blonde,  

        brown,  

        black,  

        red,  

        white,  

        bald); 

     END̲TYPE; 

     ENTITY person 

      ABSTRACT SUPERTYPE OF (ONEOF (female, male)); 

      first̲name : STRING; 

      last̲name 

: STRING; 

      nickname 

: OPTIONAL STRING; 

      birth̲date : date; 

      children 

: SET [O:?] OF person; 

      hair 

: hair̲type; 

     DERIVE 

      age : INTEGER : = years (birth̲date); 

     INVERSE 


168 

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

      parents : SET [0:2] OF person FOR children; 

     END̲ENTITY; 

     ENTITY female 

      SUBTYPE OF (person); 

     INVERSE 

      husband : SET [0:1] OF male FOR wife; -- husbandは省略可能 

     END̲ENTITY; 

     ENTITY male 

      SUBTYPE OF (person); 

      wife : OPTIONAL female; 

     END̲ENTITY; 

     FUNCTION years (past : date) : INTEGER; 

      (* この関数は,過去の日時と現在の日時との間の年数を計算する。 *) 

     END̲FUNCTION; 

     END̲SOHEMA; 

 

H.2 関係の例示 次の例172.は,EXPRESSモデルに見られる宣言及び関係の幾つかを示すことを目的とし

た単純なモデルである。このモデルには,上位型エンティティ,下位型エンティティ及びそのいずれでも

ないエンティティが含まれている。さらに,二つの定義データ型,選択データ型及び単純データ型も含ま

れている。 

例172. EXPRESSのエンティティと型との関係の簡単なモデル 

     SCHEMA etr; 

     ENTITY super; 

     END̲ENTITY; 

     ENTITY sub̲1 

      SUBTYPE OF (super); 

      attr : from̲ent; 

     END̲ENTITY; 

     ENTITY sub̲2 

      SUBTYPE OF (super); 

      pick : choice; 

     END̲ENTITY; 

     ENTITY an̲ent; 

      int : INTEGER; 

     END̲ENTITY; 

     ENTITY from̲ent; 

      description : OPTIONAL to̲ent; 

      values    : ARRAY [1:3] OF UNIQUE REAL; 

     END̲ENTITY; 

     ENTITY to̲ent; 


169 

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

      text : strings; 

     END̲ENTITY; 

     TYPE choice = SELECT 

      (an̲ent,  

       name); 

     END̲TYPE; 

     TYPE name = STRING; 

     END̲TYPE; 

     TYPE strings = LIST [1:?] OF STRING; 

     END̲TYPE; 

     END̲SCHEMA; 

 

H.3 単純な上位型・下位型の木 EXPRESSでは,非常に複雑な上位型・下位型の木(及びネットワーク)

を定義することができる。次の例173.に示す木は,比較的単純な例である。 

例173. EXPRESSでの上位型・下位型の木 

     SCHEMA simple̲trees; 

     ENTITY super; 

     END̲ENTITY; 

     ENTITY sub1 

      SUBTYPE OF (super); 

     END̲ENTITY; 

     ENTITY sub2 

      ABSTRACT SUPERTYPE OF (ONEOF(sub3,  

                       sub4)) 

      SUBTYPE OF (super); 

     END̲ENTITY; 

     ENTITY sub3 

      SUBTYPE OF (sub2); 

     END̲ENTITY; 

     ENTITY sub4 

      SUBTYPE OF (sub2); 

     END̲ENTITY; 

     ENTITY sub5 

      SUBTYPE OF (super); 

     END̲ENTITY; 

     END̲SCHEMA; 

 

H.4 属性の再宣言 EXPRESSでは,新しい属性型が元のものと整合していれば,継承属性の再宣言を行う

ことができる。例174.では,幾つかの再宣言可能な形式のうち,次の三つの形式を示している。 

− 再宣言する属性型が,継承される型の下位型である場合。 


170 

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

− 再宣言する属性型が,継承される型と整合する単純データ型である場合。 

− 継承される属性の値が省略可能であるが,再宣言する属性の値が必す(須)である場合。 

例174. EXPRESS属性の再宣言 

     ENTITY sup̲a; 

      attr : sup̲b; 

     END̲ENTITY; 

     ENTITY sub̲a 

      SUBTYPE OF (sup̲a); 

      SELF\sup̲a. attr : sub̲b; 

     END̲ENTITY; 

     ENTITY sup̲b; 

      num : OPTIONAL NUMBER 

     END̲ENTITY; 

     ENTITY sub̲b 

      SUBTYPE OF (sup̲b); 

      SELF\sup̲b. num : REAL; 

     END̲ENTITY; 

 

H.5 複数のスキーマのモデル EXPRESSモデルは,少なくとも一つのスキーマからなる。次の例175.は,

二つのスキーマからなるモデルを示している。 

例175. 二つのスキーマからなるEXPRESSモデル 

     SCHEMA geom; 

      ENTITY lcs; 

      END̲ENTITY; 

      ENTITY surface; 

      END̲ENTITY; 

      ENTITY curve; 

      END̲ENTITY; 

      ENTITY point; 

      END̲ENTITY; 

     END̲SCHEMA; -- geom 

     SCHEMA top; 

      USE FROM geom 

      (curve,  

       point AS node); 

      REFERENCE FROM geom 

       (surface); 

     ENTITY face; 

      bounds : LIST [1:?] OF loop; 

      loc   : surface; 


171 

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

     END̲ENTITY; 

     ENTITY loop 

      ABSTRACT SUPERTYPE OF 

           (ONEOF (eloop, vloop)); 

     END̲ENTITY; 

     ENTITY eloop 

      SUBTYPE OF (loop); 

      bound : LIST [1:?] OF edge; 

     END̲ENTITY; 

     ENTITY vloop 

      SUBTYPE OF (loop); 

      bound : vertex; 

     END̲ENTITY; 

     ENTITY edge; 

      start : vertex; 

      end  : vertex; 

      loc  : curve; 

     END̲ENTITY; 

     ENTITY vertex; 

      loc : node; 

     END̲ENTITY; 

     END̲SCHEMA; −− top 

より複雑なスキーマの集合を,例176.に示す。ここで宣言されたスキーマ内には,エンティティ,型及

び他の定義が本来はあるが,ここでは省略している。 

例176. 複数のスキーマのEXPRESSモデル 

     SCHEMA stuff; 

     END̲SCHEMA; 

     SCHEMA whatsits; 

      REFERENCE FROM stuff; 

     END̲SCHEMA; 

     SCHEMA widgets; 

      USE FROM whosits; 

      USE FROM gadgets; 

      REFERENCE FROM things; 

     END̲SCHEMA; 

     SCHEMA things; 

     END̲SCHEMA; 

     SCHEMA gadgets; 

      USE FROM stuff; 

      REFERENCE FROM things; 


172 

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

     END̲SCHEMA; 

     SCHEMA whosits; 

      REFERENCE FROM stuff; 

      REFERENCE FROM whatsits; 

     END̲SCHEMA; 


173 

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

附属書J(参考) 参考文献 

 

1. ISO TR 9007 : Information Processing Systems−Concepts and terminology for the conceptual schema and 

information base 

 

2. KAMADA, T. and KAWAI, S. ; “A General Framework for Visualizing Abstract Objects and Relations ”,ACM 

Transactions on Graphics, January 1991, vol.10, no.1, p.1-39.  

 

3. WIRTH, N. ; “What can we do about the unnecessary diversity of notation for syntactic definitions?” , 

Communications of the ACM, November 1977, vol.20, no.11, p.822.  

産業オートメーションシステム及びその統合−製品データの表現及び交換 

JIS原案作成委員会 構成表 

 

 

氏名 

所属 

(委員長) 

 

木 村 文 彦 

東京大学工学部 

(主査) 

 

岸 浪 建 史 

北海道大学工学部 

(委員) 

 

榎 本   進 

東京理科大学理工学部 

 

 

大 林 陽一郎 

株式会社リコー 

 

 

菊 地 慶 仁 

北海道学園大学工学部 

 

 

小 路 利 明 

三菱重工業株式会社 

 

 

鈴 木 宏 正 

東京大学工学部 

 

 

田 中 文 基 

北海道大学工学部 

 

 

徳 永 英 二 

TOK 

 

 

中 塚 久 世 

株式会社マイクロ・シー・エー・デー 

 

 

中 村 伊知郎 

三菱電機株式会社 

 

 

平 岡 弘 之 

中央大学理工学部 

 

 

万 仲   豊 

株式会社東芝 

 

 

三 原 和 博 

松下電器産業株式会社 

 

 

竹田原 昇 司 

工業技術院標準部 

 

 

加 山 英 男 

財団法人日本規格協会 

(事務局) 

 

橋 田 忠 明 

社団法人日本コンピュータ・グラフィックス協会 

 

JIS B 3700-11記述言語調査WG 構成表 

 

 

氏名 

所属 

(主査) 

 

岸 浪 建 史 

北海道大学工学部 

(委員) 

 

荒 井   勝 

松下電器産業株式会社 

 

 

榎 本   進 

東京理科大学理工学部 

 

 

大 林 陽一郎 

株式会社リコー 

 

 

菊 地 慶 仁 

北海道学園大学工学部 

 

 

鈴 木 宏 正 

東京大学工学部 

 

 

田 中 文 基 

北海道大学工学部 

 

 

徳 永 英 二 

TOK 

 

 

中 塚 久 世 

株式会社マイクロ・シー・エー・デー 

 

 

平 岡 弘 之 

中央大学理工学部 


 

まえがき 

この規格は,工業標準化法第14条によって準用する第12条第1項の規定に基づき,財団法人日本情報

処理開発協会 (JIPDEC) /財団法人日本規格協会 (JSA) から,工業標準原案を具して日本工業規格を改

正すべきとの申出があり,日本工業標準調査会の審議を経て,経済産業大臣が改正した日本工業規格であ

る。これによってJIS B 3700-11 : 1996の規定内容は,この追補によって変更される。 

この追補は,1999年に発行されたISO 10303-11 : 1994(Industrial automation systems and integration−

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

manualのTechnical corrigendum 1)を翻訳し,技術的内容及び追補の様式を変更することなく作成した日本

工業規格の追補である。


 

 

日本工業規格          JIS 

 

B 3700-11 : 2002 

 

(ISO 10303-11 : 1994/Cor.1 : 1999) 

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

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

第11部:記述法: 

EXPRESS言語 

(追補1) 

Industrial automation systems and integration− 

Product data representation and exchange− 

Part1 1 : Description methods :  

The EXPRESS language reference manual 

 (Technical Corrigendum 1)  

 

 

序文 この追補は,ISO 10303-11 : 1994 (Industrial automation systems and integration−Product data 

representation and exchange−Part11 : Description methods : The EXPRESS language reference manual) に対して

1999年に発行されたTechnical corrigendum 1について,技術的内容及び追補の様式を変更することなくJIS 

B 3700-11 : 1996の追補1として作成したものである。 

 

JIS B 3700-11 : 1996を,次のように改正する。 

 

3ページ 

3.1  (JIS B 3700-1で定義された用語)と3.2(この規格で定義する用語)との間に,次の箇条を挿入

する。 

3.2  JIS X 0221で定義された用語 この規格は,JIS X 0221で定義された次の用語を使う。 

− 図形文字 (graphic character)  

備考 この用語は,JIS X 0221で可視化表現が定義されている文字だけを含み,空白の点又は斜線が

施されている点は,含まない。 

3ページ 

3.2を3.3とし,以降この順に箇条番号をずらす。 

 

7ページ 

6.2 


B 3700-11 : 2002 (ISO 10303-11 : 1994/Cor.1 : 1999) 

最後の項目,\oは,で始まる行を削除する。 

6.2 

最後の項目の後に,次の項目を挿入する。 

− \x8,\x9,\xA,\xB,\xC,\xDは,JIS X 0221の群00,面00,区00の,位置8〜13番目

のそれぞれの文字を表現する。 

 

8ページ 

7.1 

第1段落を次の文章に置き換える。 

EXPRESSで記述されたスキーマは,次の文字集合中の文字だけを使わなければならない。それらの

文字は,JIS X 0221の08から0Dの点に割り当てられた制御機能,20から7Eの範囲に配置された図

形文字,及び復帰改行を示す特殊文字\nとする。この文字の集合を,EXPRESS文字集合と呼ぶ。こ

の文字集合の要素は,これらの文字が定義されているJIS X 0221の点によって参照し,点の番号は,

16進数によって指定する。この集合の印字可能な文字(JIS X 0221の区点21〜7E)は,EXPRESS言

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

ラルをいう。EXPRESS文字集合は,更に次のとおり区分する。 

このように規定された文字集合は,概念的な文字集合であって,実装での表現とは独立とする。 

備考 JIS X 0211は,JIS X 0221の08〜0Dの位置にある制御機能の意味を規定する。JIS B 3700-11

は,JIS X 0211で規定された08〜0Dにある制御機能の意味であってもよいし,そうでなくて

もよい。 

 

9ページ 

7.1.5.1  

第1文章中の次の語句を削除する。 

 “又は明示的な文字列リテラルの中” 

第2文章を次の文章に置き換える。 

 記法ʻ\sʼは,言語構文中では,間隔文字を表現するのに使ってもよい。 

7.1.5.3  

この箇条の文章を次の文章に置き換える。 

点08〜0Dの制御機能は,文字列リテラル中を除き,空白として扱わなければならない。nが8,9,

A,B,C,Dのいずれかである場合,記法\xnは,言語構文中で,これらの文字を表現するのに使う。 

 

10ページ 

7.1.6.2  

構文ブロックの構文144中の“|\o”を,次のとおりに置き換える。 

|\x8|\x9|\xA|\xB|\xC|\xD 

 

13ページ 

7.5.4 

 

下から3行目と2行目との間に,次の段落を挿入する。 


B 3700-11 : 2002 (ISO 10303-11 : 1994/Cor.1 : 1999) 

オクテットの並びは,JIS X 0221の一つの文字を正しく識別しなければならない。 

 

14ページ 

構文ブロックの構文141中の“|\o”を,次のとおりに置き換える。 

|\x8|\x9|\xA|\xB|\xC|\xD 

例13.の最下行に,次の例を挿入する。 

“0000795E00006238” 

漢字“神戸”と読む。 

 

17ページ 

8.1.6 

2番目の文章を,次の文章に置き換える。 

文字列を構成する文字は,点08〜0Dに配置された制御機能,並びにJIS X 0221の20〜7E及びA0から

10FFFEにある図形文字とする。 

 

104ページ 

15.12 

例135.の4行目を,次のとおりに置き換える。 

x2 : STRING : = “000025FF000101B5” ; 

 

118ページ 

附属書A1.3 

構文ブロックの構文141中の“|\o”を,次のとおりに置き換える。 

|\x8|\x9|\xA|\xB|\xC|\xD 

附属書A1.4 

構文ブロックの構文144中の“|\o”を,次のとおりに置き換える。 

|\x8|\x9|\xA|\xB|\xC|\xD 

 


B 3700-11 : 2002 (ISO 10303-11 : 1994/Cor.1 : 1999) 

JIS B 3700 原案作成委員会 構成表 

 

 

氏名 

所属 

(委員長) 

 

鈴 木 宏 正 

東京大学大学院工学系研究科 

(委員) 

 

井 上   和 

株式会社富士通九州システムエンジニアリング 

 

 

岸 浪 建 史 

北海道大学大学院工学研究科 

 

 

小 林 一 也 

富山県立大学工学部 

 

 

杉 村 延 広 

大阪府立大学工学部 

 

 

徳 永 英 二 

TOK 

 

 

中 塚 久 世 

株式会社マイクロ・シー・エー・デー 

 

 

平 岡 弘 之 

中央大学理工学部 

 

 

八 田   勲 

通商産業省工業技術院標準部 

 

 

橋 本   進 

財団法人日本規格協会技術部 

(事務局) 

 

河 内 千 恵 

財団法人日本情報処理開発協会 

第1作業部会 構成表 

 

 

氏名 

所属 

(主査) 

 

岸 浪 建 史 

北海道大学大学院工学研究科 

(委員) 

 

菊 地 慶 仁 

北海学園大学工学部 

 

 

小 林 一 也 

富山県立大学工学部 

 

 

鈴 木 宏 正 

東京大学大学院工学系研究科 

 

 

田 中 文 基 

北海道大学大学院工学研究科 

 

 

徳 永 英 二 

TOK 

(事務局) 

 

千 田 雅 彦 

財団法人日本情報処理開発協会 

 

 

河 内 千 恵 

財団法人日本情報処理開発協会