ナレッジ

【連載】概念モデリングを習得しよう:概念情報モデル(Conceptual Information Model)(第11回)

【連載】概念モデリングを習得しよう:概念情報モデル(Conceptual Information Model)(第11回)

【前回の連載記事はこちら】

【連載】概念モデリングを習得しよう:圏Iのモデルを作ることと、人間が思考するということの関係性(第10回)

読者の皆さん、こんにちは。Knowledge & Experience 代表の太田 寛です。

この連載コラムでは概念モデリングの解説を行っています。

今回は、概念情報モデル(Conceptual Information Model)について解説します。

概念情報モデル(Conceptual Information Model)

概念情報モデル(Conceptual Information Model)

これまで解説してきた、概念インスタンス群とリンク群で記述したモデル、数学的に圏Iと名付けたモデルは 、意味の場を通じて認識している、その時々の、モデル化対象の状態を記述したモデルでした。

このことは、設定された意味の場において、概念インスタンス群とリンク群を拾い上げ、対象世界の状態の写しとしてのモデルを、その時々で、それらの一意性を意識しつつ、作っていくことを意味します。このようなやり方は、非常に場当たり的で、泥縄式な方法と言わざるを得ません。

人間は通常、目にしたもの、あるいは認識の俎上に上がったものを、その都度、場当たり的に「それは何?」と認識するものではなく、あらかじめ知っている範囲の分類に当てはめて、物事を認識するのが一般的でしょう。

果樹園の例で言えば、

“目の前に白い円形の平たいものの上に載っている赤くて丸いものがある→それを皿とリンゴと認識する”

から、

“試食用のリンゴは皿に載っていて、皿とリンゴはある決まった値域を持つ特徴値で記述される性質を持っている→目の前に在る事柄はそれらに当てはまる→それは、試食用の皿に載っているリンゴであると認識する”

という認識のスタイルに転換するということです。
哲学の世界では、“分類”のことを“概念”と呼ぶのが一般的です。

図表1:〇〇だから〇〇であるという認識への転換

このような、ある決まった特徴値で性質が記述される事柄の分類と、事柄間のリンクの分類を記述するモデルのことを、「概念情報モデル」(Conceptual Information Model)と呼びます。そして、分類された事柄を「概念クラス(Conceptual Class)」、分類されたリンクを「リレーションシップ(Relationship)」と呼びます。

概念情報モデルは、以下のような手順で、意味の場を同じくする、複数の圏Iのモデルから導き出します。

圏I のモデルをざっと眺めて、同じ特徴値の組と同じ意味的リンクを持つ事柄を分類します。その分類に名前を付けて概念クラス(Conceptual Class)として定義します。

圏I のモデルの、

● 一つ以上の特徴値で性質が記述された概念インスタンスが存在する

● その概念インスタンスは一つ以上の別の概念インスタンスとリンクを持つ

という認識を集めて、分類・整理し、

● 決まった特徴値の組を持つ

● 決まったリンクを他の概念インスタンスとの間に持つ

というものを抽出し、名前の付いた概念クラスとして定義します。

そして、その二つの条件を同時に満たす事柄が、複数の圏Iのモデルで認識できるなら、それは、概念クラスをひな型にした概念インスタンスであると考え、分類・抽出の正しさを検証します。

この手順を、例に挙げた果樹園のモデルに適用してみることにします。

まずは、同じ特徴値の組を持つ概念インスタンスをグループ化し、概念クラスの候補を見つけます。

図表2:概念インスタンスの分類による概念クラスの候補を抽出

このとき、圏Iのモデル上に同類と思われる概念インスタンスが二つ以上なくても、常識的に考えて、それと同じような分類に属する事柄があることを容易に想像できる場合は、それらも分類として洗い出します。一般社会において、果樹園や卸業者が世界にたった一つしかないなどあり得ないので、“果樹園”や“卸業者”も分類として抽出しています。

次に、同じ概念クラスに所属して、かつ同じような意味を持つリンクをグループ化し、リレーションシップの候補を見つけます。

図表3:概念クラスをグループ化し、リレーションシップの候補を抽出

