付録A.5 コンテインメントを利用した文書管理

ここでは,コンテインメントを利用して文書を管理する方法について説明します。

<この項の構成>
(1) コンテインメントの考え方
(2) コンテインメントの種類
(3) コンテインメントに使用するDMAクラス

(1) コンテインメントの考え方

DocumentBrokerでは,コンテインメント(Containment:包含)というオブジェクト同士の関連を使って文書を管理できます。コンテインメントでは,ある二つのオブジェクトを想定して,一方を「包含するオブジェクト」,もう一方を「包含されるオブジェクト」として考えます。例えば,フォルダに文書を格納することを考えた場合,フォルダがオブジェクトを「包含するオブジェクト」,文書はオブジェクトに「包含されるオブジェクト」に相当します。なお,DocumentBrokerでは,オブジェクトを「包含するオブジェクト」を総称してコンテナと呼びます。

コンテインメントでは,包含するオブジェクトと包含されるオブジェクトを関連づけるためのDMAオブジェクトがあります。これを関連オブジェクトといいます。関連オブジェクトには,包含するオブジェクトと包含されるオブジェクトとの関係を表現するためのプロパティが用意されています。

なお,一つの関連オブジェクトが,複数のオブジェクト間の関係を示すために共用されることはありません。例えば,Aオブジェクトに,BオブジェクトとCオブジェクトが包含される場合,AオブジェクトとBオブジェクトを関連づける関連オブジェクトと,AオブジェクトとCオブジェクトを関連づける関連オブジェクトの二つが必要です。このように,コンテインメントは「包含するオブジェクト」「関連オブジェクト」「包含されるオブジェクト」の三つのオブジェクトで表現されます。

(2) コンテインメントの種類

コンテインメントには,どの関連オブジェクトによって関連を表すかによって次の三つの種類があります。

次に各コンテインメントについて説明します。

(a) 直接型(DirectContainment)

直接型のコンテインメントでは,次のオブジェクトを使用してオブジェクト同士の関係を,親子の関係で示します。

包含するオブジェクト
直接型の関連オブジェクトを指し示すdmaProp_Childrenプロパティを保持するDMAオブジェクトは,すべて直接型で包含するオブジェクトとして使用できます。直接型で包含するオブジェクトとして使用できる代表的なDMAオブジェクトを示します。
  • Containerオブジェクト
    dmaClass_Containerクラスを基にして作成するDMAオブジェクトです。
  • ContainerVersionオブジェクト
    edmClass_ContainerVersionクラスを基にして作成するDMAオブジェクトで,構成管理型でオブジェクトを包含できる構成管理コンテナを表します。このDMAオブジェクトで表したコンテナは,バージョンを付けて管理することもできます。構成管理コンテナについては「付録A.6 バージョン付き構成管理コンテナを利用した構成管理」を参照してください。
関連オブジェクト
  • DirectContainmentRelationshipオブジェクト
    dmaClass_DirectContainmentRelationshipクラスを基にして作成するDMAオブジェクトです。包含するオブジェクトを指し示すプロパティと包含されるプロパティを指し示すプロパティを保持します。
包含されるオブジェクト
dmaClass_Containableクラスを継承し,直接型の関連オブジェクトを指し示すdmaProp_Parentプロパティを保持するサブクラスを基に作成したDMAオブジェクトであれば,すべて直接型で包含されます。直接型で包含される代表的なDMAオブジェクトを示します。
  • Containerオブジェクト
    dmaClass_Containerクラスを基に作成するDMAオブジェクトです。一般的にフォルダにフォルダを格納するイメージで,コンテナにコンテナを包含することができます。
  • ConfigurationHistoryオブジェクト
  • DocVersionオブジェクト
    これらのDMAオブジェクトは,バージョン管理に使用できるDMAオブジェクトと同じです。したがって,バージョン管理とコンテインメントを組み合わせて文書を管理できます。

直接型での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の並びは保持されません。

(b) 参照型(ReferentialContainment)

