コンピュータサイエンスにおいて、具体化とは、プログラムに関する抽象的な概念を、プログラミング言語で作成された明示的なデータモデルやその他のオブジェクトに変換するプロセスです。計算可能/アドレス指定可能なオブジェクト(リソース)は、計算不可能/アドレス指定不可能なオブジェクトのプロキシとしてシステム内に作成されます。具体化によって、これまで暗黙的で表現されておらず、場合によっては表現不可能であったものが、明示的に定式化され、概念的(論理的または計算的)操作が可能になります。非公式には、具体化は特定のシステムの範囲内で「何かを第一級市民にする」と表現されることがよくあります。システムのある側面は、プログラミング言語のリフレクションに関連する言語設計時に具体化できます。これは、システム設計時に段階的な洗練として適用できます。具体化は、概念分析と知識表現において最も頻繁に使用される手法の1つです。
プログラミング言語の文脈では、具体化とは、ユーザープログラムや、翻訳されたプログラムや実行時システムに暗黙的に含まれていたプログラミング言語のあらゆる側面を、言語自体で表現するプロセスです。このプロセスにより、プログラムはこれらの側面を通常のデータとして検査できるようになり、利用可能になります。リフレクティブ言語では、具体化データは関連する具体化された側面と因果的に結び付けられており、一方を変更すると他方にも影響します。したがって、具体化データは常に、関連する具体化された側面を忠実に表現しています。具体化データは、しばしば第一級オブジェクトになると言われます。具体化は、少なくとも部分的には、今日まで多くの言語で経験されてきました。初期のLisp方言や現在のProlog方言では、プログラムはデータとして扱われてきましたが、因果関係はしばしばプログラマの責任に委ねられてきました。Smalltalk -80では、ソーステキストからバイトコードへのコンパイラは、言語の最初の実装から実行時システムの一部となっています。[ 1 ]
char * buffer = ( char * ) 0xB8000000 ; buffer [ 0 ] = 10 ;evalorevaluate手続きを提供します。thisContextSmalltalkでは現在実行中のブロックの具体化です。データ具体化(段階的洗練)とは、形式仕様で使用される抽象データ型のより具体的な表現を見つけることである。
データ具体化は、ウィーン開発手法(VDM)の用語であり、他の多くの人はこれをデータ洗練と呼ぶでしょう。例としては、実装言語に対応するものがないデータ表現(セットなど)を、対応するものを持つもの(固定ドメインを持つマップなど、配列で実装可能)または少なくとも対応するものに近いもの(シーケンスなど)に置き換えることで、実装に向けて一歩を踏み出すことが挙げられます。VDMコミュニティは、「洗練」よりも「具体化」という言葉を好みます。なぜなら、このプロセスはアイデアを洗練することよりも、具体化することに関係しているからです。[ 4 ]
同様の用法については、「具体化(言語学)」を参照してください。
具体化は概念モデリング で広く使用されています。[ 5 ]関係を具体化するとは、それを実体として見ることを意味します。関係を具体化する目的は、追加情報を追加する必要がある場合に、それを明示することです。関係タイプを考えてみましょうIsMemberOf(member:Person, Committee)。のインスタンスはIsMemberOf、人が委員会のメンバーであるという事実を表す関係です。下の図は、表形式で表された関係の例を示していますIsMemberOf。人P1は委員会C1とC2のメンバーです。人P2は委員会C1のみのメンバーです。

IsMemberOf。人物P1は委員会C1とC2の両方のメンバーです。人物P2は委員会C1のみのメンバーです。しかし、同じ事実を実体として見ることもできます。関係を実体として見る場合、その実体が関係を実体化すると言えます。これは関係の実体化と呼ばれます。他の実体と同様に、実体化は実体型のインスタンスである必要があります。この例では、実体型は と名付けられていますMembership。 の各インスタンスに対してIsMemberOf、 のインスタンスが 1 つだけ存在しMembership、その逆も同様です。これで、元の関係にさらに情報を追加できるようになります。例として、「人物 p1 は人物 p2 によって委員会 c1 のメンバーに指名された」という事実を表現できます。実体化された関係は、Membership新しい関係 のソースとして使用できますIsNominatedBy(Membership, Person)。
関連する用法については、「具体化(知識表現)」を参照してください。