圏Iのモデルのリンクには全て、その両端に一つずつの概念インスタンスが、その意味とともにひも付けられていました。まずは、同じ意味を持つ複数のリンクを拾い上げて、リレーションシップの候補を抽出します。同じ意味を持つ複数のリンクを束ねると、一つの概念インスタンスにただ一つの概念インスタンスがひも付くものや、複数の概念インスタンスがひも付くものがあります。リレーションシップの場合は、その両端に基になったリンクの両端に定義された意味だけでなく、ひも付く概念インスタンスの数の条件も記述します。この数の条件のことを“多重度(Multiplicity)”と呼びます。

図表4:リンクの分類により、リレーションシップの候補を抽出

このような手順を経て、洗い出した、概念クラスとリレーションシップの候補を、概念情報モデルとして図示すると、

図表5:概念情報モデルとして整える

という図が出来上がります。

図表3には読者にとって見慣れない記述がいくつかあると思いますが、後で詳しく解説するので、ここでは、概念情報モデルの雰囲気だけつかんでください。

大体このような手順で概念情報モデルは作られていくのですが、概念情報モデルは一度描ければそれでおしまいではありません。概念情報モデルは、モデル作成者が、対象世界の意味の場をどういう風に理解したかを表明するモデルです。モデル作成者の認識が正しくなければ、その概念情報モデルも正しいとは言えません。

モデルの過不足や間違いを修正しつつ、最終的なモデルに近づけていきます。具体的なやり方については、次回の連載にて概念情報モデルの詳細を一通り説明した後、改めて、解説することとします。

概念情報モデルの詳細

次に、概念情報モデルの詳細を解説していきます。

概念情報モデルは、

● 概念クラス

● リレーションシップ

● 概念クラスにひも付いた特徴値

● 特徴値の値を規定するデータ型

で記述します。概念情報モデルは、圏I のモデルの時と同様、用途に応じて、図で描いてもテキストで書いても構いません。図で描く場合は、モデリング言語の標準である、UML のクラスダイヤグラムの記法に準拠します。

以下、それぞれの項目の詳細を解説していきます。

概念クラス

概念クラスは、モデル化対象の意味の場から拾い上げて抽出・分類した“事柄の概念”を表します。果樹園のリンゴを例にすれば、圏I の概念インスタンスが実際に存在する個々のリンゴだったのに対し、概念クラスのリンゴは、個々のリンゴではなく、“リンゴというもの”という概念を指し示します。

概念クラスは、

● 名前

● 特徴値の組

● キー文字、番号:オプション

● 概要説明文:オプション

を記述することにより定義されます。

概念クラスの“名前”は、モデル化対象の意味の場において、正確、かつ、適切な名前でなければなりません。また、一つの意味の場においては、同じ名前を持つ概念クラスが二つ以上存在することは許されません。

概念クラスは、それが指し示す概念の性質を記述する、一つ以上の特徴値がひも付けられています。一見、概念インスタンスの時と同じように見えますが、概念インスタンスの特徴値は値が確定しているのに対して、概念クラスの特徴値は、データ型によって規定された変数です。

実際の概念情報モデルは、多くの概念クラスが定義されるものです。モデル化対象の意味の場に即した概念クラスの名前はどうしても長く煩雑になりがちです。記述したモデルを2人以上でレビューしたり、ディスカッションしたりする際、概念クラスが名前だけしかないと、どの概念クラスのことを指しているのか分かりにくいものです。それぞれの概念クラスに異なる英文字を使った短めの文字列(キー文字)や番号を付与しておくと便利です。

また、概念情報モデルを読む際、概念クラスの名前と、ひも付いている特徴値の組を見ただけで、それがどんな概念なのか正確に思い浮かべられるのが理想なのですが、なかなかそうもいきません。このため、その概念クラスがどんな概念を指すのかを示す簡潔な概要文も書いておきます。

以下に、図で描く場合と、テキストで書く場合の例を挙げておきます。

図表6: さまざまな記述方法 - UML、YAML を例に

