付録A.2 DocumentBrokerで使用するDMAクラス
(1) クラス
ここでは,DMAクラスについて説明します。
(a) クラスの識別子
DMAクラスは,次の識別子を付与して管理しています。
- 初期識別子
DocumentBrokerによって割り当てられるGUID。
- 追加識別子
GUIDの別名の識別子。追加識別子は,クライアントアプリケーションから任意のGUIDの値で設定できます。ただし,クラスとプロパティに同じGUIDは設定できません。また,クラスと検索に使用するオペレータに同じGUIDを設定できません。さらに,DocumentBrokerがすでに使用しているGUIDは重複して使用できません。
(b) クラスの継承関係
クラスは,その直上にあるクラスが持つプロパティを選択して継承します。
DMAクラスは,dmaClass_DMAクラスというクラスを基にしたツリー構造をしています。主なDMAクラスのツリー構造を,次の図に示します。
図A-1 DMAクラスの階層構造
![[図データ]](figure/zu0a0100.gif)
DocumentBrokerが用意しているDMAクラスは,dmaClass_DMAクラスが持つプロパティを受け継ぎ,各クラスで固有のプロパティが付加されたり,必要に応じて削除されたりしています。
また,DMAクラスのうち,下記のクラスについては,直下にサブクラスを定義できます。
- dmaClass_ConfigurationHistoryクラス
- dmaClass_Containerクラス
- edmClass_VersionTraceableContainerクラス
- edmClass_ContainerVersionクラス
- dmaClass_DocVersionクラス
- edmClass_ComponentDocVersionクラス
- edmClass_VersionTracedComponentDocVersionクラス
- edmClass_VersionTracedDocVersionクラス
- edmClass_IndependentPersistenceクラス
サブクラスは,システム管理者が定義します。
(c) クラスのメタデータ
各DMAクラスに関する詳細情報は,プロパティの一つとして保持されています。さらに,このプロパティの具体的な内容は,別のオブジェクトとして形成されています。このオブジェクトを,メタデータオブジェクトといいます。DMAクラスの詳細情報を記載したメタデータオブジェクトは,ClassDescriptionオブジェクトです。ClassDescriptionオブジェクト自身も,dmaClass_ClassDescriptionクラスを基に作成されるオブジェクトです。
ClassDescriptionオブジェクトに記載されている情報の一部を示します。
- DMAクラスの識別子の定義
- 直接のスーパークラスに関する定義
- サブクラスに関する定義
- DMAクラスのプロパティに関する定義
- 検索時に使用できるプロパティに関する定義
次の図にClassDescriptionオブジェクトの例を示します。
図A-2 ClassDescriptionオブジェクトの例
![[図データ]](figure/zu0a0200.gif)
図A-2について説明します。
- ここでは,usrClass_Documentクラスという,dmaClass_DocVersionクラスのサブクラスを仮定します。このusrClass_Documentクラスを基にDocumentオブジェクトを作成します。
- DocumentオブジェクトのdmaProp_ClassDescriptionプロパティには,ClassDescriptionオブジェクトを参照するリファレンスが格納されています。リファレンスとは,独立なオブジェクトへの関連をたどる機能を提供して,Object型のプロパティとして表現します。
- ClassDescriptionオブジェクトには,usrClass_Documentクラスの詳細情報が記載されています。ClassDescriptionオブジェクトは,dmaClass_ClassDescriptionクラスを基に作成されたオブジェクトです。
- ClassDescriptionオブジェクトにもdmaProp_ClassDescriptionプロパティがあります。dmaProp_ClassDescriptionプロパティには,ClassDescriptionオブジェクトを参照するリファレンスが格納されています。
- ClassDescriptionオブジェクトには,dmaClass_ClassDescriptionクラスの詳細情報が記載されています。このClassDescriptionオブジェクトも,dmaClass_ClassDescriptionクラスを基に作成されています。
- このClassDescriptionオブジェクトにもdmaProp_ClassDescriptionプロパティがあります。しかし,これ以上参照先がないので,このプロパティにはNULL値が設定されます。
(d) メタデータ空間
- メタデータ空間とは
- 各DMAクラスを,継承関係に基づいて管理する空間をメタデータ空間といいます。したがって,メタデータ空間は,DMAクラスの集合です。
- 各DMAクラスの定義情報は,そこに含まれるDMAクラスのClassDescriptionオブジェクトを探索することによって得られます。
- メタデータ空間には,そこに含まれるDMAクラスによって次の種類があります。
- Systemオブジェクトのメタデータ空間
- DocSpaceオブジェクト(文書空間)のメタデータ空間
- Scopeオブジェクトのメタデータ空間
- 問い合わせ結果のメタデータ空間
- これらのメタデータ空間には,含まれるDMAクラスの定義が決められています。
- なお,どのメタデータ空間にも,DMAクラスの継承の基になるdmaClass_DMAクラスが含まれます。
- Systemオブジェクトのメタデータ空間
dmaClass_Systemを含むメタデータ空間です。dmaClass_Systemクラスの定義情報は,SystemオブジェクトのClassDescriptionオブジェクトを探索することによって得られます。
- DocSpaceオブジェクトのメタデータ空間
dmaClass_DocSpaceクラスおよび文書空間に含まれるすべてのDMAクラスを含むメタデータ空間です。dmaClass_DocSpaceクラスの定義情報は,DocSpaceオブジェクトのClassDescriptionオブジェクトを探索することによって得られます。また,文書空間に含まれるすべてのDMAクラスの定義情報は,DocSpaceオブジェクトのdmaProp_ClassDescriptionsプロパティから探索することによって得られます。
- Scopeオブジェクトのメタデータ空間
dmaClass_Scopeクラスおよび検索に使用するすべてのDMAクラスを含むメタデータ空間です。dmaClass_Scopeクラスの定義情報は,ScopeオブジェクトのClassDescriptionオブジェクトを探索することによって得られます。また,検索に使用するDMAクラスの定義情報は,Scopeオブジェクトの次のプロパティから探索することによって得られます。
- dmaProp_SearchableClassDescriptionsプロパティ
- dmaProp_QueryConstructionClassDescriptionsプロパティ
- dmaProp_Operatorsプロパティ
- 問い合わせ結果のメタデータ空間
dmaClass_QueryResultSetクラスおよびdmaClass_QueryResultRowクラスを含むメタデータ空間です。dmaClass_QueryResultSetクラスおよびdmaClass_QueryResultRowクラスの定義情報は,QueryResultSetオブジェクトおよびQueryResultRowオブジェクトのdmaProp_ClassDescriptionプロパティを探索することによって得られます。
(2) プロパティ
ここでは,DMAクラスのプロパティの詳細について説明します。
(a) プロパティの識別子
プロパティには,クラスと同様にGUIDが付けられて管理されます。クラスから継承されるプロパティの識別子は,サブクラスとスーパークラスで同じです。ただし,プロパティのデータ型と意味が同じであれば,直接的な継承関係を持たないクラスで同じプロパティ識別子が付けられます。
(b) プロパティの継承関係
DMAクラスのプロパティは,そのクラスのサブクラスに必要に応じて継承されます。
システム管理者がサブクラスを作成する場合,DocumentBrokerによってスーパークラスに定義されているプロパティは,すべて継承する必要があります。
(c) プロパティのデータ型
ここでは,プロパティが持つデータ型について説明します。
- データ型の種類
プロパティは,値として次のデータ型を使用できます。
- Integer32型
- String型
- Boolean型
- Id型
- Object型
- プロパティの基本単位
プロパティは,データ型に従った値を1個持つか複数個持つかが決められています。これを基本単位といいます。
基本単位には,次の種類があります。
- 値を1個持つプロパティ
データ型に従った値を一つだけ持つプロパティです。この基本単位はScalar型です。
- 値を複数個持つプロパティ
データ型に従った複数の値を一つの値として持つプロパティです。この基本単位はVariableArray型です。
VariableArray型は,すべてのデータ型の値の一次元配列です。この一次元配列は可変長です。異なる種類のデータ型は混在できません。またDocumentBrokerでは,Object型の値だけを配列要素にできます。したがってVariableArray型のプロパティは,VariableArrayOfObjectオブジェクトのようにデータ型に従った値を一次元配列として持つオブジェクトへのリファレンスを値として持ちます。
実際の値は参照先のVariableArrayOfObjectオブジェクトの一次元配列が保持します。一次元配列内の要素には順序性があり,ランダムにアクセスできます。また,要素の挿入,置換および削除ができます。
VariableArray型のプロパティを定義できるのは,次のサブクラスです。
- dmaClass_Containerクラスのサブクラス
- dmaClass_DocVersionクラスのサブクラス
- dmaClass_ConfigurationHistoryクラスのサブクラス
- edmClass_ContainerVersionクラスのサブクラス
- edmClass_IndependentPersistenceクラスのサブクラス
VariableArray型のプロパティから参照されるVariableArrayOfObjectオブジェクトの要素として格納できるのは,edmClass_Structクラスのサブクラスのオブジェクトだけです。
(d) プロパティのメタデータ
プロパティに関する詳細情報は,データ型に従ってdmaClass_PropertyDescriptionクラスにデータ型ごとにあるサブクラスのオブジェクトに記述されます。例えば,プロパティの値がString型の場合は,PropertyDescriptionStringオブジェクトにプロパティの詳細情報が記述され,プロパティの値がInteger32型の場合は,PropertyDescriptionInteger32オブジェクトにプロパティの詳細情報が記述されます。以降,dmaClass_PropertyDescriptionクラスのサブクラス(dmaClass_PropertyDescriptionStringクラスやdmaClass_PropertyDescriptionInteger32クラスなど)のオブジェクトを総称してPropertyDescriptionDataTypeオブジェクトと呼びます(DataTypeの部分は各データ型に対応します)。PropertyDescriptionDataTypeオブジェクトは,クラスの詳細情報を記述したClassDescriptionオブジェクトの,dmaProp_PropertyDescriptionsプロパティから参照されるメタデータオブジェクトです。PropertyDescriptionDataTypeオブジェクト自身もdmaClass_PropertyDescriptionDataTypeクラスを基に作成されるオブジェクトです。
PropertyDescriptionDataTypeオブジェクトに記載されている情報を一部示します。
- プロパティの識別子
- プロパティが持つデータ型
- プロパティの基本単位
- 検索条件として選択できるかどうかなどの情報
次の図にPropertyDescriptionDataTypeオブジェクトの例を示します。
図A-3 PropertyDescriptionDataTypeオブジェクトの例
![[図データ]](figure/zu0a0300.gif)
図A-3について説明します。
- ここでは,Documentオブジェクトを仮定して説明します。Documentオブジェクトは,dmaClass_DocVersionクラスのサブクラスusrClass_Documentクラスを基に作成されていると仮定します。DocumentオブジェクトのdmaProp_ClassDescriptionプロパティには,ClassDescriptionオブジェクトを参照するリファレンスが格納されています。
- ClassDescriptionオブジェクトには,usrClass_Documentクラスの詳細情報が記載されています。ClassDescriptionオブジェクトには,dmaProp_PropertyDescriptionsプロパティがあります。dmaProp_PropertyDescriptionsプロパティには,PropertyDescriptionDataTypeオブジェクトのリスト(ListOfObjectオブジェクト)を参照するリファレンスが格納されています。
- ListOfObjectオブジェクトからPropertyDescriptionDataTypeオブジェクトの要素を取得します。
- 要素として複数のPropertyDescriptionDataTypeオブジェクトがあります。ここでは,要素0のPropertyDescriptionStringオブジェクトが,dmaProp_OIIDプロパティの詳細情報を記述していることを示しています。同様に,要素2のPropertyDescriptionStringオブジェクトが,usrProp_Authorプロパティの詳細情報を記述していることを示しています。