ここでは,コンテインメントを利用して文書を管理する方法について説明します。
DocumentBrokerでは,コンテインメント(Containment:包含)というオブジェクト同士の関連を使って文書を管理できます。コンテインメントでは,ある二つのオブジェクトを想定して,一方を「包含するオブジェクト」,もう一方を「包含されるオブジェクト」として考えます。例えば,フォルダに文書を格納することを考えた場合,フォルダがオブジェクトを「包含するオブジェクト」,文書はオブジェクトに「包含されるオブジェクト」に相当します。なお,DocumentBrokerでは,オブジェクトを「包含するオブジェクト」を総称してコンテナと呼びます。
コンテインメントでは,包含するオブジェクトと包含されるオブジェクトを関連づけるためのDMAオブジェクトがあります。これを関連オブジェクトといいます。関連オブジェクトには,包含するオブジェクトと包含されるオブジェクトとの関係を表現するためのプロパティが用意されています。
なお,一つの関連オブジェクトが,複数のオブジェクト間の関係を示すために共用されることはありません。例えば,Aオブジェクトに,BオブジェクトとCオブジェクトが包含される場合,AオブジェクトとBオブジェクトを関連づける関連オブジェクトと,AオブジェクトとCオブジェクトを関連づける関連オブジェクトの二つが必要です。このように,コンテインメントは「包含するオブジェクト」「関連オブジェクト」「包含されるオブジェクト」の三つのオブジェクトで表現されます。
コンテインメントには,どの関連オブジェクトによって関連を表すかによって次の三つの種類があります。
次に各コンテインメントについて説明します。
直接型のコンテインメントでは,次のオブジェクトを使用してオブジェクト同士の関係を,親子の関係で示します。
直接型でのDMAオブジェクトの関係を次の図に示します。なお,コンテナ(Containerオブジェクト)が直接型の関連オブジェクトを介して文書(DocVersionオブジェクト)を包含する場合を例にしています。
図A-11 直接型でのオブジェクトの関係
直接型では,オブジェクトを包含するオブジェクトのことをParent,オブジェクトに包含されるオブジェクトのことChildと呼びます。直接型に使用する関連オブジェクトは,DirectContainmentRelationshipオブジェクトです。図A-11では,コンテナは文書のParentに相当します。コンテナに包含される文書は,コンテナのChildに相当します。
ParentとChildの関係は1:n(nは1以上の整数)です。つまり,Parentは複数のChildを包含できます。しかし,Childは一つのParentだけに包含されます。図A-11のコンテナAは複数の文書(文書Aおよび文書B)を包含しています。しかし,文書Aおよび文書BはコンテナAにだけ包含され,文書CはコンテナBにだけ包含されています。例えば,文書CがコンテナAとコンテナBに直接型で同時に包含されることはありません。
図A-11の関係を,DMAオブジェクトを使って次の図に示します。
図A-12 直接型で使用するDMAオブジェクト
DirectContainmentRelationshipオブジェクトは,dmaProp_HeadおよびdmaProp_Tailプロパティを保持します。これらのプロパティは,包含するオブジェクト(図A-12ではコンテナ)から始まる矢印を描いた時の終点(Head)と始点(Tail)を示します。
dmaProp_Headプロパティには包含されるオブジェクト,dmaProp_Tailプロパティには包含するオブジェクトへのリファレンスが格納されます。図A-12では,dmaProp_Headプロパティには文書へのリファレンスが,dmaProp_Tailプロパティにはコンテナへのリファレンスが格納されています。
なお,Parent内のChildの並びは保持されません。
参照型のコンテインメントでは,次のDMAオブジェクトを使用してオブジェクト同士の関係を示します。なお,関連オブジェクト以外のDMAオブジェクトについての説明は,「(a)直接型(DirectContainment)」を参照してください。
参照型のコンテインメントでのDMAオブジェクトの関係を次の図に示します。なお,コンテナ(Containerオブジェクト)が参照型の関連オブジェクトを介して文書(DocVersionオブジェクト)を包含する場合を例にしています。
図A-13 参照型でのDMAオブジェクトの関係
参照型では,オブジェクトを包含するオブジェクトをContainer,オブジェクトに包含されるオブジェクトをContaineeと呼びます。参照型に使用する関連オブジェクトは,ReferentialContainmentRelationshipオブジェクトです。図A-13では,コンテナは文書のContainerに相当します。コンテナに包含される文書は,コンテナのContaineeに相当します。
ContainerとContaineeの関係はn:m(n,mは1以上の整数)です。つまり,Containerは複数のContaineeを包含できます。Containeeは,複数のContainerに包含されることもできます。図A-13では,コンテナBは複数の文書(文書Aおよび文書B)を包含しています。文書Aは複数のコンテナ(コンテナAおよびコンテナB)に同時に包含されています。
図A-13の関係を,DMAオブジェクトを使って次の図に示します。
図A-14 参照型で使用するDMAオブジェクト
ReferentialContainmentRelationshipオブジェクトも,DirectContainmentRelationshipオブジェクトと同様にdmaProp_HeadおよびdmaProp_Tailプロパティを保持します。
図A-14では,dmaProp_Headプロパティには文書へのリファレンスが,dmaProp_Tailプロパティにはコンテナへのリファレンスが格納されています。
なお,Container内のContaineeおよびContainee内のContainerの並びは保持されません。
構成管理型のコンテインメントでは,次のオブジェクトを使用してオブジェクト同士の関係を示します。
構成管理型のコンテインメントでのDMAオブジェクトの関係を次の図に示します。なお,構成管理コンテナ(ContainerVersionオブジェクト)が構成管理型の関連オブジェクトを介して文書(VersionTracedDocVersionオブジェクト)を包含する場合を例にしています。
図A-15 構成管理型でのDMAオブジェクトの関係
構成管理型では,オブジェクトを包含するオブジェクトをVTContainer,オブジェクトに包含されるオブジェクトをVTContaineeと呼びます。構成管理型に使用する関連オブジェクトは,VersionTraceableContainmentRelationshipオブジェクトです。図A-15では,構成管理コンテナは文書のVTContainerです。構成管理コンテナに包含される文書は,構成管理コンテナのVTContaineeです。
VTContainerは,バージョン管理されているオブジェクトのバージョンをたどって包含できるオブジェクトです。VTContaineeは,バージョンをたどって包含されるオブジェクトです。
構成管理型では,最新のバージョンのオブジェクトを追跡してコンテインメントを結ぶFLOATINGモードと,バージョンを確定してコンテインメントを結ぶFIXモードのどちらかを選択できます。FLOATINGモードとFIXモードを総称して構成管理モードと呼びます。構成管理モードがFLOATINGモードの場合,VTContainerは常に最新のオブジェクトを包含します。構成管理モードがFIXモードの場合,VTContainerは包含するオブジェクトがバージョンアップしても同じオブジェクトを包含し続けます。図A-15では,構成要素の文書Aと文書Bが共にV1からV2にバージョンアップしたときに構成管理モードによって構成管理コンテナAおよび構成管理コンテナBと文書のバージョンの関連を示しています。構成管理コンテナAは,文書AをFIXモードで,文書BをFLOATINGモードで包含しています。したがって,文書がV1からV2にバージョンアップされると,構成管理コンテナAは,文書AについてはV1を包含し続け,文書Bについては最新のV2を包含します。
VTContainerとVTContaineeの関係は参照型のContainerとContaineeの関係と同様にn:m(n,mは1以上の整数)で,VTContainerは複数のVTContaineeを包含できます。VTContaineeは,複数のVTContainerに包含されることもできます。
図A-15の関係をDMAオブジェクトを使って次の図に示します。
図A-16 構成管理型で使用するDMAオブジェクト
VersionTraceableContainmentRelationshipオブジェクトも,DirectContainmentRelationshipオブジェクト,ReferentialContainmentRelationshipオブジェクトと同様にdmaProp_HeadおよびdmaProp_Tailプロパティを保持します。
図A-16では,dmaProp_Headプロパティには文書へのリファレンスが,dmaProp_Tailプロパティには構成管理コンテナへのリファレンスが格納されています。なお,VTContainer内のVTContaineeおよびVTContainee内のVTContainerの並びは保持されません。
VersionTraceableContainmentRelationshipオブジェクトのedmProp_VTModeプロパティの値がEDM_VTMODE_FLOATING(FLOATINGモード)の場合,参照先のDMAオブジェクトがバージョンアップするとdmaProp_Headプロパティの値が変化して最新のバージョンを指します。edmProp_VTModeプロパティの値がEDM_VTMODE_FIX(FIXモード)の場合,参照先のDMAオブジェクトがバージョンアップしてもdmaProp_Headプロパティの値は変わりません。
コンテインメントに使用するDMAクラスを,継承関係に基づいて次の図に示します。
図A-17 コンテインメントに使用するDMAクラスの継承関係