上の図のテキスト表記による定義は、システムの設定ファイルなどでよく使われる YAML(Ain't Markup Language) を使って書いています。特に YAML でなければならないということではなく、必要な項目が適切な構造で記述されていれば、XML でも JSON でも何でも構いません。また、図についても、あくまでも推奨であり、適切な構造で描けて一貫した記法であれば何でも構いません。UML で描く場合は、概念クラスの名前(キー文字、番号を含む)を描くパートと、特徴値の組を描くパートを線で区切っていますが、その線は有っても無くても構いません。以降の説明では線が有ったり無かったりしますが、気にしないでください。

重要なのは、モデルの内容であり、見た目ではありません。絵で描いた概念情報モデルのことを、“概念情報モデル図”、見た目に関係ないモデルの内容を、“概念情報モデル”と呼び分けて区別することにします。

参考までに、UML 表記に従った果樹園の概念情報モデル図を挙げておきます。

図表7: UMLクラス図を使った概念情報モデルの記述

リレーションシップ

リレーションシップは、モデル化対象の意味の場から拾い上げて抽出・分類した“事柄間の意味的つながりの概念”を表します。

リレーションシップは、二つの概念クラスの間に定義します。

リレーションシップは、

● 名前:Rn {n:自然数} の形式

● 両端にそれぞれ

 ▶ 多重度

 ▶ 意味

● 概要説明文

を記述することによって定義します。

図表8: リレーションシップの記述

概念クラスの時と同様、概念情報モデルをレビューしたり、ディスカッションしたりするときに、どのリレーションシップについて言及しているのか区別しやすいように、意味の場の中で一意になるような名前付けを行います。

両端の意味は、圏Iのリンクについて説明した時と同様、反対側の概念クラスから見た時のつながりの意味を、両端の概念クラスの名前と組み合わせて述語になるようなテキストとして記述します。

概念クラスの名前とリレーションシップの両端に書かれた意味を使って述語文を構成するには、日本語の特性上、“てにをは”が必要です。
たとえば、“りんご果樹木なっている”などです。厳密には両端の意味の記述は誤解を避けるために“てにおは”を含めたほうが良いのですが、ここでは図の煩雑さを避けるため、容易に想像がつく場合は省略するようにしています。適宜補って読み下してみてください。

多重度

多重度は、反対側の概念クラスをひな型とする概念インスタンスが存在したとき、そのリレーションシップをひな型とするリンクでつながる(多重度が定義されている側の概念クラスをひな型とする)概念インスタンスが幾つ存在し得るかを規定します。

概念モデリングにおいては、多重度は、以下の4種類のうちのどれかで定義します。

● 1 ― 無条件の1

 ▶ 必ず一つだけリンクでつながっている

● 0..1 ― 条件付きの1

 ▶ リンクでつながっているものがないか、あっても最大一つだけつながっている

● 1..* ― 無条件の多

 ▶ 一つ以上、リンクでつながっている

 ▶ 一つもリンクでつながっていない状況は許されない

● * ― 条件付きの多

 ▶ リンクでつながっているものがないか、一つ以上リンクでつながっている

場合によっては、つながっているのが、二つだったり三つだったりすることもあるのでは?と疑問を抱く読者がいるかもしれません。

しかし、概念モデリングでは、二つに見えるなら、

● 二つしかないなら、一つ目と二つ目でそれぞれ意味があるはず

● 今は二つだが、三つ以上があっても構わない

という観点で意味的つながりを詳細化するのが原則です。前者のケースでは、それぞれ多重度が1または、0..1 のふさわしい意味が付与された二つのリレーションシップを定義するのが正解であり、後者のケースは、多重度を 1..*、または、* とするのが正解です。

圏Iの説明において、リンクを示す参照を表す特徴値のことを解説していたのを思い出してください。当然のことながら、概念インスタンスのひな型である概念クラスもそれに相当する参照を表す特徴値を持つことになります。リレーションシップでつながれた二つの概念クラスのどちらに参照を表す特徴値をひも付けるかは、多重度によって決められることになります。判断基準は、

● 0..1、1..*、* 側に付ける

が基本です。ただし、両端共に、0..1、あるいは、1 の場合は、概念インスタンスの寿命が短い側の概念クラスに参照を表す特徴値を付与します。

次回は、関連クラスがひも付いたリレーションシップについて解説します。

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Search Articles By The Cast出演者/執筆者から記事を探す

Search Articless By The Categoryカテゴリから記事を探す

Ranking

ランキング

もっと見る