参照型のコンテインメントでは,次のDMAオブジェクトを使用してオブジェクト同士の関係を示します。なお,関連オブジェクト以外のDMAオブジェクトについての説明は,「(a)直接型(DirectContainment)」を参照してください。

包含するオブジェクト
参照型の関連オブジェクトを指し示すdmaProp_Containeesプロパティを保持するDMAオブジェクトは,すべて参照型で包含するオブジェクトとして使用できます。参照型で包含するオブジェクトとして使用できる代表的なDMAオブジェクトを示します。
  • Containerオブジェクト
  • ContainerVersionオブジェクト
関連オブジェクト
  • ReferentialContainmentRelationshipオブジェクト
    dmaClass_ReferentialContainmentRelationshipクラスを基に作成するDMAオブジェクトです。包含するオブジェクトを指し示すプロパティと包含されるオブジェクトを指し示すプロパティを保持します。
包含されるオブジェクト
dmaClass_Containableクラスを継承し,参照型の関連オブジェクトを指し示すdmaProp_Containersプロパティを保持するサブクラスを基に作成したオブジェクトであれば,すべて参照型で包含されます。参照型で包含される代表的なDMAオブジェクトを示します。
  • Containerオブジェクト
  • ConfigurationHistoryオブジェクト
  • DocVersionオブジェクト

参照型のコンテインメントでの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の並びは保持されません。

(c) 構成管理型(VersionTraceableContainment)

構成管理型のコンテインメントでは,次のオブジェクトを使用してオブジェクト同士の関係を示します。

包含するオブジェクト
構成管理型の関連オブジェクトを指し示すedmProp_VTContaineesプロパティを保持するDMAオブジェクトは,すべて構成管理型で包含するオブジェクトとして使用できます。構成管理型で包含するオブジェクトとして使用できるDMAオブジェクトを示します。
  • ContainerVersionオブジェクト
    edmClass_ContainerVersionクラスを基にして作成するオブジェクトで,コンテナにバージョンを付けて構成管理型でオブジェクトを包含できるバージョン付き構成管理コンテナを表します。
関連オブジェクト
  • VersionTraceableContainmentRelationshipオブジェクト
    edmClass_VersionTraceableContainmentRelationshipクラスを基に作成するDMAオブジェクトです。包含するオブジェクトを指し示すプロパティと包含されるプロパティを指し示すプロパティを保持します。また,特定のバージョンを固定して包含するか最新のバージョンを包含するかを指定できるedmProp_VTModeプロパティを保持します。
包含されるオブジェクト
dmaClass_Versionableクラスを継承するサブクラスのうち,構成管理型の関連オブジェクトを指し示すedmProp_VTContainersプロパティを保持するDMAクラスを基に作成したDMAオブジェクトであれば,すべて構成管理型で包含されます。
なお,dmaClass_Versionableクラスは,dmaClass_Containableクラスを継承するため,dmaProp_ParentおよびdmaProp_Containersプロパティを保持します。したがって,構成管理型で包含されるオブジェクトは,直接型および参照型でも包含されます。
構成管理型で包含されるDMAオブジェクトを示します。
  • VersionTracedDocVersionオブジェクト
    dmaClass_DocVersionクラスのサブクラスのedmClass_VersionTracedDocVersionクラスを基に作成するDMAオブジェクトです。構成管理型で管理する文書を表します。
  • ContainerVersionオブジェクト
  • VersionTracedComponentDocVersionオブジェクト
    dmaClass_DocVersionクラスのサブクラスのedmClass_VersionTracedDocVersionクラスを基に作成するDMAオブジェクトです。
なお,構成管理型の場合,包含されるオブジェクトのことを特に構成要素と呼びます。構成要素となれるオブジェクトは,一つの直接型のコンテインメント,複数の参照型のコンテインメントおよび複数の構成管理型のコンテインメントを結べます。

構成管理型のコンテインメントでの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プロパティの値は変わりません。

(3) コンテインメントに使用するDMAクラス

コンテインメントに使用するDMAクラスを,継承関係に基づいて次の図に示します。

図A-17 コンテインメントに使用するDMAクラスの継承関係

[図データ]