UMLは、具体化された関係タイプを定義するための関連クラス構造を提供します。関連クラスは、関連[ 6 ]の一種であり、クラス[ 7 ]の一種でもある単一のモデル要素です。
関連と、それを具体化するエンティティ型は、どちらも同じモデル要素です。なお、属性は具体化できません。
リソース記述フレームワーク(RDF)やWebオントロジー言語(OWL)などのセマンティックWeb言語では、ステートメントは二項関係です。これは、2つの個人、または個人と値を関連付けるために使用されます。アプリケーションによっては、ステートメントがいつ作成されたか、誰が作成したかといった情報(「来歴」情報と呼ばれることもあります)を記録するために、他のRDFステートメントを記述する必要がある場合があります。例として、関係の確実性、関係の深刻度や強さ、関係の関連性など、関係の特性を表現したい場合があります。
概念モデリングのセクションでの例では、特定の人物が でありURIref person:p1、 のメンバーであることを説明していますcommittee:c1。その説明からの RDF トリプルは です。
人物: p1委員会: isMemberOf委員会: c1 。さらに、次の2つの事実を保存することを検討してください。(i) この特定の人物をこの委員会に推薦した人物を記録する(メンバーシップ自体に関する記述)、(ii) 誰がその事実をデータベースに追加したかを記録する(記述に関する記述)。
最初のケースは、UMLにおける上記のような古典的な具体化のケースです。メンバーシップを具体化し、その属性や役割などを保存します。
委員会:メンバーシップrdf :タイプowl :クラス。委員会: membership12345 rdf :タイプ委員会:メンバーシップ。委員会: membership12345委員会: ofPerson person : p1 。委員会: membership12345委員会: inCommittee委員会: c1 。人: p2委員会:指名された委員会: membership12345 。さらに、RDF は RDF ステートメントを記述するための組み込み語彙を提供します。この語彙を使用したステートメントの記述は、ステートメントの具体化と呼ばれます。RDF 具体化語彙は、型rdf:Statement、プロパティrdf:subject、、rdf:predicateおよびで構成されますrdf:object。[ 8 ]
具体化語彙を使用すると、その人物のメンバーシップに関する記述の具体化は、次のようなURIrefを記述に割り当てることによって行われ、committee:membership12345記述文は次のように記述できます。
committee : membership12345Stat rdf : type rdf : Statement . committee : membership12345Stat rdf : subject person : p1 . committee : membership12345Stat rdf : predicate committee : isMemberOf . committee : membership12345Stat rdf : object committee : c1 .これらの記述は、によって識別されるリソースがURIref committee:membership12345StatRDF ステートメントであり、ステートメントの主語がによって識別されるリソースを参照しperson:p1、ステートメントの述語がによって識別されるリソースを参照しcommittee:isMemberOf、ステートメントの目的語がリソースを参照することを示していますcommittee:c1。元のステートメントが実際にによって識別されると仮定するとcommittee:membership12345、元のステートメントと具体化を比較することで、具体化が実際にそれを記述していることが明らかになるはずです。RDF 具体化語彙の慣習的な使用法では、常にこのパターンで 4 つのステートメントを使用してステートメントを記述します。そのため、これらは「具体化クワッド」と呼ばれることもあります。[ 8 ]
person:p3この慣例に従って具体化することで、データベースにステートメントを追加したという事実を記録できます。
人物: p3委員会:データベースに追加委員会: membership12345Stat 。重要なのは、従来の再具体化の使用法では、再具体化トリプルの主語は、同じ主語、述語、目的語を持つ任意のトリプルではなく、特定のRDF文書内の特定のトリプルのインスタンスを識別するものと想定されている点です。この慣習が用いられるのは、再具体化は既に挙げた例のように、作成日やソース情報などのプロパティを表現することを目的としており、これらのプロパティは特定のトリプルのインスタンスに適用する必要があるためです。なお、記述されたトリプル自体は、このような再具体化クワッドによって暗示されるものではなく(また、データベースに実際に存在する必要もありません)、このメカニズムを使用して、どのトリプルが成り立たないか(subject predicate object)を表現することもできます。
RDF の具体化語彙の力は、ステートメントに URI 参照を割り当てる組み込み手段がないことによって制限されています。そのため、この種の「来歴」情報を RDF で表現するには、何らかのメカニズム (RDF の外部) を使用して個々の RDF ステートメントに URI を割り当て、それらの URI を使用してそれらの個々のステートメントを識別することで、それらのステートメントについてさらにステートメントを作成する必要があります。[ 8 ]
XMLトピックマップ(XTM)では、トピックのみが名前を付けることができ、関連付けにおいて役割を果たすことができます。関連付けを使用してトピックに関する主張を行うことはできますが、その主張について直接主張を行うことはできません。ただし、マップ内でトピック以外の構成要素を具体化するトピックを作成することは可能であり、それによって関連付けに名前を付けてトピック自体として扱うことができます。[ 9 ]
RDFやOWLなどのセマンティックWeb言語では、プロパティは2つの個人、または個人と値をリンクするために使用される二項関係です。しかし、場合によっては、特定の概念を表現する自然で便利な方法は、関係を使用して個人を複数の個人または値にリンクすることです。これらの関係はn項関係と呼ばれます。例としては、委員会、委員会のメンバーである人物、および最初の人物を委員会のメンバーに指名した人物など、複数の個人間の関係を表す場合や、本の購入を説明する際に、購入者、販売者、および購入されたオブジェクトを表す場合などがあります。
具体化へのより一般的なアプローチは、 n項関係を表す明示的な新しいクラスと n 個の新しいプロパティを作成し、 n個の個体をリンクする関係のインスタンスをこのクラスのインスタンスにすることです。このアプローチは、個々の関係インスタンスの由来情報やその他のプロパティを表すためにも使用できます。[ 10 ]
: p1 a :人; :会員資格を持つ_ :会員資格_12345 。_ :会員資格_12345 a :会員資格; :委員会: c1 ; :指名者: p2 。ここで説明する具体化は、他の言語で見られる「引用」とは異なる点にも注意が必要です。具体化は、特定のトリプルのインスタンスと、そのトリプルが参照するリソースとの関係を記述するものです。具体化は、(引用のように)「このRDFトリプルはこの形式である」ではなく、「このRDFトリプルはこれらの事柄について述べている」と直感的に解釈できます。例えば、このセクションで使用されている具体化の例では、トリプルは次のようになります。
委員会:メンバーシップ12345 rdf :対象者: p1 。元のステートメントの説明ではrdf:subject、ステートメントの主語はURIrefによって識別されるリソース(人物)であると述べられていますperson:p1。引用のように、ステートメントの主語がURIref自体(つまり、特定の文字で始まる文字列)であるとは述べていません。