uCosminexus DocumentBroker Version 3　クラスライブラリ　C++　解説

解説書

3000-3-F13-20

目　　次

前書き

変更内容

はじめに

1.　クラスライブラリの概要

1.1　DocumentBrokerでの文書管理

1.1.1　文書とオブジェクト

1.1.2　DocumentBrokerのシステム構成

1.2　クラスライブラリの特長

1.3　クラスライブラリで実現する機能

1.3.1　文書空間（データベース）に接続する機能

1.3.2　文書を作成，管理する機能

1.3.3　文書やコンテナを検索する機能

1.3.4　独立データを管理する機能

1.3.5　レンディションのコンテント種別変換機能

1.3.6　そのほかの機能

2.　オブジェクトの操作

2.1　クラス，オブジェクト，プロパティおよびメソッドの概要

2.1.1　クラス

2.1.2　オブジェクト

2.1.3　プロパティ

2.1.4　メソッド

2.2　オブジェクトの操作の流れ

2.3　文書空間との接続（セッションの確立）

2.3.1　CdbrSessionクラスの概要

2.3.2　セッションの確立から終了までの流れ

2.3.3　ログイン

2.4　オブジェクトの作成およびオブジェクトとの接続

2.4.1　オブジェクトの作成

2.4.2　既存のオブジェクトとの接続

2.4.3　オブジェクトとの接続の解除

2.5　クラスの種類

2.5.1　DMAクラスのクラス識別子

2.5.2　クラスライブラリのクラスの一覧

2.5.3　クラスの継承関係

2.5.4　抽象クラス

2.6　プロパティの種類と操作

2.6.1　プロパティ識別子

2.6.2　プロパティの種類

2.6.3　プロパティの型

2.6.4　プロパティの基本単位

2.6.5　プロパティの用途

2.6.6　プロパティの操作

2.6.7　VariableArray型プロパティの操作

2.7　オブジェクトとデータベースの関係

3.　クラスライブラリで実現する文書管理

3.1　文書管理で使用するオブジェクトと管理方法

3.1.1　文書（バージョンなし文書）

3.1.2　文書（バージョン付き文書）

3.1.3　マルチレンディション文書

3.1.4　マルチファイル文書

3.1.5　リファレンスファイル文書

3.1.6　File Link文書

3.1.7　文書間リレーション

3.1.8　XML文書管理

3.1.9　コンテナ

3.1.10　構成管理コンテナ

3.1.11　独立データ

3.2　クラスライブラリで扱う文書

3.2.1　文書を表すクラスの概要

3.2.2　文書のプロパティ

3.2.3　文書の操作

3.3　文書のバージョン管理

3.3.1　CdbrVersionableクラスの概要

3.3.2　バージョンの管理方法

3.3.3　バージョン管理機能の操作

3.4　文書のマルチレンディション管理

3.4.1　マルチレンディション管理の概要

3.4.2　マルチレンディション管理を使用した文書管理

3.4.3　レンディションのプロパティ

3.4.4　マルチレンディション管理に関する操作

3.5　文書のマルチファイル管理

3.5.1　マルチファイル管理の概要

3.5.2　マルチファイル管理に関する操作

3.6　文書のリファレンスファイル管理

3.6.1　リファレンスファイル管理の概要

3.6.2　リファレンスファイル管理に関する操作

3.7　File Link連携機能を使用した文書管理

3.7.1　File Link連携機能の概要

3.7.2　File Link連携機能に関する操作

3.8　文書間リレーションを設定した文書管理

3.8.1　文書間リレーション機能の概要

3.8.2　文書間リレーションを使用した文書管理

3.8.3　リレーションのプロパティ

3.8.4　文書間リレーションに関する操作

3.9　コンテナを使用した文書管理

3.9.1　CdbrReferentialContainerクラスの概要

3.9.2　コンテナを使用した文書管理

3.9.3　コンテナおよびコンテインメントのプロパティ

3.9.4　コンテナの操作

3.10　構成管理コンテナを使用した文書の構成管理

3.10.1　構成管理コンテナを表すクラスの概要

3.10.2　構成管理コンテナを使用した構成管理

3.10.3　構成管理コンテナおよびコンテインメントのプロパティ

3.10.4　構成管理コンテナの操作

3.11　XML文書の管理

3.11.1　XML文書管理機能の概要

3.11.2　DocumentBrokerが管理できるXML文書

3.11.3　XML文書管理機能を使用した文書の管理

3.11.4　XML文書の操作

3.12　レンディションのコンテント種別変換機能を使用した文書管理

3.12.1　レンディションのコンテント種別変換機能の概要

3.12.2　レンディションのコンテント種別変換機能を使用したコンテント種別の変換

3.12.3　レンディションのコンテント種別変換機能に関する操作

3.13　独立データの管理

3.13.1　CdbrIndependentPersistenceクラスの概要

3.13.2　独立データの操作

3.14　排他制御

3.14.1　ロックの概要

3.14.2　ロックの設定方法

3.14.3　ロックが設定されているオブジェクトに対する接続

3.14.4　ロックの範囲

3.14.5　ロックの設定に関する注意事項

3.15　アクセス制御

3.15.1　アクセス制御機能の概要

3.15.2　ユーザ情報の種類

3.15.3　オブジェクトごとのアクセス制御情報の種類

3.15.4　パーミッションの種類

3.15.5　それぞれのアクセス制御情報の特徴

3.15.6　アクセス制御情報を表すプロパティの詳細

3.15.7　オブジェクトの操作とアクセス制御情報の関係

3.15.8　アクセス制御機能と検索

3.15.9　アクセス制御機能に関する操作

3.15.10　アクセス制御と排他制御の関係

4.　オブジェクトの検索

4.1　検索の概要

4.1.1　DocumentBrokerでの検索

4.1.2　edmSQLとは

4.1.3　検索とアクセス制御

4.1.4　edmSQL検索の流れ

4.2　検索の種類

4.2.1　属性検索

4.2.2　全文検索

4.2.3　全文検索機能付き文字列型プロパティを使用した全文検索

4.2.4　?パラメタを使用した検索

4.3　検索対象になるクラスおよびプロパティ

4.3.1　検索対象になるクラス

4.3.2　検索結果として取得できるプロパティ

4.3.3　検索条件に指定できるプロパティ

4.4　全文検索の対象になる文書の作成

4.4.1　全文検索対象文書の作成手順

4.4.2　全文検索機能付き文書クラスの作成

4.4.3　全文検索インデクスの作成

4.4.4　全文検索インデクスの削除

4.4.5　注意事項

4.5　edmSQLの文法

4.5.1　edmSQLの文法の概要

4.5.2　表記規則

4.5.3　使用できるデータ型と演算子・関数・述語の関係

4.5.4　字句規則

4.5.5　検索の実行単位の構文規則

4.5.6　問い合わせ式の構文規則

4.5.7　スカラー式表現の構文規則

4.5.8　述語の構文規則

4.5.9　関数指定の構文規則

4.5.10　データ操作の構文規則

4.6　edmSQLの指定例

4.6.1　属性検索

4.6.2　全文検索（HiRDB Text Search Plug-inを利用した検索）

4.7　edmSQLの障害対策とデバッグ

4.7.1　CdbrEqlStatementクラスが出力する障害情報

4.7.2　詳細エラーメッセージ

4.7.3　edmSQL構文解析情報

4.7.4　CdbrEqlStatementクラスで出力するトレース情報

4.8　edmSQL検索での留意事項

4.8.1　プロパティに関する制限事項

4.8.2　検索条件に指定する値の制限事項

4.8.3　複数のクラスを対象にした検索の制限事項

4.8.4　アクセス制御機能付き検索を実行する場合の制限事項

4.8.5　コーディング上の留意事項

5.　環境設定

5.1　インストール後の環境設定

5.1.1　起動ユーザとユーザ認証

5.1.2　TPBrokerでの環境設定

5.1.3　実行環境の設定

5.2　プログラミング時の注意と設定

5.2.1　文字コード種別とプログラミング

5.2.2　ヘッダファイル

5.2.3　コンパイルオプション

5.2.4　ライブラリの指定

5.2.5　ほかのプログラムとの併用の際の注意

5.2.6　クラス識別子，プロパティ識別子の定義

5.2.7　ユーザ定義のクラス識別子・プロパティ識別子の定義

5.3　ファイル転送機能の使用

6.　エラー処理

6.1　エラーの種類

6.1.1　major_codeによるエラーの分類

6.1.2　詳細な情報が取得できるエラー

6.1.3　エラー確認後の処理

6.2　エラー処理の流れ

6.3　詳細メッセージの取得

6.3.1　詳細メッセージの出力先

6.3.2　アクセス制御機能でエラーが発生した場合に詳細メッセージが取得できる戻り値

付録

付録A　DMAオブジェクトの概要

付録A.1　DMAオブジェクトの操作に使用する概念

付録A.2　DocumentBrokerで使用するDMAクラス

付録A.3　DMAオブジェクトで表す文書

付録A.4　文書のバージョン管理

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

付録A.6　バージョン付き構成管理コンテナを利用した構成管理

付録B　edmSQLの構文解析エラー情報

付録B.1　記述形式

付録B.2　構文解析エラー

付録B.3　字句解析エラー

付録B.4　意味解析エラー

付録B.5　そのほかのエラー

付録C　HiRDBのシステム共通定義のオペランドpd_max_access_tablesの見積もり方法

付録D　用語解説

索引

[他社商品名称に関する表示]

All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2006, 2013, Hitachi Solutions, Ltd.

前書き

■ 対象製品

R-1M95D-43※　 uCosminexus DocumentBroker Development Kit Version 3　 03-60（適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3）
R-1595D-43　 uCosminexus DocumentBroker Development Kit Version 3　 03-70（適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008 x86，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，Windows 8）
R-1M95D-53※　 uCosminexus DocumentBroker Runtime Version 3　 03-60（適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3）
R-1595D-53　 uCosminexus DocumentBroker Runtime Version 3　 03-70（適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008 x86，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，Windows 8）

これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
※印の製品については，サポート時期をご確認ください。

■ 輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。
なお、不明な場合は、弊社担当営業にお問い合わせください。

■ 商標類

Active Directoryは，米国Microsoft Corporationの，米国およびその他の国における登録商標または商標です。
AIXは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
GIFは，米国CompuServe Inc.が開発したフォーマットの名称です。
Microsoft Office Wordは，米国Microsoft Corporationの商品名称です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。Microsoft Wordは，米国Microsoft Corporationの商品名称です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
OLEは，米国Microsoft Corporationが開発したソフトウェア名称です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
TIFFは，米国Aldus Corp.が開発したフォーマットの名称です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
VisualAgeは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
Visual C++は，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
活文，PDFstaffは，株式会社日立ソリューションズの登録商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。

■ 発行

2013年9月 3000-3-F13-20

■ 著作権

All Rights Reserved. Copyright (C) 2006, Hitachi, Ltd.
All Rights Reserved. Copyright (C) 2006, 2013, Hitachi Solutions, Ltd.

変更内容

変更内容（3000-3-F13-20）DocumentBroker Development Kit Version 3　03-70（適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008 x86，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，Windows 8），DocumentBroker Runtime Version 3　03-70（適用OS：Windows Server 2003，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008 x86，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，Windows 8）

追加・変更内容 | 変更個所
前提OSにWindows Server 2012をサポートしました。 | 1.3，5.1.1

単なる誤字・脱字などはお断りなく訂正しました。

はじめに

このマニュアルは，次に示すプログラムプロダクトで提供するクラスライブラリの機能と使い方について説明したものです。

R-1M95D-43　uCosminexus DocumentBroker Development Kit Version 3

R-1595D-43　uCosminexus DocumentBroker Development Kit Version 3

R-1M95D-53　uCosminexus DocumentBroker Runtime Version 3

R-1595D-53　uCosminexus DocumentBroker Runtime Version 3

対象読者

このマニュアルは，次の方を対象にしています。

uCosminexus DocumentBroker Development Kitで提供するクラスライブラリを利用して，クライアントアプリケーションを開発する方

uCosminexus DocumentBroker Development Kitで開発したクライアントアプリケーションを実行する方

なお，このマニュアルでは，上記の方が次の知識を持っていることを前提としています。

UNIXまたはWindowsに関する知識

C++言語に関する知識

XMLに関する知識

SQL言語に関する知識

分散オブジェクト技術に関する知識

マニュアルの構成

このマニュアルは，次に示す章と付録から構成されています。

第1章　クラスライブラリの概要

uCosminexus DocumentBrokerでの文書管理と，クラスライブラリで実現できる機能について説明しています。

第2章　オブジェクトの操作

クラス，オブジェクト，プロパティおよびメソッドの概要と，オブジェクトを操作するために必要な，文書空間への接続方法，プロパティの操作方法について説明しています。

第3章　クラスライブラリで実現する文書管理

クラスライブラリの機能で実現できる文書管理について説明しています。

第4章　オブジェクトの検索

クラスライブラリが提供する機能によってオブジェクトを検索する方法について説明しています。

第5章　環境設定

クラスライブラリを使用する際の環境設定，注意事項などについて説明しています。

第6章　エラー処理

メソッドを実行した時に発生したエラーの処理方法について説明しています。

付録A　DMAオブジェクトの概要

DMAが規定するオブジェクトモデルの概要について説明しています。

付録B　edmSQLの構文解析エラー情報

edmSQLの構文解析エラー情報として出力される内容と，その対処方法について説明しています。

付録C　HiRDBのシステム共通定義のオペランドpd_max_access_tablesの見積もり方法

HiRDBのシステム共通定義のオペランドpd_max_access_tablesの見積もり方法について説明しています。

付録D　用語解説

uCosminexus DocumentBrokerで使用する用語について説明しています。

関連マニュアル

このマニュアルは次のマニュアルと関連がありますので，必要に応じてお読みください。なお，本文に記載のマニュアル名称は，「uCosminexus DocumentBroker」を「DocumentBroker」と表記しています。

uCosminexus DocumentBrokerのマニュアル

DocumentBroker Version 3　システム導入・運用ガイド（3000-3-D01）

uCosminexus DocumentBroker Version 3　システム導入・運用ガイド（3020-3-U71）

uCosminexus DocumentBrokerを使用する環境を定義，管理および運用する場合に参照してください。

UNIXの場合は，資料番号が3000-3-D01のマニュアルを参照してください。

Windowsの場合は，資料番号が3020-3-U71のマニュアルを参照してください。

uCosminexus DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編（3000-3-F14）

クラスライブラリのクラスの詳細とメソッドの文法について知りたい場合に参照してください。

uCosminexus DocumentBroker Version 3　オブジェクト操作ツール（3000-3-F15）

クラスライブラリのAPIをコマンド形式で実行できるオブジェクト操作ツールについて知りたい場合に参照してください。

uCosminexus DocumentBroker Version 3　メッセージ（3000-3-F12）

uCosminexus DocumentBrokerが出力するメッセージについて知りたい場合に参照してください。

uCosminexus DocumentBroker Text Search Index Loader Version 3（3020-3-U72）

uCosminexus DocumentBrokerに格納されている文書からテキスト情報を抽出して，全文検索用のインデクスファイルを作成し，これを全文検索インデクスに登録するユティリティについて知りたい場合に参照してください。

関連製品のマニュアル（HiRDB）

スケーラブルデータベースサーバ　HiRDB Version 6　システム定義（UNIX(R)用）（3000-6-233）※¹

スケーラブルデータベースサーバ　HiRDB Version 6　システム定義（Windows(R)用）（3020-6-123）※¹

スケーラブルデータベースサーバ　HiRDB Version 7　システム定義（UNIX(R)用）（3000-6-273）※¹

スケーラブルデータベースサーバ　HiRDB Version 7　システム定義（Windows(R)用）（3020-6-273）※¹

スケーラブルデータベースサーバ　HiRDB Version 8　システム定義（UNIX(R)用）（3000-6-353）※¹

スケーラブルデータベースサーバ　HiRDB Version 8　システム定義（Windows(R)用）（3020-6-353）※¹

スケーラブルデータベースサーバ　HiRDB Version 6　システム運用ガイド（UNIX(R)用）（3000-6-234）※²

スケーラブルデータベースサーバ　HiRDB Version 6　システム運用ガイド（Windows(R)用）（3020-6-124）※²

スケーラブルデータベースサーバ　HiRDB Version 7　システム運用ガイド（UNIX(R)用）（3000-6-274）※²

スケーラブルデータベースサーバ　HiRDB Version 7　システム運用ガイド（Windows(R)用）（3020-6-274）※²

スケーラブルデータベースサーバ　HiRDB Version 8　システム運用ガイド（UNIX(R)用）（3000-6-354）※²

スケーラブルデータベースサーバ　HiRDB Version 8　システム運用ガイド（Windows(R)用）（3020-6-354）※²

スケーラブルデータベースサーバ　HiRDB Version 6　UAP開発ガイド（UNIX(R)/Windows(R)用）（3000-6-236）※³

スケーラブルデータベースサーバ　HiRDB Version 6　UAP開発ガイド（Windows(R)用）（3020-6-126）※³

スケーラブルデータベースサーバ　HiRDB Version 7　UAP開発ガイド（UNIX(R)/Windows(R)用）（3000-6-276）※³

スケーラブルデータベースサーバ　HiRDB Version 7　UAP開発ガイド（Windows(R)用）（3020-6-276）※³

スケーラブルデータベースサーバ　HiRDB Version 8　UAP開発ガイド（3020-6-356）※³

スケーラブルデータベースサーバ　HiRDB Version 6　SQLリファレンス（UNIX(R)/Windows(R)用）（3000-6-237）※⁴

スケーラブルデータベースサーバ　HiRDB Version 6　SQLリファレンス（Windows(R)用）（3020-6-127）※⁴

スケーラブルデータベースサーバ　HiRDB Version 7　SQLリファレンス（UNIX(R)/Windows(R)用）（3000-6-277）※⁴

スケーラブルデータベースサーバ　HiRDB Version 7　SQLリファレンス（Windows(R)用）（3020-6-277）※⁴

スケーラブルデータベースサーバ　HiRDB Version 8　SQLリファレンス（3020-6-357）※⁴

HiRDB 全文検索プラグイン　HiRDB Text Search Plug-in Version 2（3000-6-245）（3020-6-140）※⁵

HiRDB 全文検索プラグイン　HiRDB Text Search Plug-in Version 7（3000-6-288）※⁵

HiRDB 全文検索プラグイン　HiRDB Text Search Plug-in Version 8（3020-6-375）※⁵

HiRDBデジタルコンテンツアクセスプラグイン　HiRDB File Link（UNIX(R)用）（3000-6-253）※⁶

HiRDBデジタルコンテンツアクセスプラグイン　HiRDB File Link（Windows(R)用）（3020-6-141）※⁶

注※1

このマニュアルでは，これらのマニュアルを「HiRDB　システム定義」と表記しています。

注※2

このマニュアルでは，これらのマニュアルを「HiRDB　システム運用ガイド」と表記しています。

注※3

このマニュアルでは，これらのマニュアルを「HiRDB　UAP開発ガイド」と表記しています。

注※4

このマニュアルでは，これらのマニュアルを「HiRDB　SQLリファレンス」と表記しています。

注※5

このマニュアルでは，これらのマニュアルを「HiRDB Text Search Plug-in」と表記しています。

注※6

このマニュアルでは，これらのマニュアルを「HiRDB File Link」と表記しています。

読書手順

このマニュアルは，利用目的に合わせて章を選択してお読みいただけます。利用目的別の流れに従ってお読みいただくことをお勧めします。

このマニュアルでの表記

このマニュアルでは，製品名称を次に示す略称で表記しています。

製品名称
略称

AIX 5L V5.1
AIX

AIX 5L V5.2

AIX 5L V5.3

uCosminexus DocumentBroker Development Kit Version 3
DocumentBroker

uCosminexus DocumentBroker Runtime Version 3

uCosminexus DocumentBroker Server Version 3

uCosminexus DocumentBroker Development Kit Version 3
DocumentBroker Development Kit

uCosminexus DocumentBroker Runtime Version 3
DocumentBroker Runtime

uCosminexus DocumentBroker Development Kit Version 3
DocumentBrokerクライアント

uCosminexus DocumentBroker Runtime Version 3

uCosminexus DocumentBroker Server Version 3
DocmentBroker ServerまたはDocumentBrokerサーバ

uCosminexus DocumentBroker Text Search Index Loader Version 3
DocumentBroker Text Search Index Loader

HiRDB/Single Server Version 6
HiRDB

HiRDB/Single Server Version 7

HiRDB/Single Server Version 8

HiRDB /Parallel Server Version 6

HiRDB /Parallel Server Version 7

HiRDB /Parallel Server Version 8

HiRDB Text Search Plug-in Version 2
HiRDB Text Search Plug-in

HiRDB Text Search Plug-in Version 7

HiRDB Text Search Plug-in Version 8

HiRDB Text Search Plug-in Conceptual Extension Version 2
HiRDB Text Search Plug-in Conceptual Extension

HiRDB Text Search Plug-in Conceptual Extension Version 7

HiRDB Adapter for XML - Enterprise Edition
HiRDB Adapter for XML

HiRDB Adapter for XML - Standard Edition

IBM VisualAge C++ Professional for AIX V5
VisualAge C++ Professional for AIX

IBM VisualAge C++ Professional for AIX V6

IBM XL C/C++ Enterprise Edition V7 for AIX
IBM XL C/C++ Enterprise Edition for AIX

IBM XL C/C++ Enterprise Edition V8 for AIX

SANRISE Universal Storage Platform 100
SANRISE Universal Storage Platform 600
SANRISE Universal Storage Platform 1100
SANRISE Network Storage Controller NSC55
SANRISE USP

Sun Java(TM) System Directory Server 5.1
Sun Java System Directory Server

Sun Java(TM) System Directory Server 5.2

Sun Java(TM) System Directory Server 6.3

TPBroker Developer for C++
TPBroker V3

TPBroker for C++

TPBroker
TPBroker V5

Microsoft(R) Active Directory(R)
Active Directory

Microsoft(R) Office Word
Word

Microsoft(R) Word

Microsoft(R) Visual C++(R)
Visual C++

Microsoft(R) Windows Server(R) 2003, Enterprise Edition 日本語版
Windows Server 2003

Microsoft(R) Windows Server(R) 2003, Standard Edition 日本語版

Microsoft(R) Windows Server(R) 2003 R2, Enterprise Edition日本語版
Windows Server 2003 R2

Microsoft(R) Windows Server(R) 2003 R2, Standard Edition 日本語版

Microsoft(R) Windows Server(R) 2003 R2, Enterprise x64 Edition 日本語版
Windows Server 2003 R2またはWindows Server 2003 R2 x64 Edition

Microsoft(R) Windows Server(R) 2003 R2, Standard x64 Edition 日本語版

Microsoft(R) Windows Server(R) 2008 Enterprise 32-bit 日本語版
Windows Server 2008 またはWindows Server 2008 x86

Microsoft(R) Windows Server(R) 2008 Standard 32-bit 日本語版

Microsoft(R) Windows Server(R) 2008 R2 Enterprise 日本語版
Windows Server 2008 R2

Microsoft(R) Windows Server(R) 2008 R2 Standard 日本語版

Microsoft(R) Windows Server(R) 2012 Standard 日本語版
Windows Server 2012

Microsoft(R) Windows Server(R) 2012 Datacenter 日本語版

Microsoft(R) Windows(R) XP Professional Operating System
Windows XP

Microsoft(R) Windows Vista(R) Ultimate 日本語版
Windows Vista

Microsoft(R) Windows Vista(R) Business 日本語版

Microsoft(R) Windows Vista(R) Enterprise 日本語版

Microsoft(R) Windows(R) 7 Professional 日本語版 (32ビット版)
Windows 7

Microsoft(R) Windows(R) 7 Enterprise 日本語版 (32ビット版)

Microsoft(R) Windows(R) 7 Ultimate 日本語版 (32ビット版)

Microsoft(R) Windows(R) 7 Professional 日本語版 (64ビット版)

Microsoft(R) Windows(R) 7 Enterprise 日本語版 (64ビット版)

Microsoft(R) Windows(R) 7 Ultimate 日本語版 (64ビット版)

Windows(R) 8 Pro 日本語版（32ビット版）
Windows 8

Windows(R) 8 Pro 日本語版（64ビット版）

Windows(R) 8 Enterprise 日本語版（32ビット版）

Windows(R) 8 Enterprise 日本語版（64ビット版）

このほか，このマニュアルでは，次に示す表記方法を使用しています。

DocumentBroker Development Kitの01-21以前のバージョンについては，Version 1と表記します。

AIXをUNIXと表記することがあります。

TPBroker V3およびTPBroker V5を合わせてTPBrokerと表記することがあります。

Windows Server 2003，Windows Server 2003 R2，Windows Server 2003 R2 x64 Edition，Windows Server 2008 x86，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，およびWindows 8を合わせてWindowsと表記することがあります。

uCosminexus DocumentBrokerのマニュアルで使用する略語

uCosminexus DocumentBrokerのマニュアルで使用する英略語を次に示します。

英略語 | 英字での表記
ACE | Access Control Element
ACFlag | Access Control Flag
ACL | Access Control List
AIIM | Association for Information and Image Management International
API | Application Programming Interface
ASCII | American Standard Code for Information Interchange
BES | Back End Server
BLOB | Binary Large Object
BMP | Bit Map
BNF | Backus Normal Form
BOA | Basic Object Adapter
CD-ROM | Compact Disc Read Only Memory
CGI | Common Gateway Interface
CORBA | Common Object Request Broker Architecture
CPU | Central Processing Unit
CR | Carriage Return
CSV | Comma Separated Value
DAP | Directory Access Protocol
DAT | Digital Audio Tape
DB | Database
DBMS | Database Management System
DCD | Document Content Description
DDE | Dynamic Data Exchange
DIT | Directory Information Tree
DLL | Dynamic Linking Library
DMA | Document Management Alliance
DN | Distinguished Name
DTD | Document Type Definition
EOF | End of File
ESIS-B | Element Structure Information Set-Binary Format
EUC | Extended UNIX Code
FAM | File Access Module
GIF | Graphics Interchange Format
GUI | Graphical User Interface
GUID | Globally Unique Identifier
HTML | Hypertext Markup Language
HTTP | Hypertext Transfer Protocol
IANA | Internet Assigned Numbers Authority
ID | Identifier
IPF | Itanium(R) Processor Family
ISO | International Organization for Standardization
JIS | Japanese Industrial Standards
JPEG | Joint Photographic Expert Group
LAN | Local Area Network
LDAP | Lightweight Directory Access Protocol
LF | Line Feed
MFC | Microsoft Foundation Class
MIME | Multipurpose Internet Mail Extensions
OCR | Optical Character Reader
OIID | Object Instance Identifier
OLE | Object Linking and Embedding
OMG | Object Management Group
ORB | Object Request Broker
ORDB | Object Relational Database
OS | Operating System
OTS | Object Transaction Service
PC | Personal Computer
PDF | Portable Document Format
RDB | Relational Database
RDN | Relative Distinguished Name
RFC | Request for Comment
RTF | Rich Text Format
SGML | Standard Generalized Markup Language
SQL | Structured Query Language
TCP/IP | Transmission Control Protocol/Internet Protocol
TIFF | Tag Image File Format
UCS-2 | Universal Character Set coded in 2 octets
UCS-4 | Universal Character Set coded in 4 octets
UOC | User Own Coding
URL | Uniform Resource Locator
UTC | Universal Time Coordinated
UTF-8 | 8-bit UCS Transformation Format
UTF-16 | 16-bit UCS Transformation Format
W3C | World Wide Web Consortium
WWW | World Wide Web
XML | Extensible Markup Language

このマニュアルで使用する記号

このマニュアルで使用する記号を次に示します。

記号
意味

　｜
横に並べられた複数の項目に対する項目間の区切りを示し，「または」を意味します。
（例）　Ａ｜Ｂ
　ＡまたはＢを指定することを示します。

　＿
括弧で囲まれた複数項目のうち1項目に対し使用され，括弧内のすべてを省略したときシステムが取る標準値を示します。
（例）　〔Ａ｜Ｂ〕
　「何も指定しない」か「AまたはBを指定する」ことを示します。何も指定しない場合はAが仮定されます。

｛　｝
この記号で囲まれている複数の項目のうちから一つを選択することを示します。項目が横に並べられ，記号｜で区切られている場合は，そのうちの一つを選択します。
（例）　｛Ａ｜Ｂ｜Ｃ｝
　Ａ，ＢまたはＣのどれかを指定することを示します。

〔　〕
この記号で囲まれている項目は省略してもよいことを示します。複数の項目が横に並べて記述されている場合には，すべてを省略するか，記号｛ ｝と同じくどれか一つを選択します。
（例１）　〔Ａ〕
　「何も指定しない」か「Ａを指定する」ことを示します。
（例２）　〔Ｂ｜Ｃ〕
　「何も指定しない」か「ＢまたはＣを指定する」ことを示します。

：：＝
この記号の左にあるものを右にあるもので定義することを示します。
（例）　Ａ：：＝Ｂ
　「ＡとはＢである」と定義することを示します。

　…
記述が省略されていることを示します。

<　>
この記号で囲まれている項目は，該当する要素を指定することを示します。
（例）　<プロパティ>
　プロパティを記述します。

(　)
この記号で囲まれている項目を省略しないで記述することを示します。
（例）　(<プロパティ>)
　項目<プロパティ>は省略しないで記述します。

　...
この記号の直前に示す記号を繰り返し，複数個指定できることを示します。
（例）　(<プロパティ>)...
　プロパティは一つ以上で複数個，繰り返して指定できます。

このマニュアルで使用する構文要素

このマニュアルで使用する構文要素の種類を次に示します。

種類 | 定義
英字 | A～Z　a～z
英小文字 | a～z
英大文字 | A～Z
数字 | 0～9
英数字 | A～Z　a～z　0～9
記号 | !　"　#　$　%　&　'　(　)　+　,　_　・　.　/　:　;　<　=　>　@　[　]　^　－　｛　｝　￣　タブ　空白

注　すべて半角文字を使用してください。

このマニュアルの図中で使用する記号

このマニュアルの図中で使用する記号を，次のように定義します。

常用漢字以外の漢字の使用について

このマニュアルでは常用漢字を使用することを基本としていますが，次に示す用語については，常用漢字以外の漢字を使用しています。

個所（かしょ）

KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

DocumentBroker Version 2とuCosminexus DocumentBroker Version 3の製品体系の違い

uCosminexus DocumentBroker Version 3では次のように製品の統合を行いました。

DocumentBroker RepositoryをuCosminexus DocumentBroker Serverに統合しました。

DocumentBroker Web ComponentをuCosminexus DocumentBroker Development KitおよびuCosminexus DocumentBroker Runtimeに統合しました。

DocumentBroker Version 2とuCosminexus DocumentBroker Version 3の製品体系の違いを次に示します。

DocumentBroker Version 2とuCosminexus DocumentBroker Version 3のマニュアルの対応

バージョンアップおよび製品体系の変更に伴い，uCosminexus DocumentBroker Version 3では次に示すようにマニュアル名称を変更しました。

Version 2のマニュアル名称 | Version 3のマニュアル名称
DocumentBroker Version 2　システム導入・運用ガイド | uCosminexus DocumentBroker Version 3　システム導入・運用ガイド
DocumentBroker Version 2　クラスライブラリ　解説 | uCosminexus DocumentBroker Version 3　クラスライブラリ　C++　解説
DocumentBroker Version 2　クラスライブラリ　リファレンス　基本機能編 | uCosminexus DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編
DocumentBroker Version 2　クラスライブラリ　リファレンス　概念SGML文書管理機能編 | 廃版
DocumentBroker Version 2　オブジェクト操作ツール | uCosminexus DocumentBroker Version 3　オブジェクト操作ツール
DocumentBroker Version 2　統計解析ツール | uCosminexus DocumentBroker Version 3　統計解析ツール
DocumentBroker Version 2　メッセージ | uCosminexus DocumentBroker Version 3　メッセージ
DocumentBroker Web Component Version 2　解説 | uCosminexus DocumentBroker Version 3　クラスライブラリ　Java　解説
DocumentBroker Web Component Version 2　リファレンス | uCosminexus DocumentBroker Version 3　クラスライブラリ　Java　リファレンス
DocumentBroker Web Component Version 2　サンプルWebアプリケーション | uCosminexus DocumentBroker Version 3　クラスライブラリ　Java　サンプルWebアプリケーション
DocumentBroker Text Search Index Loader Version 2 | uCosminexus DocumentBroker Text Search Index Loader Version 3
DocumentBroker Rendering Option　システム導入・運用ガイド | uCosminexus DocumentBroker Rendering Option Version 3
DocumentBroker Object Loader Version 2 | uCosminexus DocumentBroker Object Loader Version 3

1.　クラスライブラリの概要

DocumentBrokerでは，DMAオブジェクトを操作しやすくするために，クラスライブラリを提供しています。

この章では，DocumentBroker Development Kitで提供するクラスライブラリの概要および機能について説明します。

＜この章の構成＞

1.1　DocumentBrokerでの文書管理

1.2　クラスライブラリの特長

1.3　クラスライブラリで実現する機能

1.1　DocumentBrokerでの文書管理

この節では，DocumentBrokerで文書管理を実現する方法の概要について説明します。

＜この節の構成＞

1.1.1　文書とオブジェクト

1.1.2　DocumentBrokerのシステム構成

1.1.1　文書とオブジェクト

DocumentBrokerでは，文書および文書を管理する仕組みをオブジェクトの概念で表現します。例えば，文書として表現するためのオブジェクト，文書をまとめるフォルダの役目をするオブジェクト，文書のバージョンを管理するためのオブジェクト，検索に必要なオブジェクトなどがあります。これらのオブジェクトは，DMAが提唱するオブジェクトモデルを基にしています。

オブジェクトは，データとデータを操作するメソッドを抽象化し，クライアントアプリケーションの開発と保守を容易にします。オブジェクトに対する操作をクライアントアプリケーション上に設計することで，文書の管理や検索ができます。

このマニュアルでは，DMAのオブジェクトモデルに基づいたオブジェクトを，DMAオブジェクトといいます。

1.1.2　DocumentBrokerのシステム構成

ここでは，DocumentBrokerのシステム構成について説明します。

＜この項の構成＞

(1)　DocumentBrokerサーバ

(2)　DocumentBrokerクライアント

(3)　DocumentBrokerでの文書管理の概要

(1)　DocumentBrokerサーバ

DocumentBrokerサーバは，プロセスやセッションの管理および各種のユティリティなどのサーバ機能を備えています。DocumentBrokerサーバは，文書空間というメモリ空間を管理するサーバです。DocumentBrokerクライアントは，文書空間に接続して，データベースに格納されているオブジェクトを操作します。

(2)　DocumentBrokerクライアント

DocumentBrokerクライアントでは，業務に対応したクライアントアプリケーションを構築し，それを実行することでDocumentBrokerサーバが提供する機能を利用します。

開発環境クライアント
業務に対応したクライアントアプリケーションを開発するためのクライアントです。開発環境クライアントには，実行環境クライアントの機能も含まれています。

実行環境クライアント
クライアントアプリケーションを実行するクライアントです。業務に合わせて設計，開発したクライアントアプリケーションを使用して，DocumentBrokerサーバの文書空間上で，オブジェクトを操作します。
なお，このマニュアルでは，開発環境クライアントの機能を提供するDocumentBroker Development Kitの機能について説明しています。

(3)　DocumentBrokerでの文書管理の概要

DocumentBrokerでの文書管理の概要について，図1-1で説明します。

図1-1　DocumentBrokerでの文書管理の概要

DocumentBrokerクライアントは，TPBrokerを介して，データベースに格納されているオブジェクトをDocumentBrokerサーバの文書空間上で操作します。

DocumentBrokerでは，オブジェクトを操作することによって，文書の参照や更新などの操作を実現しています。

1.2　クラスライブラリの特長

ここでは，クラスライブラリの特長と機能について説明します。

DocumentBrokerでは，DMAのオブジェクトモデルに基づいたオブジェクトを使用して，文書を管理します。DocumentBrokerでは，DMAのオブジェクトモデルに基づいたオブジェクト（DMAオブジェクト）を組み合わせて使用することによって，高度な文書管理機能を実現しています。

DMAオブジェクトを一つ一つ意識してクライアントアプリケーションを設計するためには複雑なプログラミングが必要です。DocumentBroker Development Kitでは，より単純なプログラミングによってクライアントアプリケーションを設計できるように，クラスライブラリを提供しています。クラスライブラリには，次のような特長があります。

複数のDMAオブジェクトをまとめて，一つのオブジェクトとして操作できます。
例えば，DMAオブジェクトには文書を表現するオブジェクト，文書の表現形式を管理するオブジェクト，文書のコンテント（内容）に相当するオブジェクトなどがあります。一つの文書を操作するためには，これらのDMAオブジェクトをすべて操作する必要があります。
クラスライブラリでは，「文書」「フォルダ」など，文書管理に使用するコンポーネントに必要なDMAオブジェクトを，まとまった一つのオブジェクトとして扱うことができます。このため，文書を表す一つのオブジェクトを操作することで，文書を表現するオブジェクト，文書の表現形式を管理するオブジェクト，文書のコンテントに相当するオブジェクトなどを含んだ，一つの文書が操作できます。

文書管理に必要な操作が，メソッドとして提供されています。
DMAオブジェクトは，プロパティの値を設定，変更することで操作します。文書管理の操作を実現するためには，文書を構成する複数のDMAオブジェクトに対して，それぞれ適切なプロパティを設定する必要があります。
クラスライブラリでは，文書管理に必要な操作をメソッドとして提供しています。クラスライブラリのメソッドをコールすることによって，その操作に必要なプロパティがDMAオブジェクト上に設定されます。このため，それぞれのDMAオブジェクトのプロパティをすべて意識して操作する必要はありません。

クラスライブラリのオブジェクトは，ひな形となるクラスライブラリのクラスを基に作成します。このクラスは，実現する機能ごとに，複数のDMAのクラスから構成されています。クラスライブラリのクラスを基にオブジェクトを作成することによって，その機能を実現するのに必要な複数のDMAオブジェクトが作成されます。

クラスライブラリのオブジェクトとDMAオブジェクトの関係について，図1-2に示します。

図1-2　クラスライブラリのオブジェクトとDMAオブジェクトの関係

1.3　クラスライブラリで実現する機能

この節では，DocumentBroker Development Kitで提供するクラスライブラリによって実現する，文書管理機能について説明します。

なお，クラスライブラリが提供する機能のうち，次の場合は現在サポートしていない機能があります。

TPBroker V5を使用する場合

File Link連携機能

Windows Server 2003 R2 x64 Editionを使用する場合

File Link連携機能

Windows Server 2008，Windows Server 2008 R2，Windows Server 2012，Windows XP，Windows Vista，Windows 7，およびWindows 8を使用する場合

XML文書管理機能

File Link連携機能

＜この節の構成＞

1.3.1　文書空間（データベース）に接続する機能

1.3.2　文書を作成，管理する機能

1.3.3　文書やコンテナを検索する機能

1.3.4　独立データを管理する機能

1.3.5　レンディションのコンテント種別変換機能

1.3.6　そのほかの機能

1.3.1　文書空間（データベース）に接続する機能

DocumentBrokerのクライアントの実行環境とDocumentBrokerサーバの文書空間を接続する機能は，クラスライブラリのクラスの機能として提供されています。

文書空間との接続には，CdbrSessionクラスの機能を使用します。

クラスライブラリの機能によって文書空間のオブジェクトを操作すると，その時点でデータベースの内容も更新されます。この更新を確定またはキャンセルする機能も，CdbrSessionクラスによって提供されています。

1.3.2　文書を作成，管理する機能

DocumentBrokerによって管理する文書には，次の種類があります。

一つのファイルから構成される文書

一つの文書の中に複数のバージョンに対応するファイルを持つ文書

一つの文書の中に複数の形式に対応するファイルを持つ文書

一つの文書の中に複数のファイルを持つ文書

ファイルの実体をDocumentBrokerサーバが存在するマシンから接続可能なファイルシステムに持つ文書

ファイルの実体をデータベースと連携したファイルサーバ上に持つ文書

文書を管理する方法には，次の種類があります。

文書と文書を関連づけて管理する方法

文書とコンテナを関連づけて管理する方法

文書と構成管理コンテナを関連づけて構成管理する方法

また，次に示す，論理構造を持つ文書を管理することもできます。

XML文書
これは，文書を構成するファイルがXML形式である文書です。

なお，DocumentBrokerの文書空間で使用する文字コード種別がUTF-8の場合，DocumentBrokerで使用できる機能に制限があります。文書空間で使用する文字コード種別がUTF-8の場合に使用できる機能の詳細は，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　一つのファイルから構成される文書を管理する

(2)　一つの文書の中に複数のバージョンに対応するファイルを持つ文書を管理する

(3)　一つの文書の中に複数の形式に対応するファイルを持つ文書を管理する

(4)　一つの文書の中に複数のファイルを持つ文書を管理する

(5)　ファイルの実体をDocumentBrokerサーバが存在するマシンから接続可能なファイルシステムに持つ文書を管理する

(6)　ファイルの実体をデータベースと連携したファイルサーバ上に持つ文書を管理する

(7)　文書と文書を関連づけて管理する

(8)　文書をコンテナに関連づけて管理する

(9)　文書を構成管理する

(10)　XML文書を管理する

(1)　一つのファイルから構成される文書を管理する

最も基本的な文書は，一つのファイルから構成される文書です。

例えば，Wordで作成した文書「報告書.doc」を，DocumentBrokerの文書として管理できます。

DocumentBrokerでは，文書にさまざまな属性を付けて管理できます。この属性をプロパティといいます。プロパティには，DocumentBrokerによって設定されるプロパティと，ユーザが任意に追加するプロパティがあります。例えば，「報告書.doc」をDocumentBrokerで管理する時に，ユーザが追加したプロパティの値として，「作成者」や「担当部署」，「コメント」などの情報も一緒に管理できます。

文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス
バージョン管理をしない文書の基になるクラスです。

CdbrVersionableDocumentクラス
バージョン管理をする文書の基になるクラスです。

バージョン管理機能については，「(2)一つの文書の中に複数のバージョンに対応するファイルを持つ文書を管理する」で説明します。

(2)　一つの文書の中に複数のバージョンに対応するファイルを持つ文書を管理する

文書を更新するときに，履歴を残して管理することができます。文書に対して，第1版，第2版などのバージョンを付けておくことで，過去のある時点での文書を取り出したり，その文書を基に新たな文書を作成したりできます。また，その文書が幾つのバージョンを持っているかも管理できます。

この機能を，バージョン管理機能といいます。

この機能を使用できる文書の基になるクラスは，次のとおりです。

CdbrVersionableDocumentクラス

(3)　一つの文書の中に複数の形式に対応するファイルを持つ文書を管理する

一つの文書として，複数の形式に対応するファイルを管理できます。

この機能は，一つの文書の内容を，対応するアプリケーションごとの複数の形式に変換した場合などに，使用できます。

例えば，文書「報告書」に，Wordで作成したファイル「報告書.doc」のほかに，「報告書.doc」をPDF形式に変換した「報告書.pdf」も一緒に登録できます。これによって，使用するユーザによって，Word形式の文書をダウンロードしたり，PDF形式の文書をダウンロードしたりできます。

この機能を，マルチレンディション機能といいます。

この機能を使用できる文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(4)　一つの文書の中に複数のファイルを持つ文書を管理する

一つの文書として，複数のファイルを管理できます。一つの文書で複数のファイルを管理することで，文書を構成する複数のファイルを一括して登録したり，一括して取得したりできます。

この機能を，マルチファイル管理機能といいます。

この機能を使用できる文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(5)　ファイルの実体をDocumentBrokerサーバが存在するマシンから接続可能なファイルシステムに持つ文書を管理する

文書の実体であるコンテントをファイルシステムの任意のディレクトリに格納し，文書のプロパティとコンテントの格納先の情報（コンテントロケーション）をデータベースに登録して管理します。コンテントロケーションには，コンテントの格納先の基点となるディレクトリパス（コンテント格納先ベースパス）からの相対パスが登録されます。このため，コンテントの格納先を移行する場合などは，データベースに影響を与えることなく，コンテント格納先ベースパスを変更するだけで，コンテントの格納領域を変更できます。また，コンテントをデータベースに格納しないため，データベースの容量を削減できます。

この機能を，リファレンスファイル管理機能といいます。

この機能を使用できる文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(6)　ファイルの実体をデータベースと連携したファイルサーバ上に持つ文書を管理する

音声・画像などの容量が大きいコンテンツを管理する場合，ファイルの実体はファイルサーバ上で管理したいことがあります。このときに，データベースではファイル名や作成者名などの属性情報だけを管理して，ファイルの実体をファイルサーバ上で管理するためには，データベースとファイルサーバ間で整合性を確保することが必要です。

File Link連携機能を使用すると，データベースとファイルサーバの内容の整合性をHiRDB File Linkの機能によって確保できます。これによって，ユーザアプリケーションで整合性を取るための処理をする必要がなくなります。

なお，この機能を使用する場合には，関連プログラムが必要です。

この機能を使用できる文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(7)　文書と文書を関連づけて管理する

文書と文書を関連づけて管理できます。ある文書の中で，ほかの文書を参照する記述がある場合などに，文書間に関連づけを設定しておくことで，参照元の文書から参照先の文書をたどることができます。また，参照先の文書から，参照元の文書をたどることもできます。

この機能を持つ文書を作成する基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(8)　文書をコンテナに関連づけて管理する

文書は，フォルダに格納するイメージで，まとめて管理できます。また，フォルダに格納した文書を，別の観点から分類して管理することもできます。

DocumentBrokerでは，複数の文書をまとめて管理するために，コンテナというオブジェクトを使用します。コンテナと文書を関連づけることによって，文書をフォルダに格納するようにして管理したり，文書を複数の観点から分類して管理したりできます。設定する関連づけの種類によって，コンテナと文書は1:n（nは1以上の整数）の関係で関連づけたり，m:n（m，nは1以上の整数）の関係で関連づけたりできます。

例えば，文書をプロジェクト単位でまとめて管理したい場合，プロジェクトごとにコンテナを作成して，コンテナと文書を1:nの関係で関連づければ，プロジェクトごとのフォルダに文書を格納するイメージで文書を管理できます。また，フォルダに格納された文書を作成者とテーマで分類して管理したい場合，作成者とテーマを表すコンテナをそれぞれ作成して，コンテナと文書をm:nの関係で関連づければ，文書を作成者やテーマごとに分類して管理できます。

コンテナとコンテナを関連づけることによって，フォルダや分類に階層を持たせることもできます。

コンテナの基になるクラスは，次のとおりです。

CdbrReferentialContainerクラス
構成管理機能を持たないコンテナです。コンテナ自身のバージョン管理もできません。

CdbrVersionTraceableContainerクラス
構成管理機能を持つコンテナです。ただし，コンテナ自身のバージョン管理はできません。

CdbrConfiguratedReferentialContainerクラス
構成管理およびコンテナ自身のバージョン管理ができるコンテナです。

(9)　文書を構成管理する

コンテナでは，文書の特定のバージョンを管理することもできます。文書やコンテナのバージョンを指定して管理するには，構成管理機能を持つコンテナ（構成管理コンテナ）を使用します。構成管理機能とは，管理している文書やコンテナの，ある時点でのバージョン構成の状態を管理する機能です。例えば，管理する複数の文書が，それぞれ異なるタイミングでバージョンアップする場合などに，構成管理機能を使用します。

構成管理機能を持つコンテナでは，それぞれの文書の最新のバージョンを参照できるようにしたり，文書のバージョンアップに関係なく常にバージョン1やバージョン2など特定のバージョンの文書を参照できるようにしたりできます。ある文書は常に最新のバージョンを参照して，別の文書は特定のバージョンを参照し続ける，ということもできます。

また，このコンテナをバージョンアップすることで，コンテナごとに関連づけている文書やコンテナのバージョン構成をまとめて管理できます。例えば，バージョン1のコンテナからたどる文書をバージョン1で固定して，バージョン2のコンテナで管理する文書は常に最新のバージョンをたどるようにしたりできます。

構成管理機能を持つコンテナを作成する基になるクラスは，次のとおりです。

CdbrVersionTraceableContainerクラス

CdbrConfiguratedReferentialContainerクラス

このうち，構成管理機能を持つコンテナ自身のバージョンを管理する機能を持つコンテナは，CdbrConfiguratedReferentialContainerクラスを基に作成します。

(10)　XML文書を管理する

XML文書とは，XML形式のファイル（XMLファイル）をコンテントとして登録した文書です。XMLファイルは，タグによって定義された論理構造を持っています。DocumentBrokerでは，任意のタグに囲まれた文字列を文書のプロパティの値として割り当てて管理したり，特定の構造に含まれる文字列を指定した検索を実行したりできます。

このような機能を，XML文書管理機能といいます。なお，この機能を使用する場合には，関連プログラムが必要です。

XML文書の基になるクラスは，次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

1.3.3　文書やコンテナを検索する機能

すでに登録されている文書やコンテナは，検索によって取得します。

DocumentBrokerでは次に示す検索が実行できます。

文書やコンテナに設定されているプロパティの値を利用した属性検索または全文検索

文書に含まれる文字列を指定した全文検索

文書に対する全文検索では，文章を指定して，その文章と類似した概念を持つ文書を検索（概念検索）することもできます。ただし，全文検索を実行する場合には，前提プログラムが必要です。

検索を実行する場合の検索条件は，edmSQLによって指定できます。edmSQLはSQLに基づいた構文で記述できるため，SQLに関する知識を活用して検索を実行できます。

edmSQLを使用する検索機能はCdbrEqlStatementクラスによって提供されています。

1.3.4　独立データを管理する機能

既存のDMAオブジェクトによって作成する文書やコンテナ以外のオブジェクトを，独立データとして作成，管理できます。

独立データを作成する基になるクラスは，次のとおりです。

CdbrIndependentPersistenceクラス

1.3.5　レンディションのコンテント種別変換機能

文書の実体であるコンテントの格納先を，文書の利用価値やアクセス頻度に応じ，最適な格納先に変換するための機能です。

この機能を使用できる文書を作成する基になるクラスは次のとおりです。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

1.3.6　そのほかの機能

そのほかの機能について説明します。

＜この項の構成＞

(1)　排他制御機能

(2)　アクセス制御機能

(1)　排他制御機能

DocumentBrokerで管理している文書やコンテナにアクセスする場合，排他制御が実行されます。排他制御とは，あるユーザが文書やコンテナにアクセスしているときに，ほかのユーザによってその文書やコンテナの状態が変更されたり，削除されたりしないようにロックを掛けて制御する機能です。

DocumentBrokerの排他制御には，メソッドによって暗黙的に設定されるロックと，ユーザが明示的に設定するロックがあります。

(2)　アクセス制御機能

DocumentBrokerで管理している文書やコンテナに対して参照や更新などのアクセスをする場合，そのユーザが持つアクセス権に応じてアクセスを制御することができます。例えば，作成した文書をほかのユーザに参照はさせたいが更新はさせたくない場合などに，この機能を使用します。これを，アクセス制御機能といいます。アクセスを制御するためのアクセス権は，ユーザやグループごとに設定できます。

2.　オブジェクトの操作

DocumentBrokerでは，オブジェクトを操作することによって，文書管理を実現します。クラスライブラリでオブジェクトを操作するためには，クラス，オブジェクト，プロパティおよびメソッドについて理解しておく必要があります。

この章では，クラス，オブジェクト，プロパティおよびメソッドの概要と，オブジェクトを操作するために必要な，文書空間への接続方法，プロパティの操作方法について説明します。

＜この章の構成＞

2.1　クラス，オブジェクト，プロパティおよびメソッドの概要

2.2　オブジェクトの操作の流れ

2.3　文書空間との接続（セッションの確立）

2.4　オブジェクトの作成およびオブジェクトとの接続

2.5　クラスの種類

2.6　プロパティの種類と操作

2.7　オブジェクトとデータベースの関係

2.1　クラス，オブジェクト，プロパティおよびメソッドの概要

この節では，クラスライブラリで操作するオブジェクトの概要について説明します。説明する内容は，次のとおりです。

クラス

オブジェクト

プロパティ

メソッド

＜この節の構成＞

2.1.1　クラス

2.1.2　オブジェクト

2.1.3　プロパティ

2.1.4　メソッド

2.1.1　クラス

ここでは，クラスライブラリで扱うクラスの概要について説明します。

クラスとは，オブジェクトを作成するためのひな形です。

クラスライブラリを使用する場合，次の２種類のクラスについて理解する必要があります。

DMAクラス

クラスライブラリのクラス

なお，クラスライブラリのクラス名には，クラス名の先頭に「Cdbr」が付きます。DMAクラスのクラス名には，クラス名の先頭に「dmaClass_」または「edmClass_」が付きます。

＜この項の構成＞

(1)　DMAクラス

(2)　クラスライブラリのクラス

(1)　DMAクラス

DMAクラスは，DMAオブジェクトのひな形になるクラスです。

DMAでは，文書管理に必要なオブジェクトを作成するためのクラスを規定しています。例えば，個々の文書に相当するオブジェクト，文書の形式を表すオブジェクト，文書の実体を管理するオブジェクトなど，DMAの文書管理インターフェースに必要なオブジェクトは，DMAクラスを基に作成されます。また，DMAが規定したクラスに加えて，DocumentBrokerでは，拡張した機能を持つDMAクラスを提供しています。例えば，構成管理機能を持つDMAオブジェクトを管理する機能を持つDMAオブジェクトは，DocumentBrokerが拡張したDMAクラスを基に作成されます。

なお，DMAクラスは，データベースの表に対応します。したがって，DMAオブジェクトは，データベース上に存在するオブジェクトになります。DMAオブジェクトとデータベースの関係については，「2.7　オブジェクトとデータベースの関係」を参照してください。

(2)　クラスライブラリのクラス

クラスライブラリのクラスは，DMAオブジェクトをまとめて操作するための機能を持ったクラスです。文書を管理するための機能ごとに，必要なDMAオブジェクトを操作する機能を持ったクラスが定義されています。

また，文書やコンテナを作成，操作するためのクラスは，文書やコンテナに必要な複数のDMAクラスを構成要素として持ち，これらをまとめて作成するためのひな形になります。

例えば，「バージョン管理する文書」を作成，操作するためのクラスライブラリのクラスであるCdbrVersionableDocumentクラスは，次のようなDMAクラスを構成要素として持っています。

dmaClass_ConfigurationHistoryクラス
文書のバージョンを統括するDMAクラス

dmaClass_VersionSeriesクラス
バージョン構成を管理するDMAクラス

dmaClass_VersionDescriptionクラス
バージョン構成と管理する文書を結び付けるDMAクラス

dmaClass_DocVersionクラス
文書の特定のバージョンに相当するDMAクラス

dmaClass_Renditionクラス
文書を構成するファイルの種類を管理するDMAクラス

dmaClass_ContentTransferクラス
文書の実体であるコンテントを管理するDMAクラス

クラスライブラリのオブジェクトとしてCdbrVersionableDocumentオブジェクトを作成すると，これらのDMAクラスを基にしたDMAオブジェクトがまとめて作成されます。そして，作成したDMAオブジェクトを操作する機能も，CdbrVersionableDocumentクラスのメソッドとして実装されています。

つまり，クラスライブラリのクラスは，クラスライブラリで操作するオブジェクトを定義したひな形であり，同時に複数のDMAオブジェクトをまとめて操作するためのインターフェースを提供しています。

2.1.2　オブジェクト

ひな形であるクラスに，実際の値を格納したものがオブジェクトです。

クラスライブラリのオブジェクトは，各クラスのCreateObjectメソッドをコールして作成します。このメソッドによって作成されるクラスライブラリのオブジェクトは，実際には複数のDMAオブジェクトから構成されています。

クラスライブラリのクラスとオブジェクトの関係を，次の図に示します。

図2-1　クラスライブラリのクラスとオブジェクトの関係

これらのオブジェクトは，クラスライブラリのメソッドによって操作します。

例えば，図2-1に示したように，CdbrDocument::CreateObjectメソッドをコールして文書を表すCdbrDocumentオブジェクトを作成した場合，データベースにはDMAオブジェクトのDocVersionオブジェクト，RenditionオブジェクトおよびContentTransferオブジェクトが作成されます。しかし，CdbrDocumentオブジェクトを操作するときには，CdbrDocumentクラスのメソッドをコールすればよく，個々のDMAオブジェクトを意識する必要はありません。

なお，クラスライブラリのオブジェクトを構成する複数のDMAオブジェクトのうち，最上位に当たるオブジェクトのことを，トップオブジェクトといいます。例えば，CdbrDocumentオブジェクトの場合は，DMAオブジェクトのDocVersionオブジェクトがトップオブジェクトです。

2.1.3　プロパティ

クラスには，プロパティが定義されています。プロパティとは，オブジェクトの状態を表す属性です。プロパティは，オブジェクトを検索したり，オブジェクトに関するデータを格納したりするために使用できます。

DMAクラスには，DMAによって規定されたプロパティが定義されています。DocumentBrokerで拡張したDMAクラスには，DocumentBroker独自のプロパティも定義されています。また，DMAクラスに対してユーザが必要なプロパティを追加することもできます。さらに，クラスライブラリでは，クラスライブラリのクラスごとに定義された独自のプロパティを使用することもできます。

なお，プロパティには継承関係があります。上位のクラスで定義されたプロパティは，そのサブクラスに継承されます。

2.1.4　メソッド

クラスライブラリのメソッドは，クラスごとに提供されています。

DocumentBrokerでは，メソッドによってプロパティに値を設定したり，プロパティの値を取得したりして，オブジェクトの状態を操作します。プロパティに値を設定するメソッドを更新系メソッド，プロパティから値を取得するメソッドを参照系メソッドといいます。

なお，メソッドには，継承関係があります。メソッドの継承関係は，クラスの継承関係と同様で，上位のクラスで定義されたメソッドは，そのサブクラスに継承されます。例えば，CdbrVersionableクラスのサブクラスであるCdbrVersionableDocumentクラスでは，CdbrVersionableDocumentクラスで定義されたメソッドのほか，CdbrVersionableクラスで定義されているメソッドも使用できます。

2.2　オブジェクトの操作の流れ

この節では，DocumentBrokerのオブジェクトをクラスライブラリの機能で操作する場合の，操作の流れについて説明します。

クラスライブラリを使用してオブジェクトを操作するためには，DocumentBrokerサーバの文書空間と接続する必要があります。また，オブジェクトの操作が終了したあと，DocumentBrokerの文書空間との接続を解除する必要があります。

なお，文書空間に接続している状態を，セッションといいます。また，オブジェクトの操作の処理単位を，トランザクションといいます。

文書空間との接続から文書空間との接続解除までの操作の流れを，次の図に示します。

図2-2　オブジェクトの操作の流れ

2.3　文書空間との接続（セッションの確立）

文書空間上のオブジェクトを操作するためには，まず，クライアントの実行環境とサーバの文書空間を接続して，トランザクションを開始します。

この節では，クライアントの実行環境と文書空間を接続する方法について説明します。文書空間と接続するためには，CdbrSessionクラスの機能を使用します。

また，CdbrSessionクラスが提供している，ログイン管理機能についても説明します。

＜この節の構成＞

2.3.1　CdbrSessionクラスの概要

2.3.2　セッションの確立から終了までの流れ

2.3.3　ログイン

2.3.1　CdbrSessionクラスの概要

CdbrSessionクラスは，文書空間とのセッションを確立する機能を提供します。

CdbrSessionクラスの主な機能を次に示します。

文書空間との接続・解除

文書空間に接続するときのログイン管理

文書空間に作成したオブジェクトの管理（オブジェクトの操作の確定およびキャンセル）

文書空間の情報の取得

クライアント環境から要求のORBを介したサーバでの実行

ログインユーザが保持している情報の取得（アクセス制御機能を使用する場合）

2.3.2　セッションの確立から終了までの流れ

セッションの確立から終了までの流れを説明します。また，セッションの中でオブジェクトを操作したときの，操作の確定および取り消しについても説明します。なお，それぞれのメソッドの文法については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　セッションの確立

(2)　オブジェクトの操作の確定と取り消し

(3)　セッションの終了

(4)　注意事項

(1)　セッションの確立

オブジェクトを操作する場合，まずセッションを確立します。ここでは，セッションを確立する手順について説明します。セッションの確立とは，文書空間と接続してトランザクションを開始することです。

セッションを確立する流れについて次に示します。

CdbrSessionオブジェクトを生成します。
CdbrSessionオブジェクトは，newによって作成します。

文書空間に接続します。
CdbrSession::Connectメソッドをコールします。

トランザクションを開始します。
CdbrSession::Beginメソッドをコールします。
セッションの確立以降，データベースに格納されたオブジェクトを操作できます。

(2)　オブジェクトの操作の確定と取り消し

文書空間でオブジェクトを操作したら，操作を確定する必要があります。操作を確定するためには，CdbrSession::Commitメソッドをコールします。これによって，データベースのオブジェクトの状態が確定されます。

また，オブジェクトに対して行った操作を取り消したい場合は，CdbrSession::Rollbackメソッドをコールします。これによって，前回CdbrSession::Commitメソッドによって確定した以降の操作が取り消され，CdbrSession::Commitメソッドをコールした段階のオブジェクトの状態に戻ります。

CdbrSession::Commitメソッド，またはCdbrSession::Rollbackメソッドをコールすると，その時点でトランザクションは完了します。このため，新たにトランザクションを開始する場合は，CdbrSession::Beginメソッドをコールする必要があります。

(3)　セッションの終了

オブジェクトの操作が終了したら，セッションを終了します。セッションは，データベースの内容を確定したあとで終了してください。

セッションは，次の流れで終了します。

CdbrSession::Disconnectメソッドをコールします。
これによって，文書空間との接続が解除され，セッションが終了します。

(4)　注意事項

同一のセッション上で動作するメソッドを，多重実行することはできません。多重実行した場合は，エラーになります。

クライアントからCdbrSessionクラスのConnectメソッドを発行した際，無応答が発生する場合には，DocumentBrokerサーバとクライアントプロセスを再起動したあとに，再度クライアントからCdbrSessionクラスのConnectメソッドを発行してください。なお，DocumentBrokerサーバの起動と終了については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

2.3.3　ログイン

CdbrSessionクラスは，ユーザが文書空間にログインするときのログイン管理機能を提供します。ユーザ名およびパスワードは，CdbrSession::Connectメソッドの引数として指定します。

ユーザ名およびパスワードを指定することで，文書空間への接続時に，DocumentBrokerにアクセスできるユーザかどうかを認証できます。クライアントアプリケーションは，リクエストメッセージを要求し，サーバは応答メッセージで応答することでユーザを認証します。

認証に使用するユーザIDおよびパスワードについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

2.4　オブジェクトの作成およびオブジェクトとの接続

この節では，セッション確立後のオブジェクトの操作について説明します。

新しいオブジェクトを操作する場合は，オブジェクトを作成して操作します。既存のオブジェクトを操作する場合は，オブジェクトに接続して操作します。

＜この節の構成＞

2.4.1　オブジェクトの作成

2.4.2　既存のオブジェクトとの接続

2.4.3　オブジェクトとの接続の解除

2.4.1　オブジェクトの作成

オブジェクトは，CreateObjectメソッドをコールして作成します。このメソッドによって，文書空間上にDMAオブジェクトを構成要素としたクラスライブラリのオブジェクトが作成されます。作成するクラスライブラリのオブジェクトを構成するDMAオブジェクトを特定するために，CreateObjectメソッドをコールする時に，DMAオブジェクトを作成する基になるDMAクラスをCreateObjectメソッドの引数に指定する構造体（SDBR_DMAINFO構造体）に指定します。

それぞれのクラスライブラリのオブジェクトを作成する時に指定するDMAオブジェクトのクラス識別子を次の表に示します。なお，クラス識別子の代わりにNULLを指定することもできます。NULLを指定すると，デフォルトのクラス識別子を指定したものとしてオブジェクトが作成されます。

表2-1　クラスライブラリのオブジェクトを作成するときに指定するDMAオブジェクトのクラス識別子

クラスライブラリのクラス | 指定するDMAオブジェクトのクラス識別子 | デフォルトのクラス識別子
CdbrConfiguratedReferentialContainerクラス | dmaClass_ConfigurationHistoryクラスまたはそのサブクラス | dmaClass_ConfigurationHistory
edmClass_ContainerVersionクラスまたはそのサブクラス | edmClass_ContainerVersion
CdbrDocumentクラス | dmaClass_DocVersionクラスまたはそのサブクラス | edmClass_VersionTracedComponentDocversion
CdbrIndependentPersistenceクラス | edmClass_IndependentPersistenceクラスまたはそのサブクラス | edmClass_IndependentPersistence
CdbrPublicACLクラス | edmClass_PublicACLクラス | edmClass_PublicACL
CdbrReferentialContainerクラス | dmaClass_Containerクラスまたはそのサブクラス | dmaClass_Container
CdbrVersionableDocumentクラス | dmaClass_ConfigurationHistoryクラスまたはそのサブクラス | dmaClass_ConfigurationHistory
dmaClass_DocVersionクラスまたはそのサブクラス | edmClass_VersionTracedComponentDocversion
CdbrVersionTraceableContainerクラス | edmClass_ContainerVersionクラスまたはそのサブクラス | edmClass_ContainerVersion

CreateObjectメソッドによってオブジェクトを作成するコールシーケンスの例を示します。

CreateObjectメソッドによってオブジェクトを作成するコールシーケンス

CdbrDocument ObjDoc;
SDBR_DMAINFO DmaClassList[1];

//DMA情報構造体にクラス識別子を設定する
DmaClassList[0].ClassId = usrClass_DocVersion;
DmaClassList[0].PropList.pItem = NULL;
DmaClassList[0].PropList.lCount = 0;
pSession->Begin();
ObjDoc.CreateObject(pSession,
    1, DmaClassList,
   "file:///tmp/sample.txt", "MIME::text/plain", &pOIID,
    DBR_CREATE_INDEX);
ObjDoc.ReleaseObject();
pSession->Commit();

2.4.2　既存のオブジェクトとの接続

既存のオブジェクトを操作するためには，まず，そのオブジェクトに接続する必要があります。オブジェクトに接続するメソッドには，次の2種類があります。

CdbrDMA::SetOIIDメソッド

CdbrDMA::ConnectObjectメソッド

これらのメソッドの主な違いは，処理性能です。SetOIIDメソッドを使用すると，接続時にオブジェクトにロックを設定しない（データベースにアクセスしない）ため，ConnectObjectメソッドを使用する場合に比べて高速な処理が実現できます。

ここでは，それぞれのメソッドの特長について説明します。ロックについての詳細は，「3.14　排他制御」を参照してください。

また，既存のオブジェクトに接続する場合，そのオブジェクトのOIIDを指定します。OIIDがわからない場合は，事前に検索等を実行して，OIIDを取得しておく必要があります。

検索については，「4.　オブジェクトの検索」を参照してください。

＜この項の構成＞

(1)　SetOIIDメソッドを使用したオブジェクトへの接続

(2)　ConnectObjectメソッドを使用したオブジェクトへの接続

(1)　SetOIIDメソッドを使用したオブジェクトへの接続

SetOIIDメソッドは，ロックを設定しないでオブジェクトに接続するメソッドです。ロックを設定する場合に比べて，高速に処理できます。

SetOIIDメソッドをコールしてオブジェクトに接続した場合，それ以降の操作で，必要に応じてロックを設定します。

SetOIIDメソッドを使用したコールシーケンスの例を次に示します。

SetOIIDメソッドを使用してプロパティの値を参照，設定するコールシーケンス

CdbrDocument ObjDoc;
pSession->Begin();
//ObjDocにOIIDを設定する
ObjDoc.SetOIID(pSession,pOIID);
//プロパティを参照すると同時に，WRITEロックを設定する
ObjDoc.GetPropertyValuesAndLock(...,DMA_LOCK_WRITE);
//プロパティを更新する
ObjDoc.PutPropertyValues(...);
ObjDoc.ReleaseObject();
pSession->Commit();

(2)　ConnectObjectメソッドを使用したオブジェクトへの接続

ConnectObjectメソッドは，ロックを設定してオブジェクトに接続するメソッドです。引数に指定した種類のロックがオブジェクトに設定されます。

ConnectObjectメソッドを使用したコールシーケンスの例を次に示します。

ConnectObjectメソッドを使用してプロパティの値を参照，設定するコールシーケンス

CdbrDocument ObjDoc;
pSession->Begin();
//データベースにアクセスして，ObjDocにWRITEロックを設定する
ObjDoc.ConnectObject(pSession,DMA_LOCK_WRITE,pOIID);
//WRITEロックを設定したオブジェクトのプロパティを参照する
ObjDoc.GetPropertyValues(...);
//プロパティを更新する
ObjDoc.PutPropertyValues(...);
ObjDoc.ReleaseObject();
pSession->Commit();

2.4.3　オブジェクトとの接続の解除

オブジェクトとの接続は，操作が完了した段階で解除します。

オブジェクトとの接続の解除には，ReleaseObjectメソッドをコールします。

2.5　クラスの種類

この節では，DMAクラスおよびクラスライブラリのクラスの種類について説明します。

＜この節の構成＞

2.5.1　DMAクラスのクラス識別子

2.5.2　クラスライブラリのクラスの一覧

2.5.3　クラスの継承関係

2.5.4　抽象クラス

2.5.1　DMAクラスのクラス識別子

DMAクラスは，クラス識別子として，Id型の値（GUID値）を持ちます。この識別子は，メソッドなどでDMAクラスを指定するとき，DMAクラスを識別するために使用します。

また，DMAが規定したDMAクラスまたはDocumentBrokerが拡張したDMAクラスのクラス識別子を指定する場合，GUID値のほか，クラスライブラリのヘッダファイルで定義している定数をクラス識別子として指定することもできます。例えば，「dmaClass_DocVersion」や「edmClass_VersionTracedComponentDocVersion」などがこれに当たります。

ユーザが定義したサブクラスのクラス識別子を任意の定数（usrClass_XXXなど）で指定する場合は，GUID値の実体と定数の対応を定義したヘッダファイルを作成する必要があります。ヘッダファイルの作成方法については，「5.2.7　ユーザ定義のクラス識別子・プロパティ識別子の定義」を参照してください。

なお，このマニュアルでは，GUID値の実体とdmaClass_DocVersionのような定数をあわせてクラス識別子と呼びます。

2.5.2　クラスライブラリのクラスの一覧

クラスライブラリで提供するクラスの一覧を次の表に示します。なお，それぞれのクラスの詳細については，参照先で説明しています。

表2-2　クラスライブラリで提供するクラス一覧

クラス名 | 説明 | 参照先
文書空間と接続するためのクラス
CdbrSessionクラス | クライアント実行環境と文書空間との接続の管理をする機能を提供するクラスです。また，ログイン管理機能も提供します。 | 2.3　文書空間との接続（セッションの確立）
文書を作成，管理するためのクラス
CdbrVersionableDocumentクラス | DocumentBrokerで扱う文書のうち，バージョン管理をする文書を作成および管理する機能を提供するクラスです。 | 3.2　クラスライブラリで扱う文書
CdbrDocumentクラス | DocumentBrokerで扱う文書のうち，バージョン管理をしない文書や，バージョン管理をしている文書の個々のバージョンに当たる文書を作成および管理する機能を提供するクラスです。
複数の文書をまとめて管理するためのクラス
CdbrReferentialContainerクラス | 文書をコンテナによって包含して管理するための機能を提供するクラスです。 | 3.9　コンテナを使用した文書管理
文書の構成管理をするためのクラス
CdbrConfiguratedReferentialContainerクラス | コンテナを使用して文書やコンテナのバージョン構成を管理したり，コンテナ自身のバージョンを管理したりする機能を提供するクラスです。 | 3.10　構成管理コンテナを使用した文書の構成管理
CdbrVersionTraceableContainerクラス | コンテナを使用して文書やコンテナのバージョン構成を管理する機能を提供するクラスです。また，バージョン管理しているコンテナの，個々のバージョンに当たるコンテナを操作する機能を提供します。
XML文書管理機能を使用するためのクラス
CdbrXmlTranslatorFactoryクラス | XMLプロパティマッピングに使用する定義ファイル類を解析して，XML文書管理機能を実行するための環境を管理する機能を提供するクラスです。 | 3.11　XML文書の管理
CdbrXmlTranslatorクラス | XML文書管理を実行する機能を提供するクラスです。
独立データを管理するためのクラス
CdbrIndependentPersistenceクラス | 独立したデータを扱うための機能を提供するクラスです。 | 3.13　独立データの管理
文書やコンテナを検索するためのクラス
CdbrEqlStatementクラス | edmSQLを基にした検索を実行する機能や，検索結果を取得する機能を提供するクラスです。 | 4.　オブジェクトの検索
可変長な一次元配列を扱うためのクラス
CdbrCompoundクラス | 異なる型の複数のデータから構成される複合データを扱う機能を提供するクラスです。 | 2.6.7　VariableArray型プロパティの操作
CdbrVariableArrayクラス | 同じ型の複数の要素から構成される可変長の配列を扱う機能を提供するクラスです。なお，このクラスで扱うことができる同じ型の要素とは，CdbrCompoundクラスを基に作成されたCdbrCompoundオブジェクトだけです。
アクセス制御リストを管理するためのクラス
CdbrPublicACLクラス | アクセス制御リストを管理して，これを複数の文書やコンテナで共有して使用する機能を提供するクラスです。 | 3.15　アクセス制御
サブクラスに共通な機能を継承させるためのクラス（抽象クラス）
CdbrContainableクラス | コンテナの包含要素になる機能を提供するクラスです。 | 2.5.4　抽象クラス
CdbrCoreクラス | クラスライブラリのクラスのうち，CdbrVariableArrayクラスおよびCdbrCompoundクラス以外のすべてのクラスのスーパークラスです。エラー管理機能を持ちます。
CdbrDMAクラス | DMAのオブジェクトモデルのdmaClass_DMAクラスに対応するクラスです。OIIDの取得およびプロパティの参照や設定をするメソッドを定義します。
CdbrVersionableクラス | バージョン管理機能を提供するクラスです。

表2-3　クラスライブラリのクラスとDMAのクラスの対応

クラスライブラリのクラス
構成要素であるDMAクラス

CdbrCompoundクラス
－

CdbrConfiguratedReferentialContainerクラス

dmaClass_ConfigurationHistoryクラス

dmaClass_DirectContainmentRelationshipクラス

dmaClass_ReferentialContainmentRelationshipクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

edmClass_ContainerVersionクラス

edmClass_VersionTraceableContainmentRelationshipクラス

CdbrContainableクラス

dmaClass_Containableクラス

CdbrCoreクラス
－

CdbrDMAクラス

dmaClass_DMAクラス

CdbrDocumentクラス
シングルファイル文書の場合

dmaClass_ContentTransferクラス

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

マルチファイル文書の場合

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

edmClass_ContentTransfersクラス

リファレンスファイル文書の場合

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

edmClass_ContentReferenceクラス

File Link文書の場合

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

edmClass_ContentFileLinkクラス

CdbrEqlStatementクラス
－

CdbrIndependentPersistenceクラス

edmClass_IndependentPersistenceクラス

CdbrPublicACLクラス

edmClass_PublicACLクラス

CdbrReferentialContainerクラス

dmaClass_Containerクラス

dmaClass_DirectContainmentRelationshipクラス

dmaClass_ReferentialContainmentRelationshipクラス

CdbrSessionクラス

dmaClass_DMAクラス

dmaClass_DocSpaceクラス

CdbrVariableArrayクラス
－

CdbrVersionableクラス

dmaClass_ConfigurationHistoryクラス

dmaClass_Versionableクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

CdbrVersionableDocumentクラス
シングルファイル文書の場合

dmaClass_ConfigurationHistoryクラス

dmaClass_ContentTransferクラス

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

マルチファイル文書の場合

dmaClass_ConfigurationHistoryクラス

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

edmClass_ContentTransfersクラス

リファレンスファイル文書の場合

dmaClass_ConfigurationHistoryクラス

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

edmClass_ContentReferenceクラス

File Link文書の場合

dmaClass_ConfigurationHistoryクラス

dmaClass_DocVersionクラス

dmaClass_Renditionクラス

dmaClass_VersionDescriptionクラス

dmaClass_VersionSeriesクラス

edmClass_ContentFileLinkクラス

CdbrVersionTraceableContainerクラス

dmaClass_DirectContainmentRelationshipクラス

dmaClass_ReferentialContainmentRelationshipクラス

edmClass_ContainerVersionクラス

edmClass_VersionTraceableContainmentRelationshipクラス

CdbrXmlTranslatorFactoryクラス
－

CdbrXmlTranslatorクラス
－

（凡例）

－：対応するDMAのクラスがない。

2.5.3　クラスの継承関係

クラスライブラリで提供しているクラスは，その直上にあるクラスが持つプロパティとメソッドを継承します。

継承の基になるクラスを，あるクラスのスーパークラスといいます。また，あるクラスの直下にあるクラスを，そのクラスのサブクラスといいます。次の図に，クラスの関係を示します。

図2-3　クラスの関係

図2-3でのクラスの関係を説明します。

クラスQはクラスRの直接のスーパークラスである。

クラスPはクラスQの直接のスーパークラスである。したがって，クラスPおよびクラスQは，クラスRのスーパークラスである。

クラスRは，クラスQの固有のサブクラスである。また，直接のサブクラスである。

クラスライブラリで提供しているクラスの継承関係を，次の図に示します。

図2-4　クラスの継承関係

2.5.4　抽象クラス

ここでは，クラスライブラリのクラスのうち，抽象クラスについて説明します。抽象クラスとは，そのクラス自身単独のオブジェクトを生成しないクラスです。

クラスライブラリとして提供する抽象クラスは，次の4種類です。

CdbrCoreクラス

CdbrDMAクラス

CdbrContainableクラス

CdbrVersionableクラス

クラスライブラリの各クラスは，これらの抽象クラスをスーパークラスに持つことによって，その抽象クラスの機能（プロパティとメソッド）を継承して使用できます。

＜この項の構成＞

(1)　CdbrCoreクラス

(2)　CdbrDMAクラス

(3)　CdbrContainableクラス

(4)　CdbrVersionableクラス

(1)　CdbrCoreクラス

エラー管理機能を提供するクラスです。

クラスライブラリのクラスのうち，CdbrVariableArrayクラスおよびCdbrCompoundクラス以外のすべてのクラスのスーパークラスです。

(2)　CdbrDMAクラス

構成要素としてDMAオブジェクトを作成するクラスに共通のスーパークラスです。

DMAクラスのdmaClass_DMAクラスに対応するクラスです。

CdbrDMAクラスでは，このクラスを継承するクラスに共通なメソッドとして，主に次のようなメソッドを提供します。

プロパティを参照，設定するメソッド

OIIDを取得するメソッド

指定したOIIDを基に既存のオブジェクトと接続するメソッド

OIIDとは，文書空間でのオブジェクトの存在や格納位置を表す識別子です。OIIDの形式については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

(3)　CdbrContainableクラス

コンテナで管理される要素（文書やコンテナ）を生成するクラスのスーパークラスです。このクラスは，次のクラスのスーパークラスです。

CdbrConfiguratedReferentialContainerクラス

CdbrDocumentクラス

CdbrReferentialContainerクラス

CdbrVersionableクラス

CdbrVersionableDocumentクラス

CdbrVersionTraceableContainerクラス

コンテナによってまとめて管理できるのは，これらのCdbrContainableクラスを継承したクラスから作成されたオブジェクトです。

(4)　CdbrVersionableクラス

CdbrVersionableDocumentクラスおよびCdbrConfiguratedReferentialContainerクラスのスーパークラスです。文書やコンテナをバージョン管理するための機能を提供します。このクラスを継承したクラスを基に作成したオブジェクトは，バージョン管理の対象になります。

2.6　プロパティの種類と操作

この節では，プロパティの種類とその操作方法について説明します。

＜この節の構成＞

2.6.1　プロパティ識別子

2.6.2　プロパティの種類

2.6.3　プロパティの型

2.6.4　プロパティの基本単位

2.6.5　プロパティの用途

2.6.6　プロパティの操作

2.6.7　VariableArray型プロパティの操作

2.6.1　プロパティ識別子

それぞれのプロパティは，プロパティ識別子として，Id型の値（GUID値）を持ちます。この識別子は，プロパティを参照および設定するときに，プロパティを識別するために使用します。

また，DMAが規定したプロパティまたはクラスライブラリ固有のプロパティのプロパティ識別子を指定する場合，GUID値のほか，クラスライブラリのヘッダファイルで定義している定数をプロパティ識別子として指定することもできます。例えば，「dmaProp_OIID」や「dbrProp_ACL」などがこれに当たります。

ユーザが定義したプロパティのプロパティ識別子を任意の定数（usrProp_XXXなど）で指定する場合は，GUID値の実体と定数の対応を定義したヘッダファイルを作成する必要があります。ヘッダファイルの作成方法については，「5.2.7　ユーザ定義のクラス識別子・プロパティ識別子の定義」を参照してください。

なお，このマニュアルでは，GUID値の実体とdmaProp_OIIDのような定数をあわせてプロパティ識別子と呼びます。

2.6.2　プロパティの種類

クラスライブラリで使用できるプロパティには，次の3種類があります。

DMAが規定したプロパティ（DMAプロパティ）
「dmaProp_」または「edmProp_」で始まる識別子を持つプロパティです。

クラスライブラリで定義したプロパティ（クラスライブラリ固有のプロパティ）
「dbrProp_」で始まる識別子を持つプロパティです。

ユーザが定義したプロパティ
ユーザが定義したプロパティです。

なお，プロパティのうち，データベースに値が格納されているプロパティを，永続プロパティといいます。

＜この項の構成＞

(1)　DMAが規定したプロパティ（DMAプロパティ）

(2)　クラスライブラリで定義したプロパティ（クラスライブラリ固有のプロパティ）

(3)　ユーザが定義したプロパティ

(1)　DMAが規定したプロパティ（DMAプロパティ）

DMAでは，DMAクラスごとにプロパティを規定しています。また，DocumentBrokerで拡張したクラスには，DocumentBroker独自のプロパティも定義されています。これらのプロパティは，クラスライブラリのクラスのプロパティとしても参照，設定できます。クラスライブラリのメソッドで参照，設定できるプロパティは，それぞれのクラスライブラリのクラスに対応するDMAのクラスが定義しているプロパティです。これらのプロパティは，CreateObjectメソッドで指定したクラスのDMAオブジェクト上に定義されます。

クラスライブラリの各クラスのメソッドによって参照，設定できるプロパティの定義元となるDMAクラスを次の表に示します。

表2-4　各クラスが参照，設定できるプロパティの定義元

クラスライブラリのクラス名 | バージョン指定 | 定義元のDMAクラス
CdbrConfiguratedReferentialContainerクラス | なし | dmaClass_ConfigurationHistoryクラス
あり | edmClass_ContainerVersionクラス
CdbrDocumentクラス | － | dmaClass_DocVersionクラス
CdbrIndependentPersistenceクラス | － | edmClass_IndependentPersistenceクラス
CdbrPublicACLクラス | － | edmClass_PublicACLクラス
CdbrReferentialContainerクラス | － | dmaClass_Containerクラス
CdbrVersionableDocumentクラス | なし | dmaClass_ConfigurationHistoryクラス
あり | dmaClass_DocVersionクラス
CdbrVersionTraceableContainerクラス | － | edmClass_ContainerVersionクラス

（凡例）

－：該当しない。

なし：複数のバージョンを持つ文書またはコンテナ全体を指定した場合

あり：複数のバージョンを持つ文書またはコンテナの特定のバージョンを指定した場合

それぞれのDMAクラスに定義されたプロパティについての詳細は，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

(2)　クラスライブラリで定義したプロパティ（クラスライブラリ固有のプロパティ）

クラスライブラリ固有のプロパティとは，表2-4に示した定義元のDMAクラスには存在しない情報を，クラスライブラリのプロパティとして扱えるように定義したものです。

例えば，あるコンテナに関連づけられている文書やコンテナの数や，文書が保持しているバージョンの数などは，DMAオブジェクト上には存在しない情報です。このような情報に対して，クラスライブラリでは「dbrProp_」から始まるプロパティ識別子を付けて，プロパティとして扱えるようにしています。「コンテナが関連づけている文書の数を知りたい」場合などに，このプロパティの値を取得するメソッドをコールすれば，必要な値を得ることができます。実際にはメソッドをコールした段階で，クラスライブラリの内部で必要な処理や演算が実行されて，値が作成され，プロパティの値としてユーザに返却されます。

また，DMAで規定されているプロパティのうち，クラスライブラリのオブジェクトのプロパティとして使用できるのは表2-4に示した定義元のDMAクラスのプロパティだけです。これに対して，定義元以外のクラスに存在するプロパティの値をクラスライブラリのプロパティとして扱うためにも，クラスライブラリ固有のプロパティが使用されます。例えば，文書を表すCdbrDocumentオブジェクトの場合，文書のコンテントを表すファイル名についての情報は，プロパティの定義元であるDocVersionオブジェクト上には存在しない情報ですが，実際はCdbrDocumentオブジェクト内のほかのDMAオブジェクト上にプロパティとして存在しています。このプロパティを取得するために，クラスライブラリではプロパティ識別子を割り付けています。このプロパティの値を取得するメソッドをコールすれば，必要な値を得ることができます。実際にはメソッドをコールした段階で，クラスライブラリの内部で該当するプロパティが参照され，CdbrDocumentオブジェクトのプロパティとしてユーザに返却されます。

注意

クラスライブラリ固有のプロパティは，検索条件には指定できません。

クラスライブラリ固有のプロパティについて，表2-5に示します。また，アクセス制御機能を使用する場合に，表2-5に示すプロパティに加えて追加されるプロパティを，表2-6に示します。アクセス制御機能については，「3.15　アクセス制御」を参照してください。

表2-5　クラスライブラリ固有のプロパティ

プロパティ識別子
導入されるクラス
説明

dbrProp_ChildrenCount

CdbrReferentialContainerクラス

直接型のコンテインメントで包含しているオブジェクトの個数

dbrProp_ContaineesCount

CdbrReferentialContainerクラス

参照型のコンテインメントで包含しているオブジェクトの個数

dbrProp_ContaineesCountVT

CdbrConfiguratedReferentialContainerクラス

構成管理の対象となるオブジェクトの個数

dbrProp_ContainersCount

CdbrContainableクラス

参照型のコンテインメントでContainableオブジェクトを包含しているコンテナの個数

dbrProp_ContainersCountVT

CdbrVersionableクラス

CdbrDocumentクラス

CdbrVersionTraceableContainerクラス

構成管理型のコンテインメントでオブジェクトを包含しているコンテナの個数

dbrProp_ContentLocation

CdbrDocumentクラス

CdbrVersionableDocumentクラス

管理しているコンテントロケーション

dbrProp_ContentType

CdbrDocumentクラス

管理しているコンテントの種類

dbrProp_CurrentVersion

CdbrVersionableクラス

カレントバージョンの識別子

dbrProp_HeadRelationsCount

CdbrVersionableDocumentクラス

CdbrDocumentクラス

関連づけているリレーション先文書の個数

dbrProp_ParentCount

CdbrContainableクラス

直接型のコンテインメントでオブジェクトを包含しているコンテナの個数

dbrProp_ReferenceType

CdbrDocumentクラス

CdbrVersionableDocumentクラス

管理しているコンテントのリファレンス種別

dbrProp_RenditionStatus

CdbrDocumentクラス

レンディションの状態

dbrProp_RenditionType

CdbrVersionableDocumentクラス

CdbrDocumentクラス

RenditionTypeを表す文字列

dbrProp_RetrievalName

CdbrVersionableDocumentクラス

CdbrDocumentクラス

登録されているファイルのファイル名

dbrProp_TailRelationsCount

CdbrVersionableDocumentクラス

CdbrDocumentクラス

関連づけられているリレーション元文書の個数

dbrProp_VersionsCount

CdbrVersionableクラス

オブジェクトが管理しているバージョンの個数

表2-6　アクセス制御機能を使用する場合に定義されるクラスライブラリ固有のプロパティ

プロパティ識別子
導入されるクラス
説明

dbrProp_ACL

CdbrContainableクラス

CdbrIndependentPersistenceクラス

CdbrPublicACLクラス

ACL（アクセス制御リスト）を表すACE（アクセス制御エレメント）のリスト

dbrProp_BindObjectCount

CdbrPublicACLクラス

このプロパティを持つパブリックACLをバインドしているクラスライブラリのオブジェクトの数

dbrProp_EveryonePermission

CdbrContainableクラス

CdbrIndependentPersistenceクラス

すべてのユーザに与えられるパーミッション

dbrProp_OwnerId

CdbrDMAクラス

オブジェクトの所有者の識別子

dbrProp_OwnerPermission

CdbrContainableクラス

CdbrIndependentPersistenceクラス

オブジェクトの所有者に与えられるパーミッション

dbrProp_PrimaryGroupId

CdbrContainableクラス

CdbrIndependentPersistenceクラス

プライマリグループのグループ識別子

dbrProp_PrimaryGroupPermission

CdbrContainableクラス

CdbrIndependentPersistenceクラス

プライマリグループに与えられるパーミッション

dbrProp_PublicACLCount

CdbrContainableクラス

CdbrIndependentPersistenceクラス

バインドしているパブリックACLの数

dbrProp_PublicACLIds

CdbrContainableクラス

CdbrIndependentPersistenceクラス

バインドしているパブリックACLのOIIDのリスト

dbrProp_SACL

CdbrContainableクラス

CdbrIndependentPersistenceクラス

CdbrPublicACLクラス

セキュリティACLを表すACE（アクセス制御エレメント）のリスト

dbrProp_UserPermission

CdbrDMAクラス

オブジェクトに設定されるログインユーザまたはログインユーザが所属するグループに与えられているパーミッションの論理和

それぞれのプロパティの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」の，それぞれのプロパティが導入されるクラスを参照してください。

また，アクセス制御機能を使用する場合に定義されるプロパティについては，指定方法によって，検索の対象にできるプロパティがあります。アクセス制御機能を使用する場合に定義されるプロパティについては，「3.15　アクセス制御」を参照してください。

(3)　ユーザが定義したプロパティ

文書の作成者やタイトルなど，ユーザは必要に応じてDMAオブジェクトにプロパティを定義できます。このプロパティは，クラスライブラリのクラスを構成するDMAクラスのうち，クラスライブラリのクラスのプロパティの定義元になるDMAクラスに追加します。

例えば，CdbrDocumentオブジェクトを扱う場合に使用するユーザ定義プロパティを追加するときは，dmaClass_DocVersionクラスにプロパティを追加定義します。

追加したプロパティは検索の条件に指定することができますので，必要に応じて定義してください。プロパティの追加方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

2.6.3　プロパティの型

クラスライブラリで使用するプロパティのデータ型について次の表に示します。

表2-7　クラスライブラリで使用するプロパティのデータ型

プロパティのデータ型
意味
記号定数
備考

Boolean
真偽
DMA_DATATYPE_BOOLEAN
次のどれかの値を取る

DMA_TRUE

DMA_FALSE

DMA_UNKNOWN

ID
GUID
DMA_DATATYPE_ID
GUID構造体

Integer32
整数
DMA_DATATYPE_INTEGER32
－

Object
オブジェクト
DMA_DATATYPE_OBJECT
可変長配列オブジェクトが返される。基本単位がVariableArray型のプロパティを設定できる

String
文字列
DMA_DATATYPE_STRING
最大文字列長は，DocumentBrokerサーバのメタ情報で定義する

このうち，ユーザが定義できるのは，Boolean型，Integer32型，Object型およびString型のプロパティです。ただし，Object型の場合，基本単位にはVariableArray型だけが定義できます。

2.6.4　プロパティの基本単位

プロパティは，保持できる要素の個数や持ち方によって分類できます。これを，プロパティの基本単位といいます。

要素の個数および持ち方によるプロパティの分類について次の表に示します。

表2-8　要素の個数および持ち方によるプロパティの分類

プロパティの基本単位 | 記号定数 | 値の数
Scalar型 | DMA_CARDINALITY_SINGLE | 一つの値を取る
VariableArray型 | EDM_DMA_CARDINALITY_VARRAY | 複数の値を取る

Scalar型およびVariableArray型のどちらのプロパティもユーザ定義プロパティとして定義できます。

それぞれの基本単位のプロパティについて説明します。

＜この項の構成＞

(1)　Scalar型

(2)　VariableArray型

(1)　Scalar型

データ型に従った値を一つだけ持つプロパティです。

(2)　VariableArray型

VariableArray型は，すべてのデータ型の値の可変長な一次元配列（可変長配列）です。異なる種類のデータ型は混在できません。またDocumentBrokerでは，Object型の値だけを配列要素にできます。

なお，基本単位がVariableArray型のプロパティには，一次元配列の要素のデータ型であるObject型に従ったVariableArrayOfObjectオブジェクト（DMAオブジェクト）へのリファレンスが格納されます。実際の値は参照先のVariableArrayOfObjectオブジェクトの一次元配列が保持します。一次元配列内の要素にはランダムにアクセスできます。また，要素の挿入，置換および削除ができます。

なお，このマニュアルでは，基本単位がVariableArray型のObject型プロパティを，VariableArray型プロパティと呼びます。

VariableArray型プロパティは，DMAクラスの次のクラスまたはそのサブクラスに定義できます。

dmaClass_ConfigurationHistoryクラス

dmaClass_Containerクラス

dmaClass_DocVersionクラス

edmClass_ContainerVersionクラス

edmClass_IndependentPersistenceクラス

したがって，このプロパティを設定できるクラスライブラリのオブジェクトは，これらのDMAクラスをプロパティの定義元とする，次のオブジェクトになります。

CdbrConfiguratedReferentialContainerオブジェクト

CdbrDocumentオブジェクト

CdbrReferentialContainerオブジェクト

CdbrIndependentPersistenceオブジェクト

CdbrVersionableDocumentオブジェクト

CdbrVersionTraceableContainerオブジェクト

VariableArray型の特徴についてまとめると，次の表のようになります。

表2-9　VariableArray型の特徴

項目
特徴

アクセス方法
ランダム

要素の順序
不定

値の更新
可能

要素の追加
末尾にだけ可能

要素の削除
末尾だけ可能

プロパティの定義での指定
可能
ただし，追加できるクラスには制限がある

要素のデータ型
Object型
ただし，edmClass_Structクラスのサブクラスのオブジェクトだけ可能

クラスライブラリでは，VariableArray型プロパティの値を表す可変長配列は，CdbrVariableArrayオブジェクトで表します。また，この可変長配列である複合データは，CdbrCompoundオブジェクトとして表します。

したがって，クラスライブラリでは，CdbrVariableArrayクラスおよびCdbrCompoundクラスのメソッドを使用することによって，VariableArray型プロパティの値を，参照，設定できます。

2.6.5　プロパティの用途

プロパティには次のような用途があります。ユーザがクラスにプロパティを追加する場合は，どのように使用するかよく検討してから，必要なプロパティを定義してクラスを設計してください。

検索

ユーザ管理

データの格納

＜この項の構成＞

(1)　検索

(2)　ユーザ管理

(3)　データの格納

(1)　検索

オブジェクトを操作するとき，目的のオブジェクトは検索によって取得できます。プロパティは，検索を実行するときの条件として指定できます。

このため，ユーザがクラスを作成するときには，どのような検索をしたいかを考慮して，検索のキーになるようなプロパティを追加，設定してください。

「2.6.2　プロパティの種類」で説明した各プロパティの検索での特徴を，次の表に示します。

表2-10　各プロパティの検索での特徴

指定する個所 | DMAプロパティ | クラスライブラリ固有のプロパティ | ユーザ定義プロパティ
検索条件 | ○※¹ | × | ○※¹
検索結果 | ○※² | × | ○※²
検索結果をソートする基準（キー） | ○※³ | × | ○※³

（凡例）

○：指定できる。

×：指定できない。

注※1

定義ファイルのdmaProp_IsSearchableプロパティの値が「1」の場合

注※2

定義ファイルのdmaProp_IsSelectableプロパティの値が「1」の場合

注※3

定義ファイルのdmaProp_IsOrderableプロパティの値が「1」の場合

プロパティの特徴を定義した定義ファイルについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

なお，文書に対する全文検索を実行する場合には，検索する文書に特定のプロパティが定義されている必要があります。このプロパティは，文書の基になるクラスにユーザが追加して定義してください。全文検索を実行する場合に追加する必要があるプロパティと追加する方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。また，検索についての詳細は，「4.　オブジェクトの検索」を参照してください。

(2)　ユーザ管理

ユーザがオブジェクトの管理情報として保持したい情報を，プロパティとしてオブジェクトごとに設定できます。

(3)　データの格納

可変長配列の値を持つVariableArray型プロパティは，データを格納するために使用できます。例えば，文書を表すオブジェクトに対して，「執筆者」プロパティをVariableArray型プロパティとして設定すると，執筆者が複数いる場合も，それぞれの管理者の情報を可変長配列の要素として格納できます。

VariableArray型プロパティの管理例を，次の図に示します。

図2-5　VariableArray型プロパティの管理例

クラスライブラリでは，VariableArray型プロパティをCdbrVariableArrayオブジェクト，VariableArray型プロパティに設定される個々の要素をCdbrCompoundオブジェクトとして作成，管理します。さらに，個々の要素には，CdbrCompoundオブジェクトのプロパティとして，複数のプロパティが定義できます。

図の例では，「執筆者」プロパティをVariableArray型プロパティとして設定しています。この場合，「執筆者」プロパティはCdbrVariableArrayオブジェクトとして作成します。「執筆者」プロパティに設定する個々の要素のデータ（個々の執筆者に関するデータ）は，CdbrCompoundオブジェクトとして作成します。

そして，CdbrCompoundオブジェクトのプロパティとして，個人情報である「所属」，「名前」および「社員番号」を管理します。

CdbrVariableArrayクラスおよびCdbrCompoundクラスについての詳細は，「2.6.7　VariableArray型プロパティの操作」を参照してください。

また，ここで設定したVariableArray型プロパティの要素のプロパティの値も，検索条件として指定できます。例えば，図2-5の場合に，「執筆者の名前に『田中花子』が存在する文書を検索して，その文書の『タイトル』を取得する」といった検索条件が指定できます。

2.6.6　プロパティの操作

ここでは，プロパティの操作について説明します。

＜この項の構成＞

(1)　プロパティの操作で使用する構造体

(2)　プロパティの初期値の設定

(3)　プロパティの更新

(4)　プロパティの取得

(1)　プロパティの操作で使用する構造体

プロパティの操作には，プロパティ構造体（SDBR_PROP構造体）およびプロパティリスト構造体（SDBR_PROPLIST構造体）を使用します。

プロパティ構造体のメンバは，プロパティ識別子，プロパティのデータ型，基本単位，基本単位ごとに決まった要素数，および設定するプロパティの値です。複数のプロパティの値を設定する場合は，プロパティ構造体を配列で作成します。プロパティリスト構造体には，プロパティ構造体の数を指定します。

プロパティに値を設定する場合は，まずプロパティ構造体およびプロパティリスト構造体に値を設定して，その構造体を引数に指定してメソッドをコールします。また，プロパティの値を取得する場合は，これらの構造体を出力の引数に指定してメソッドをコールします。

次に，プロパティの値を設定する場合の，プロパティ構造体およびプロパティリスト構造体の指定例を示します。ここでは，ユーザ定義プロパティusrProp_Numberに25を設定するためのプロパティ構造体およびプロパティリスト構造体を作成します。

プロパティ構造体およびプロパティリスト構造体の指定例

SDBR_PROP Props;
SDBR_PROPLIST Proplist;
DmaInteger32 lNum;

lNum=25L;
Props.PropId=usrProp_Number;
Props.lType=DMA_DATATYPE_INTEGER32;
Props.lCardinality=DMA_CARDINALITY_SINGLE;
Props.lCount=1;
Props.uniValue.plInteger32=&lNum;
Proplist.lCount=1;
Proplist.pItem=&Props;

(2)　プロパティの初期値の設定

プロパティの初期値は，CreateObjectメソッドによってオブジェクトを作成するときに設定されます。このときに設定されるプロパティには，ユーザが作成時に明示的に値を指定するプロパティと，システムによって値が設定されるプロパティがあります。

ユーザが初期値を設定する場合，CreateObjectメソッドの引数に指定するSDBR_DMAINFO構造体のメンバとして，プロパティリスト構造体のアドレスを指定します。

(3)　プロパティの更新

ここでは，プロパティの更新について説明します。

(a)　PutPropertyValuesメソッドによる更新

プロパティの値は，CdbrDMAクラスで定義されているPutPropertyValuesメソッドをコールして更新します。更新するプロパティの情報を設定したプロパティ構造体とプロパティリスト構造体を，メソッドの引数に指定します。

プロパティを更新するコールシーケンスの例を次に示します。

プロパティを更新するコールシーケンス

pSession->Begin();
CdbrDocument ObjDoc;
SDBR_PROP Prop;
SDBR_PROPLIST Proplist;
//Prop，Proplistに値を設定しておく
//…
//ObjDocにOIIDを設定する
ObjDoc.SetOIID(pSession,pOIID);
//プロパティを更新する
ObjDoc.PutPropertyValues(&Proplist);
ObjDoc.ReleaseObject();
pSession->Commit();

なお，次に示すクラスでも，引数が異なるPutPropertyValuesメソッドが提供されています。

CdbrVersionableクラス
特定のバージョンのプロパティを更新するために，引数にバージョン識別子を指定する形式があります。

(b)　PutPropertyValuesメソッド以外のメソッドによるプロパティの更新

次のプロパティを更新する場合には，PutPropertyValuesメソッド以外のメソッドを使用します。

レンディションのプロパティ（サブレンディションの場合）
CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのPutRenditionPropertyValuesメソッドを使用します。

リレーションのプロパティ
CdbrDocumentクラスおよびCdbrVersionableDocumentクラスのPutRelationPropertyValuesメソッドを使用します。

コンテインメントのプロパティ
CdbrReferentialContainerクラス，CdbrVersionTraceableContainerクラスまたはCdbrConfiguratedReferentialContainerクラスのPutLinkPropertyValuesメソッドを使用します。

レンディション，リレーションおよびコンテインメントについては，「3.　クラスライブラリで実現する文書管理」を参照してください。また，それぞれのメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

(4)　プロパティの取得

ここではプロパティの取得について説明します。

(a)　GetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッドによるプロパティの取得

オブジェクトのプロパティに設定されている値を取得するには，CdbrDMAクラスで定義されているGetPropertyValuesAndLockメソッドまたはGetPropertyValuesメソッドをコールします。GetPropertyValuesAndLockメソッドをコールすると，プロパティの取得と同時に処理に必要なロックを設定できます。

これらのメソッドの引数には，プロパティ定義情報構造体（SDBR_PROPDEF構造体）を指定します。プロパティ定義情報構造体には，値を取得するプロパティのプロパティ識別子を指定します。取得した値は，プロパティ構造体およびプロパティリスト構造体に出力されます。

プロパティを取得するコールシーケンスの例を次に示します。この例では，usrProp_NumberプロパティとusrProp_Authorプロパティの値を取得します。

プロパティを取得するコールシーケンス

CdbrDocument ObjDoc;
pSession->Begin();
SDBR_PROPDEF   PropDef[2];
SDBR_PROPLIST* pPropList = NULL;
SDBR_PROP*     pProp = NULL;
//PropDef構造体にプロパティ識別子を設定する
PropDef[0].PropId = usrProp_Number;
PropDef[1].PropId = usrProp_Author;
//ObjDocにOIIDを設定する
ObjDoc.SetOIID(pSession,pOIID);
//プロパティを取得する
ObjDoc.GetPropertyValuesAndLock(2, PropDef, &pPropList,
                               DMA_LOCK_READ);
ObjDoc.ReleaseObject();
pSession->Commit();

なお，次に示すクラスでも，引数が異なるGetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッドが提供されています。

CdbrVersionableクラス
特定のバージョンのプロパティを取得するために，引数にバージョン識別子を指定する形式があります。

(b)　GetPropertyValuesメソッド以外のメソッドによるプロパティの取得

GetPropertyValuesAndLockメソッドおよびGetPropertyValuesメソッド以外に，次のメソッドでプロパティを取得することもできます。

一覧を取得するメソッド
一覧を取得するメソッドをコールするとき，一覧とともに一覧として取得したオブジェクトに設定されたプロパティも取得できます。例えば，コンテナと関連づけられている文書の一覧を取得する場合に，「コンテナと関連づけられている文書の一覧を取得すると同時に，それらの文書の作成者を表すプロパティも取得する」といった指定ができます。
一覧を取得するメソッドとは，それぞれのクラスで定義されている，Get～ListメソッドおよびGet～ListAndLockメソッドのことです。このうち，同時にプロパティが取得できるのは，引数としてプロパティ定義情報構造体（SDBR_PROPDEF構造体）が指定できるものです。プロパティ定義情報構造体に取得したいプロパティのプロパティ識別子を指定します。
詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

また，次のプロパティを取得する場合は，GetPropertyValuesメソッド以外のメソッドを使用します。

レンディションのプロパティ（サブレンディションの場合）
CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのGetRenditionListAndLockメソッドまたはGetRenditionListメソッドを使用します。

リレーションのプロパティ
CdbrDocumentクラスおよびCdbrVersionableDocumentクラスのGetRelationListAndLockメソッドまたはGetRelationListメソッドを使用します。

コンテインメントのプロパティ
CdbrReferentialContainerクラス，CdbrVersionTraceableContainerクラスまたはCdbrConfiguratedReferentialContainerクラスのGetLinkPropertyValuesAndLockメソッドまたはGetLinkPropertyValuesメソッドを使用します。

レンディション，リレーションおよびコンテインメントについては，「3.　クラスライブラリで実現する文書管理」を参照してください。また，それぞれのメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

2.6.7　VariableArray型プロパティの操作

VariableArray型プロパティは，データ型がObject型で，基本単位がVariableArray型のプロパティです。VariableArray型プロパティの値は，複数の要素から構成される可変長配列です。

ここでは，VariableArray型プロパティの値である可変長配列の操作方法およびVariableArray型プロパティの操作方法について説明します。

＜この項の構成＞

(1)　VariableArray型プロパティを操作するクラス

(2)　VariableArray型プロパティの操作手順

(3)　VariableArray型プロパティを操作するコールシーケンス

(1)　VariableArray型プロパティを操作するクラス

ここでは，VariableArray型プロパティを操作するクラスであるCdbrVariableArrayクラスとCdbrCompoundクラスについて説明します。

(a)　CdbrVariableArrayクラス

CdbrVariableArrayクラスは，可変長配列全体のデータを格納するために使用するクラスです。

配列の各要素は，0～（要素数-1）のインデクスで指定します。

要素数は，次のどちらかの方法で変更します。

Resizeメソッドで要素数を変更する
このメソッドでは，配列の末尾の要素が追加，削除されるので，要素の数を増減しても，各要素のインデクスは変わりません。

Addメソッド，Deleteメソッドで要素を追加，削除する
Addメソッドでは，配列の末尾に要素を追加されるので，各要素のインデクスは変わりません。
Deleteメソッドで配列中の要素を削除した場合は，削除した位置以降の要素が前に詰まるので，各要素のインデクスが変わります。

また，VariableArray型プロパティを参照，設定する場合，CdbrCompoundオブジェクトだけが要素として使用できます。

CdbrVariableArrayクラスで使用するメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

なお，このクラスに対応するDMAのクラスはありません。ただし，VariableArray型プロパティは，データベースではDMAオブジェクトのedmClass_VariableArrayクラスのオブジェクトとして定義されています。したがって，CdbrVariableArrayオブジェクトに設定した情報は，PutPropertyValuesメソッドをコールした時に，DMAオブジェクトのVariableArray型プロパティを表すedmClass_VariableArrayOfObjectクラスのオブジェクトの情報としてコピーされます。

(b)　CdbrCompoundクラス

複合データを表すクラスです。複合データとは，複数の異なる型によって表されるデータです。VariableArray型プロパティの要素の値を格納するために使用します。

各要素は，DmaId型の識別子で指定します。この識別子は，CdbrCompound::SetValueメソッドをコールした時に設定したものです。可変長配列の操作では，この識別子はDMAオブジェクトのedmClass_Structクラスのサブクラスに定義したプロパティのプロパティ識別子になります。

CdbrCompoundクラスで使用するメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

なお，このクラスには，対応するDMAのクラスはありません。ただし，VariableArray型プロパティの要素は，データベースではDMAオブジェクトのedmClass_Structクラスのオブジェクトとして定義されています。したがって，CdbrCompoundオブジェクトに設定した情報は，PutPropertyValuesメソッドをコールした時に，DMAオブジェクトのVariableArray型プロパティの要素を表すedmClass_Structオブジェクトの情報としてコピーされます。

(2)　VariableArray型プロパティの操作手順

CdbrVariableArrayクラスとCdbrCompoundクラスを使用したVariableArray型プロパティの操作手順を説明します。

ここでは，文書またはコンテナに定義された「Member」というVariableArray型プロパティを例にして説明します。このプロパティは，文書やコンテナの管理者情報を格納するために使用します。管理者情報としては，「Name」と「Age」があります。

Memberプロパティを次の図に示します。

図2-6　VariableArray型プロパティの例

Memberプロパティは，CdbrVariableArrayクラスのオブジェクトとして作成します。CdbrVariableArrayオブジェクトは，管理者の人数分のCdbrCompoundオブジェクトを要素として持っています。一人の管理者の情報は，一つのCdbrCompoundオブジェクトに対応します。管理者のそれぞれの情報（名前：Nameおよび年齢：Age）は，CdbrCompoundオブジェクトのプロパティに対応します。

CdbrCompoundオブジェクトのプロパティの操作は，CdbrCompoundクラスのメソッドによって実行します。プロパティを設定したCdbrCompoundオブジェクトは，CdbrVariableArrayクラスのメソッドによってCdbrVariableArrayオブジェクトの要素として設定することで，VariableArray型プロパティの要素の一つになります。

CdbrVariableArrayオブジェクトとして作成された可変長配列は，Object型の値として扱います。プロパティの値として設定する場合は，プロパティ構造体（SDBR_PROP構造体）にObject型の値として設定します。VariableArray型プロパティの値を設定する場合には，このプロパティ構造体を引数としてPutPropertyValuesメソッドをコールします。

(a)　VariableArray型プロパティ設定の手順

VariableArray型プロパティを設定する手順を示します。

複合データを表すCdbrCompoundオブジェクトを作成し，値を設定します。
複合データの値は，CdbrCompound::SetValueメソッドをコールして設定します。

可変長配列を表すCdbrVariableArrayオブジェクトを作成し，可変長配列の要素数を設定します。
可変長配列の要素数は，CdbrVariableArray::Resizeメソッドをコールして設定します。

CdbrCompoundオブジェクトをCdbrVariableArrayオブジェクトの要素として設定します。
CdbrVariableArray::SetValueメソッドをコールします。

CdbrVariableArrayオブジェクトのアドレスをポインタ（CdbrVariableArray*型の変数）に格納します。

4.のポインタのアドレスをSDBR_PROP構造体（プロパティ構造体）のuniValue.ppObjectに設定します。
ここで指定するアドレスは，CdbrVariableArrayオブジェクトのポインタではありませんので，注意してください。
この操作によって，可変長配列のアドレスがuniValue.ppObject[0]に設定されます。

５.のSDBR_PROP構造体を，SDBR_PROPLIST構造体（プロパティリスト構造体）に格納しPutPropertyValuesメソッドで引数に指定して，メソッドをコールします。

(b)　VariableArray型プロパティ取得の手順

VariableArray型プロパティを取得する手順を示します。

GetPropertyValuesメソッドなどの，プロパティを取得するメソッドをコールします。
取得したプロパティ構造体の値のデータ型がObject型（lType = DMA_DATATYPE_OBJECT）であり，かつ基本単位がVariableArray型（lCardinality = EDM_DMA_CARDINALITY_VARRAY）である場合，メンバuniValue.ppObject[0]にCdbrVariableArrayクラスのオブジェクトへのポインタが格納されます。

CdbrVariableArray::GetValueメソッドの引数に，可変長配列の要素のインデクスを指定して，メソッドをコールします。
VariableArray型プロパティから取得したCdbrVariableArrayオブジェクトの要素のデータ型は，複合データ型（DBR_DATATYPE_COMPOUND）です。CdbrCompoundクラスの変数のアドレスを指定します。

複合データ型からの値を，CdbrCompound::GetValueメソッドにプロパティ識別子を指定して，取得します。

(3)　VariableArray型プロパティを操作するコールシーケンス

ここでは，VariableArray型プロパティを操作する場合のコールシーケンスを示します。

(a)　新しく可変長配列を作成してVariableArray型プロパティの値を設定する

可変長配列を作成してVariableArray型プロパティの値を設定するコールシーケンスの例を次に示します。ここでは，Memberプロパティの要素として，管理者「日立太郎」の情報を設定します。

可変長配列を作成してVariableArray型プロパティの値を設定するコールシーケンス

CdbrCompound  CompoValue;
CdbrVariableArray  VArray(DBR_DATATYPE_COMPOUND);
SDBR_PROP Prop;
SDBR_PROPLIST PropList;
Dmapv pObj;
//要素となる複合データの値を設定する
CompoValue.SetValue(&usrProp_Name, "日立太郎");
CompoValue.SetValue(&usrProp_Age, 25L);
//可変長配列の要素数を設定する
VArray.Resize(1);
//可変長配列の一つ目の要素にCompoValueの値を設定する
VArray.SetValue(0,CompoValue);
//可変長配列をプロパティ構造体に設定する
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &VArray;
Prop.uniValue.ppObject = &Obj;
Proplist.pItem = &Prop;
Proplist.lCount = 1;
//プロパティをオブジェクトに設定する
ObjDoc.PutPropertyValues(&PropList);
ObjDoc.ReleaseObject();
pSession->Commit();

(b)　可変長配列の要素を追加および削除する

可変長配列の要素は，CdbrVariableArray::Addメソッドによって追加できます。追加した要素は，可変長配列の末尾に追加されます。

また，可変長配列の要素の削除は，CdbrVariableArray::Deleteメソッドで，引数に削除する要素のインデクスを指定して実行します。削除された要素以降の要素は，前に詰まります。

可変長配列の要素数を追加および削除するコールシーケンスの例を次に示します。ここでは，Memberプロパティの要素として，二人分の管理者情報を追加します。その後，先頭の要素を削除します。

要素を追加および削除するコールシーケンス

CdbrVariableArray  VArray(DBR_DATATYPE_COMPOUND);
//要素を作成する
CdbrCompound CompoValue1,CompoValue2;
CompoValue1.SetValue(&usrProp_Name, "鈴木一郎");
CompoValue1.SetValue(&usrProp_Age, 28L);
CompoValue2.SetValue(&usrProp_Name, "山田二郎");
CompoValue2.SetValue(&usrProp_Age, 35L);
//可変長配列に要素を二つ追加する
VArray.Add(CompoValue1);
VArray.Add(CompoValue2);
//先頭の要素を削除する
VArray.Delete(0);
//可変長配列をプロパティ構造体に設定する
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &VArray;
Prop.uniValue.ppObject = &Obj;
Proplist.pItem = &Prop;
Proplist.lCount = 1;
//オブジェクトのプロパティを更新して
//要素の追加・削除をVariableArray型プロパティに
//反映させる
ObjDoc.PutPropertyValues(&Proplist);
ObjDoc.ReleaseObject();
pSession->Commit();

(c)　可変長配列のすべての要素を削除する

可変長配列のすべての要素を一括して削除するには，CdbrVariableArray::Resizeメソッドによって要素数に0を指定します。要素数0の可変長配列をVariableArray型プロパティに設定すると，VariableArray型プロパティのすべての要素が削除されます。

すべての要素を削除するコールシーケンスの例を次に示します。

すべての要素を削除するコールシーケンス

CdbrDocument Obj;
CdbrVariableArray VArray(DBR_DATATYPE_COMPOUND);
SDBR_PROP Prop;
SDBR_PROPLIST PropList;
Dmapv pObj;

pSession->Begin();
Obj.SetOIID(pSession,pOIID);
//要素の数を0にする
pVArray->Resize(0);
//要素を削除した可変長配列をプロパティ構造体に設定する
//...
//オブジェクトのプロパティを更新する
//VariableArray型のプロパティの要素はすべて削除される
Obj.PutPropertyValues(&PropList);
Obj.ReleaseObject();
pSession->Commit();

(d)　VariableArray型プロパティの取得

VariableArray型プロパティの値を取得する場合のコールシーケンスの例を次に示します。

VariableArray型プロパティの値を取得するコールシーケンス

CdbrDocument ObjDoc;
SDBR_PROPDEF    Propdef;
SDBR_PROPLIST*  pPropList;
SDBR_PROP*      pProp;
pDmaString_T    pName;
DmaInteger32    lAge;
CdbrVariableArray* pVArray;
CdbrCompound       CompoValue;
Propdef.PropId = usrProp_Member;
pSession->Begin();
ObjDoc.SetOIID(pSession, pOIID);
ObjDoc.GetPropertyValuesAndLock(1,&Propdef,&pPropList,
                               DMA_LOCK_WRITE);
//プロパティの型の記号定数がDMA_DATATYPE_OBJECTであり
//プロパティの基本単位がEDM_DMA_CARDINALITY_VARRAYである
//要素を判定し，型を取得する
//...
pVArray = (CdbrVariableArray*) pProp->uniValue.ppObject[0];
//要素の型がDMA_DATATYPE_COMPOUNDである
//複合データを判定する
//...
//値を取得する
pVArray->GetValue(0,&CompoValue);
//usrProp_Nameプロパティの値を取得する
CompoValue.GetValue(&usrProp_Name, &pName);
//usrProp_Ageプロパティの値を取得する
CompoValue.GetValue(&usrProp_Age, &lAge);
ObjDoc.ReleaseObject();
pSession->Commit();

2.7　オブジェクトとデータベースの関係

クラスライブラリで操作するオブジェクトとデータベースの関係について説明します。クラスライブラリのオブジェクトは複数のDMAオブジェクトから構成されています。ここでは，クラスライブラリのオブジェクトとDMAオブジェクト，および対応するデータベース構成について説明します。

クラスライブラリのオブジェクトは，メモリ上に存在するオブジェクトです。データベースはDMAのオブジェクトモデルと対応して構成されています。通常，クラスライブラリのオブジェクトに対してメソッドを発行すると，複数のDMAオブジェクトへのメソッドとして配置され，該当するデータベースの表が操作されます。

クラスライブラリのメソッドと，それによって操作されるデータベースの関係を表す例を次の図に示します。なお，この例で使用するCdbrDocumentオブジェクトの構成は，次のとおりです。

CdbrDocumentオブジェクト（クラスライブラリのオブジェクト）

次のDMAのオブジェクトを包含しています。

DocVersionオブジェクト（dmaClass_DocVersionクラスのオブジェクト）

Renditionオブジェクト（dmaClass_Renditionクラスのオブジェクト）

ContentTransferオブジェクト（dmaClass_ContentTransferクラスのオブジェクト）

図2-7　クラスライブラリのオブジェクト，DMAのオブジェクトおよびHiRDBの表の例

オブジェクトを生成するDMAのクラスは，それぞれがHiRDBの一つの表と対応します※。オブジェクトは各表の行（レコード）に相当します。各DMAクラスが持つプロパティのうち，永続プロパティは各表の列（カラム）に相当します。

DMAオブジェクト同士の関連は，各オブジェクトが属性として保持する参照先のOIIDによって表現されます。この場合，DocVersionオブジェクトは，ContentTransferオブジェクトのOIID（302：実際とは異なる値です）を保持することで，参照先のRenditionオブジェクトを特定します。

注※

ただし，一つのDocVersionオブジェクトに対応するRenditionオブジェクトが一つしか存在しない場合，Renditionオブジェクトは，dmaClass_DocVersionクラスの表に含まれます。このため，図2-7ではRenditionオブジェクトはDocVersionオブジェクトと同じ表に含まれています。

DMAオブジェクトとデータベースの関係の詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

3.　クラスライブラリで実現する文書管理

この章では，DocumentBrokerのクラスライブラリの機能で実現できる文書管理について説明します。

＜この章の構成＞

3.1　文書管理で使用するオブジェクトと管理方法

3.2　クラスライブラリで扱う文書

3.3　文書のバージョン管理

3.4　文書のマルチレンディション管理

3.5　文書のマルチファイル管理

3.6　文書のリファレンスファイル管理

3.7　File Link連携機能を使用した文書管理

3.8　文書間リレーションを設定した文書管理

3.9　コンテナを使用した文書管理

3.10　構成管理コンテナを使用した文書の構成管理

3.11　XML文書の管理

3.12　レンディションのコンテント種別変換機能を使用した文書管理

3.13　独立データの管理

3.14　排他制御

3.15　アクセス制御

3.1　文書管理で使用するオブジェクトと管理方法

DocumentBrokerによる文書管理で使用するオブジェクトと，そのオブジェクトを使用した管理方法について説明します。

DocumentBrokerの文書管理では，文書とコンテナというオブジェクトを使用します。文書およびコンテナを表すオブジェクトには複数の種類があり，それぞれに特長があります。DocumentBrokerによって文書管理を実現するためには，まず，それぞれのオブジェクトの特長を理解して，実現したい業務に合ったオブジェクトを使用する必要があります。

DocumentBrokerで扱う文書およびコンテナのオブジェクトの種類を，次の表に示します。

表3-1　DocumentBrokerで扱う文書およびコンテナ

文書とコンテナの種類
クラスライブラリのオブジェクト
オブジェクト名

文書
バージョン付き文書
バージョンなし文書
CdbrDocument

CdbrVersionableDocument

コンテナ
構成管理機能がないコンテナ
バージョンなしコンテナ
CdbrReferentialContainer

構成管理機能があるコンテナ（構成管理コンテナ）
バージョンなし構成管理コンテナ
CdbrVersionTraceableContainer

バージョン付き構成管理コンテナ
CdbrConfiguratedReferentialContainer

なお，それぞれのオブジェクトをまとめて，次のような総称で表記することがあります。

文書

「バージョンなし文書」と「バージョン付き文書」の総称として使用します。

コンテナ

「バージョンなしコンテナ」，「バージョンなし構成管理コンテナ」および「バージョン付き構成管理コンテナ」の総称として使用します。

構成管理コンテナ

「バージョンなし構成管理コンテナ」と「バージョン付き構成管理コンテナ」の総称として使用します。

また，バージョンなし文書およびバージョン付き文書には，管理するコンテントの種別によって，次の種類があります。

シングルファイル文書

マルチファイル管理機能，リファレンスファイル管理機能およびFile Link連携機能を使用しないコンテントを管理している文書のことです。

この文書では，データベースに登録されている一つのファイルをコンテントとして管理しています。

マルチファイル文書

マルチファイル管理機能を使用しているコンテントを管理している文書のことです。

この文書では，データベースに登録されている複数のファイルをコンテントとして管理しています。

リファレンスファイル文書

リファレンスファイル管理機能を使用しているコンテントを管理している文書のことです。

この文書では，任意のディレクトリに登録されているコンテントを管理しています。データベースでは，そのコンテントロケーションを管理しています。

File Link文書

File Link連携機能を使用しているコンテントを管理している文書のことです。

この文書では，HiRDB File Linkのファイルサーバ上にある一つのファイル，または一つのディレクトリおよびそのサブディレクトリ下のすべてのファイルをコンテントとして管理しています。データベースではそのコンテントへのリンク情報を管理しています。

この節では，これらのオブジェクトを利用して実現できる文書管理の概要について説明します。ここでは，次のように文書を管理しているプロジェクトを例にして説明します。

図3-1　文書管理の例

＜この節の構成＞

3.1.1　文書（バージョンなし文書）

3.1.2　文書（バージョン付き文書）

3.1.3　マルチレンディション文書

3.1.4　マルチファイル文書

3.1.5　リファレンスファイル文書

3.1.6　File Link文書

3.1.7　文書間リレーション

3.1.8　XML文書管理

3.1.9　コンテナ

3.1.10　構成管理コンテナ

3.1.11　独立データ

3.1.1　文書（バージョンなし文書）

ここでは，バージョンなし文書を使用した管理について説明します。

プロジェクトAでは，企画書および見積書を，バージョンなし文書として管理しています。

バージョンなし文書は，一つのバージョンとだけ対応する文書です。版管理をして更新履歴などを残す必要がない（バージョン管理をする必要がない）文書を管理する場合に使用します。

バージョンなし文書は，CdbrDocumentクラスのオブジェクトとして作成します。詳細については，「3.2　クラスライブラリで扱う文書」を参照してください。

3.1.2　文書（バージョン付き文書）

ここでは，バージョン付き文書を使用した管理について説明します。

プロジェクトAでは，発表資料や補足資料をそれぞれバージョン付き文書として管理しています。例えば，発表資料の場合，担当者が作成した資料をバージョン1，顧客提案前に社内で検討，修正した資料をバージョン2，提案後，要求を反映して更新した資料をバージョン3のようにして管理することができます。

バージョンを管理しているバージョン付き文書の例を次の図に示します。

図3-2　バージョンを管理しているバージョン付き文書の例

バージョン付き文書は，CdbrVersionableDocumentクラスのオブジェクトとして作成します。

なお，バージョン付き文書の個々のバージョンは，バージョンなし文書と対応します。図3-2の場合，発表資料を構成する，V1新規作成版，V2社内修正版，およびV3要求反映版はバージョンなし文書です。これらを直接CdbrDocumentクラスのオブジェクトとして扱うこともできます。

詳細については，「3.2　クラスライブラリで扱う文書」および「3.3　文書のバージョン管理」を参照してください。

3.1.3　マルチレンディション文書

ここでは，文書のマルチレンディション管理について説明します。

文書の実体であるコンテント（Wordやテキストエディタなどのアプリケーションプログラムで作成されたファイル）と，その形式を表すレンディションタイプ（MIME名）の情報を合わせてレンディションといいます。DocumentBrokerでは，一つの文書に同じ内容を表す複数の異なる形式のレンディションを登録することができます。この機能をマルチレンディション機能といいます。また，複数のレンディションを登録した文書を特にマルチレンディション文書といいます。

例えば，プロジェクトAでは，企画書をマルチレンディション文書として管理しています。企画書には，作成者が作成したWord形式の「企画書.doc」と，プロジェクトにかかわるメンバが参照するPDF形式の「企画書.pdf」を一つの文書として登録します。これによって，必要に応じて，Word形式のファイルをダウンロードしたり，PDF形式のファイルをダウンロードしたりすることが可能になります。また，アクセス制御機能と組み合わせたユーザプログラムを作成すると，更新する権利を持つユーザにはWord形式のファイルを，参照する権利しか持たないユーザにはPDF形式のファイルを自動的にダウンロードさせるという運用もできます。

マルチレンディション機能を使用した管理の例を次の図に示します。

図3-3　マルチレンディション機能を使用した管理の例

DocumentBrokerでは，一つの文書に最大10個のレンディションを登録することができます。

また，DocumentBroker Rendering Optionと連携すると，ユーザが登録した形式のファイルからほかの形式のファイルを作成することもできます。例えば，登録した企画書.docから，DocumentBroker Rendering Optionを使用して，企画書.pdfを作成することができます。

マルチレンディション文書は，CdbrVersionableDocumentクラスのオブジェクトまたはCdbrDocumentクラスのオブジェクトとして作成します。詳細については，「3.4　文書のマルチレンディション管理」を参照してください。

3.1.4　マルチファイル文書

ここでは，文書のマルチファイル管理について説明します。

マルチファイル管理とは，一つの文書に複数のファイルを登録して管理する機能です。複数のファイルが登録された文書を，マルチファイル文書といいます。一つの文書で複数のファイルを管理すると，文書を構成する複数のファイルを，一括して登録したり，一括して取得したりできます。この機能を，マルチファイル管理機能といいます。

DocumentBrokerは，バージョンなし文書またはバージョン付き文書をマルチファイル文書として管理できます。

マルチファイルの管理例を次の図に示します。次の図では，拡販資料をマルチファイル文書として管理しています。拡販資料では，「製品概要.txt」，「システム構成.gif」，「利用イメージ.gif」および「ユーザ事例.txt」という四つのファイルを，HTML形式のレンディションのコンテントとして管理しています。

図3-4　マルチファイルの管理例

マルチファイル文書は，CdbrDocumentクラスのオブジェクトまたはCdbrVersionableDocumentクラスのオブジェクトとして作成します。

なお，マルチファイルを管理するバージョンなし文書およびバージョン付き文書では，マルチレンディション管理機能を使用できません。

詳細については，「3.5　文書のマルチファイル管理」を参照してください。

3.1.5　リファレンスファイル文書

ここでは，リファレンスファイル文書について説明します。

リファレンスファイル管理機能は，コンテントを任意のディレクトリに格納し，文書のプロパティとコンテントロケーションだけをデータベースで管理する機能です。データベースとコンテントを切り離すことによって，ユーザによるコンテント格納先の選択やディスク移行時のコンテント格納ディレクトリの変更など，柔軟にコンテント格納先の管理ができます。また，Windowsの場合はUNC形式のパスでコンテントを操作することもできます。

リファレンスファイル管理機能を使用して管理している文書を，リファレンスファイル文書といいます。

DocumentBrokerでは，バージョンなし文書またはバージョン付き文書をリファレンスファイル文書として管理できます。

リファレンスファイル文書の管理例を，次の図に示します。

図3-5　リファレンスファイル文書の管理例

詳細については，「3.6　文書のリファレンスファイル管理」を参照してください。

3.1.6　File Link文書

ここでは，File Link文書について説明します。

File Link連携機能は，HiRDB File Linkと連携して文書を管理する機能です。

画像・音声などの容量が大きいコンテントを持つファイルをファイルサーバで管理したい場合にこの機能を使用すると，データベースで管理しているファイルの作成者名などの情報とファイルサーバ上のファイルとの整合性を確保できます。クライアントアプリケーションで，データベースとファイルサーバの整合性を取るための処理をする必要はありません。

File Link連携機能を使用して管理している文書を，File Link文書といいます。

DocumentBrokerでは，バージョンなし文書またはバージョン付き文書をFile Link文書として管理できます。

File Link文書の管理例を，次の図に示します。

図3-6　File Link文書の管理例

詳細については，「3.7　File Link連携機能を使用した文書管理」を参照してください。

3.1.7　文書間リレーション

ここでは，文書間リレーションについて説明します。

DocumentBrokerでは，文書と文書を関連づけて管理できます。この関連づけを，文書間リレーションといいます。

例えば，プロジェクトAの発表資料で一部企画書を引用している場合や，発表資料から補足資料を参照している場合などに，発表資料と企画書，発表資料と補足資料を，それぞれ文書間リレーションで関連づけて管理できます。これらを関連づけておくことによって，必要な資料をまとめて管理できます。また，引用後に企画書が更新された場合や，参照している補足資料が削除された場合，発表資料から確認できます。

文書間リレーションの設定例を次の図に示します。

図3-7　文書間リレーションの設定例

文書間リレーションは，次のクラスのオブジェクト間に設定できます。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

詳細については，「3.8　文書間リレーションを設定した文書管理」を参照してください。

3.1.8　XML文書管理

ここでは，XML文書管理について説明します。

DocumentBrokerでは，登録する文書がXML形式で記述されたファイル（XMLファイル）である場合，次のような機能が使用できます。

XMLプロパティマッピング機能

XMLインデクスデータ作成機能

XMLプロパティマッピング機能とは，XMLファイル内でタグ間に記述されている情報を，DocumentBrokerの文書のプロパティにマッピングする機能です。

例えば，プロジェクトAの見積書は，次のような内容のXMLファイルです。

<?xml version="1.0" encoding="Shift_JIS"?>
<doc>
<title>プロジェクトA見積書</title>
<date>2001.1.10</date>
<author id="96601357">
 <name>日立太郎</name>
 <organization>営業部</organization>
</author>
<content>
…
</content>
</doc>

このとき，<title>タグ間の情報「プロジェクトA見積書」や，<author>タグの属性値「96601357」などを，文書のプロパティとしてマッピングできます。

図3-8　XMLプロパティマッピングの例

XMLインデクスデータ作成機能は，XML文書の構造を指定した全文検索（構造指定検索）を実行するためのインデクスデータを，XMLファイルを構文解析して作成する機能です。作成したインデクスデータを全文検索インデクスとして文書に登録すると，見積書を検索する場合に，「構造『title』に『プロジェクトA』という文字列が含まれ，構造『author』の中の構造『name』に『日立』という文字列が含まれる文書」という条件や，「構造『author』に設定されている属性『id』の属性値が『96601357』である文書」という条件を指定して検索できます。また，構造指定検索用の全文検索インデクスのほかにも，XMLファイルからタグ情報を削除したプレーンテキスト形式の全文検索インデクスを作成するためのインデクスデータも作成できます。

XML文書は，次のどちらかのクラスのオブジェクトとして作成します。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

詳細については，「3.11　XML文書の管理」を参照してください。

3.1.9　コンテナ

ここでは，コンテナを使用した管理方法について説明します。ここで説明するのは，すべてのコンテナで共通して実現できる管理方法です。

複数の文書を管理する場合，文書をフォルダに格納するイメージでまとめて管理すると便利です。また，複数の観点で分類したい文書などは，分類ごとにリンクを付けておくと便利です。DocumentBrokerでは，このような管理をコンテナによって実現します。

コンテナには，複数の文書またはコンテナを関連づけられます。コンテナから設定する関連づけをコンテインメントといいます。すべてのコンテナで使用できるコンテインメントには，直接型のコンテインメントと参照型のコンテインメントがあります。直接型のコンテインメントは，一つのコンテナの下位に複数の文書またはコンテナを関連づけられるコンテインメントです。上位になるコンテナは一つです。参照型のコンテインメントは，一つのコンテナの下位に複数の文書またはコンテナを関連づけられ，かつ一つの文書またはコンテナの上位に複数のコンテナを関連づけらるコンテインメントです。

例えば，プロジェクト単位で文書をまとめて管理するために，プロジェクトAコンテナをフォルダとして使用する場合，コンテナと資料を直接型のコンテインメントを使用して関連づけます。これによって，フォルダに資料を格納するイメージで見積書，企画書および仕様書を管理できます。プロジェクトA－提案資料－発表資料，とコンテナの階層をたどって文書を入手することもできます。

図3-9　コンテナによる管理の例（直接型のコンテインメントで関連づける場合）

また，プロジェクトAに関連する資料のうち，B社に関する資料を格納したB社コンテナは，すでに顧客情報コンテナから直接型のコンテインメントで関連づけられています。一つの文書またはコンテナに対して，二つのコンテナから直接型のコンテインメントで関連づけることはできないため，B社コンテナをプロジェクトAから直接型のコンテインメントで関連づけることはできません。

このため，プロジェクトAコンテナからは，参照型のコンテインメントを使用して関連づけます。参照型のコンテインメントを使用した場合，複数のプロジェクトから，同じ顧客情報を参照することもできます。

図3-10　コンテナによる管理の例（参照型のコンテインメントで関連づける場合）

このほか，プロジェクトごとのコンテナに関連づけられている文書を作成者別に分類したり，顧客情報コンテナに関連づけられている会社ごとのコンテナを業界別に分類したりする場合にも，コンテナと参照型のコンテインメントを使用して，文書やコンテナを分類できます。

直接型または参照型のコンテインメントを使用できるコンテナは，次のクラスのオブジェクトとして作成します。

CdbrReferentialContainerクラス

CdbrVersionTraceableContainerクラス

CdbrConfiguratedReferentialContainerクラス

詳細については，「3.9　コンテナを使用した文書管理」を参照してください。

3.1.10　構成管理コンテナ

ここでは，構成管理コンテナを使用した管理方法について説明します。

構成管理コンテナでは，関連づけている文書やコンテナがバージョンを持っている場合に，バージョンを特定して文書やコンテナを管理できます。

構成管理コンテナを使用すると，関連づける文書やコンテナに対して，常に最新のバージョンを管理するか，ある特定のバージョンを管理し続けるかを指定できます。常に最新のバージョンを管理するモードをFLOATINGモード，特定のバージョンを管理し続けるモードをFIXモードといいます。

構成管理コンテナには，バージョン付き構成管理コンテナとバージョンなし構成管理コンテナがあります。バージョンなし構成管理コンテナは，バージョン付き構成管理コンテナの1バージョンに対応します。また，構成管理コンテナ自体をバージョンアップしない場合は，バージョンなし構成管理コンテナを使用できます。

バージョン付き構成管理コンテナを使用すると，構成管理コンテナのバージョンと管理するモードを組み合わせて，関連づける文書やコンテナの構成管理をすることができます。

例えば，プロジェクトAの提案資料コンテナはバージョン付き構成管理コンテナです。関連づけている発表資料，補足資料はバージョン付き文書，配布資料はバージョン付き構成管理コンテナです。提案資料コンテナでは，第1回目の提案をした段階の資料をコンテナのバージョン1，それ以降に変更した資料をコンテナのバージョン2で管理しています。提案資料コンテナのバージョン1で資料をFIXモードで管理することによって，第1回目の提案以降に資料がバージョンアップした場合も，常に第1回提案時点の状態の資料を参照できます。提案資料コンテナのバージョン2では資料をFLOATINGモードで管理することによって，常に各資料の最新バージョンを参照できます。

構成管理コンテナによる構成管理の例を次の図に示します。

図3-11　構成管理コンテナによる構成管理の例

同様に，第2回目の提案を実施してその状態を管理しておきたい場合は，バージョン2のコンテナの管理モードをFIXモードに変更すれば，第2回目提案時点の状態の資料を管理し続けることができます。この場合，提案資料コンテナをバージョンアップして，バージョン3の提案資料コンテナで資料をFLOATINGモードで管理すれば，そのコンテナをたどることで最新の資料を参照できます。

バージョン付き構成管理コンテナは，CdbrConfiguratedReferentialContainerクラスのオブジェクトとして作成します。バージョンなし構成管理コンテナは，CdbrVersionTraceableContainerクラスのオブジェクトとして作成します。

また，構成管理コンテナによる構成管理の対象になるのは次のオブジェクトです。

CdbrVersionableDocumentオブジェクト（バージョン付き文書）

CdbrConfiguratedReferentialContainerオブジェクト（バージョン付き構成管理コンテナ）

詳細については，「3.10　構成管理コンテナを使用した文書の構成管理」を参照してください。

3.1.11　独立データ

DocumentBrokerでは，独立データも管理できます。独立データとは，ほかのオブジェクトに従属しない，独立したオブジェクトです。詳細については，「3.13　独立データの管理」を参照してください。

3.2　クラスライブラリで扱う文書

この節では，バージョンなし文書とバージョン付き文書について説明します。ただし，バージョン付き文書のバージョン管理の方法については，「3.3　文書のバージョン管理」で説明します。

バージョンなし文書は，CdbrDocumentクラスを基にしたオブジェクト（CdbrDocumentオブジェクト）として作成します。

バージョン付き文書は，CdbrVersionableDocumentクラスを基にしたオブジェクト（CdbrVersionableDocumentオブジェクト）として作成します。

＜この節の構成＞

3.2.1　文書を表すクラスの概要

3.2.2　文書のプロパティ

3.2.3　文書の操作

3.2.1　文書を表すクラスの概要

ここでは，CdbrDocumentクラスとCdbrVersionableDocumentクラスの概要について説明します。

＜この項の構成＞

(1)　CdbrDocumentクラスの概要

(2)　CdbrVersionableDocumentクラスの概要

(3)　CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係

(1)　CdbrDocumentクラスの概要

CdbrDocumentクラスの概要について説明します。

(a)　機能

バージョンなし文書は，CdbrDocumentクラスを基にしたオブジェクトとして作成します。

このクラスは，CdbrContainableクラスのサブクラスであり，コンテナの包含要素となる機能を継承しています。

(b)　CdbrDocumentクラスを構成するDMAオブジェクト

CdbrDocumentクラスを構成するDMAオブジェクトの種類を次に示します。

DocVersionオブジェクト
バージョンなし文書で，文書を表現するオブジェクトです。dmaClass_DocVersionクラスのサブクラスのオブジェクトも含みます。

Renditionオブジェクト
文書を構成するファイルの種類を管理するオブジェクトです。

ContentTransferオブジェクト
文書の実体であるコンテントデータを管理するオブジェクトです。

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrDocumentクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-12　CdbrDocumentクラスのオブジェクトとDMAオブジェクトの関係

なお，この構成は，シングルファイル文書の場合です。マルチファイル文書，リファレンスファイル文書またはFile Link文書の場合は，DMAオブジェクトの構成が異なります。詳細については，それぞれ「3.5　文書のマルチファイル管理」，「3.6　文書のリファレンスファイル管理」および「3.7　File Link連携機能を使用した文書管理」を参照してください。

(2)　CdbrVersionableDocumentクラスの概要

CdbrVersionableDocumentクラスの概要について説明します。

(a)　機能

バージョン付き文書は，CdbrVersionableDocumentクラスを基にしたオブジェクトとして作成します。

このクラスは，CdbrVersionableクラスのサブクラスであり，CdbrVersionableクラスのバージョン管理機能を継承しています。したがって，CdbrVersionableDocumentオブジェクトは，バージョンを管理できます。

CdbrVersionableDocumentオブジェクトでは，複数のバージョンをまとめて一つの文書として扱います。文書のバージョン管理については，「3.3　文書のバージョン管理」を参照してください。

また，このクラスは，CdbrContainableクラスのサブクラスであり，CdbrContainableクラスのコンテナの包含要素となる機能も継承しています。

(b)　CdbrVersionableDocumentクラスを構成するDMAオブジェクト

CdbrVersionableDocumentクラスを構成するDMAオブジェクトの種類を次に示します。Renditionオブジェクト，ContentTransferオブジェクトについては，CdbrDocumentクラスと同様です。

ConfigurationHistoryオブジェクト
文書の一連のバージョンを統括するオブジェクトです。

VersionSeriesオブジェクト
バージョンの構成を管理するオブジェクトです。

VersionDescriptionオブジェクト
VersionSeriesオブジェクトとDocVersionオブジェクトを結び付けて，VersionSeriesオブジェクトで管理するバージョンに対応する文書（DocVersionオブジェクト）が何であるかを管理するオブジェクトです。

DocVersionオブジェクト
バージョン付き文書でのDocVersionオブジェクトは，文書の特定のバージョンに相当するオブジェクトです。dmaClass_DocVersionクラスのサブクラスのオブジェクトも含みます。

Renditionオブジェクト

ContentTransferオブジェクト

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrVersionableDocumentクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-13　CdbrVersionableDocumentクラスのオブジェクトとDMAオブジェクトの関係

なお，この構成は，シングルファイル文書の場合です。マルチファイル文書，リファレンスファイル文書またはFile Link文書の場合は，DMAオブジェクトの構成が異なります。詳細については，それぞれ「3.5　文書のマルチファイル管理」，「3.6　文書のリファレンスファイル管理」および「3.7　File Link連携機能を使用した文書管理」を参照してください。

(3)　CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係

ここでは，CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係について説明します。CdbrVersionableDocumentオブジェクトとして作成されたバージョン付き文書は，それぞれのバージョンに対応する複数のCdbrDocumentオブジェクト（バージョンなし文書）を包含しています。

次の図に，CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係について示します。CdbrVersionableDocumentオブジェクトとして作成された文書は，二つのバージョンを持っています。

図3-14　CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係

CdbrVersionableDocumentオブジェクトの個々のバージョンは，CdbrDocumentオブジェクトに対応しています。このため，CdbrVersionableDocumentクラスを基に作成したCdbrVersionableDocumentオブジェクトの個々のバージョンに対して，CdbrDocumentクラスの機能を使用して操作することができます。また，CdbrDocumentオブジェクトに接続した状態から，自身を1バージョンとしているCdbrVersionableDocumentオブジェクトをたどって，CdbrVersionableDocumentクラスの機能を使用して操作することもできます。

例えば，バージョン付き文書を全文検索したい場合，実際に全文検索の対象となるコンテントは個々のバージョンごとに存在するため，検索は個々のバージョンに対応するCdbrDocumentオブジェクトが対象になります。検索結果としてはCdbrDocumentオブジェクトのトップオブジェクトであるDocVersionオブジェクト（dmaClass_DocVersionクラスのサブクラスを基に作成したDMAオブジェクト）のプロパティ（OIIDなど）が取得できます。しかし，DocVersionオブジェクトのOIIDではバージョン付き文書であるCdbrVersionableDocumentオブジェクトに接続できません。このため，全文検索で取得したCdbrDocumentオブジェクト（バージョンなし文書）を更新し，それをCdbrVersionableDocumentオブジェクト（バージョン付き文書）の新しいバージョンとして追加したい場合などには，次のような手順でCdbrVersionableDocumentオブジェクトに接続してください。

CdbrDocumentオブジェクトのOIIDを基にCdbrVersionableDocumentオブジェクトに接続する手順

検索で取得したDMAオブジェクトのDocVersionオブジェクトのOIIDを指定して，CdbrDocument::SetOIIDメソッドをコールし，CdbrDocumentオブジェクトに接続します。

CdbrDocument::GetVersionableListメソッドまたはCdbrDocument::GetVersionableListAndLockメソッドによって，接続したCdbrDocumentオブジェクトを1バージョンとして管理しているCdbrVersionableDocumentオブジェクトのOIIDを取得します。
これによって，1.で接続したCdbrDocumentオブジェクトを1バージョンとするCdbrVersionableDocumentオブジェクトのトップオブジェクトである，DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDが取得できます。

2.で取得したDMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを指定して，CdbrVersionableDocumentオブジェクトに接続します。

3.2.2　文書のプロパティ

ここでは，文書に設定するプロパティと，プロパティを使用した検索について説明します。

＜この項の構成＞

(1)　文書のプロパティの管理

(2)　プロパティを使用した検索

(1)　文書のプロパティの管理

文書は，プロパティを設定して管理できます。

文書には，DMAが規定したプロパティおよびクラスライブラリ固有のプロパティが設定されています。これらのプロパティについては，「2.6.2　プロパティの種類」を参照してください。

このほか，文書には，ユーザ定義プロパティが設定できます。

文書のプロパティとしてタイトルや作成者などを設定しておくと，文書の検索などで使用できます。バージョンなし文書のプロパティは，構成要素であるDMAオブジェクトのDocVersionオブジェクトのプロパティとして設定します。バージョン付き文書のプロパティは，構成要素であるDMAオブジェクトのConfigurationHistoryオブジェクトとDocVersionオブジェクトのプロパティとして設定します。バージョン共通の情報はConfigurationHistoryオブジェクトのプロパティとして，各バージョン固有の情報はDocVersionオブジェクトのプロパティとして設定してください。

バージョン付き文書のプロパティの設定例を次の図に示します。

図3-15　バージョン付き文書のプロパティの設定例

この例では，バージョン共通の情報を表すユーザ定義プロパティとして，文書名および作成者を設定しています。また，各バージョン固有の情報を表すユーザ定義プロパティとして，更新日を設定しています。

文書のプロパティを操作するメソッドについては，「2.6.6　プロパティの操作」を参照してください。

(2)　プロパティを使用した検索

文書の検索では，バージョン付き文書の検索と，バージョンなし文書の検索ができます。それぞれのトップオブジェクトであるDMAオブジェクトのConfigurationHistoryオブジェクトまたはDocVersionオブジェクトを対象に，プロパティを指定して検索を実行します。文書のコンテントを対象にした全文検索をする場合は，DocVersionオブジェクトを対象にします。

検索についての詳細は，「4.　オブジェクトの検索」を参照してください。

3.2.3　文書の操作

文書の基本的な操作を実行する場合に使用するメソッドと，そのメソッドの発行順序の例を説明します。

ここでは，次の操作について説明します。

文書の作成

文書の参照

文書の更新

文書の削除

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

また，DocumentBrokerサーバがネットワーク上に存在する場合，DocumentBrokerサーバに文書を登録したりDocumentBrokerサーバの文書をクライアントで参照したりする場合にはあらかじめファイル転送サービスを起動しておく必要があります。ファイル転送機能については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

なお，この例では，操作する文書としてCdbrDocumentオブジェクトを使用します。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　文書の作成

(2)　文書の参照

(3)　文書の更新

(4)　文書の削除

(1)　文書の作成

新しく文書を作成して，データベースに格納する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，文書を登録するとき，全文検索インデクスを同時に作成できます。全文検索インデクスの作成については，「4.4.3　全文検索インデクスの作成」を参照してください。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体（SDBR_DMAINFO構造体）を作成しておきます。

CdbrDocumentオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。

CdbrVersionableDocumentオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と，dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。
このとき，dmaClass_DocVersionクラスのサブクラスとして，edmClass_VersionTracedDocVersionクラスもしくはそのサブクラス，またはedmClass_VersionTracedComponentDocVersionクラスもしくはそのサブクラスを指定した場合だけ，構成管理コンテナの構成要素として管理できます。構成管理コンテナについては，「3.10　構成管理コンテナを使用した文書の構成管理」を参照してください。

文書（CdbrDocumentオブジェクト）を作成します。
CdbrDocument::CreateObjectメソッドをコールします。このとき，登録するファイルやファイルの種類（レンディションタイプ）などを指定します。

文書を作成，登録するコールシーケンスの例を次に示します。

作成した文書をコンテナと関連づける場合については，「3.9　コンテナを使用した文書管理」を参照してください。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，CreateObjectメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.txt"」のように指定してください。

文書を作成，登録するコールシーケンス

//あらかじめ登録する内容を構造体DMAClassListとして作成しておく

//…
pSession->Begin();
CdbrDocument Doc;
//文書の作成および登録
Doc.CreateObject(pSession,
                   1, DMAClassList, "file:///tmp/sample.txt",
                   "MIME::text/plain", &pOIID,
                    DBR_CREATE_INDEX);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

レンディションタイプについての注意事項

文書として登録するファイルの種類を表すレンディションタイプは，登録したファイルの拡張子からは設定されません。レンディションタイプは，CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。

特に，文書を作成する時に同時に全文検索に必要な全文検索インデクスを作成したい場合は，適切なレンディションタイプを設定するようにしてください。文書の登録と同時に全文検索インデクスを作成する場合，特定のレンディションタイプを持つ文書オブジェクト以外からは全文検索インデクスが作成できません。また，登録済みの文書から全文検索インデクスを作成する場合も，特定のレンディションタイプを持つ文書オブジェクト以外からは全文検索インデクスが作成できません。全文検索インデクスが作成できないレンディションタイプの文書オブジェクトに対しては，登録した文書とは別に全文検索用インデクスのデータを作成して，登録した文書と関連づける必要があります。

全文検索インデクスを作成できるレンディションタイプおよびその作成方法については，「4.4.3　全文検索インデクスの作成」を参照してください。

なお，レンディションタイプを表すプロパティはPutPropertyValuesメソッドでは変更できません。登録済みの文書を更新する時に，文書の実体を表すファイルの種類を変更する場合には，必要に応じてUpdateContentAndRenditionTypeメソッドをコールして，レンディションタイプを変更するようにしてください。

(2)　文書の参照

すでにデータベースに登録されている文書を参照する場合に使用するメソッドと，そのメソッドの発行順序について説明します。

準備

オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については「4.　オブジェクトの検索」を参照してください。

CdbrDocumentオブジェクトに接続する場合は，構成要素であるDMAオブジェクトの，DocVersionオブジェクトのOIIDを取得しておきます。

CdbrVersionableDocumentオブジェクトに接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

参照する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
クライアント環境のファイルのパス名をfile:プロトコルで指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrDocument::GetContentメソッドをコールします。

文書を参照する場合の，コールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetContentAndLockメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.txt"」のように指定してください。

文書を参照するコールシーケンス

pSession->Begin();
//…
//検索によって参照する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定してファイルを取得する
Doc.GetContentAndLock("file:///tmp/sample.txt",
                     DMA_LOCK_READ);
Doc.ReleaseObject();
pSession->Commit();

(3)　文書の更新

すでにデータベースに登録されている文書を編集して更新する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

更新する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。ConnectObjectメソッドのロックはwriteロックを設定します。

文書のコンテントデータを，指定したパス名のファイルに複写します。
クライアント環境のファイルのパス名をfile:プロトコルで指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrDocument::GetContentメソッドをコールします。

ファイルを編集します。

編集したファイルで文書を更新します。
CdbrDocument::UpdateContentメソッドまたはCdbrDocument::UpdateContentAndRenditionTypeメソッドをコールします。
なお，UpdateContentメソッドで更新するファイルのパスは，2.のGetContentAndLockメソッドまたはGetContentメソッドで取得したファイルのパスと同じである必要はありません。例えば，UNIXの場合，2.で文書のコンテントデータをfile:///tmp/sample.txtというパス名のファイルに複写したときでも，更新するファイルとしてfile:///tmp/sample2.txtというパス名のファイルを指定してもかまいません。Windowsの場合，2.で文書のコンテントデータをfile:///c:¥temp¥sample.txtというパス名のファイルに複写したときでも，更新するファイルとしてfile:///c:¥temp¥sample2.txtというパス名のファイルを指定してもかまいません。
また，更新時に，GetContentメソッドで取得したファイルとは異なる種類のファイルを登録する場合は，必要に応じてレンディションタイプを変更してください。この場合は，UpdateContentAndRenditionTypeメソッドを使用します。例えば，テキスト形式のファイル（sample.txt）をコンテントデータとして登録していた文書に対して，HTML形式のファイル（sample.html）に置き換えて更新する場合，UpdateContentAndRenditionTypeメソッドの引数にHTML形式を表すMIME名（MIME::text/html）を指定します。これによって，レンディションタイプが変更されます。
なお，更新するファイルとして，取得したファイルと種類が異なるものを指定した場合でも，UpdateContentAndRenditionTypeメソッドでレンディションタイプの変更を指定しなかった場合は，レンディションタイプは変更されません。登録したファイルの拡張子によってレンディションタイプが自動的に変更されることはありません。

文書を更新する場合の，コールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetContentAndLockメソッドおよびUpdateContentメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.txt"」のように指定してください。

文書を更新するコールシーケンス

pSession->Begin();
//…
//検索によって更新する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定してファイルを取得する
Doc.GetContentAndLock("file:///tmp/sample.txt",
                      DMA_LOCK_WRITE);
//…
//クライアント環境で取得したファイルの内容の更新する
//…
//文書を更新する
Doc.UpdateContent("file:///tmp/sample.txt",
                  DBR_CREATE_INDEX);
Doc.ReleaseObject();
pSession->Commit();

(4)　文書の削除

CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトを削除する場合，RemoveObjectメソッドを使用します。これによって，CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトを構成していたすべてのDMAオブジェクトが削除されます。削除するCdbrDocumentオブジェクトがCdbrVersionableDocumentオブジェクトの1バージョンに当たる場合は，そのバージョンを表すDMAオブジェクトのVersionDescriptionオブジェクトも一緒に削除されます。

また，特定のバージョンに対応するバージョンなし文書であるCdbrDocumentオブジェクトを削除する場合は，バージョン付き文書であるCdbrVersionableDocumentオブジェクトに接続して，CdbrVersionableDocument::DeleteVersionメソッドをコールする方法もあります。この方法については，「3.3.3　バージョン管理機能の操作」を参照してください。.

ここでは，データベースに登録されている文書を削除する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

削除する文書に接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。ConnectObjectメソッドのロックにはwriteロックを設定します。

文書を削除します。
CdbrDocument::RemoveObjectメソッドをコールします。
なお，SetOIIDメソッドによってオブジェクトに接続している場合，RemoveObjectメソッドをコールした時にDocumentBrokerによってwriteロックが設定されます。

文書を削除する場合のコールシーケンスの例を次に示します。

文書を削除するコールシーケンス

pSession->Begin();
//…
//検索によって削除する文書のOIIDを取得する
//…
CdbrDocument Doc;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
Doc.RemoveObject();
Doc.ReleaseObject();
pSession->Commit();

3.3　文書のバージョン管理

この節では，文書のバージョン管理について説明します。バージョン管理には，CdbrVersionableクラスの機能を使用します。

＜この節の構成＞

3.3.1　CdbrVersionableクラスの概要

3.3.2　バージョンの管理方法

3.3.3　バージョン管理機能の操作

3.3.1　CdbrVersionableクラスの概要

ここでは，CdbrVersionableクラスの概要について説明します。

＜この項の構成＞

(1)　機能

(2)　CdbrVersionableクラスを構成するDMAオブジェクト

(3)　バージョン管理の対象になるオブジェクトに設定するプロパティ

(1)　機能

文書またはコンテナは，バージョンを付けて管理できます。例えば，文書に対して，第1版，第2版などのバージョンを付けておくことで，過去のある時点での文書を取り出したり，その文書を基に新たな文書を作成したりできます。

バージョンは，新規に文書またはコンテナを保存した時から付けることができます。保存した文書またはコンテナは，更新する時に新しいバージョンを追加して更新するか，既存のバージョンに上書きして更新するか選択できます。新しいバージョンを追加して更新する場合に，バージョン管理機能を使用します。

バージョン管理機能とは，チェックイン，チェックアウトという操作によって新しいバージョンを追加したり，バージョン情報の一覧を取得して特定のバージョンを指定して操作したりする機能です。また，バージョンごとにプロパティの設定もできます。この機能は，CdbrVersionableクラスが提供するバージョン管理機能によって実現します。

なお，CdbrVersionableクラスは抽象クラスです。CdbrVersionableクラスでは，次に示すサブクラスでバージョン管理機能を使用するためのメソッドなどを提供しています。

CdbrVersionableDocumentクラス

CdbrConfiguratedReferentialContainerクラス

したがって，CdbrVersionableDocumentオブジェクトとして作成されたバージョン付き文書およびCdbrConfiguratedReferentialContainerオブジェクトとして作成されたバージョン付き構成管理コンテナが，バージョン管理の対象になります。

(2)　CdbrVersionableクラスを構成するDMAオブジェクト

CdbrVersionableクラスを構成するDMAオブジェクトの種類を次に示します。

ConfigurationHistoryオブジェクト
このオブジェクトのプロパティが，CdbrVersionableクラスのデフォルトのプロパティになります。また，ConfigurationHistoryオブジェクトのプロパティには，管理しているすべてのバージョンに共通のプロパティを設定できます。

VersionSeriesオブジェクト
バージョンの構成を管理するオブジェクトです。

VersionDescriptionオブジェクト
VersionSeriesオブジェクトとdmaClass_Versionableクラスのサブクラスのオブジェクトを結び付けて，VersionSeriesオブジェクトで管理するバージョンに対応するオブジェクトが何であるかを管理するオブジェクトです。

dmaClass_Versionableクラスのサブクラスのオブジェクト
バージョン管理されるオブジェクトです。文書およびコンテナを表すオブジェクトの個々のバージョンに当たる，DocVersionオブジェクトやContainerVersionオブジェクトがこれに当たります。また，これらのオブジェクトのプロパティとして，バージョンごとに異なるプロパティが設定できます。

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrVersionableクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-16　CdbrVersionableクラスのオブジェクトとDMAオブジェクトの関係

(3)　バージョン管理の対象になるオブジェクトに設定するプロパティ

バージョン管理をしている文書やコンテナでは，プロパティとして，次の2種類の情報が設定できます。

すべてのバージョンに共通する情報
DMAオブジェクトのConfigurationHistoryオブジェクトのプロパティ

個々のバージョンで異なる情報
DMAクラスのdmaClass_Versionableクラスのサブクラスから作成したオブジェクトのプロパティ（DocVersionオブジェクトまたはContainerVersionオブジェクト）

例えば，文書を管理するときに，すべてのバージョンに共通である文書名をConfigurationHistoryオブジェクトのプロパティとして設定したり，個々のバージョンで異なる情報である更新日をDocVersionオブジェクトのプロパティとして設定したりして，管理できます。

3.3.2　バージョンの管理方法

ここでは，文書またはコンテナをバージョン管理機能を使用して管理する方法について説明します。この説明中の文書とは，バージョン付き文書です。コンテナは，バージョン付き構成管理コンテナです。

＜この項の構成＞

(1)　バージョンの追加

(2)　バージョンの順序性とカレントバージョン

(3)　バージョンの指定方法

(1)　バージョンの追加

文書やコンテナを更新する場合に，バージョンを追加して新しいバージョンを作成する時，チェックアウトとチェックインという操作をします。

チェックアウトおよびチェックインについて説明します。

チェックアウト

文書やコンテナのバージョンを追加するために，次バージョンの追加を予約して，最新バージョンの文書またはコンテナのコピーを要求することです。バージョンのチェックアウトは，VersionCheckOutメソッドによって実行します。

なお，チェックアウトした段階でバージョンの追加は完了していません。したがって，メソッドによってバージョンの一覧を取得した場合，仮のバージョンに関する情報は取得できません。

チェックアウトをしている状態のDMAオブジェクトの構成を次の図に示します。

図3-17　チェックアウトをしている状態のDMAオブジェクトの構成

Reservationオブジェクトは，新しいバージョンを作成する権利をVersionSeriesオブジェクトに予約するDMAオブジェクトです。チェックインすると，VersionDescriptionオブジェクトに置き換わります。

チェックイン

バージョンの追加を確定することです。バージョンのチェックインは，VersionCheckInメソッドによって実行します。

チェックインをした状態のDMAオブジェクトの構成を次の図に示します。

図3-18　チェックインをした状態のDMAオブジェクトの構成

チェックアウトされたバージョンを参照，操作する場合，仮のバージョン識別子を指定します。仮のバージョン識別子は，チェックアウトを実行した時に取得でき，チェックインを実行した時に無効になります。仮のバージョン識別子は，チェックイン後のバージョンの識別子とは異なりますので，ご注意ください。

バージョンをチェックアウトしたあとで，チェックアウトを取り消す場合は，VersionRevokeメソッドをコールします。このメソッドによって，仮のバージョンおよび仮のバージョン識別子は破棄されます。

(2)　バージョンの順序性とカレントバージョン

バージョンには順序があります。バージョンの順序とは，それぞれのバージョンをチェックインした順序です。バージョンの順序は，バージョン管理できるオブジェクトの構成要素である，DMAオブジェクトのVersionSeriesオブジェクトが保持しています。なお，最新のバージョンのことを，カレントバージョンといいます。

バージョンの順序は，GetVersionListメソッドまたはGetVersionListAndLockメソッドによって取得できます。引数の指定によって，新しいバージョンから取得したり，古いバージョンから取得したりできます。

バージョンの順序性についての注意事項

DMAが規定しているインターフェース（DMAインターフェース）を使用してバージョンを追加したオブジェクトに対しては，バージョンの順序性は保証されません。したがって，このオブジェクトに対して，カレントバージョンを指定した操作などはできません。ただし，このオブジェクトにクラスライブラリのメソッドによって再度バージョンを追加すれば，そのバージョンをカレントバージョンとして扱えます。

(3)　バージョンの指定方法

特定のバージョンに対応する文書またはコンテナを操作する場合は，メソッドの引数としてバージョン識別子を指定します。バージョン識別子は，GetVersionListメソッドまたはGetVersionListAndLockメソッドを使用して取得します。

チェックアウトしている文書またはコンテナのバージョンを指定する場合は，チェックアウト時に取得した仮のバージョン識別子を指定します。仮のバージョン識別子は，VersionCheckOutメソッドをコールした時に取得できます。また，すでにチェックアウトされているオブジェクトの仮のバージョン識別子を，GetReservationStatusメソッドまたはGetReservationStatusAndLockメソッドによって，バージョンのチェックアウト状態を確認して取得することもできます。

バージョンを指定して文書やコンテナを操作できるメソッド（引数でバージョン識別子を指定できるメソッド）で，バージョン識別子にNULLを指定した場合，メソッドは最新のバージョンに対して処理を実行します。

3.3.3　バージョン管理機能の操作

バージョン管理機能を使用する場合の，使用するメソッドと，そのメソッドの発行順序について説明します。

ここでは，次の操作について説明します。

バージョン管理する文書およびコンテナの作成

バージョンの追加

バージョンの削除

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

なお，例では，バージョン付き文書であるCdbrVersionableDocumentオブジェクトを使用します。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　バージョン管理する文書またはコンテナの作成

(2)　バージョンの追加

(3)　文書のバージョンの削除

(1)　バージョン管理する文書またはコンテナの作成

バージョン管理する文書およびコンテナは，CdbrVersionableDocumentクラスまたはCdbrConfiguratedReferentialContainerクラスのCreateObjectメソッドをコールすることで作成されます。CreateObjectメソッドの使用例については，「3.2.3(1)文書の作成」を参照してください。

(2)　バージョンの追加

チェックアウトとチェックインをすることで文書やコンテナにバージョンを追加します。

チェックアウトの取り消しには，CdbrVersionableクラスで定義されたVersionRevokeメソッドを使用します。

バージョンを追加する流れを説明します。この説明では，既存の文書をデータベースから取り出して編集し，新しいバージョンとして登録します。

準備

接続するオブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については「4.　オブジェクトの検索」を参照してください。

文書やコンテナにバージョンを追加する場合に取得するOIIDは，接続するオブジェクトの種類によって，次のようになります。

CdbrVersionableDocumentオブジェクトに接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

CdbrConfiguratedReferentialContainerオブジェクトに接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

ここでは，文書のチェックアウトとチェックインの流れについて説明します。

文書をチェックアウトする
まず，バージョン付き文書をチェックアウトして次バージョンの追加を予約し，取得したファイルのコピーを編集できるようにします。

バージョンを追加するバージョン付き文書に接続します。
CdbrVersionableDocument::SetOIIDメソッドまたはCdbrVersionableDocument::ConnectObjectメソッドをコールします。

バージョン付き文書をチェックアウトします。
CdbrVersionableDocument::VersionCheckOutメソッドをコールします。これによって，次バージョンの追加が予約できます。

チェックアウトしたバージョン付き文書の実体を，指定したパス名のファイルに複写します。
CdbrVersionableDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentメソッドをコールします。

文書をチェックインしてバージョンを追加する
次に，チェックアウトしたバージョン付き文書を編集して，最新のバージョンとして登録します。
バージョンアップした文書に登録するファイルはあらかじめ編集しておきます。

バージョンを追加する文書に接続します。
CdbrVersionableDocument::SetOIIDメソッドまたはCdbrVersionableDocument::ConnectObjectメソッドをコールします。

編集した文書を登録します。
CdbrVersionableDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentAndRenditionTypeメソッドをコールして，編集した文書を登録します。引数には，チェックアウトした時に取得したバージョン識別子を指定します。このとき，更新するファイルとしてチェックアウトで取得したファイルではないファイルを指定することもできます。

文書をチェックインします。
CdbrVersionableDocument::VersionCheckInメソッドをコールします。

チェックアウト，チェックインによってバージョンを追加する，コールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetContentAndLockメソッドおよびUpdateContentメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.txt"」のように指定してください。

文書をチェックアウトするコールシーケンス

pSession->Begin();
//…
//検索によって更新するバージョン付き文書のOIIDを取得する
//…
CdbrVersionableDocument VrDoc;
//検索で取得したOIIDをオブジェクトに設定する
VrDoc.SetOIID(pSession, pOIID);
//バージョン付き文書をチェックアウトする
VrDoc.VersionCheckOut(&pReservedVerId);
//writeロックを設定してファイルを取得する
VrDoc.GetContentAndLock("file:///tmp/sample.txt",
                       pReservedVerId,
                       DMA_LOCK_WRITE);
VrDoc.ReleaseObject();
pSession->Commit();

文書をチェックインするコールシーケンス

//クライアント環境でチェックアウトして取得したファイルの内容を
//更新しておく
pSession->Begin();
CdbrVersionableDocument VrDoc;
//OIIDをオブジェクトに設定する
VrDoc.SetOIID(pSession, pOIID);
//チェックアウトで作成されたコピーしたバージョン付き文書のファイルを
//更新する
VrDoc.UpdateContent("file:///tmp/sample.txt",
                   pReservedVerId);
//バージョン付き文書をチェックインする
VrDoc.VersionCheckIn();
VrDoc.ReleaseObject();
pSession->Commit();

(3)　文書のバージョンの削除

チェックインの実行によってすでに確定している文書またはコンテナのバージョンを削除する場合は，CdbrVersionableクラスで定義されているDeleteVersionメソッドを使用します。このメソッドによって，指定したバージョンの，次に示すDMAオブジェクトが削除されます。

VersionDescriptionオブジェクト

dmaClass_Versionableクラスのサブクラスのオブジェクトおよびそのオブジェクトとバインドされたオブジェクト

CdbrVersionableDocumentオブジェクトのバージョンに対してDeleteVersionメソッドをコールすると，そのバージョンに対応するCdbrDocumentオブジェクトが削除されます。つまり，CdbrDocumentオブジェクトに対してRemoveObjectメソッドをコールした場合と同じ操作になります。

また，バージョン付き構成管理コンテナによって構成管理されている文書のバージョンを削除する場合は，その構成管理モードによって，削除されるオブジェクトが異なります。詳細は，「3.10.2(6)構成管理コンテナで構成管理しているオブジェクトの削除」を参照してください。

CdbrVersionableDocumentオブジェクトのバージョンを削除するコールシーケンスの例を次に示します。

文書のバージョンを削除するコールシーケンス

pSession->Begin();
//…
//検索によってバージョンを削除するバージョン付き文書のOIIDを取得する
//…
CdbrVersionableDocument VrDoc;
//検索で取得したOIIDをオブジェクトに設定する
VrDoc.SetOIID(pSession, pOIID);
//バージョンの一覧を取得する
VrDoc.GetVersionListAndLock(&bContinue, 0, NULL, 10,
                           &pObjList,DMA_LOCK_READ);
//バージョンを削除する
VrDoc.DeleteVersion(pVersionId);
VrDoc.ReleaseObject();
pSession->Commit();

3.4　文書のマルチレンディション管理

この節では，文書のマルチレンディション管理について説明します。

＜この節の構成＞

3.4.1　マルチレンディション管理の概要

3.4.2　マルチレンディション管理を使用した文書管理

3.4.3　レンディションのプロパティ

3.4.4　マルチレンディション管理に関する操作

3.4.1　マルチレンディション管理の概要

ここでは，マルチレンディション管理の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　マルチレンディション管理を表すDMAオブジェクト

(1)　機能

文書のマルチレンディション管理とは，バージョンなし文書またはバージョン付き文書に複数のレンディションを登録して管理することです。マルチレンディション管理は，次のような場合に使用できます。

あるアプリケーションプログラムで作成した文書ファイルを，そのアプリケーションプログラムをインストールしていないマシンでも参照するために，同じ内容のHTML形式およびPDF形式のファイルを作成して一緒に登録したい場合

同じ拡張子の文書ファイルでも，保存状態やアプリケーションプログラムのバージョンの違いごとに複数登録したい場合（例えば，拡張子が同じ「.gif」であっても解像度の異なるファイルや，拡張子が同じ「.doc」であってもWord95形式で保存されたファイルとWord97形式で保存されたファイルなど）

更新可能な形式のファイルと更新できない形式のファイルを両方登録したい場合（例えば，同じ内容のWord形式のファイルとPDF形式のファイルなど）

マルチレンディション管理モデルでは，次の2種類のレンディションを区別して扱います。

マスタレンディション

サブレンディション

なお，このマニュアルでは，2種類のレンディションを合わせて「レンディション」と記述します。レンディションの種類によって説明が異なる場合は，それぞれ「マスタレンディション」，「サブレンディション」と記述して区別します。それぞれについて説明します。

マスタレンディション

文書のレンディションとして，最初に登録されたレンディションをマスタレンディションといいます。

サブレンディション

追加登録されたレンディションをマスタレンディションと区別してサブレンディションといいます。

文書をマルチレンディション文書として管理する場合，一つの文書に対して，1個のマスタレンディションと最大9個のサブレンディションを登録できます。追加したサブレンディションは，削除できます。ただし，マスタレンディションは削除できません。また，サブレンディションをマスタレンディションに変更することもできます。この場合，それまでマスタレンディションだったレンディションは，サブレンディションに変更されます。

なお，マスタレンディションに登録されているコンテントから，サブレンディションに登録するコンテントを作成，登録することもできます。マスタレンディションのコンテントの文書形式を変換してサブレンディションのコンテントを作成，登録することを，レンディション変換といいます。レンディション変換は，DocumentBroker Rendering Optionを使用して実行できます。

(2)　マルチレンディション管理を表すDMAオブジェクト

マルチレンディション文書を構成するDMAオブジェクトの種類を次に示します。

DocVersionオブジェクト
dmaClass_DocVersionクラスのサブクラスのオブジェクトも含みます。

Renditionオブジェクト
文書のレンディションタイプを管理するオブジェクトです。登録できるのは，マスタレンディションを含めて最大10個です。

ContentTransferオブジェクト
文書のコンテントである文書ファイルを格納するためのオブジェクトです。レンディションタイプに対応するコンテントを指定して登録します。

マルチレンディション文書として管理しているバージョンなし文書およびバージョン付き文書の，DMAオブジェクトの構成を次の図に示します。

図3-19　マルチレンディション文書のDMAオブジェクトの構成

3.4.2　マルチレンディション管理を使用した文書管理

ここでは，マルチレンディション文書の管理方法について説明します。

＜この項の構成＞

(1)　レンディションの追加

(2)　レンディションの参照

(3)　マスタレンディションおよびサブレンディションのコンテントの更新

(4)　レンディションの削除

(5)　レンディションの検索

(1)　レンディションの追加

バージョン付き文書をマルチレンディション文書として管理してレンディションを追加する例を次の図に示します。

図3-20　マルチレンディション文書のレンディションの追加例

図3-20の例では，文書の作成過程で，文書の作成者が更新用にコンテントをダウンロードできるように，コンテントを作成しているアプリケーションプログラム（この例の場合Word）の形式のレンディションを登録しています。このWord形式のレンディションがマスタレンディションとなります。そして，文書が完成して公開過程になったタイミングでバージョンを追加して，追加したバージョンをほかのユーザが参照しやすいように，PDF形式のレンディションを追加登録しています。この追加したPDF形式のレンディションがサブレンディションとなります。なお，マルチレンディション文書をチェックアウトすると，最新バージョンのマスタレンディションが仮のバージョンにコピーされます。サブレンディションはコピーされません。例えば，「報告書A」にさらに「V3」というバージョンを追加する場合，チェックアウトすると，Word形式のレンディションはコピーされますが，PDF形式のレンディションはコピーされません。マルチレンディション文書であるバージョン付き文書のバージョンを追加して，追加するバージョンにレンディションを追加する手順は次のようになります。

マルチレンディション文書のバージョンの追加の手順例

マルチレンディション文書であるバージョン付き文書をチェックアウトします。
最新バージョンのマスタレンディションが仮のバージョンにコピーされます。

最新バージョンのマスタレンディションの文書ファイルをダウンロードします。

アプリケーションプログラムで文書ファイルを編集します。

必要に応じて仮のバージョンのプロパティを設定します。

編集した文書ファイルを，仮のバージョンのマスタレンディションのコンテントとして更新します。

仮のバージョンにサブレンディションを登録します。

バージョン付き文書をチェックインして，仮のバージョンを最新バージョンとして確定します。

(2)　レンディションの参照

マルチレンディション文書は，レンディションタイプを指定して参照できます。例えば，図3-20の場合，「報告書A」のV2を参照するときには，レンディション一覧を取得して，Word形式かPDF形式かを指定して参照します。文書の作成者が文書をバージョンアップしたいときは，Wordで文書ファイルを編集するためにWord形式を指定してダウンロードしたり，Wordをインストールしていない環境のユーザはPDF形式を指定してダウンロードしたりするなど，目的やコンテントを参照するマシン環境に応じて参照できます。また，アクセス制御機能と組み合わせたユーザプログラムを作ることによって，対象の文書に対して基本コンテント更新権のあるユーザにはWord形式，基本コンテント参照権しかないユーザにはPDF形式を自動的に参照させるという運用も考えられます。

アクセス制御機能については，「3.15　アクセス制御」を参照してください。

(3)　マスタレンディションおよびサブレンディションのコンテントの更新

マルチレンディション文書のコンテントを更新する場合，明示的にどのレンディションのコンテントを更新するか，指定する必要があります。例えば，600dpiのGIFファイルをマスタレンディション，300dpiのGIFファイルをサブレンディションとして管理している場合に，300dpiのGIFファイルを更新するときは，該当する文書のレンディションタイプを指定してください。

なお，レンディションタイプを指定しない場合は，マスタレンディションのコンテントが更新されます。

レンディションのコンテントを更新する場合は，レンディション間のファイル形式以外の内容が一致するようにご注意ください。

(4)　レンディションの削除

マルチレンディション文書の特定のレンディションを削除したい場合は，マルチレンディション文書に接続して，レンディションタイプを指定して削除できます。ただし，指定されたレンディションがマスタレンディションである場合はレンディションを削除できません。また，存在しないレンディションタイプのレンディションを削除しようとするとエラーになります。

なお，マルチレンディション文書自体を削除した場合は，すべてのレンディションが削除されます。

(5)　レンディションの検索

レンディションタイプを表すdbrProp_RenditionTypeプロパティは，属性検索の条件には指定できません。例えば，「マスタレンディションのレンディションタイプが"MIME::application/ms-word"である文書を検索する」のような指定はできません。また，検索結果として，レンディションタイプを取得することもできません。レンディションタイプを参照したいときは，ほかの検索条件によって参照したい文書を特定してから，GetRenditionListAndLockメソッドまたはGetRenditionListメソッドによって取得してください。

また，マルチレンディション文書であっても，作成できる全文検索インデクスは一つです。文書を更新した場合などに更新したコンテントから作成される全文検索インデクスは，マスタレンディションのコンテントから作成されます。

3.4.3　レンディションのプロパティ

マルチレンディションの各レンディションは，プロパティを設定して管理できます。

レンディションに設定されているプロパティは，次の4種類です。

dbrProp_RenditionTypeプロパティ

dbrProp_RetrievalNameプロパティ

dbrProp_RenditionStatusプロパティ

dbrProp_ContentTypeプロパティ

なお，レンディションのプロパティとしてユーザ定義プロパティは設定できません。

ここでは，次の図に示すようなレンディションのプロパティの管理例を使用して，それぞれのプロパティについて説明します。

図3-21　レンディションのプロパティの管理例

＜この項の構成＞

(1)　レンディションタイプを表すプロパティ（dbrProp_RenditionTypeプロパティ）

(2)　ファイル名を表すプロパティ（dbrProp_RetrievalNameプロパティ）

(3)　レンディションの更新状態を表すプロパティ（dbrProp_RenditionStatusプロパティ）

(4)　dbrProp_RenditionStatusプロパティとメソッドの関係

(5)　レンディションのコンテント種別を表すプロパティ（dbrProp_ContentTypeプロパティ）

(1)　レンディションタイプを表すプロパティ（dbrProp_RenditionTypeプロパティ）

図3-21の例では，「図A」というバージョンなし文書のマスタレンディションとサブレンディションに，同じGIF形式でも異なる解像度（マスタレンディションは600dpi，サブレンディションは300dpi）で保存した文書ファイルを登録しています。マルチレンディション管理では，同じレンディションタイプを重複して登録できません。しかし，例えば，MIME名でレンディションタイプを統一している場合，"MIME::タイプ/サブタイプ ( コメント )"の形式でレンディションタイプを指定できるため，同じ拡張子のファイルでもレンディションタイプを重複させないで登録できます。この例の場合，"MIME::image/gif ( 600 )"および"MIME::image/gif ( 300 )"のように，コメントまで指定したレンディションタイプを設定して二つのGIF形式のレンディションを登録しています。

レンディションタイプは，文書の新規作成時や文書ファイルの更新時またはレンディションの追加時に指定します。このとき，レンディションタイプの指定を省略すると，レンディションタイプは設定されません。ファイルの拡張子から判断されて設定されることはありません。したがって，文書の新規作成時または更新時には，適切なレンディションタイプを設定してください。この例のように拡張子が同じでもファイルの保存状態などによって別々のレンディションに登録したい場合は，ファイルの拡張子だけでなく，コメントまで指定したレンディションタイプを明示的に指定してください。

マスタレンディションのレンディションタイプの値は，文書（バージョンなし文書またはバージョン付き文書）の新規作成時または文書ファイルの更新時に，文書のdbrProp_RenditionTypeプロパティの値として設定されます。したがって，文書のdbrProp_RenditionTypeプロパティをGetPropertyValuesメソッドまたはGetPropertyValuesAndLockメソッドで取得すると，マスタレンディションのレンディションタイプの値が取得されます。

また，UpdateContentAndRenditionTypeメソッドで，引数に変更前のレンディションタイプを指定しない形式を使用した場合は，マスタレンディションのレンディションタイプの値が更新されます。引数に変更前のレンディションタイプを指定する形式を使用した場合，指定したレンディションタイプを持つマスタレンディションまたはサブレンディションのレンディションタイプの値が更新されます。

サブレンディションのレンディションタイプは，GetRenditionListAndLockメソッドまたはGetRenditionListメソッドでレンディション一覧を取得する時にだけ取得できます。GetPropertyValuesAndLockメソッドまたはGetPropertyValuesメソッドや検索結果一覧の情報としては取得できません。

次に，レンディションタイプの指定方法について説明します。

レンディションタイプの指定方法

レンディションタイプは，レンディションのコンテントの形式を表すプロパティです。このプロパティの値によって，それぞれのレンディションを識別します。このため，マルチレンディション文書の各レンディションのレンディションタイプは，一意である必要があります。

レンディションタイプには任意の文字列を指定できます。レンディションタイプは，パラメタやコメントおよびその間に含まれる区切り記号や空白，大文字・小文字の違いなども含めて区別されます。レンディションタイプには，MIME名を使用することをお勧めします。

なお，CreateObjectメソッドやUpdateContentメソッドなどで全文検索インデクスを作成する場合には，レンディションタイプは「MIME:text/」で始まる値にしてください。

ここでは，MIME名の推奨形式について説明します。

MIME::タイプ/サブタイプ△〔;△パラメタ△〔;△パラメタ△〕…〕〔△(コメント群)〔△(コメント群)〕…〕

パラメタ ::= 属性 "=" 値
コメント群 ::= コメント | (コメント群)

タイプ，サブタイプおよび属性に指定できる文字

タイプ，サブタイプおよびパラメタの属性を指定するときは，ASCII-7Bitの文字のうち，次の文字を除いた文字を使用して指定してください。

(　)　<　>　@　,　;　:　¥　"　/　[　]　/　=　および0x1F以下の値

属性の値に指定できる文字

パラメタの属性の値を指定するときは，属性と同じ形式の文字列を指定するかまたはASCII-7Bitの文字のうち，次の文字を除いた文字を使用して指定してください。

(　)　<　>　@　,　;　:　"　/　[　]　/　=　および0x1F以下の値

CRのあとには必ずLFを指定してください。

コメント

コメントを指定するときは，ASCII-7Bit文字列で指定してください。ただし，"(" ")" を指定する場合は，"¥"を直前に指定してエスケープしてください。値として"¥"を指定したい場合は"¥¥"と指定します（"¥"は次に指定した文字が構文上の区切りでないことを示すために使用します。すなわち，"¥"の次に指定した文字は，そのままのデータとして扱われます）。CRのあとには必ずLFを指定してください。

△は空白(0x20)0個以上です。

(2)　ファイル名を表すプロパティ（dbrProp_RetrievalNameプロパティ）

各レンディションには，ファイル名を表すdbrProp_RetrievalNameプロパティを設定できます。dbrProp_RetrievalNameプロパティは，文書の新規作成時や文書ファイルの更新時またはレンディションの追加時に，指定した文書ファイルのファイル名が設定されます。図3-21の例ではマスタレンディションにはzuA600.gif，サブレンディションにはzuA300.gifという値が設定されています。また，dbrProp_RetrievalNameプロパティの値は，登録済みの各レンディションのレンディションタイプを指定してPutRenditionPropertyValuesメソッドで設定・更新できます。マスタレンディションのdbrProp_RetrievalNameプロパティは，PutPropertyValuesメソッドでも設定できます。GetPropertyValuesメソッドや検索結果として取得するプロパティとしてdbrProp_RetrievalNameプロパティを指定すると，マスタレンディションのdbrProp_RetrievalNameプロパティの値が取得されます。ただし，dbrProp_RetrievalNameプロパティは，属性検索の条件としては指定できません（例えば，「マスタレンディションの文書ファイルのファイル名が"zuA600.gif"である文書を検索する」のように指定できません）。サブレンディションのdbrProp_RetrievalNameプロパティの値は，GetRenditionListAndLockメソッドまたはGetRenditionListメソッドでレンディション一覧を取得する時にだけ取得できます。

(3)　レンディションの更新状態を表すプロパティ（dbrProp_RenditionStatusプロパティ）

マルチレンディション管理機能は，同じ内容を持つ複数のファイル形式を一つの文書として管理する機能です。このため，マスタレンディションとサブレンディションは，常に同じ内容にしておく必要があります。マスタレンディションのコンテントを更新した場合には，サブレンディションのコンテントも更新する必要があります。

マスタレンディションに対するサブレンディションの更新状態は，CdbrDocumentクラスのプロパティであるdbrProp_RenditionStatusプロパティによって表されます。このプロパティは，Integer32型の4バイトの値として表されます。上位2バイトと下位2バイトで，それぞれ意味を持ちます。

サブレンディションの更新状態は，dbrProp_RenditionStatusプロパティの下位2バイトで確認できます。下位2バイトによって表される内容を状態フラグといいます。この値は，マスタレンディションまたはサブレンディションのコンテントを更新した時に，DocumentBrokerによって設定されます。

サブレンディションのコンテントをDocumentBroker Rendering Optionのレンディション変換機能を使用して作成，登録するかどうかの設定は，dbrProp_RenditionStatusプロパティの上位2バイトで表されます。また，レンディション変換でエラーが発生したことを示す値も，上位2バイトの値として設定されます。上位2バイトによって表される内容を変換フラグといいます。なお，変換フラグは，DocumentBroker Rendering Optionを使用しない場合は使用しません。

マスタレンディションの場合，dbrProp_RenditionStatusプロパティの値は常に「DBR_RENDSTATUS_MASTERREND」（00000000：4バイトの16進数）です。

次に，サブレンディションの状態フラグと変換フラグについて説明します。

(a)　状態フラグ

状態フラグは，dbrProp_RenditionStatusプロパティの下位2バイトの値として設定されます。この値はDocumentBrokerによって設定されます。

サブレンディションのdbrProp_RenditionStatusプロパティの下位2バイトに設定される値を次の表に示します。プロパティのデータ型は，Integer32型です。

表3-2　dbrProp_RenditionStatusプロパティの下位2バイトの値

定数
対応する値
（16進数値）
説明

DBR_RENDSTATUS_NO_SUBREND
0001
指定したサブレンディションに対応するマスタレンディションのコンテントは登録済みですが，サブレンディションのコンテントが登録されていません。

DBR_RENDSTATUS_SUBREND_EXIST
0002
指定したサブレンディションに対応するマスタレンディションおよびサブレンディションのコンテントが登録されています。

DBR_RENDSTATUS_MASTERREND_UPDATE
0004
指定したサブレンディションに対応するマスタレンディションが更新されていますが，サブレンディションが更新されていないため，マスタレンディションとサブレンディションの内容が一致しません。

(b)　変換フラグ

変換フラグは，dbrProp_RenditionStatusプロパティの上位2バイトの値として表されます。この値はPutRenditionPropertyValuesメソッドによって変更できます。また，DocumentBroker Rendering Optionによるレンディション変換実行時にエラーが発生した場合には，変換エラーを示す値が設定されます。

サブレンディションのdbrProp_RenditionStatusプロパティの上位2バイトの値を次の表に示します。プロパティのデータ型は，Integer32型です。

表3-3　dbrProp_RenditionStatusプロパティの上位2バイトの値

定数
対応する値
（16進数値）
説明

DBR_RENDSTATUS_CONVERT_NOTREQUIRED
0000
DocumentBroker Rendering Optionによるレンディション変換の対象になりません。

DBR_RENDSTATUS_CONVERT_REQUIRED
0001
DocumentBroker Rendering Optionによるレンディション変換の対象になります。

DBR_RENDSTATUS_CONVERT_ERROR
0002
DocumentBroker Rendering Optionで変換エラーが発生しました。

注意

変換エラーが発生した場合，プロパティを更新するメソッド（PutRenditionPropertyValuesメソッド）によって変換フラグをDBR_RENDSTATUS_CONVERT_NOTREQUIREDまたはDBR_RENDSTATUS_CONVERT_REQUIREDに変更することはできません。この場合は，サブレンディションまたはマスタレンディションのコンテントを，UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドによって更新してください。これによって，変換フラグが遷移します。

なお，状態フラグによって，変換フラグが取る値が異なります。

状態フラグと変換フラグの組み合わせについて，次の表に示します。

表3-4　状態フラグと変換フラグの組み合わせ

状態フラグ
変換フラグ

DBR_RENDSTATUS_SUBREND_EXIST

DBR_RENDSTATUS_CONVERT_NOTREQUIRED

DBR_RENDSTATUS_CONVERT_REQUIRED

DBR_RENDSTATUS_NO_SUBREND

DBR_RENDSTATUS_CONVERT_REQUIRED

DBR_RENDSTATUS_CONVERT_ERROR

DBR_RENDSTATUS_MASTERREND_UPDATE

DBR_RENDSTATUS_CONVERT_NOTREQUIRED

DBR_RENDSTATUS_CONVERT_REQUIRED

DBR_RENDSTATUS_CONVERT_ERROR

例えば，レンディションを追加する時にファイルパスを指定しなかった場合，変換フラグにDocumentBroker Rendering Optionによるレンディション変換を要求しないDBR_RENDSTATUS_CONVERT_NOTREQUIREDを指定することはできません。

また，ファイルパスを指定して更新したいサブレンディションに対しては，マスタレンディションとサブレンディションが不一致であることを表すDBR_RENDSTATUS_MASTERREND_UPDATEの状態でも，レンディション変換を要求しないDBR_RENDSTATUS_CONVERT_NOTREQUIREDを指定することができます。

(4)　dbrProp_RenditionStatusプロパティとメソッドの関係

dbrProp_RenditionStatusプロパティとメソッドの関係について説明します。

次のメソッドについて説明します。

dbrProp_RenditionStatusプロパティの値を取得するメソッド

dbrProp_RenditionStatusプロパティの値を遷移させるメソッド

dbrProp_RenditionStatusプロパティの変換フラグを設定するメソッド

dbrProp_RenditionStatusプロパティの値によって制限されるメソッド

(a)　dbrProp_RenditionStatusプロパティの値を取得するメソッド

dbrProp_RenditionStatusプロパティの値は，次のメソッドで取得できます。

GetRenditionListAndLockメソッド

GetRenditionListメソッド

(b)　dbrProp_RenditionStatusプロパティの値を遷移させるメソッド

dbrProp_RenditionStatusプロパティの値は，次のメソッドをコールした時に，DocumentBrokerによって変更されます。

AddRenditionメソッド

UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッド

メソッドによるプロパティの値の遷移を，次の図に示します。図中の(1)から(8)の番号は，表3-5から表3-7の説明中の番号と対応しています。

図3-22　メソッドによるdbrProp_RenditionStatusプロパティの値の遷移

図3-22の遷移の詳細を，メソッドごとに説明します。

AddRenditionメソッド
追加したサブレンディションのプロパティには，引数pFilePathの指定に応じて，次の値が設定されます。

表3-5　AddRenditionメソッドによって設定されるdbrProp_RenditionStatusプロパティの値

引数pFilePathの値
変換フラグ（上位2バイト）
状態フラグ（下位2バイト）

サブレンディションに登録するファイル
（(1)の遷移）
DBR_RENDSTATUS
_CONVERT_NOTREQUIRED
DBR_RENDSTATUS
_SUBREND_EXIST

NULL
（lConvertTypeにDBR_CONVERT_TYPE_BATCHを指定した場合）
（(2)の遷移）
DBR_RENDSTATUS
_CONVERT_REQUIRED
DBR_RENDSTATUS
_NO_SUBREND

UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッド（マスタレンディションを更新する場合）
メソッドをコールした時点の状態フラグに応じて，次のように遷移します。

表3-6　UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドによるdbrProp_RenditionStatusプロパティの値の遷移（マスタレンディションを更新する場合）

メソッドをコールした時点の状態フラグ
変換フラグ（上位2バイト）
メソッドをコールしたあとの状態フラグ（下位2バイト）

DBR_RENDSTATUS
_SUBREND_EXIST
（(3)の遷移）

DBR_RENDSTATUS_CONVERT_NOTREQUIREDの場合：

DBR_RENDSTATUS_CONVERT_NOTREQUIRED

（遷移しない）

DBR_RENDSTATUS
_MASTERREND_UPDATE

DBR_RENDSTATUS_CONVERT_REQUIREDの場合：

DBR_RENDSTATUS_CONVERT_REQUIRED

（遷移しない）

DBR_RENDSTATUS
_MASTERREND_UPDATE
（(4)の遷移）

DBR_RENDSTATUS_CONVERT_ERRORの場合：

DBR_RENDSTATUS_CONVERT_REQUIRED※

DBR_RENDSTATUS
_MASTERREND_UPDATE
（遷移しない）

DBR_RENDSTATUS_CONVERT_REQUIREDの場合：

DBR_RENDSTATUS_CONVERT_REQUIRED

（遷移しない）

DBR_RENDSTATUS_CONVERT_NOTREQUIREDの場合：

DBR_RENDSTATUS_CONVERT_NOTREQUIRED

（遷移しない）

DBR_RENDSTATUS
_NO_SUBREND
（(5)の遷移）

DBR_RENDSTATUS_CONVERT_ERRORの場合：

DBR_RENDSTATUS_CONVERT_REQUIRED※

DBR_RENDSTATUS
_NO_SUBREND
（遷移しない）

DBR_RENDSTATUS_CONVERT_REQUIREDの場合：

DBR_RENDSTATUS_CONVERT_REQUIRED

（遷移しない）

注※

DocumentBroker Rendering Optionによるレンディション変換でエラーが発生したあとにマスタレンディションを更新し直す場合は，更新するコンテントにエラーの要因がないかどうか確認してください。または，DocumentBroker Rendering Optionを使用しないで，サブレンディションのコンテントを登録してください。

UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッド（サブレンディションを更新する場合）
メソッドをコールした時点の状態フラグに応じて，次のように遷移します。

表3-7　UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドによるdbrProp_RenditionStatusプロパティの値の遷移（サブレンディションを更新する場合）

メソッドをコールした時点の状態フラグ
変換フラグ（上位2バイト）
メソッドをコールしたあとの状態フラグ（下位2バイト）

DBR_RENDSTATUS
_SUBREND_EXIST
（(6)の遷移）
メソッドをコールした時点の変換フラグ
（遷移しない）
DBR_RENDSTATUS
_SUBREND_EXIST
（遷移しない）

DBR_RENDSTATUS
_MASTERREND_UPDATE
（(7)の遷移）
DBR_RENDSTATUS_CONVERT_NOTREQUIRED
DBR_RENDSTATUS
_SUBREND_EXIST

DBR_RENDSTATUS
_NO_SUBREND
（(8)の遷移）
DBR_RENDSTATUS_CONVERT_NOTREQUIRED
DBR_RENDSTATUS
_SUBREND_EXIST

(c)　dbrProp_RenditionStatusプロパティの変換フラグを設定するメソッド

dbrProp_RenditionStatusプロパティの変換フラグは，PutRenditionPropertyValuesメソッドで設定できます。

例えば，ファイルパスを指定して追加したサブレンディションのコンテントを，レンディション変換によって更新されるようにする場合や，一度DocumentBroker Rendering Optionによるレンディション変換でエラーが発生したサブレンディションを，マスタレンディションのコンテントを更新したあとでレンディション変換の対象から外す場合などに，明示的に変換フラグを変更してください。

設定できる値は次のどちらかです。

DBR_RENDSTATUS_CONVERT_NOTREQUIRED

DBR_RENDSTATUS_CONVERT_REQUIRED

ただし，次の設定はできません。

PutRenditionPropertyValuesメソッドで変換フラグを設定できない場合

状態フラグがDBR_RENDSTATUS_NO_SUBRENDの時，変換フラグにDBR_RENDSTATUS_CONVERT_NOTREQUIREDは設定できません。
この場合は，UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールするか，DocumentBroker Rendering Optionによるレンディション変換を実行して，サブレンディションのコンテントを登録してください。これによって変換フラグがDBR_RENDSTATUS_CONVERT_NOTREQUIREDに遷移します。

変換フラグがDBR_RENDSTATUS_CONVERT_ERRORの時，変換フラグにDBR_RENDSTATUS_CONVERT_NOTREQUIREDまたはDBR_RENDSTATUS_CONVERT_REQUIREDは設定できません。
この場合は，マスタレンディションまたはサブレンディションに対して，UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールしてコンテントを更新してください。これによって，変換フラグが，DBR_RENDSTATUS_CONVERT_REQUIRED（マスタレンディションに対してメソッドをコールした場合）またはDBR_RENDSTATUS_CONVERT_NOTREQUIRED（サブレンディションに対してメソッドをコールした場合）に遷移します。

(d)　dbrProp_RenditionStatusプロパティの値によって制限されるメソッド

状態フラグによっては，ChangeMasterRenditionメソッドの実行が制限されます。

ChangeMasterRenditionメソッドの実行が制限される場合

状態フラグがDBR_RENDSTATUS_NO_SUBRENDの場合，メソッドは実行できません。
この場合は，サブレンディションに対してUpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールしてコンテントを登録するか，DocumentBroker Rendering Optionを使用してレンディション変換を実行してから，ChangeMasterRenditionメソッドをコールしてください。

状態フラグがDBR_RENDSTATUS_MASTERREND_UPDATEの場合は，変換フラグがDBR_RENDSTATUS_CONVERT_NOTREQUIREDのときだけ，メソッドが実行できます。変換フラグがDBR_RENDSTATUS_CONVERT_REQUIREDまたはDBR_RENDSTATUS_CONVERT_ERRORのとき，メソッドは実行できません。
この場合は，変換フラグをDBR_RENDSTATUS_CONVERT_NOTREQUIREDに変更するか，またはマスタレンディションとサブレンディションの状態を一致させてから，ChangeMasterRenditionメソッドをコールしてください。

(e)　DocumentBroker Rendering Optionによるサブレンディション更新の例

dbrProp_RenditionStatusプロパティの値の遷移の例として，DocumentBroker Rendering Optionによるサブレンディション更新の場合の例を，次の図に示します。

図3-23　DocumentBroker Rendering Optionによるサブレンディション更新の例

図3-23を説明します。

図3-23の文書は，マスタレンディションとしてWord形式のファイルA.doc，サブレンディションとしてPDF形式のファイルA.pdfを持つ，バージョンなし文書です。1.の時，マスタレンディションとサブレンディションの内容は一致しています。状態フラグはDBR_RENDSTATUS_SUBREND_EXISTです。
なお，DVはDocVersionオブジェクト，RはRenditionオブジェクト，CTはContentTransferオブジェクトを表します。R(MR)はマスタレンディションを表します。

UpdateContentメソッドによって，マスタレンディションのコンテントをB.docに更新します。このとき，マスタレンディションとサブレンディションの状態が不一致になるため，サブレンディションの状態フラグがDBR_RENDSTATUS_MASTERREND_UPDATEに遷移します。

PutRenditionPropertyValuesメソッドによって，サブレンディションのdbrProp_RenditionStatusプロパティの変換フラグに，DBR_RENDSTATUS_CONVERT_REQUIREDを設定します。

DocumentBroker Rendering Optionによってレンディション変換を実行します。3.で変換フラグにDBR_RENDSTATUS_CONVERT_REQUIREDを設定したサブレンディションは，レンディション変換の対象になります。レンディション変換は，マスタレンディションのコンテント（B.doc）を基に実行されます。

サブレンディションのコンテントとして，マスタレンディションのB.docを基にレンディション変換したファイルB.pdfが登録されます。このとき，サブレンディションの状態フラグは，DBR_RENDSTATUS_SUBREND_EXISTに遷移します。

(5)　レンディションのコンテント種別を表すプロパティ（dbrProp_ContentTypeプロパティ）

レンディションごとのコンテントの種別は，dbrProp_ContentTypeプロパティによって知ることができます。コンテントの種別から，レンディションのコンテントが次のうちのどれかを知ることができます。

シングルファイル文書のコンテント

マルチファイル文書のコンテント

リファレンスファイル文書のコンテント

File Link文書のコンテント

上記以外のコンテント

このプロパティは，Integer32型の４バイトの値として表されます。

ユーザはdbrProp_ContentTypeプロパティを設定できません。dbrProp_ContentTypeプロパティを参照する場合は，GetRenditionListメソッドおよびGetRenditionListAndLockメソッドを使用します。また，マスタレンディションのdbrProp_ContentTypeプロパティは，GetPropertyValuesメソッド，GetPropertyValuesAndLockメソッド，または一部の一覧取得メソッドでも参照できます。

dbrProp_ContentTypeの値とコンテント種別の関係を次の表に示します。

表3-8　dbrProp_ContentTypeの値とコンテント種別の関係

dbrProp_ContentTypeの値 | 対応する値 | コンテント種別
DBR_CONTENTTYPE_CONTENT | 0 | ContentTransferオブジェクト（シングルファイル文書であるコンテント）です。
DBR_CONTENTTYPE_FILELINK | 1 | ContentFileLinkオブジェクト（File Link文書であるコンテント）です。
DBR_CONTENTTYPE_MULTIFILE | 2 | ContentTransfersオブジェクト（マルチファイル文書であるコンテント）です。
DBR_CONTENTTYPE_REFERENCE | 3 | ContentReferenceオブジェクト（リファレンスファイル文書であるコンテント）です。
DBR_CONTENTTYPE_OTHER | -1 | 上記以外のコンテントを持つオブジェクトです。

3.4.4　マルチレンディション管理に関する操作

マルチレンディション管理に関する操作を実行する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。

レンディションの追加

レンディションの削除

マスタレンディションの変更

レンディション一覧の取得

レンディションのプロパティの設定

マルチレンディション文書のバージョンアップ

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。また，すべての操作は，マルチレンディション文書に接続した状態で実行します。マルチレンディション文書に接続するためには，次の準備をしてください。

準備

レンディションを追加する文書の構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得します。

CdbrDocumentオブジェクトにレンディションを追加する場合は，DMAオブジェクトのDocVersionオブジェクトのOIIDを取得します。

CdbrVersionableDocumentオブジェクトにレンディションを追加する場合は，DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを取得します。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　レンディションの追加

(2)　レンディションの削除

(3)　マスタレンディションの変更

(4)　レンディション一覧の取得

(5)　レンディションのプロパティの設定

(6)　マルチレンディション文書のバージョンアップ

(1)　レンディションの追加

すでに登録されている文書（マスタレンディション）に対して，サブレンディションを追加する場合の操作について説明します。ここでは，DocumentBroker Rendering Optionを使用しない場合と使用する場合について説明します。

(a)　DocumentBroker Rendering Optionを使用しない場合

レンディションを追加する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディションを追加します。
AddRenditionメソッドをコールします。このとき，サブレンディションに登録するコンテントのファイルパスをURL形式で指定します。また，追加するサブレンディションに設定するレンディションタイプと，追加するレンディションに設定するプロパティ（dbrProp_RetrievalNameプロパティ）を指定します。

レンディションを追加するコールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，AddRenditionメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.txt"」のように指定してください。

レンディションを追加するコールシーケンス

pSession->Begin();
//…
//レンディションを追加する文書のOIIDを取得する
//レンディションに設定するdbrProp_RetrievalNameプロパティの値を
//構造体PropListに登録する
//…
CdbrDocument Doc;
//レンディションを追加する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションを追加して，プロパティを設定する
Doc.AddRendition("file:///tmp/sample.txt",
                "MIME::text/plain",&PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(b)　DocumentBroker Rendering Optionを使用する場合

レンディションを追加する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディションを追加します。
AddRenditionメソッドをコールします。メソッドは，レンディション変換の方法を指定する引数lConvertTypeがある形式を使用します。
それぞれの引数には，次の値を指定します。

pFilePath
NULLを指定します。

pRenditionType
作成するコンテントに対応するレンディションタイプを指定します。

pPropList
追加するサブレンディションのdbrProp_RetrievalNameプロパティの値を設定した構造体を指定します。

lConvertType
DBR_CONVERT_TYPE_BATCHを指定します。

DocumentBroker Rendering Optionのレンディション変換コマンドを実行します。

レンディションを追加するコールシーケンスの例を次に示します。

レンディションを追加するコールシーケンス

pSession->Begin();
//…
CdbrDocument Doc;
SDBR_PROP     Props;
SDBR_PROPLIST PropList;
//レンディションを追加する文書のOIIDを取得する
//レンディションに設定するdbrProp_RetrievalNameプロパティの値を
//構造体Propsに登録する
//…
//レンディションを追加する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションを追加して，プロパティを設定する
Doc.AddRendition(NULL,
               "MIME::text/plain",&PropList,
                DBR_CONVERT_TYPE_BATCH);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2)　レンディションの削除

マルチレンディション文書のサブレンディションを削除する場合の操作について説明します。

レンディションを削除する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディションを削除します。
DeleteRenditionメソッドをコールします。

レンディションを削除するコールシーケンスの例を次に示します。

レンディションを削除するコールシーケンス

pSession->Begin();
//…
//レンディションを削除する文書のOIIDを取得する
//…
CdbrDocument Doc;
//レンディションを削除する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションを削除する
Doc.DeleteRendition("MIME::text/plain");
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(3)　マスタレンディションの変更

マルチレンディション文書のマスタレンディションを変更する場合の操作について説明します。マスタレンディションを変更すると，それまでマスタレンディションだったレンディションは，サブレンディションに変更されます。

マスタレンディションを変更する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

マスタレンディションに変更するサブレンディションのレンディションタイプを指定して，マスタレンディションを変更します。
ChangeMasterRenditionメソッドをコールします。

マスタレンディションを変更するコールシーケンスの例を次に示します。

マスタレンディションを変更するコールシーケンス

pSession->Begin();
//…
//マスタレンディションを変更する文書のOIIDを取得する
//…
CdbrDocument Doc;
//マスタレンディションを変更する文書に接続する
Doc.SetOIID(pSession,pOIID);
//マスタレンディションを変更する
Doc.ChangeMasterRendition("MIME::text/plain");
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(4)　レンディション一覧の取得

マルチレンディション文書に登録されているレンディションの一覧を取得する場合の操作について説明します。

レンディション一覧を取得する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディション一覧を取得します。
GetRenditionListAndLockメソッドまたはGetRenditionListメソッドをコールします。

レンディション一覧を取得するコールシーケンスの例を次に示します。

レンディション一覧を取得するコールシーケンス

pSession->Begin();
//…
//レンディション一覧を取得する文書のOIIDを取得する
//…
CdbrDocument Doc;
//レンディション一覧を取得する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディション一覧を取得する
Doc.GetRenditionListAndLock(2,&PropDefList,
                           ppRenditionList, DMA_LOCK_READ);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(5)　レンディションのプロパティの設定

マルチレンディション文書の各レンディションのdbrProp_RetrievalNameプロパティの値を設定する場合の操作について説明します。

レンディションを削除する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディションにプロパティを設定します。
PutRenditionPropertyValuesメソッドをコールします。

レンディションにプロパティを設定するコールシーケンスの例を次に示します。

レンディションにプロパティを設定するコールシーケンス

pSession->Begin();
//…
//レンディションにプロパティを設定する文書のOIIDを取得する
//…
CdbrDocument  Doc;
SDBR_PROP     Props;
SDBR_PROPLIST PropList;
//プロパティ識別子にdbrProp_RetrievalNameを指定して，
//必要な情報を設定したプロパティ構造体Propsを作成しておく
//…
//レンディションにプロパティを設定する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションにプロパティを設定する
Doc.PutRenditionPropertyValues("MIME::text/plain",
                               &PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(6)　マルチレンディション文書のバージョンアップ

マルチレンディション文書をバージョンアップする場合の操作について説明します。ここでは，DocumentBroker Rendering Optionを使用しない場合と使用する場合について説明します。

(a)　DocumentBroker Rendering Optionを使用しない場合

バージョンアップする文書に接続します。
CdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

バージョン付き文書をチェックアウトします。
CdbrVersionable::CheckOutメソッドをコールします。これによって，次バージョンの追加を予約する，仮のバージョンが作成されます。このとき，仮のバージョンとしてコピーされるのは，マスタレンディションだけです。

マスタレンディションのコンテントを更新します。
CdbrVersionableDocument::UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールします。

仮のバージョンに，レンディションを追加します。
CdbrVersionableDocument::AddRenditionメソッドをコールします。このとき，サブレンディションに登録するファイルパスを指定します。

バージョン付き文書をチェックインします。
CdbrVersionableDocument::VersionCheckInメソッドをコールします。これによって，仮のバージョンが最新バージョンとして確定します。

コールシーケンスの例を次に示します。なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，UpdateContentメソッドの引数に指定するファイルパスを「"file:///c:¥temp¥sample.doc"」，AddRenditionメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.pdf"」のように指定してください。

マルチレンディション文書をバージョンアップするコールシーケンス（DocumentBroker Rendering Optionを使用しない場合）

//あらかじめマスタレンディションを更新するファイルを基に，
// サブレンディションを更新するファイルを作成しておく
pSession->Begin();
//…
//バージョンアップする文書のOIIDを取得する
//…
CdbrVersionableDocument VrDoc;
//バージョンアップする文書に接続する
VrDoc.SetOIID(pSession,pOIID);
//文書をチェックアウトする
VrDoc.VersionCheckOut(&pReservedVerId);
//マスタレンディションのコンテントを更新する
VrDoc.UpdateContent("file:///tmp/sample.doc",NULL,
                    pReservedVerId, DBR_CREATE_INDEX);
//仮のバージョンにレンディションを追加する
//（ファイルパスには事前に作成しておいた
//  サブレンディションのファイルのパスを指定する）
VrDoc.AddRendition(pReservedVerId,"file:///tmp/sample.pdf,
                  "MIME::application/pdf",&PropList);
//文書をチェックインする
VrDoc.VersionCheckIn();
VrDoc.ReleaseObject();
pSession->Commit();

(b)　DocumentBroker Rendering Optionを使用する場合

バージョンアップする文書に接続します。
CdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

バージョン付き文書をチェックアウトします。
CdbrVersionable::CheckOutメソッドをコールします。これによって，次バージョンの追加を予約する，仮のバージョンが作成されます。このとき，仮のバージョンとしてコピーされるのは，マスタレンディションだけです。

マスタレンディションのコンテントを更新します。
CdbrVersionableDocument::UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールします。

仮のバージョンに，レンディションを追加します。
CdbrVersionableDocument::AddRenditionメソッドをコールします。このとき，サブレンディションに登録するファイルパスを指定する引数pFilePathにはNULLを指定します。レンディション変換の方法を指定する引数lConvertTypeには，DBR_CONVERT_TYPE_BATCHを指定します。

DocumentBroker Rendering Optionのレンディション変換を実行します。
これによって，手順3.で登録したマスタレンディションのコンテントを基に，手順4.で追加したサブレンディションのコンテントが作成され，登録されます。

バージョン付き文書をチェックインします。
CdbrVersionableDocument::VersionCheckInメソッドをコールします。これによって，仮のバージョンが最新バージョンとして確定します。

コールシーケンスの例を次に示します。なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，UpdateContentメソッドの引数に指定するファイルパスを，「"file:///c:¥temp¥sample.doc"」のように指定してください。

マルチレンディション文書をバージョンアップするコールシーケンス（DocumentBroker Rendering Optionを使用する場合）

pSession->Begin();
//…
//バージョンアップする文書のOIIDを取得する
//…
CdbrVersionableDocument VrDoc;
//バージョンアップする文書に接続する
VrDoc.SetOIID(pSession,pOIID);
//文書をチェックアウトする
VrDoc.VersionCheckOut(&pReservedVerId);
//マスタレンディションのコンテントを更新する
VrDoc.UpdateContent("file:///tmp/sample.doc",NULL,
                    pReservedVerId, DBR_CREATE_INDEX);
//仮のバージョンにレンディションを追加する
//（ファイルパスにはNULLを指定する）
VrDoc.AddRendition(pReservedVerId,NULL,
                  "MIME::application/pdf",
                  &PropList,DBR_CONVERT_TYPE_BATCH);
//DocumentBroker Rendering Optionを使用して
// レンディション変換を実行する
//…
//文書をチェックインする
VrDoc.VersionCheckIn();
VrDoc.ReleaseObject();
pSession->Commit();

3.5　文書のマルチファイル管理

この節では，文書のマルチファイル管理について説明します。

＜この節の構成＞

3.5.1　マルチファイル管理の概要

3.5.2　マルチファイル管理に関する操作

3.5.1　マルチファイル管理の概要

ここでは，マルチファイル管理の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　マルチファイル文書を構成するDMAオブジェクト

(1)　機能

マルチファイルの管理とは，一つの文書に複数のファイルを登録し，一括して管理することです。一つの文書で複数のファイルを管理することによって，次のような文書管理ができます。

複数のファイルから構成される文書を一括して登録する

複数のファイルから構成される文書を一括して取得する

バージョンなし文書およびバージョン付き文書は，マルチファイル文書として管理できます。ただし，マルチファイルを管理するバージョンなし文書およびバージョン付き文書では，マルチレンディション管理機能は使用できません。文書間リレーションを設定したり，コンテナの包含要素として管理したり，バージョンを管理したりなど，マルチレンディション以外の機能は使用できます。

また，マルチファイルを管理する場合と，しない場合とで，バージョンなし文書およびバージョン付き文書を構成するDMAオブジェクトが異なります。このため，バージョンなし文書およびバージョン付き文書の操作に使用するメソッドの引数が異なる場合があります。例えば，マルチファイルを管理しないバージョンなし文書はCdbrDocument::CreateObjectメソッドの引数に登録するファイルのパス名を指定して作成し，マルチファイルを管理するバージョンなし文書はCdbrDocument::CreateObjectメソッドの引数に登録するファイルのファイルパス情報が設定されたSDBR_PATHLIST構造体を指定して作成します。また，レンディションを追加する場合に使用するCdbrDocument::AddRenditionメソッドまたはCdbrVersionableDocument::AddRenditionメソッドのように，マルチファイルを管理するバージョンなし文書およびバージョン付き文書では使用できないメソッドもあります。詳細については，各メソッドの説明を参照してください。

(2)　マルチファイル文書を構成するDMAオブジェクト

マルチファイルの管理では，バージョンなし文書およびバージョン付き文書をマルチファイル文書として管理できます。マルチファイルを管理する場合としない場合とで，バージョンなし文書およびバージョン付き文書を構成するDMAオブジェクトが異なります。

(a)　マルチファイルを管理するバージョンなし文書を構成するDMAオブジェクト

マルチファイルを管理するバージョンなし文書を構成するDMAオブジェクトの種類を次に示します。ContentTransfersオブジェクト以外のオブジェクトについては，マルチファイルを管理しないバージョンなし文書と同様です。

DocVersionオブジェクト

Renditionオブジェクト

ContentTransfersオブジェクト
文書の実体であるコンテントデータを管理するオブジェクトです。複数のファイルを管理できます。

マルチファイルを管理するバージョンなし文書とDMAオブジェクトの関係を次の図に示します。

図3-24　マルチファイルを管理するバージョンなし文書とDMAオブジェクトの関係

(b)　マルチファイルを管理するバージョン付き文書を構成するDMAオブジェクト

マルチファイルを管理するバージョン付き文書を構成するDMAオブジェクトの種類を次に示します。ContentTransfersオブジェクト以外のオブジェクトについては，マルチファイルを管理しないバージョン付き文書と同様です。また，ContentTransfersオブジェクトについては，マルチファイルを管理するバージョンなし文書と同様です。

ConfigurationHistoryオブジェクト

VersionSeriesオブジェクト

VersionDescriptionオブジェクト

DocVersionオブジェクト

Renditionオブジェクト

ContentTransfersオブジェクト

マルチファイルを管理するバージョン付き文書とDMAオブジェクトの関係を次の図に示します。

図3-25　マルチファイルを管理するバージョン付き文書とDMAオブジェクトの関係

3.5.2　マルチファイル管理に関する操作

マルチファイル管理に関する操作を実行する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。

マルチファイル文書の作成

マルチファイル文書の参照

マルチファイル文書の更新

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

ここでは，マルチファイル文書の操作について説明します。マルチファイルを管理するバージョン付き文書のバージョンの操作については，「3.3.3　バージョン管理機能の操作」を参照してください。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　マルチファイル文書の作成

(2)　マルチファイル文書の参照

(3)　マルチファイル文書の更新

(1)　マルチファイル文書の作成

マルチファイル文書を作成して，データベースに格納する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，マルチファイル文書を登録する時，全文検索インデクスは作成できません。全文検索インデクスは，CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドを実行して作成してください。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体（DMAオブジェクト生成用の構造体）を作成しておきます。

バージョンなし文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。

バージョン付き文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と，dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。

また，登録するファイル数およびファイルパスの情報を持つSDBR_PATHLIST構造体（ファイルパス情報リスト構造体）を作成しておきます。

文書を作成します。
バージョンなし文書を作成する場合は，CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は，CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき，メソッドの引数にSDBR_PATHLIST構造体（ファイルパス情報リスト構造体），レンディションタイプなどを指定します。
文書作成時に登録したレンディションがマスタレンディションとなります。
作成した文書をコンテナと関連づける場合については，「3.9　コンテナを使用した文書管理」を参照してください。

レンディションタイプについての注意事項

文書として登録するファイルの種類を表すレンディションタイプは，登録したファイルの拡張子からは設定されません。レンディションタイプは，CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。

なお，マルチファイル文書では，レンディションタイプは変更できません。

マルチファイル文書を作成するコールシーケンスの例を次に示します。

マルチファイル文書を作成するコールシーケンス

//あらかじめ登録する内容を構造体DMAClassListとして作成しておく

//…
pSession->Begin();
CdbrDocument Doc;
SDBR_PATHLIST PathList;
//マルチファイル文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, PathList,
                "MIME::application/x-edm-undefined", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2)　マルチファイル文書の参照

すでにデータベースに登録されている文書とコンテントとして登録されているファイルを参照する場合に使用するメソッドと，そのメソッドの発行順序について説明します。マルチファイル管理を使用して登録した文書は，コンテントを一括して取得できます。

準備

オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については「4.　オブジェクトの検索」を参照してください。

バージョンなし文書に接続する場合は，構成要素であるDMAオブジェクトの，DocVersionオブジェクトのOIIDを取得しておきます。

バージョン付き文書に接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

参照するコンテントが含まれる文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

参照するコンテントの情報を取得します。
CdbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得するファイルの複写先のパス名を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。このとき，dbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドで取得したSDBR_CONTENTLIST構造体（コンテント情報リスト構造体）を指定します。

マルチファイル文書を参照する場合の，コールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetContentAndLockメソッドの引数に指定するファイルパスを，「"file:///c:¥temp"」のように指定してください。

マルチファイル文書を参照するコールシーケンス

pSession->Begin();
//…
//検索によって参照するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_CONTENTLIST* pContentList=NULL;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定して，マルチファイル文書の複数コンテントの情報を取得する
Doc.GetContentInfo(NULL, &pContentList,
                  DMA_LOCK_READ);
//readロックを設定して，マルチファイル文書の複数コンテントを取得する
Doc.GetContentAndLock("file:///tmp",
                     *pContentList, NULL，
                     DMA_LOCK_READ);
Doc.ReleaseObject();
dbrDelete(pContentList);
//処理の確定
pSession->Commit();

(3)　マルチファイル文書の更新

すでにデータベースに登録されている文書とコンテントとして登録されているファイルを編集して更新する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。マルチファイル管理を使用して登録した文書は，コンテントを一括して更新できます。

更新するコンテントが含まれる文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

更新するコンテントの情報を取得します。
CdbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得するファイルの複写先のパス名を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。このとき，dbrDocument::GetContentInfoメソッドまたはCdbrVersionableDocument::GetContentInfoメソッドで取得したSDBR_CONTENTLIST構造体（コンテント情報リスト構造体）を指定します。

ファイルを編集します。

編集したファイルで文書を更新します。
登録するファイルの情報をSDBR_PATHLIST構造体（ファイルパス情報リスト構造体）で指定して，CdbrDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentメソッドをコールします。

マルチファイル文書を更新する場合の，コールシーケンスの例を次に示します。

なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetContentAndLockメソッドおよびUpdateContentメソッドの引数に指定するファイルパスを，「"file:///c:¥temp"」のように指定してください。

マルチファイル文書を更新するコールシーケンス

pSession->Begin();
//…
//検索によって更新するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_CONTENTLIST* pContentList=NULL;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して，マルチファイル文書の複数コンテントの情報を取得する
Doc.GetContentInfo(NULL, &pContentList,
                  DMA_LOCK_WRITE);
//writeロックを設定して，マルチファイル文書の複数コンテントを取得する
Doc.GetContentAndLock("file:///tmp",
                     *pContentList, NULL，
                     DMA_LOCK_WRITE);
//…
//取得したコンテントの内容の更新する
//…
//マルチファイル文書を更新する
Doc.UpdateContent(&PathList,
                  "MIME::application/x-edm-undefined");
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

3.6　文書のリファレンスファイル管理

この節では，文書のリファレンスファイル管理について説明します。

＜この節の構成＞

3.6.1　リファレンスファイル管理の概要

3.6.2　リファレンスファイル管理に関する操作

3.6.1　リファレンスファイル管理の概要

ここでは，リファレンスファイル管理の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　リファレンスファイル文書を構成するDMAオブジェクト

(1)　機能

リファレンスファイルの管理とは，文書の実体であるコンテントを任意のディレクトリに格納し，文書のプロパティとコンテントロケーションだけをデータベースで管理する機能です。

この機能には，次のような特徴があります。

ディスク移行時など，コンテント格納ディレクトリを変更する場合，データベースに影響を与えないで，管理するコンテント格納先の基点となるディレクトリパス（コンテント格納先ベースパス）だけの変更で対応できます。

データベース容量を削減できます。

リファレンスファイルの管理では，バージョンなし文書およびバージョン付き文書をリファレンスファイル文書として管理できます。

リファレンスファイルの管理では，コンテントを任意のディレクトリに登録し，そのコンテントの格納先を，コンテントロケーションとして登録します。コンテントロケーションには，ユーザが管理するコンテントのコンテント格納先ベースパスを基点とする相対パス（コンテント格納先パス）を登録します。コンテントは，DocumentBrokerの機能で操作します。

リファレンスファイルの管理を使用する場合，コンテントを任意のディレクトリへ格納し，文書のプロパティをデータベースで管理することから，データベースとコンテントの整合性を考慮する必要があります。このため，1メソッド1トランザクションとすることを前提としています。文書作成をn件連続で実行し，エラーが発生したときは，ロールバックしたあとにコンテントだけが存在する状態となります。また，文書削除をn件連続で実行し，エラーが発生したときは，ロールバックしたあとにコンテントの存在しない文書が残ります。

また，リファレンスファイルの管理では，オブジェクトとコンテントが不整合となる場合があります。不整合となる場合の内容を，次の表に示します。

表3-9　オブジェクトとコンテントが不整合となる場合

機能 | エラー発生個所 | 不整合の内容 | 対処
文書の作成 | コンテントを登録したあとのエラー | 登録コンテントが残ります。 | 再度実行して文書を作成してください。
文書の更新 | 更新前のコンテントを削除したあと，更新後のコンテントを登録するまでのエラー | コンテントの存在しないオブジェクトが残ります。 | 文書を削除したあと，更新後のコンテントを使用して文書を作成してください。
更新後のコンテントを登録したあとのエラー | コンテントの存在しないオブジェクトが残り，登録コンテントが残ります。 | 文書を削除したあと，更新後のコンテントを使用して文書を作成してください。
文書の削除 | コンテントを削除したあとのエラー | コンテントの存在しないオブジェクトが残ります。 | 再度実行して文書を削除してください。
バージョンのチェックアウト | コンテントを複写したあとのエラー | 複写したコンテントが残ります。 | チェックアウトを取り消し，コンテントを削除したあと，ロールバックを実行してください。
バージョンの削除 | コンテントを削除したあとのエラー | コンテントの存在しないオブジェクトが残ります。 | 再度実行してバージョンを削除してください。
チェックアウトの取り消し | コンテントを削除したあとのエラー | コンテントの存在しないオブジェクトが残ります。 | 再度実行してチェックアウトを取り消してください。

(2)　リファレンスファイル文書を構成するDMAオブジェクト

リファレンスファイルの管理では，バージョンなし文書およびバージョン付き文書をリファレンスファイル文書として管理できます。リファレンスファイルを管理する場合としない場合とで，バージョンなし文書およびバージョン付き文書を構成するDMAオブジェクトが異なります。

(a)　リファレンスファイルを管理するバージョンなし文書を構成するDMAオブジェクト

リファレンスファイルを管理するバージョンなし文書を構成するDMAオブジェクトの種類を次に示します。ContentReferenceオブジェクト以外のオブジェクトについては，リファレンスファイルを管理しないバージョンなし文書と同様です。

DocVersionオブジェクト

Renditionオブジェクト

ContentReferenceオブジェクト
文書の実体であるコンテントデータの格納先情報を管理するオブジェクトです。

リファレンスファイルを管理するバージョンなし文書とDMAオブジェクトの関係を次の図に示します。

図3-26　リファレンスファイルを管理するバージョンなし文書とDMAオブジェクトの関係

(b)　リファレンスファイルを管理するバージョン付き文書を構成するDMAオブジェクト

リファレンスファイルを管理するバージョン付き文書を構成するDMAオブジェクトの種類を次に示します。ContentReferenceオブジェクト以外のオブジェクトについては，リファレンスファイルを管理しないバージョン付き文書と同様です。また，ContentReferenceオブジェクトについては，リファレンスファイルを管理するバージョンなし文書と同様です。

ConfigurationHistoryオブジェクト

VersionSeriesオブジェクト

VersionDescriptionオブジェクト

DocVersionオブジェクト

Renditionオブジェクト

ContentReferenceオブジェクト

リファレンスファイルを管理するバージョン付き文書とDMAオブジェクトの関係を次の図に示します。

図3-27　リファレンスファイルを管理するバージョン付き文書とDMAオブジェクトの関係

3.6.2　リファレンスファイル管理に関する操作

リファレンスファイル管理に関する操作を実行する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。

リファレンスファイル文書の作成

リファレンスファイル文書の参照

リファレンスファイル文書の更新

リファレンスファイル文書の削除

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。また，コンテントロケーションをコンテントの相対パスで管理するために，CdbrSession::SetReferencePathメソッドでコンテント格納先ベースパスを設定しておく必要があります。

ここでは，リファレンスファイル文書の操作について説明します。リファレンスファイルを管理するバージョン付き文書のバージョンの操作については，「3.3.3　バージョン管理機能の操作」を参照してください。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　リファレンスファイル文書の作成

(2)　リファレンスファイル文書の参照

(3)　リファレンスファイル文書の更新

(4)　リファレンスファイル文書の削除

(1)　リファレンスファイル文書の作成

リファレンスファイル文書を作成して，DocumentBrokerサーバに格納する場合に使用するメソッドと，その発行順序について説明します。なお，リファレンス文書を登録するとき，登録するコンテントから全文検索インデクスは作成できません。全文検索インデクスを作成する場合は，CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドを実行して作成してください。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体（DMAオブジェクト生成用の構造体）を作成しておきます。

バージョンなし文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。

バージョン付き文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_ConfigurationHistoryクラスまたはそのサブクラスのクラス識別子と，dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。

リファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体（リファレンスパス情報構造体）を作成しておきます。

文書を作成します。
バージョンなし文書を作成する場合は，CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は，CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき，メソッドの引数にSDBR_REFERENCE_PATHINFO構造体（リファレンスパス情報構造体）を指定します。

リファレンスファイル文書を作成するコールシーケンスの例を次に示します。

リファレンスファイル文書を作成するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書の登録に必要な情報を設定する
//…
//リファレンスファイル文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, RefInfo,
                "MIME::application/x-edm-undefined", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2)　リファレンスファイル文書の参照

すでにデータベースに登録されている文書と任意のディレクトリに登録されているコンテント（ファイル）を参照する場合に使用するメソッドと，そのメソッドの発行順序について説明します。

準備

オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については，「4.　オブジェクトの検索」を参照してください。

バージョンなし文書に接続する場合は，構成要素であるDMAオブジェクトの，DocVersionオブジェクトのOIIDを取得しておきます。

バージョン付き文書に接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を作成しておきます。

参照するコンテントが含まれる文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。

リファレンスファイル文書を参照する場合の，コールシーケンスの例を次に示します。

リファレンスファイル文書を参照するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって参照するリファレンスファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書のコンテント取得に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//readロックを設定して，リファレンスファイル文書のコンテントを取得する
Doc.GetContentAndLock(RefInfo,
                     NULL, &lReferenceType, &pContentLocation,
                     DMA_LOCK_READ);
Doc.ReleaseObject();
dbrDelete(pContentLocation);
//処理の確定
pSession->Commit();

(3)　リファレンスファイル文書の更新

すでにデータベースに登録されている文書と任意のディレクトリに登録されている文書のコンテントを編集して更新する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

更新する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得するリファレンスファイルに必要な情報を持つSDBR_REFERENCE_PATHINFO構造体を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。

ファイルを編集します。

編集したファイルで文書を更新します。
登録するファイルの情報をSDBR_REFERENCE_PATHINFO構造体（リファレンスパス情報構造体）で指定して，CdbrDocument::UpdateContentAndRenditionTypeメソッドまたはCdbrVersionableDocument::UpdateContentAndRenditionTypeメソッドをコールします。

リファレンスファイル文書を更新する場合の，コールシーケンスの例を次に示します。

リファレンス文書を更新するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって更新するマルチファイル文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書のコンテント取得に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して，リファレンスファイル文書のコンテントを取得する
Doc.GetContentAndLock(RefInfo,
                     NULL, NULL, NULL,
                     DMA_LOCK_WRITE);
//…
//取得したコンテントの内容の更新する
//…
//RefInfoにリファレンスファイル文書の更新に必要な情報を設定する
//…
//リファレンスファイル文書を更新する
Doc.UpdateContentAndRenditionType(RefInfo,
                  "MIME::application/x-edm-undefined", NULL);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(4)　リファレンスファイル文書の削除

リファレンスファイル文書を削除するメソッドには，従来のメソッドとリファレンスファイル用のメソッドの2種類あります。ここでは，リファレンスファイル用のメソッドを使用して，リファレンスファイル文書を削除する場合の，コールシーケンスの例を次に示します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

リファレンスファイル文書を削除するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパスを設定しておく
//…
pSession->Begin();
pSession->SetReferencePath(pTargetContentPath);
//…
//検索によって削除する文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書の削除に必要な情報を設定する
//…
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//文書を削除する
Doc.RemoveObject(RefInfo);
Doc.ReleaseObject();
pSession->Commit();

3.7　File Link連携機能を使用した文書管理

この節では，File Link連携機能を使用した文書管理について説明します。HiRDB File Linkの詳細については，マニュアル「HiRDB File Link」を参照してください。

＜この節の構成＞

3.7.1　File Link連携機能の概要

3.7.2　File Link連携機能に関する操作

3.7.1　File Link連携機能の概要

ここでは，File Link連携機能の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　File Link文書を構成するDMAオブジェクト

(1)　機能

File Link連携機能とは，HiRDBのプラグインプログラムであるHiRDB File Linkと連携して文書を管理する機能です。文書の実体であるコンテントを，データベースと連携しているファイルサーバ上で管理します。データベースでは，ファイル名などのリンク情報だけを管理します。

この機能には，次のような特徴があります。

画像，音声などの容量の大きいコンテントを持つ文書が増加しても，データベースの負荷を最小限にして管理できます。

管理するコンテントが増加した場合も，ファイルサーバのディスク容量を増やしたり，ファイルサーバの数を増やしたりすることで対処できます。

データベースとファイルサーバの内容の整合性については，HiRDB File Linkの機能で確保できます。

File Link連携機能が使えるのは，バージョンなし文書およびバージョン付き文書です。File Link連携機能を使用する文書を，File Link文書といいます。

File Link文書では，一つのファイルをコンテントとして管理するほか，クライアント環境のディレクトリをコンテントとしてまとめて登録して管理できます。この場合，指定したディレクトリおよびそのサブディレクトリ下に格納されているすべてのファイルを一つのコンテントとして登録できます。また，すでにHiRDB File Linkのファイルサーバ上に登録されているデータも，DocumentBrokerの文書のコンテントとして登録・管理できます。

File Link連携機能は，マルチレンディション管理機能とあわせて使用できます。この場合，例えば，レンディションごとに，容量の大きいデータ形式のコンテントはファイルサーバに，容量の小さいデータ形式のコンテントはデータベースに，というように分けて管理できます。

(2)　File Link文書を構成するDMAオブジェクト

File Link文書は，バージョンなし文書またはバージョン付き文書として管理します。File Link連携機能を使用する場合としない場合とで，バージョンなし文書およびバージョン付き文書を構成するDMAオブジェクトが異なります。

(a)　File Link連携機能を使用するバージョンなし文書を構成するDMAオブジェクト

File Link連携機能を使用するバージョンなし文書を構成するDMAオブジェクトの種類を次に示します。ContentFileLinkオブジェクト以外のオブジェクトについては，File Link連携機能を使用しないバージョンなし文書と同様です。

DocVersionオブジェクト

Renditionオブジェクト

ContentFileLinkオブジェクト
文書の実体であるコンテントデータへのリンク情報を管理するオブジェクトです。なお，コンテントデータは，ファイルサーバ上にあります。

File Link連携機能を使用するバージョンなし文書とDMAオブジェクトの関係を次の図に示します。

図3-28　File Link連携機能を使用するバージョンなし文書とDMAオブジェクトの関係

(b)　File Link連携機能を使用するバージョン付き文書を構成するDMAオブジェクト

File Link連携機能を使用するバージョン付き文書を構成するDMAオブジェクトの種類を次に示します。ContentFileLinkオブジェクト以外のオブジェクトについては，File Link連携機能を使用しないバージョン付き文書と同様です。また，ContentFileLinkオブジェクトについては，File Link連携機能を使用するバージョンなし文書と同様です。

ConfigurationHistoryオブジェクト

VersionSeriesオブジェクト

VersionDescriptionオブジェクト

DocVersionオブジェクト

Renditionオブジェクト

ContentFileLinkオブジェクト

File Link連携機能を使用するバージョン付き文書とDMAオブジェクトの関係を次の図に示します。

図3-29　File Link連携機能を使用するバージョン付き文書とDMAオブジェクトの関係

3.7.2　File Link連携機能に関する操作

File Link連携機能に関する操作を実行する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。なお，操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

File Link文書の作成

File Link文書の参照

File Link文書の更新

File Link文書のレンディションの追加

これらの操作は，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのメソッドを使用して実行します。これ以外の操作については，File Link連携機能を使用しないバージョンなし文書およびバージョン付き文書と同じように操作できます。詳細は，「3.2.3　文書の操作」および「3.3.3　バージョン管理機能の操作」を参照してください。また，それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　File Link文書の作成

(2)　File Link文書の参照

(3)　File Link文書の更新

(4)　File Link文書のレンディションの追加

(1)　File Link文書の作成

File Link文書を作成してデータベースおよびファイルサーバに格納する場合に使用するメソッドと，その発行順序について説明します。なお，File Link文書を登録する時，登録するコンテントから全文検索インデクスは作成できません。全文検索インデクスを作成する場合は，CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドを実行して作成してください。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のDMAクラスの識別子を指定したSDBR_DMAINFO構造体（DMAオブジェクト生成用の構造体）を作成しておきます。

バージョンなし文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_DocVersionクラスまたはそのサブクラスのクラス識別子を指定します。

バージョン付き文書を作成する場合は，SDBR_DMAINFO構造体に，dmaClass_ConfigurationHistoryクラスまたはそのサブクラスの識別子と，dmaClass_DocVersionクラスまたはそのサブクラスの識別子を指定します。

File Link連携に必要な情報を指定したSDBR_FILELINK_PATHINFO構造体（File Linkパス情報構造体）を作成しておきます。この構造体には，登録するコンテントのファイルパスまたはディレクトリパス，FAM名，登録するファイルサーバのディレクトリパス，文書を削除した時のファイルサーバ上のコンテントの扱い方，コンテントの名称の生成方法などを指定します。

文書を作成します。
バージョンなし文書を作成する場合は，CdbrDocument::CreateObjectメソッドをコールします。バージョン付き文書を作成する場合は，CdbrVersionableDocument::CreateObjectメソッドをコールします。このとき，メソッドの引数にSDBR_FILELINK_PATHINFO構造体（File Linkパス情報構造体）を指定します。

File Link文書を作成するコールシーケンスの例を次に示します。

File Link文書を作成するコールシーケンス

//あらかじめ登録する構造体DMAClassListとして作成しておく
//
//…
pSession->Begin();
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkInfo;
//FileLinkInfoにFile Link連携に必要な情報を設定する
//…
//File Link文書の作成および登録
Doc.CreateObject(pSession,
                1, DMAClassList, FileLinkInfo,
                "MIME::image/bmp", &pOIID);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

レンディションタイプについての注意事項

文書として登録するファイルの種類を表すレンディションタイプは，登録したファイルの拡張子からは設定されません。レンディションタイプは，CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数として明示的に指定してください。この引数に指定した値がレンディションごとのファイルの種類を表すプロパティとして設定されます。

(2)　File Link文書の参照

すでにデータベースに登録されている文書とファイルサーバに登録されているコンテント（ファイル）を参照する場合に使用するメソッドと，そのメソッドの発行順序について説明します。

準備

オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については「4.　オブジェクトの検索」を参照してください。

バージョンなし文書に接続する場合は，構成要素であるDMAオブジェクトの，DocVersionオブジェクトのOIIDを取得しておきます。

バージョン付き文書に接続する場合は，構成要素であるDMAオブジェクトの，ConfigurationHistoryオブジェクトのOIIDを取得しておきます。

取得したFile Linkパス情報の内容を格納するためのSDBR_FILELINK_PATHINFO構造体を作成しておきます。

参照するコンテントへのリンク情報が含まれる文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得した情報を格納するSDBR_FILELINK_PATHINFO構造体を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。
なお，コンテントのリンク情報としてディレクトリパスが登録されている場合（SDBR_FILELINK_PATHINFO構造体のメンバpFilePathにディレクトリパスを指定してCreateObjectメソッドをコールした文書を参照する場合）は，メンバpFileNameに指定した名前のディレクトリが作成され，そのディレクトリ下に登録したディレクトリおよびサブディレクトリ下のすべてのファイルが取得されます。

File Link文書を参照する場合の，コールシーケンスの例を次に示します。

File Link文書を参照するコールシーケンス

pSession->Begin();
//…
//検索によって参照するFile Link文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkPath;
//検索で取得したOIIDをオブジェクトに設定する
FileLinkPath.pFilePath="file:///tmp/temp.bmp"
Doc.SetOIID(pSession, pOIID);
//readロックを設定して，File Link文書のパス情報を取得する
//FileLinkPathのメンバpFileNameに指定したファイル
//またはディレクトリ下（この場合はファイル）に，
//取得したコンテントの内容が出力される
Doc.GetContentAndLock(FileLinkPath, NULL,
                     NULL, DMA_LOCK_READ);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(3)　File Link文書の更新

すでにデータベースに登録されている文書のコンテントを編集して更新する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

SDBR_FILELINK_PATHINFO構造体に設定する値については「(1) File Link文書の作成」を参照してください。

更新する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

文書のコンテントデータを，指定したパス名のファイルに複写します。
取得した情報を格納するSDBR_FILELINK_PATHINFO構造体を指定して，CdbrDocument::GetContentAndLockメソッドまたはCdbrVersionableDocument::GetContentAndLockメソッドをコールします。
なお，コンテントのリンク情報としてディレクトリパスが登録されている場合（SDBR_FILELINK_PATHINFO構造体のメンバpFilePathにディレクトリパスを指定してCreateObjectメソッドをコールした文書を参照する場合）は，メンバpFileNameに指定した名前のディレクトリが作成され，そのディレクトリ下に登録したディレクトリおよびサブディレクトリ下のすべてのファイルが取得されます。

ファイルを編集します。

編集したファイルで文書を更新します。
登録するファイルの情報をSDBR_FILELINK_PATHINFO構造体（File Linkパス情報構造体）で指定して，CdbrDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentメソッドをコールします。

File Link文書を更新する場合の，コールシーケンスの例を次に示します。

File Link文書を更新するコールシーケンス

pSession->Begin();
//…
//検索によって更新するFile Link文書のOIIDを取得する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkPath;
//検索で取得したOIIDをオブジェクトに設定する
Doc.SetOIID(pSession, pOIID);
//writeロックを設定して，File Link文書のパス情報を取得する
//取得したコンテントの内容の更新する
//…
//File Link文書を更新する
Doc.UpdateContent(FileLinkPath, NULL);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(4)　File Link文書のレンディションの追加

File Link文書のレンディションを追加するには，CdbrDocumentクラスおよびCdbrVersionableDocumentクラスのAddRenditionメソッドを使用します。CreateObjectメソッドと同様に，追加するレンディションのファイルまたはディレクトリ情報をSDBR_FILELINK_PATHINFO構造体に指定します。

すでにデータベースに登録されている文書に対して，File Link連携機能を使用するレンディションを追加する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素であるDMAオブジェクトのOIIDを取得しておきます。

レンディションを追加する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

レンディションを追加します。
AddRenditionメソッドをコールします。このとき，サブレンディションに登録するコンテントの情報として，SDBR_FILELINK_PATHINFO構造体を指定します。

File Link連携機能を使用するレンディションを追加するコールシーケンスの例を次に示します。

File Link連携機能を使用するレンディションを追加するコールシーケンス

pSession->Begin();
//…
//レンディションを追加する文書のOIIDを取得する
//レンディションに設定するdbrProp_RetrievalNameプロパティの値を
//構造体PropListに登録する
//…
CdbrDocument Doc;
SDBR_FILELINK_PATHINFO FileLinkInfo;
//FileLinkInfoにFile Link連携に必要な情報を設定する
//…
//レンディションを追加する文書に接続する
Doc.SetOIID(pSession,pOIID);
//レンディションを追加して，プロパティを設定する
Doc.AddRendition(FileLinkInfo,
                "MIME::image/bmp",&PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

3.8　文書間リレーションを設定した文書管理

この節では，文書間リレーションを設定して文書を管理する機能について説明します。

＜この節の構成＞

3.8.1　文書間リレーション機能の概要

3.8.2　文書間リレーションを使用した文書管理

3.8.3　リレーションのプロパティ

3.8.4　文書間リレーションに関する操作

3.8.1　文書間リレーション機能の概要

ここでは，文書間リレーション機能の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　文書間リレーションを表すDMAオブジェクト

(1)　機能

文書と文書を関連づけて管理する機能を，文書間リレーションといいます。

文書間リレーションは，次のような場合に使用できます。

参考文献のある論文などの文書を，参考文献とともに管理したい場合

別文書として登録しているテキストと図データを関連がわかるように管理したい場合

DocumentBrokerでは，二つの文書を文書間リレーションを利用して関連づけます。このとき，文書間リレーションを設定した文書をリレーション元文書，文書間リレーションを設定された文書をリレーション先文書といいます。

一つのリレーション元文書は，複数のリレーション先文書と関連づけることができます。また，一つのリレーション先文書も，複数のリレーション元文書から関連づけられることができます。これによって，リレーション元文書とリレーション先文書は，m：n（m，nは1以上の整数）で関連づけることができます。

一つのリレーション元文書と一つのリレーション先文書を関連づけるために，一つの文書間リレーションを設定します。したがって，m×n個（m，nは1以上の整数）の文書間リレーションを設定することで，m個のリレーション元文書とn個のリレーション先文書を関連づけることができます。

(2)　文書間リレーションを表すDMAオブジェクト

文書間リレーションは，次のDMAオブジェクトによって表されます。

Relationshipオブジェクト
edmClass_Relationshipクラスのオブジェクトです。このオブジェクトを，リレーションといいます。

リレーションは，リレーション元文書から操作します。Relationshipオブジェクトは，リレーション元文書から文書間リレーションを設定するメソッドをコールした時に作成されます。また，リレーションには，プロパティも設定できます。

リレーションは，文書を表す次のクラス間のオブジェクトの関連づけに使用できます。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

(a)　バージョンなし文書間にリレーションを設定した場合のDMAオブジェクトの構成

バージョンなし文書に文書間リレーションを設定する場合，リレーションは，それぞれの文書のDMAオブジェクトのDocVersionオブジェクトとDocVersionオブジェクトを関連づけます。

バージョンなし文書間にリレーションを設定した場合のDMAオブジェクトの構成を次の図に示します。

図3-30　バージョンなし文書間に文書間リレーションを設定した場合のDMAオブジェクトの構成

また，図3-31のように，バージョンなし文書とバージョン付き文書の1バージョンに対応するバージョンなし文書のDocVersionオブジェクトに対してリレーションを設定することもできます。

図3-31　バージョンなし文書とバージョン付き文書の間に文書間リレーションを設定した場合のDMAオブジェクトの構成

ただし，バージョン付き文書から，1バージョンに当たるバージョンなし文書のリレーションを操作することはできません。バージョンなし文書のリレーションを操作する場合は，バージョンなし文書に接続する必要があります。

(b)　バージョン付き文書間にリレーションを設定した場合のDMAオブジェクトの構成

バージョン付き文書に文書間リレーションを設定する場合，リレーションは，それぞれの文書のDMAオブジェクトのConfigurationHistoryオブジェクトとConfigurationHistoryオブジェクトを関連づけます。

バージョン付き文書間にリレーションを設定した場合のDMAオブジェクトの構成を次の図に示します。

図3-32　バージョン付き文書間にリレーションを設定した場合のDMAオブジェクトの構成

(c)　バージョンなし文書とバージョン付き文書間にリレーションを設定した場合のDMAオブジェクトの構成

文書間リレーションは，バージョンなし文書とバージョン付き文書の間に設定することもできます。この場合，リレーションはDocVersionオブジェクトとConfigurationHistoryオブジェクトを関連づけます。

バージョンなし文書をリレーション元文書，バージョン付き文書をリレーション先文書として，文書間リレーションを設定した場合のDMAオブジェクトの構成を，次の図に示します。

図3-33　バージョンなし文書をリレーション元文書，バージョン付き文書をリレーション先文書として文書間リレーションを設定した場合のDMAオブジェクトの構成

バージョン付き文書をリレーション元文書，バージョンなし文書をリレーション先文書として，文書間リレーションを設定した場合のDMAオブジェクトの構成を，次の図に示します。

図3-34　バージョン付き文書をリレーション元文書，バージョンなし文書をリレーション先文書として文書間リレーションを設定した場合のDMAオブジェクトの構成

3.8.2　文書間リレーションを使用した文書管理

ここでは，文書間リレーションを設定して文書を管理する例について説明します。

＜この項の構成＞

(1)　文書間リレーションの設定

(2)　リレーション先文書またはリレーション元文書の参照

(3)　リレーション，リレーション元文書およびリレーション先文書の削除

(1)　文書間リレーションの設定

文書間リレーションを設定した文書の例を次の図に示します。

ここでは，文書「論文」から文書「参考文献1」，「参考文献2」および「引用元文書」に対して文書間リレーションを設定します。

図3-35　文書間リレーションを設定した文書の例

なお，設定したリレーションは，リレーション元文書が管理します。したがって，リレーションを操作する場合は，リレーション元文書から操作します。なお，リレーションを指定した操作をする場合には，リレーション識別子が使用できます。リレーション識別子は，リレーションを設定した時に取得できます。この識別子を使用して，リレーションを指定した操作や，リレーションのプロパティを取得および設定できます。

(2)　リレーション先文書またはリレーション元文書の参照

文書間リレーションによって関連づけられた文書は，双方向に参照できます。例えば，図3-35の場合に，「論文」からリレーション先の文書である「参考文献1」，「参考文献2」および「引用元文書」を参照できます。また，「参考文献1」から，リレーション元の文書として「論文」を参照できます。

リレーション先文書またはリレーション元文書を参照するための情報は，リレーション情報として取得します。リレーション情報とは，次の情報です。

リレーション先文書またはリレーション元文書のOIID

リレーション先文書またはリレーション元文書のオブジェクトの種類

リレーション識別子

リレーション先文書またはリレーション元文書のプロパティ

リレーションのプロパティ

また，リレーション先文書がすでに削除されている場合は，リレーション識別子とリレーションのプロパティだけがリレーション情報として取得できます。

(3)　リレーション，リレーション元文書およびリレーション先文書の削除

ここでは，リレーションを削除した場合に削除されるオブジェクトについて説明します。

(a)　リレーションの削除

リレーションを削除する場合は，リレーション元文書に接続した状態で，削除するリレーションを指定してRemoveRelationメソッドをコールします。このとき，リレーション元文書およびリレーション先文書は削除されません。

(b)　リレーション元文書の削除

リレーション元文書を削除すると，設定していたリレーションも削除されます。

また，バージョン付き文書の1バージョンに当たるバージョンなし文書がリレーション元文書の場合に，バージョン付き文書からそのバージョンを削除したときも，バージョンなし文書に設定されていたリレーションが削除されます。

ただし，リレーション先文書は削除されません。

(c)　リレーション先文書の削除

リレーション先文書を削除した場合，リレーションおよびリレーション元文書は削除されません。したがって，リレーション元文書には，リレーション先文書がないリレーションが設定されたまま残ります。このリレーションを削除する場合は，リレーション元文書に接続して，RemoveRelationメソッドをコールしてください。

リレーション先文書がないリレーションは，リレーション元文書からGetRelationListAndLockメソッドまたはGetRelationListメソッドによって，リレーション情報の一覧を取得することで確認できます。

3.8.3　リレーションのプロパティ

ここでは，リレーションのプロパティについて説明します。

＜この項の構成＞

(1)　リレーションに対するプロパティの設定

(2)　リレーションのプロパティを使用した検索

(1)　リレーションに対するプロパティの設定

リレーションには，プロパティが設定できます。リレーションのプロパティは，リレーション元文書やリレーション先文書を分類したり，リレーション元文書やリレーション先文書のプロパティと組み合わせた管理に使用したりできます。

リレーションのプロパティは，リレーション元文書に接続した状態で設定します。

プロパティを設定した文書間リレーションの例を次の図に示します。

図3-36　プロパティを設定した文書間リレーションの例

この例では，リレーションにユーザ定義プロパティとして，「Type」と「参照日」を設定しています。例えば，プロパティ「Type」によって，リレーション先文書を「参照」と「引用」に分類したりできます。また，プロパティ「参照日」とリレーション先文書のプロパティ「更新日」を比較して，参照した以降に参照先文書が更新されたかどうかを確認したりできます。

リレーションにプロパティを設定する場合は，PutRelationPropertyValuesメソッドを使用します。リレーションを設定する時に同時に設定することもできます。リレーションのプロパティを取得する場合は，GetRelationListAndLockメソッドまたはGetRelationListメソッドを使用します。

(2)　リレーションのプロパティを使用した検索

文書間リレーションのプロパティは検索に使用できます。検索では，ユーザが定義したプロパティのほか，リレーションを表すRelationshipオブジェクトのプロパティとして設定されている，DMAが規定したプロパティ（dmaProp_またはedmProp_で始まるプロパティ）も使用できます。

ここでは，リレーションのプロパティによってリレーション元クラスとリレーション先クラスを内部結合（INNER JOIN）した検索の方法について，次の図を例にして説明します。

図3-37　リレーションを使用した検索に使用する文書の例

この例では，「論文X」，「論文Y」および「引用元論文」はdmaClass_DocVersionクラスのサブクラスを「論文クラス」を構成要素として作成されたバージョンなし文書（CdbrDocumentオブジェクト）です。また，「参考文献1」および「参考文献2」はdmaClass_DocVersionクラスのサブクラス「参考文献クラス」を構成要素として作成されたバージョンなし文書（CdbrDocumentオブジェクト）です。

この例の場合に実行できる検索の例を次に示します。

［例］作成者が『Suzuki』である論文のうち，参照先（リレーション先）の文書名が『参考文献2』である論文を検索して，その論文のOIIDと文書名を取得する。

この検索を実現するには，論文クラスと参考文献クラスを結合して実行する必要があります。このとき，それぞれの文書およびリレーションの次に示すDMAオブジェクトプロパティを使用します。

リレーションのプロパティ

dmaProp_Headプロパティ（リレーション先オブジェクトを表すプロパティ）

dmaProp_Tailプロパティ（リレーション元オブジェクトを表すプロパティ）

論文および参考文献のプロパティ

dmaProp_Thisプロパティ（オブジェクト自身を表すプロパティ）

リレーションのプロパティであるdmaProp_HeadプロパティとdmaProp_Tailプロパティを使用して次のような内部結合ができます。

指定例

SELECT 論文クラス.dmaProp_OIID, 論文クラス.文書名
FROM   ((論文クラス INNER JOIN リレーションクラス
ON 論文クラス.dmaProp_This = リレーションクラス.dmaProp_Tail)
INNER_JOIN 参考文献クラス
ON リレーションクラス.dmaProp_Head = 参考文献クラス.dmaProp_This)
WHERE 論文クラス.作成者 = "Suzuki"
AND 参考文献クラス.文書名 = "参考文献2"

注：

実際にedmSQL検索で指定する場合は，「論文クラス」，「参考文献クラス」および「リレーション」には，該当するクラスのクラス識別子を指定します。また，「文書名」および「作成者」には，該当するプロパティのプロパティ識別子を指定します。

edmSQL検索の詳細については，「4.　オブジェクトの検索」を参照してください。

DMAオブジェクトのプロパティの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

3.8.4　文書間リレーションに関する操作

文書間リレーションに関する操作を実行する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。

文書間リレーションの設定

文書のリレーション情報の一覧取得

リレーション先文書およびリレーション元文書の参照

リレーションに対するプロパティの設定

リレーションの削除

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　文書間リレーションの設定

(2)　文書のリレーション情報の一覧取得

(3)　リレーション先文書およびリレーション元文書の参照

(4)　リレーションに対するプロパティの設定

(5)　リレーションの削除

(1)　文書間リレーションの設定

文書間リレーションは，リレーション元文書に接続した状態で設定します。

準備

リレーション元オブジェクトおよびリレーション先オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得します。

CdbrDocumentオブジェクトに文書間リレーションを設定する場合は，DMAオブジェクトのDocVersionオブジェクトのOIIDを取得します。

CdbrVersionableDocumentオブジェクトに文書間リレーションを設定する場合は，DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを取得します。

リレーション元文書にする文書に接続します。
接続するオブジェクトに応じて，次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

リレーション先文書を指定して，文書間リレーションを設定します。
CreateRelationメソッドをコールします。

文書間リレーションを設定するコールシーケンスの例を次に示します。

文書間リレーションを設定するコールシーケンス

pSession->Begin();
//…
//リレーション元文書とリレーション先文書のOIIDを取得する
//…
CdbrDocument Doc1, Doc2;
//リレーション元文書に接続する
Doc1.SetOIID(pSession,pOIID);
//リレーション先文書に接続する
Doc2.SetOIID(pSession,pOIID2);
//文書間リレーションを設定する
Doc1.CreateRelation(&Doc2,NULL,ppRelId);
Doc1.ReleaseObject();
Doc2.ReleaseObject();
//処理の確定
pSession->Commit();

(2)　文書のリレーション情報の一覧取得

ここでは，文書のリレーション情報の一覧を取得する操作として，次の二つの操作について説明します。

リレーション元文書からリレーション情報の一覧を取得する
リレーション先文書とリレーションについての情報が取得できます。このとき，すでにリレーション先文書が削除されたリレーションについての情報も取得できます。

リレーション先文書からリレーション情報の一覧を取得する
リレーション元文書とリレーションについての情報が取得できます。

それぞれ，リレーション元文書またはリレーション先文書に接続した状態から参照します。

準備

リレーション元文書からリレーション情報の一覧を取得する場合は，リレーション元文書のDMAオブジェクトのOIIDを，検索などによってあらかじめ取得します。

リレーション先文書からリレーション情報の一覧を取得する場合は，リレーション先文書のDMAオブジェクトのOIIDを，検索などによってあらかじめ取得します。

リレーション元文書からリレーション情報の一覧を取得する場合は，リレーション元文書にする文書に接続します。
リレーション先文書からリレーション情報の一覧を取得する場合は，リレーション先文書に接続します。
接続するオブジェクトに応じて，次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

リレーション情報の一覧を取得します。
GetRelationListAndLockメソッドまたはGetRelationListメソッドをコールします。その文書をリレーション元文書とする情報の一覧を取得するか，その文書をリレーション先文書とする情報の一覧を取得するかは，引数lRelationendStatusに設定します。

接続した文書をリレーション元文書とするリレーション情報の一覧を取得する場合は，引数に「DBR_RELATIONEND_HEAD」を指定します。

接続した文書をリレーション先文書とするリレーション情報の一覧を取得する場合は，引数に「DBR_RELATIONEND_TAIL」を指定します。

リレーション情報は，リレーション情報構造体として取得できます。リレーション情報構造体では，次の情報が取得できます。

リレーション先文書またはリレーション元文書のOIID

リレーション先文書またはリレーション元文書のオブジェクトの種類

リレーション識別子

リレーション先文書またはリレーション元文書のプロパティ

リレーションのプロパティ

リレーション元文書からリレーション先文書の一覧を取得するコールシーケンスの例を次に示します。

リレーション元文書からリレーション先文書の一覧を取得するコールシーケンス

pSession->Begin();
//…
//リレーション元文書とリレーション先文書のOIIDを取得する
//…
CdbrDocument Doc;
DmaBoolean   bContinue = DMA_TRUE;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーション先文書の一覧を取得する
Doc.GetRelationListAndLock(&bContinue, DBR_CLASS_ALL, 0,
                          NULL, 0, NULL, 10,
                          ppRelationList,
                          DBR_RELATIONEND_HEAD,
                          DBR_RELATIONEND_STATUS_ALL,
                          DMA_LOCK_READ);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(3)　リレーション先文書およびリレーション元文書の参照

リレーション先文書およびリレーション元文書を参照する場合は，「(2)文書のリレーション情報の一覧取得」で取得したリレーション情報構造体に設定されたOIIDを基に，リレーション先文書またはリレーション元文書に接続して，参照してください。

(4)　リレーションに対するプロパティの設定

ここでは，リレーションにプロパティを設定する操作について説明します。

準備

リレーション元文書のDMAオブジェクトのOIIDを，検索などによって取得します。

リレーションに設定するプロパティを，SDBR_PROP構造体およびSDBR_PROPLIST構造体に設定します。ただし，ここで設定できるプロパティは，ユーザ定義プロパティだけです。

リレーション元文書に接続します。
接続するオブジェクトに応じて，次のどちらかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

CdbrDocumentクラス

CdbrVersionableDocumentクラス

リレーションにプロパティを設定します。
PutRelationPropertyValuesメソッドをコールします。

リレーションにプロパティを設定するコールシーケンスの例を次に示します。

リレーションにプロパティを設定するコールシーケンス

pSession->Begin();
//…
//リレーション元文書のOIIDとリレーション識別子を取得する
//…
//リレーションに設定するプロパティの値を設定した
//プロパティ構造体を作成しておく
//…
CdbrDocument Doc;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーションにプロパティを設定する
Doc.PutRelationPropertyValues(pRelId, PropList);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(5)　リレーションの削除

ここでは，文書間リレーションを削除する操作について説明します。文書間リレーションは，次のように削除できます。

リレーション識別子を指定して，特定のリレーションだけ削除する

接続した文書をリレーション元文書とする，すべてのリレーションを削除する

リレーション先文書が削除されているリレーションをすべて削除する

リレーションを削除する場合は，リレーション元文書に接続した状態から削除します。

準備

リレーション元文書のOIIDを，検索などによってあらかじめ取得します。

特定のリレーションを削除する場合は，リレーション識別子を取得します。リレーション識別子は，CreateRelationメソッド，GetRelationListAndLockメソッドまたはGetRelationListメソッドのどれかで取得します。

リレーション元文書に接続します。
接続するオブジェクトに応じて，次のどれかのクラスのSetOIIDメソッドまたはConnectObjectメソッドをコールします。

リレーションを削除します。
RemoveRelationメソッドをコールします。どのリレーションを削除するかは，引数lRelIdCountとppRelIdsに設定します。

特定のリレーションを削除する場合は，lRelIdCountに削除するリレーションの数を，ppRelIdsに削除するリレーションのリレーション識別子のポインタを指定します。

接続した文書をリレーション元文書とするすべてのリレーションを削除する場合は，lRelIdCountにDBR_RELATION_ALLを，ppRelIdsにNULLを指定します。

リレーション先文書が削除されているリレーションをすべて削除する場合は，lRelIdCountにDBR_RELATION_END_NOT_EXISTを，ppRelIdsにNULLを指定します。

リレーションを削除するコールシーケンスの例を示します。

リレーションを削除するコールシーケンス

pSession->Begin();
//…
//リレーション元文書のOIIDとリレーション識別子を取得する
//…
CdbrDocument Doc;
//リレーション元文書に接続する
Doc.SetOIID(pSession,pOIID);
//リレーション先文書の一覧を取得する
Doc.RemoveRelation(1, ppRelIds);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

3.9　コンテナを使用した文書管理

この節では，コンテナを使用した文書管理について説明します。コンテナを使用すると，文書をフォルダに格納するようにまとめて管理したり，複数の観点で分類して管理したりできます。また，コンテナをコンテナによって管理することで，フォルダや分類に階層構造を持たせて管理することもできます。

コンテナを使用した文書管理は，文書とコンテナを関連オブジェクトによって関連づけることによって実現します。

コンテナを使用した文書管理は，CdbrReferentialContainerクラス，CdbrConfiguratedReferentialContainerクラス，CdbrVersionTraceableContainerクラスの機能によって実現します。

なお，この節では，バージョン管理機能や構成管理機能のない，CdbrReferentialContainerクラスについて説明します。バージョン管理機能および構成管理機能を持つコンテナを表すCdbrConfiguratedReferentialContainerクラスおよびCdbrVersionTraceableContainerクラスについては，「3.10　構成管理コンテナを使用した文書の構成管理」で説明します。

＜この節の構成＞

3.9.1　CdbrReferentialContainerクラスの概要

3.9.2　コンテナを使用した文書管理

3.9.3　コンテナおよびコンテインメントのプロパティ

3.9.4　コンテナの操作

3.9.1　CdbrReferentialContainerクラスの概要

ここでは，CdbrReferentialContainerクラスの概要について説明します。

＜この項の構成＞

(1)　機能

(2)　CdbrReferentialContainerクラスを構成するDMAオブジェクト

(1)　機能

DocumentBrokerでは，コンテナを表すオブジェクトと文書を表すオブジェクトの関連づけによって，文書をまとめて管理できます。この関連づけをコンテインメント（Containment：包含関係）といいます。コンテインメントでは，ある二つのオブジェクトを想定して，一方を「包含するオブジェクト」，もう一方を「包含されるオブジェクト」として考えます。文書をフォルダに格納するようにしてまとめて管理する場合，包含するオブジェクトがコンテナ，包含されるオブジェクトが文書になります。

コンテナは，CdbrReferentialContainerクラスのオブジェクトとして作成します。CdbrReferentialContainerクラスは，コンテナを作成，操作したり，包含するオブジェクトとの関連づけを設定したりするための機能を提供しています。

CdbrReferentialContainerクラスを基に作成したオブジェクトは，次の機能を持ちます。

包含するオブジェクトとしての機能
コンテナとして，直接型および参照型のコンテインメントを設定してオブジェクトを包含できます。

包含されるオブジェクトとしての機能

なお，これらの機能は，CdbrConfiguratedReferentialContainerクラスおよびCdbrVersionTraceableContainerクラスから作成したオブジェクトでも使用できます。

(2)　CdbrReferentialContainerクラスを構成するDMAオブジェクト

CdbrReferentialContainerクラスを構成するDMAオブジェクトの種類を次に示します。

Containerオブジェクト
コンテナを表すオブジェクトです。

DirectContainmentRelationshipオブジェクト
直接型のコンテインメントを表すオブジェクトです。

ReferentialContainmentRelationshipオブジェクト
参照型のコンテインメントを表すオブジェクトです。

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrReferentialContainerクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-38　CdbrReferentialContainerクラスのオブジェクトとDMAオブジェクトの関係

3.9.2　コンテナを使用した文書管理

ここでは，コンテナを使用した文書管理について説明します。

＜この項の構成＞

(1)　関連づけの種類

(2)　関連づけの方法

(3)　関連づけた文書またはコンテナの参照

(1)　関連づけの種類

ここでは，コンテナから設定できる関連づけの種類について説明します。関連づけを表すコンテインメントには，次の3種類があります。

直接型のコンテインメント

参照型のコンテインメント

構成管理型のコンテインメント

(a)　直接型のコンテインメント

直接型のコンテインメントとは，包含するオブジェクトをParent（親），包含されるオブジェクトをChild（子）として，1：n（nは1以上の整数）で関連づけるコンテインメントです。Parentは複数のChildと関連づけられますが，Childは一つのParentとしか関連づけられません。このコンテインメントを使用して，文書をまとめてフォルダに格納するような管理が実現できます。フォルダには複数の文書を格納できますが，一つの文書は複数のフォルダに格納できません。なお，上位のコンテナを下位以下のコンテナのChildとして関連づけることはできません。

クラスライブラリで直接型のコンテインメントを設定する場合は，CdbrReferentialContainer::LinkメソッドまたはCdbrReferentialContainer::LinkAndLockメソッドの引数にDBR_CONTAINMENT_DIRECTを指定します。

次の図に直接型のコンテインメントで関連づけられたオブジェクトの例を示します。

図3-39　直接型のコンテインメントで関連づけられたオブジェクトの例

(b)　参照型のコンテインメント

参照型のコンテインメントとは，包含するオブジェクトと包含されるオブジェクトをn：m（n，mは1以上の整数）で関連づけるコンテインメントです。

このコンテインメントを使用して，複数の観点で文書を分類する管理が実現できます。複数の文書に対して共通の分類から関連づけたり，一つの文書に対して複数の分類を関連づけたりできます。

クラスライブラリで参照型のコンテインメントを設定する場合は，CdbrReferentialContainer::LinkメソッドまたはCdbrReferentialContainer::LinkAndLockメソッドの引数にDBR_CONTAINMENT_REFERENTIALを指定します。

次の図に参照型のコンテインメントで関連づけられたオブジェクトの例を示します。

図3-40　参照型のコンテインメントで関連づけられたオブジェクトの例

(c)　構成管理型のコンテインメント

構成管理型のコンテインメントとは，包含されるオブジェクトが複数のバージョンを持っている場合に，特定のバージョンに固定するか，常に最新のバージョンにつなぎ替えるかを選択して，包含されるオブジェクトを関連づけるコンテインメントです。このコンテインメントは，CdbrConfiguratedReferentialContainerクラスまたはCdbrVersionTraceableContainerクラスから作成したオブジェクトで設定できます。CdbrReferentialContainerクラスでは使用できません。

構成管理型のコンテインメントについては，「3.10　構成管理コンテナを使用した文書の構成管理」を参照してください。

(2)　関連づけの方法

コンテナと文書またはコンテナへの関連づけは，LinkメソッドまたはLinkAndLockメソッドなどをコールして設定します。これらのメソッドをコールすると，直接型または参照型のコンテインメントで関連づけられます。

コンテナ「プロジェクトA」から，文書「企画メモ」および「提案書」を直接型のコンテインメントで，コンテナ「資料」を参照型のコンテインメントで関連づけた例を示します。

図3-41　コンテインメントで関連づけた文書とコンテナの例

なお，コンテインメントは，コンテナが管理します。コンテインメントは，コンテナに接続して操作します。

コンテインメントを指定した操作をする場合，リンク識別子を使用します。リンク識別子は，コンテインメントを設定した時に取得します。また，関連づけている文書やコンテナの一覧を取得する時にも取得できます。この識別子を使用して，コンテインメントを指定した操作や，コンテインメントのプロパティの操作ができます。

(3)　関連づけた文書またはコンテナの参照

コンテナからコンテインメントによって関連づけた文書またはコンテナの情報は，GetContainableListAndLockメソッドなどによって，コンテナから参照できます。また，関連づけられている文書またはコンテナから，GetContainerListAndLockメソッドなどによってコンテナを参照することもできます。例えば，図3-41の場合は，コンテナ「プロジェクトA」から関連づけている文書「企画メモ」「提案書」およびコンテナ「資料」を参照できます。また，文書「企画メモ」からコンテナ「プロジェクトA」を参照できます。

3.9.3　コンテナおよびコンテインメントのプロパティ

ここでは，コンテナおよびコンテインメントのプロパティと，プロパティを使用した検索について説明します。

＜この項の構成＞

(1)　コンテナおよびコンテインメントのプロパティの管理

(2)　プロパティを使用した検索

(1)　コンテナおよびコンテインメントのプロパティの管理

コンテナおよびコンテインメントは，プロパティを設定して管理できます。

コンテナには，DMAが規定したプロパティおよびクラスライブラリ固有のプロパティが設定されています。コンテインメントには，DMAが規定したプロパティが設定されています。これらのプロパティについては，「2.6.2　プロパティの種類」を参照してください。

このほか，コンテナおよびコンテインメントには，ユーザ定義プロパティが設定できます。

コンテナのプロパティとしてタイトルや作成者などを設定しておくと，コンテナの検索などで使用できます。コンテナのプロパティは，構成要素であるDMAオブジェクトのContainerオブジェクトのプロパティとして設定します。

また，コンテインメントのプロパティは，関連づけた日付を管理したり，関連づける文書やコンテナの重要度などを設定して管理したりする場合に使用できます。例えば，重要度を設定して管理した場合は，関連づけている文書とコンテナの一覧を取得した時に，重要度に応じてソートしたりすることができるようになります。コンテインメントのプロパティは，コンテナに接続した状態で操作します。

コンテナおよびコンテインメントにプロパティを設定した例を次の図に示します。

図3-42　コンテナおよびコンテインメントへのプロパティの設定例

この例では，コンテナにユーザ定義プロパティとして「コンテナ名」「作成者」および「作成日」を設定しています。また，コンテインメントにユーザ定義プロパティとして「設定日」を設定しています。

コンテナのプロパティは，PutPropertyValuesメソッドによって設定し，GetPropertyValuesAndLockメソッドまたはGetPropertyValuesメソッドによって取得します。コンテインメントのプロパティは，PutLinkPropertyValuesメソッドによって設定し，GetLinkPropertyValuesメソッドまたはGetLinkPropertyValuesAndLockメソッドによって取得します。また，コンテナおよびコンテインメントのプロパティは，GetContainableListAndLockメソッドやGetContainerListAndLockメソッドなどの一覧を取得するメソッドでも取得できます。詳細は，「2.6.6　プロパティの操作」を参照してください。

(2)　プロパティを使用した検索

コンテナおよびコンテインメントのプロパティは検索に使用できます。検索では，ユーザが定義したプロパティのほか，DMAが規定したプロパティ（dmaProp_またはedmProp_で始まるプロパティ）も使用できます。

例えば，図3-42の場合，コンテインメントに設定されているHead（dmaProp_Head）およびTail（dmaProp_Tailプロパティ）を使用して，「作成者が『T.Hitachi』であるコンテナのうち，『B社』という名称のコンテナを関連づけているコンテナを検索する」という検索などができます。

dmaProp_HeadプロパティおよびdmaProp_Tailプロパティを使用した検索の指定例については，文書間リレーションの検索例「3.8.3(2)リレーションのプロパティを使用した検索」を参照してください。また，検索の詳細については，「4.　オブジェクトの検索」を参照してください。

3.9.4　コンテナの操作

コンテナを使用した文書管理をする場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。

コンテナの作成

コンテナと文書の関連づけ

コンテナと文書の関連づけの解除

階層構造をたどったコンテナの取得

コンテナの削除

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

それぞれの操作で使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　コンテナの作成

(2)　コンテナと文書の関連づけ

(3)　コンテナと文書の関連づけの解除

(4)　階層構造をたどったコンテナの取得

(5)　コンテナの削除

(1)　コンテナの作成

新しくコンテナを作成して，データベースに格納する場合，CdbrReferentialContainer::CreateObjectメソッドを使用します。メソッドの発行順序については，「3.2.3(1)　文書の作成」を参照してください。ここでは，コンテナとしてCdbrReferentialContainerオブジェクトを作成する場合の準備について示します。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体（SDBR_DMAINFO構造体）を作成しておきます。

CdbrReferentialContainerオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，dmaClass_Containerクラスまたはサブクラスの識別子を指定します。

(2)　コンテナと文書の関連づけ

ここでは，コンテナと文書を関連づける場合に使用するメソッドと，そのメソッドの発行順序について説明します。

準備

オブジェクトの構成要素であるDMAオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。検索については「4.　オブジェクトの検索」を参照してください。

CdbrReferentialContainerオブジェクトに接続する場合は，構成要素であるDMAオブジェクトのContainerオブジェクトのOIIDを取得しておきます。

文書を関連づけるコンテナと接続します。
CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。

コンテナとCdbrVersionableDocumentオブジェクトを関連づけます。
CdbrReferentialContainer::LinkメソッドまたはCdbrReferentialContainer::LinkAndLockメソッドをコールします。このとき，直接型のコンテインメントを設定すると，コンテナは文書に対してフォルダとして機能します。参照型のコンテインメントを設定すると，コンテナは文書に対してインデクスとして機能します。

コンテナに文書を格納するコールシーケンスの例を次に示します。

コンテナに文書を格納するコールシーケンス

pSession->Begin();
//…
//検索によって関連づける文書およびコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナにwriteロックを設定して，コンテナと文書を
//直接型のコンテインメントで関連づける
Container.LinkAndLock(pVrDoc, DBR_CONTAINMENT_DIRECT,
                     DMA_LOCK_WRITE);
Container.ReleaseObject();
pSession->Commit();

(3)　コンテナと文書の関連づけの解除

コンテナと文書の関連づけを解除する場合に使用するメソッドと，そのメソッドの発行順序について説明します。なお，(2)と同様に，あらかじめ接続する文書の構成要素のOIIDを取得しておきます。

関連づけを解除するコンテナと接続します。
CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。

コンテナが管理している文書の一覧を取得して，取得した文書一覧から関連づけを削除する文書のOIIDを取得します。

コンテナと文書の関連づけを解除します。
CdbrReferentialContainer::UnlinkメソッドまたはCdbrReferentialContainer::UnlinkAndLockメソッドをコールします。

コンテナと文書の関連づけを解除するコールシーケンスの例を次に示します。

コンテナと文書の関連づけを解除するコールシーケンス

pSession->Begin();
//…
//検索によって関連づけを解除するコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナが管理している文書の一覧を取得して，
//取得した文書一覧から関連づけを削除する文書のOIIDを取得する
Container.GetContainableListAndLock(&bContinue,
                                 DBR_CONTAINMENT_REFERENTIAL,
                                 0,NULL,10,&pObjList,
                                 DMA_LOCK_READ);
//コンテナにwriteロックを設定して，
//文書との関連づけを解除する
Container.UnlinkAndLock(pVrDoc, DMA_LOCK_WRITE);
Container.ReleaseObject();
pSession->Commit();

(4)　階層構造をたどったコンテナの取得

コンテナは，階層構造を付けて管理できます。ここでは，階層を付けて管理されている特定のコンテナを，階層構造をたどって取得する場合に使用するメソッドと，そのメソッドの発行順序について説明します。この説明では，ユーザ定義プロパティとして定義されているコンテナの名称を基に取得します。

準備

最上位のコンテナのOIIDを，検索などによって取得しておきます。

階層構造の最上位に位置するコンテナに接続します。
CdbrReferentialContainer::SetOIIDメソッドまたはCdbrReferentialContainer::ConnectObjectメソッドをコールします。

コンテナのプロパティを取得します。
CdbrReferentialContainer::GetPropertyValuesメソッドをコールします。

コンテナが包含しているコンテナの一覧を取得します。
CdbrReferentialContainer::GetContainableListAndLockメソッドまたはCdbrReferentialContainer::GetContainableListメソッドをコールします。

取得したプロパティから，該当する値のプロパティを持つコンテナを取得します。

階層構造をたどってコンテナを検索するコールシーケンスの例を次に示します。ここでは，直接型のコンテインメントで関連づけられているコンテナを検索します。

階層構造をたどってコンテナを検索するコールシーケンス

pSession->Begin();
CdbrReferentialContainer Container;
//最上位のコンテナのOIIDを設定する
Container.SetOIID(pSession, RootOIID);
//最上位のコンテナのプロパティを取得する
Container.GetPropertyValues(2, PropDef, &pPropList);
//最上位のコンテナと直接型のコンテインメントで関連づけられている
//下位のコンテナの一覧を取得する
Container.GetContainableList(&bContinue,
                            DBR_CONTAINMENT_DIRECT, 2,
                            pPropDef, 10, &pObjList);
//取得したコンテナから検索する値のプロパティを持つコンテナを取得する
//…
Container.ReleaseObject();
pSession->Commit();

(5)　コンテナの削除

コンテナの削除には，CdbrReferentialContainer::RemoveObjectメソッドを使用します。これによって，DMAオブジェクトのContainerオブジェクトとDirectContainmentRelationshipオブジェクトおよびReferentialContainmentRelationshipオブジェクトが削除されます。このとき，削除したコンテナが包含していたオブジェクトに当たる文書やコンテナは削除されません。RemoveObjectメソッドの使用方法については，「3.2.3(4)文書の削除」を参照してください。

コンテナを削除するコールシーケンスの例を次に示します。

コンテナを削除するコールシーケンス

pSession->Begin();
//…
//検索によって削除するコンテナのOIIDを取得する
//…
CdbrReferentialContainer Container;
//検索で取得したOIIDをオブジェクトに設定する
Container.SetOIID(pSession, pOIID);
//コンテナを削除する
Container.RemoveObject();
Container.ReleaseObject();
pSession->Commit();

3.10　構成管理コンテナを使用した文書の構成管理

この節では，構成管理コンテナによってバージョンを持つ文書およびコンテナを構成管理する機能について説明します。また，構成管理コンテナ自身のバージョンと，構成管理している文書またはコンテナのバージョンとの関係についても説明します。構成管理コンテナは，CdbrVersionTraceableContainerクラスおよびCdbrConfiguratedReferentialContainerクラスを基に作成します。

＜この節の構成＞

3.10.1　構成管理コンテナを表すクラスの概要

3.10.2　構成管理コンテナを使用した構成管理

3.10.3　構成管理コンテナおよびコンテインメントのプロパティ

3.10.4　構成管理コンテナの操作

3.10.1　構成管理コンテナを表すクラスの概要

ここでは，構成管理コンテナの概要と，このコンテナを作成するための基になる，CdbrVersionTraceableContainerクラスおよびCdbrConfiguratedReferentialContainerクラスの概要について説明します。

＜この項の構成＞

(1)　構成管理コンテナとは

(2)　CdbrVersionTraceableContainerクラスの概要

(3)　CdbrConfiguratedReferentialContainerクラスの概要

(1)　構成管理コンテナとは

DocumentBrokerでは，複数の文書またはコンテナを一つのコンテナと関連づけることによって，オブジェクトをまとめて管理できます。構成管理コンテナでは，関連づけて管理する文書またはコンテナが複数のバージョンを持つ場合に，どのバージョンと関連づけるかが設定できます。さらに，コンテナ自身をバージョン管理することで，どのバージョンのコンテナとどのバージョンの文書またはコンテナと関連づけるかを設定できます。

例えば，文書が複数のバージョンを持つ場合に，次のような管理ができます。

その文書と関連づけている構成管理コンテナでは常に最新のバージョンの文書を管理するようにして，文書がバージョンアップされた場合は構成管理コンテナの関連づけも最新のバージョンの文書をたどって変更するように設定する。

一つのバージョンだけを管理するようにして，文書がバージョンアップしてもそのコンテナからは常に特定のバージョンだけをたどるように設定する。

この機能によって，複数の文書またはコンテナを管理する時に，そのバージョンの状態も特定して，一つのコンテナに関連づけた要素としてまとめて管理できます。この機能を構成管理機能といい，この機能を実現するためのコンテナを構成管理コンテナといいます。

クラスライブラリで提供するクラスから作成できる構成管理コンテナは，CdbrVersionTraceableContainerオブジェクトとCdbrConfiguratedReferentialContainerオブジェクトです。これらのオブジェクトは，次の機能を持ちます。

包含するオブジェクトとしての機能

直接型および参照型のコンテインメントを設定してオブジェクトを包含できます。この機能は，CdbrReferentialContainerオブジェクトと同様です。

構成管理型のコンテインメントを設定できます。これによって，複数のバージョンを持つオブジェクトのバージョン構成を管理できます。
なお，構成管理の対象になるのは，CdbrVersionableDocumentオブジェクトおよびCdbrConfiguratedReferentialContainerオブジェクトです。

包含されるオブジェクトとしての機能
CdbrConfiguratedReferentialContainerオブジェクトの場合は，構成管理コンテナ自身が，コンテナおよび構成管理コンテナの包含要素として関連づけられます。

なお，構成管理コンテナには，構成管理コンテナ自身のバージョンも管理できるバージョン付き構成管理コンテナと，バージョン付き構成管理コンテナの個々のバージョンに対応するバージョンなし構成管理コンテナがあります。構成管理コンテナをバージョン管理する必要がない場合も，バージョンなし構成管理コンテナが使用できます。

また，構成管理コンテナによって包含されるオブジェクトを，構成要素といいます。

構成管理コンテナでは，コンテナで管理する構成要素と，構成要素のバージョンを示すポインタを保持しています。これによって，構成要素の集まりを管理するほか，構成要素の任意のバージョンを管理できます。

(2)　CdbrVersionTraceableContainerクラスの概要

CdbrVersionTraceableContainerクラスの概要について説明します。

(a)　機能

バージョン付き構成管理コンテナの個々のバージョンに対応する構成管理コンテナおよびバージョン管理をしない構成管理コンテナは，CdbrVersionTraceableContainerオブジェクトとして扱うことができます。このクラスから作成したオブジェクトを，バージョンなし構成管理コンテナといいます。

検索で個々のバージョンに対応する構成管理コンテナのOIID（DMAオブジェクトのContainerVersionオブジェクトのOIID）を取得した場合など，このクラスのオブジェクトとして接続して，操作できます。また，バージョン管理する必要がない場合は，バージョンなし構成管理コンテナとして作成することで，バージョン付き構成管理コンテナを使用した場合に比べて高速に処理できます。

(b)　CdbrVersionTraceableContainerクラスを構成するDMAオブジェクト

CdbrVersionTraceableContainerクラスを構成するDMAオブジェクトの種類と概要を次に示します。

ContainerVersionオブジェクト
構成管理コンテナを表すオブジェクトです。

DirectContainmentRelationshipオブジェクト
直接型のコンテインメントを表すオブジェクトです。

ReferentialContainmentRelationshipオブジェクト
参照型のコンテインメントを表すオブジェクトです。

VersionTraceableContainmentRelationshipオブジェクト
構成管理型のコンテインメントを表すオブジェクトです。

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrVersionTraceableContainerクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-43　CdbrVersionTraceableContainerクラスのオブジェクトとDMAオブジェクトの関係

(3)　CdbrConfiguratedReferentialContainerクラスの概要

CdbrConfiguratedReferentialContainerクラスの概要について説明します。

(a)　機能

バージョン管理の対象にしたい構成管理コンテナは，CdbrConfiguratedReferentialContainerクラスを基にしたオブジェクトとして作成します。このクラスから作成したオブジェクトを，バージョン付き構成管理コンテナといいます。バージョン付き構成管理コンテナは，構成管理コンテナのバージョンごとに，関連づけられている構成要素のバージョンをまとめて管理できます。

(b)　CdbrConfiguratedReferentialContainerクラスを構成するDMAオブジェクト

CdbrConfiguratedReferentialContainerクラスを構成するDMAオブジェクトの種類と概要を次に示します。

ConfigurationHistoryオブジェクト
構成管理コンテナの一連のバージョンを統括するオブジェクトです。

VersionSeriesオブジェクト
バージョンの構成を管理するオブジェクトです。

VersionDescriptionオブジェクト
VersionSeriesオブジェクトとContainerVersionオブジェクトを結び付けて，VersionSeriesオブジェクトで管理するバージョンに対応するコンテナ（ContainerVersionオブジェクト）が何であるかを管理するオブジェクトです。

ContainerVersionオブジェクト
構成管理コンテナの特定のバージョンを表すオブジェクトです。

DirectContainmentRelationshipオブジェクト
直接型のコンテインメントを表すオブジェクトです。

ReferentialContainmentRelationshipオブジェクト
参照型のコンテインメントを表すオブジェクトです。

VersionTraceableContainmentRelationshipオブジェクト
構成管理型のコンテインメントを表すオブジェクトです。

DMAオブジェクトについての詳細は，「付録A　DMAオブジェクトの概要」を参照してください。

CdbrConfiguratedReferentialContainerクラスのオブジェクトとDMAオブジェクトの関係について次の図に示します。

図3-44　CdbrConfiguratedReferentialContainerクラスのオブジェクトとDMAオブジェクトの関係

3.10.2　構成管理コンテナを使用した構成管理

ここでは，構成管理コンテナを使用した構成管理について説明します。

説明で使用するバージョン付き構成管理コンテナの例を次の図に示します。

図3-45　文書および構成管理コンテナを管理する構成管理コンテナの例

構成管理コンテナ1では，文書1に対してFIXモード，文書2および構成管理コンテナ2に対してFLOATINGモードという構成管理モードを設定して関連づけています。

＜この項の構成＞

(1)　構成管理モードの種類

(2)　構成要素のバージョンアップ

(3)　構成要素のバージョンの確定

(4)　バージョン付き構成管理コンテナのバージョンアップ

(5)　バージョン付き構成管理コンテナのバージョンアップと構成要素および構成管理モードの関係

(6)　構成管理コンテナで構成管理しているオブジェクトの削除

(1)　構成管理モードの種類

構成管理コンテナでは，構成要素である文書またはコンテナのバージョン構成を管理するために，構成管理モードを設定して，文書やコンテナを関連づけます。

(a)　FLOATINGモード

常に構成管理コンテナを構成要素の最新バージョンと関連づけるモードです。このモードを設定した場合，構成管理コンテナでは，構成要素がバージョンアップするたびに，コンテナを最新バージョンの構成要素につなぎ替えます。

(b)　FIXモード

構成管理コンテナと関連づける構成要素を特定のバージョンで固定するモードです。このモードを設定した場合，構成管理コンテナが制御する構成要素は，構成要素のバージョンアップにかかわらず固定されます。

(2)　構成要素のバージョンアップ

構成要素がバージョンアップした場合，設定している構成管理モードによって，構成管理コンテナが管理する構成要素のバージョンが異なります。

ここでは，次の図に示すように，文書1，文書2および構成管理コンテナ2をそれぞれ編集してバージョンを追加（バージョンアップ）します。

図3-46　構成管理コンテナの構成要素の編集

文書1はFIXモードで管理しているため，バージョンを追加しても構成管理コンテナ1が管理するのはバージョン1の文書1です。一方，文書2および構成管理コンテナ2はFLOATINGモードで管理しているため，構成管理コンテナ1は最新のバージョンであるバージョン2の文書2および構成管理コンテナ2を管理するようにつなぎ替えます。

(3)　構成要素のバージョンの確定

構成要素の編集が終了した場合など，構成管理コンテナで管理する構成要素のバージョンを確定する場合，構成管理モードをFLOATINGモードからFIXモードに変更します。これによって，構成管理コンテナが管理する構成要素のバージョンを確定できます。確定後に文書や構成管理コンテナにバージョンが追加されても，構成管理コンテナは確定したバージョンの構成要素から制御をつなぎ替えません。

構成要素のバージョンを確定した構成管理コンテナの例を，次の図に示します。

図3-47　構成要素のバージョンを確定した構成管理コンテナの例

(4)　バージョン付き構成管理コンテナのバージョンアップ

バージョン付き構成管理コンテナの場合，構成要素のバージョンを，構成管理コンテナのバージョンごとに管理できます。例えば，構成要素のバージョンを確定したあとでさらに構成要素を編集したい場合，バージョン付き構成管理コンテナをバージョンアップして，確定したバージョンの情報を保持する構成管理コンテナとは別に，新しく最新バージョンの文書を管理する構成管理コンテナを作成できます。

これによって，バージョン付き構成管理コンテナのバージョンごとに管理する文書またはコンテナのバージョンが決められます。

バージョン付き構成管理コンテナのバージョンアップの例を次の図に示します。

図3-48　バージョン付き構成管理コンテナのバージョンアップの例

(5)　バージョン付き構成管理コンテナのバージョンアップと構成要素および構成管理モードの関係

バージョン付き構成管理コンテナをバージョンアップした場合，新しいバージョンとして，DMAオブジェクトのContainerVersionオブジェクトがコピーされます。つまり，最新バージョンに対応するバージョンなし構成管理コンテナがコピーされます。このとき，構成要素はコピーされません。

バージョンアップするバージョン付き構成管理コンテナに直接型のコンテインメント，参照型のコンテインメントおよび構成管理型のコンテインメントを設定している場合，関連づけを表すオブジェクトとしては参照型の関連づけを表すReferentialContainmentRelationshipオブジェクトおよび構成管理型のコンテインメントを表すVersionTraceableContainmentRelationshipオブジェクトがコピーされます。これによって，バージョンアップ前の構成管理コンテナとバージョンアップ後の構成管理コンテナで同じ構成要素を管理することになります。なお，このとき直接型の関連づけを表すDirectContainmentRelationshipオブジェクトはコピーされません。したがって，直接型のコンテインメントで管理していた構成要素は，バージョンアップした構成管理コンテナでは管理されません。

また，バージョンアップの際，バージョンアップ前の構成管理コンテナでバージョンを確定しておきたい構成要素は，すべてFIXモードに確定してからバージョンアップしてください。構成管理コンテナバージョン1から構成管理コンテナバージョン2にバージョンアップした場合，構成要素ごとに設定した構成管理モードはそのまま引き継がれます。例えば，FLOATINGモードのままで構成管理コンテナをバージョンアップして，構成管理コンテナバージョン2に関連づけられた文書をバージョンアップすると，構成管理コンテナバージョン1から関連づけられている文書のバージョンもつなぎ替えられ，構成管理コンテナのバージョンごとに文書のバージョンを管理することができません。

構成管理コンテナバージョン1でFIXモードを設定してから構成管理コンテナバージョン2にバージョンアップすると，構成管理コンテナバージョン2でもFIXモードで管理されます。構成管理コンテナバージョン2で構成要素の最新バージョンを管理する場合は，構成管理コンテナバージョン2と構成要素との関連づけをFLOATINGモードに変更してください。

(6)　構成管理コンテナで構成管理しているオブジェクトの削除

構成管理コンテナで構成管理しているオブジェクトのバージョンを削除する場合は，コンテインメントの種類に応じて，次のオブジェクトも削除されます。

構成管理コンテナと直接型のコンテインメントで関連づけられているオブジェクトでは，DirectContainmentRelationshipオブジェクトが削除されます。

構成管理コンテナと参照型のコンテインメントで関連づけられているオブジェクトでは，ReferentialContainmentRelationshipオブジェクトが削除されます。

構成管理コンテナと構成管理型のコンテインメントで関連づけられているオブジェクトでは，VersionTraceableContainmentRelationshipオブジェクトが削除されます。
ただし，構成管理モードがFLOATINGモードで関連づけられているオブジェクトのバージョンを削除する場合，VersionTraceableContainmentRelationshipオブジェクトは削除されず，バージョン削除後のカレントバージョンにつなぎ替えます。

構成管理コンテナのコンテインメントの種類ごとに削除されるDMAオブジェクトについて，次の図に示します。

図3-49　構成管理コンテナのコンテインメントの種類ごとに削除されるDMAオブジェクト

3.10.3　構成管理コンテナおよびコンテインメントのプロパティ

ここでは，構成管理コンテナおよびコンテインメントのプロパティと，プロパティを使用した検索について説明します。

＜この項の構成＞

(1)　構成管理コンテナおよびコンテインメントのプロパティの管理

(2)　構成管理コンテナおよびコンテインメントのプロパティを使用した検索

(1)　構成管理コンテナおよびコンテインメントのプロパティの管理

構成管理コンテナおよびコンテインメントは，プロパティを設定して管理できます。

構成管理コンテナには，DMAが規定したプロパティおよびクラスライブラリ固有のプロパティが設定されています。コンテインメントには，DMAが規定したプロパティが設定されています。これらのプロパティについては，「2.6.2　プロパティの種類」を参照してください。

このほか，構成管理コンテナおよびコンテインメントには，ユーザ定義プロパティが設定できます。

コンテナのプロパティとしてタイトルや作成者などを設定しておくと，構成管理コンテナの検索などで使用できます。バージョンなし構成管理コンテナのプロパティは，構成要素であるDMAオブジェクトのContainerVersionオブジェクトのプロパティとして設定します。バージョン付き構成管理コンテナのプロパティは，構成要素であるDMAオブジェクトのConfigurationHistoryオブジェクトとContainerVersionオブジェクトのプロパティとして設定します。バージョン共通の情報はConfigurationHistoryオブジェクトのプロパティとして，各バージョン固有の情報はContainerVersionオブジェクトのプロパティとして設定してください。

バージョン付き構成管理コンテナのプロパティの設定例を次の図に示します。

図3-50　バージョン付き構成管理コンテナのプロパティの設定例

この例では，バージョン共通の情報としてコンテナ名および作成者を，各バージョン固有の情報として更新日を，ユーザ定義プロパティとして設定しています。

また，コンテインメントのプロパティは，関連づけた日付を管理したり，関連づける文書やコンテナの重要度などを設定して管理したりする場合に使用できます。例えば，重要度を設定して管理した場合は，関連づけている文書とコンテナの一覧を取得した時に，重要度に応じてソートしたりすることができるようになります。コンテインメントのプロパティは，構成管理コンテナに接続した状態で操作します。コンテインメントのプロパティの設定例については，「3.9.3(1)コンテナおよびコンテインメントのプロパティの管理」を参照してください。

構成管理コンテナのプロパティは，PutPropertyValuesメソッドによって設定し，GetPropertyValuesAndLockメソッドまたはGetPropertyValuesメソッドによって取得します。コンテインメントのプロパティは，PutLinkPropertyValuesメソッドによって設定し，GetLinkPropertyValuesメソッドまたはGetLinkPropertyValuesAndLockメソッドによって取得します。また，構成管理コンテナおよびコンテインメントのプロパティは，GetContainableListAndLockメソッドやGetContainerListAndLockメソッドなどの一覧を取得するメソッドでも取得できます。詳細は，「2.6.6　プロパティの操作」を参照してください。

(2)　構成管理コンテナおよびコンテインメントのプロパティを使用した検索

構成管理コンテナおよびコンテインメントのプロパティは検索に使用できます。

構成管理コンテナの検索では，バージョン付き構成管理コンテナの検索と，バージョンなし構成管理コンテナの検索ができます。それぞれのトップオブジェクトであるDMAオブジェクトのConfigurationHistoryオブジェクトまたはContainerVersionオブジェクトを対象に，それぞれに設定されたプロパティを指定して検索を実行します。また，構成管理コンテナから設定したコンテインメントのプロパティも検索に使用できます。

検索では，ユーザが定義したプロパティのほか，DMAが規定したプロパティ（dmaProp_またはedmProp_で始まるプロパティ）も使用できます。例えば，コンテインメントに設定されているdmaProp_HeadプロパティやdmaProp_Tailプロパティなどが使用できます。

これらのプロパティを使用した検索の指定例については，文書間リレーションの検索例「3.8.3(2)リレーションのプロパティを使用した検索」を参照してください。また，検索の詳細については，「4.　オブジェクトの検索」を参照してください。

3.10.4　構成管理コンテナの操作

構成管理コンテナを操作する場合に使用するメソッドと，そのメソッドの発行順序について説明します。ここでは，次の操作について説明します。なお，バージョンアップについては，バージョン付き構成管理コンテナだけで実行できます。それ以外の操作については，バージョン付き構成管理コンテナとバージョンなし構成管理コンテナのどちらでも実行できます。

構成管理コンテナの作成

構成管理コンテナと文書の関連づけ

構成管理コンテナと文書の関連づけの解除

構成管理コンテナの構成要素のバージョンの確定

バージョン付き構成管理コンテナのバージョンアップ

構成管理コンテナの削除

これらの操作を実行する前に，まず，文書空間と接続して，トランザクションを開始してください。

それぞれの操作で使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　構成管理コンテナの作成

(2)　構成管理コンテナと文書の関連づけ

(3)　構成管理コンテナと文書の関連づけの解除

(4)　構成管理コンテナの構成要素のバージョンの確定

(5)　バージョン付き構成管理コンテナのバージョンアップ

(6)　構成管理コンテナの削除

(1)　構成管理コンテナの作成

新しく構成管理コンテナを作成して，データベースに格納する場合，CdbrVersionTraceableContainer::CreateObjectメソッドまたはCdbrConfiguratedReferentialContainer::CreateObjectメソッドを使用します。メソッドの発行順序については，「3.2.3(1)文書の作成」を参照してください。ここでは，構成管理コンテナとしてCdbrVersionTraceableContainerオブジェクトおよびCdbrConfiguratedReferentialContainerオブジェクトを作成する場合の準備について示します。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体（SDBR_DMAINFO構造体）を作成しておきます。

CdbrVersionTraceableContainerオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，edmClass_ContainerVersionクラスまたはサブクラスの識別子を指定します。

CdbrConfiguratedReferentialContainerオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，dmaClass_ConfigurationHistoryクラスまたはサブクラスの識別子と，edmClass_ContainerVersionクラスまたはサブクラスの識別子を指定します。ただし，構成管理の対象になるバージョン付き構成管理コンテナを作成する場合は，SDBR_DMAINFO構造体に，次のクラス識別子を指定します。

指定するクラス識別子

dmaClass_ConfigurationHistoryクラスまたはサブクラスの識別子

edmClass_ContainerVersionクラスまたはサブクラスの識別子

(2)　構成管理コンテナと文書の関連づけ

構成管理コンテナと文書を構成管理型のコンテインメントによって関連づける場合に使用するメソッドと，そのメソッドの発行順序について説明します。

準備

既存のオブジェクトに接続する場合，クラスライブラリのオブジェクトの構成要素であるDMAオブジェクトのOIIDは，検索などによってあらかじめ取得してください。検索については，「4.　オブジェクトの検索」を参照してください。

取得するOIIDは，接続するオブジェクトの種類によって次のようになります。

CdbrVersionTraceableContainerオブジェクトに接続する場合は，DMAオブジェクトのContainerVersionオブジェクトのOIIDを指定します。

CdbrConfiguratedReferentialContainerオブジェクトに接続する場合は，DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを指定します。

構成管理コンテナと接続します。
接続するオブジェクトに応じて，次のどれかのメソッドをコールします。

CdbrVersionTraceableContainer::SetOIIDメソッド

CdbrVersionTraceableContainer::ConnectObjectメソッド

CdbrConfiguratedReferentialContainer::SetOIIDメソッド

CdbrConfiguratedReferentialContainer::ConnectObjectメソッド

構成管理コンテナと文書を関連づけます。
CdbrVersionTraceableContainerクラスまたはCdbrConfiguratedReferentialContainerクラスで定義されている，LinkVTFloatAndLockメソッド，LinkVTFloatメソッド，LinkVTFixAndLockメソッドまたはLinkVTFixメソッドのどれかをコールします。このメソッドによって，構成管理モードである，FLOATINGモードまたはFIXモードが設定されます。

構成管理コンテナと文書を関連づけるコールシーケンスの例を次に示します。

構成管理コンテナと文書を関連づけるコールシーケンス

pSession->Begin();
//…
//検索によって格納する文書および構成管理コンテナのOIIDを取得する
//…
CdbrConfiguratedReferentialContainer VrContainer;
//検索で取得したOIIDをオブジェクトに設定する
VrContainer.SetOIID(pSession, pOIID);
//構成管理コンテナにwriteロックを設定して，
//構成管理コンテナと文書をFLOATINGモードで関連づける
VrContainer.LinkVTFloatAndLock(NULL, pVrDoc, NULL, &pLinkId,
                              DMA_LOCK_WRITE);
VrContainer.ReleaseObject();
pSession->Commit();

(3)　構成管理コンテナと文書の関連づけの解除

構成管理コンテナと構成要素の関連づけを解除する場合は，関連づける場合と同様に構成管理コンテナに接続してから，CdbrVersionTraceableContainerクラスまたはCdbrConfiguratedReferentialContainerクラスで定義されているUnlinkVTAndLockメソッドまたはUnlinkVTメソッドをコールします。

構成管理コンテナに格納した文書との関連づけを解除するコールシーケンスの例を次に示します。

構成管理コンテナに格納した文書との関連づけを解除するコールシーケンス

pSession->Begin();
//…
//検索によって関連づけを解除する文書および構成管理コンテナの
//OIIDを取得する
//…
CdbrConfiguratedReferentialContainer VrContainer;
//検索で取得したOIIDをオブジェクトに設定する
VrContainer.SetOIID(pSession, pOIID);
//構成管理コンテナが構成管理している文書の一覧を取得して，
//取得した文書一覧から関連づけを削除する文書のリンクIDを取得する
VrContainer.GetVTContaineeList(&bContinue, NULL, 0, NULL, 10,
                               &pVTObjList);
//構成管理コンテナにwriteロックを設定して，
//構成管理コンテナと文書を解除する
VrContainer.UnlinkVTAndLock(pLinkId,DMA_LOCK_WRITE);
VrContainer.ReleaseObject();
pSession->Commit();

(4)　構成管理コンテナの構成要素のバージョンの確定

構成管理コンテナの構成要素のバージョンの確定には，CdbrVersionTraceableContainer::SetVTFixメソッドまたはCdbrConfiguratedReferentialContainer::SetVTFixメソッドを使用します。また，バージョンの確定の解除には，CdbrVersionTraceableContainer::SetVTFloatメソッドまたはCdbrConfiguratedReferentialContainer::SetVTFloatメソッドを使用します。

構成要素のバージョンを確定するコールシーケンスの例を次に示します。

構成要素のバージョンを確定するコールシーケンス

pSession->Begin();
//…
//検索によって該当する構成管理コンテナのOIIDを取得する
//…
CdbrConfiguratedReferentialContainer VrContainer;
//検索で取得したOIIDをオブジェクトに設定する
VrContainer.SetOIID(pSession,pOIID);
//構成管理コンテナが構成管理している文書の一覧を取得して，
//取得した一覧から構成管理モードをFIXにする文書のリンクIDを取得する
VrContainer.GetVTContaineeList(&bContinue, NULL, 0, NULL, 10,
                               &pVTObjList);
//一覧で取得した文書の一つの構成管理モードをFIXモードに確定する
VrContainer.SetVTFix(pLinkId, DBR_VTVERSION);
VrContainer.ReleaseObject();
//処理の確定
pSession->Commit();

(5)　バージョン付き構成管理コンテナのバージョンアップ

バージョン付き構成管理コンテナをバージョンアップするには，文書のバージョンアップと同様に，チェックアウトおよびチェックインを実行します。このとき，構成要素（バージョン付き文書またはバージョン付き構成管理コンテナ）を管理している構成管理モードを適切に変更することによって，バージョン管理コンテナごとに構成要素のバージョンの履歴管理ができるようになります。

バージョン付き構成管理コンテナのバージョンごとに構成要素の履歴を管理する場合の手順を，次の図に示します。

図3-51　バージョンアップ構成管理コンテナのバージョンアップの手順

図3-51について説明します。

バージョンアップ前の構成管理コンテナが構成要素を管理している構成管理モードを，FIXモードに変更します。
CdbrConfiguratedReferentialContainer::SetVTFixメソッドをコールします。
図3-51は，バージョン1の構成管理コンテナでは，文書A V1（バージョン1）と，文書B V2（バージョン2）を管理します。

バージョン付き構成管理コンテナをチェックアウトします。
CdbrConfiguratedReferentialContainer::VersionCheckOutメソッドをコールします。
仮のバージョンの構成管理コンテナが作成されます。仮のバージョンの構成管理コンテナが構成要素を管理する構成管理モードは，チェックアウト前の状態と同じ，FIXモードになります。

構成要素を編集します。
図3-51では，文書Aをバージョンアップしています。ただし，構成管理モードがFIXモードなので，この時点で仮のバージョンのコンテナが構成管理するのは，文書A V1のままです。

仮のバージョンの構成管理コンテナで構成要素を管理している構成管理モードを，すべてFLOATINGモードにします。
CdbrConfiguratedReferentialContainer::SetVTFloatメソッドをコールします。
この時点で，仮のバージョンの構成管理コンテナが管理する構成要素が，文書A V1から文書A V2に変わります。

バージョン付き構成管理コンテナをチェックインします。
CdbrConfiguratedReferentialContainer::VersionCheckInメソッドをコールします。
仮のバージョンの構成管理コンテナが，バージョン2の構成管理コンテナとして確定されます。
これによって，バージョン1の構成管理コンテナで管理する文書Aは文書A V1，バージョン2の構成管理コンテナで管理する文書Aは文書A V2となり，バージョン付き構成管理コンテナのバージョンごとの文書の履歴管理が実現できます。

注意

バージョンアップ後の構成管理コンテナの構成要素を編集する場合，バージョンアップ前の構成管理コンテナの構成管理モードをFIXモードに変更したあとで，構成要素を編集してください。構成管理モードがFLOATINGモードの状態で構成要素を編集した場合，バージョンアップ前の構成管理コンテナが管理する構成要素も編集後の構成要素に切り替わってしまうため，構成管理コンテナのバージョンによる構成要素の履歴管理ができません。

それぞれの構成要素のバージョンアップについては，「3.3.3　バージョン管理機能の操作」を参照してください。

(6)　構成管理コンテナの削除

バージョン付き構成管理コンテナであるCdbrConfiguratedReferentialContainerオブジェクトを削除する場合は，CdbrConfiguratedReferentialContainer::RemoveObjectメソッドを使用します。これによって，CdbrConfiguratedReferentialContainerオブジェクトを構成していたすべてのDMAオブジェクトが削除されます。

また，特定のバージョンに対応するバージョンなし構成管理コンテナであるCdbrVersionTraceableContainerオブジェクトは，次のどちらかの方法で削除します。

バージョン付き構成管理コンテナであるCdbrConfiguratedReferentialContainerオブジェクトに接続して，CdbrVersionableクラスで定義されているDeleteVersionメソッドをコールする。

バージョン付き構成管理コンテナの個々のバージョンに対応するCdbrVersionTraceableContainerオブジェクトに接続して，CdbrVersionTraceableContainer::RemoveObjectメソッドをコールする。

どちらのメソッドを使用した場合も，該当するバージョンのバージョンなし構成管理コンテナを構成していたDMAオブジェクトのVersionDescriptionオブジェクト，ContainerVersionオブジェクト，VersionTraceableContainmentRelationshipオブジェクト，DirectContainmentRelationshipオブジェクトおよびReferentialContainmentRelationshipオブジェクトが削除されます。

なお，バージョン付き構成管理コンテナおよび特定のバージョンに対応するバージョンなし構成管理コンテナを削除しても，包含していた文書やコンテナは削除されません。

3.11　XML文書の管理

この節では，DocumentBrokerでXML文書を管理する場合の管理方法について説明します。

＜この節の構成＞

3.11.1　XML文書管理機能の概要

3.11.2　DocumentBrokerが管理できるXML文書

3.11.3　XML文書管理機能を使用した文書の管理

3.11.4　XML文書の操作

3.11.1　XML文書管理機能の概要

ここでは，XML文書管理機能の概要について説明します。

＜この項の構成＞

(1)　DocumentBrokerで提供するXML文書管理機能

(2)　XMLプロパティマッピング機能

(3)　XMLインデクスデータ作成機能

(4)　XML文書管理機能を実現するクラスとDMAオブジェクト

(1)　DocumentBrokerで提供するXML文書管理機能

XMLは，W3Cによって標準化が進められている，文書の構造を定義するための言語です。XMLでは，ユーザが設定した独自のタグによって，論理構造を持つ文書を記述できます。このため，Web上のデータ交換フォーマットなどとして，多くの業務で適用されています。

DocumentBrokerでは，XML形式で記述されたファイルをバージョンなし文書およびバージョン付き文書のコンテントとして管理できます。

なお，このマニュアルでは，XMLで記述されたファイルをXMLファイルと呼びます。また，XMLファイルをコンテントとしてDocumentBrokerに登録した文書を，XML文書と呼びます。

DocumentBrokerでは，XML文書を管理するために次のような機能を提供しています。

XMLプロパティマッピング機能

XMLインデクスデータ作成機能

XMLプロパティマッピング機能を使用する場合は，前提プログラムとしてHiRDB Adapter for XMLが必要です。また，XMLインデクスデータ作成機能を使用する場合は，前提プログラムとしてHiRDB Adapter for XMLと，Preprocessing Library for Text Searchが必要です。また，全文検索を実行する場合は，サーバ側にHiRDB Text Search Plug-inが必要です。

(2)　XMLプロパティマッピング機能

ここでは，XMLプロパティマッピング機能について説明します。

(a)　XMLプロパティマッピング機能とは

XMLプロパティマッピング機能とは，XMLファイル中の，タグ間の文字列やタグの属性値を抽出して，XML文書のプロパティに設定するための情報を作成する機能です。この情報をXML文書のプロパティにマッピングすることによって，例えば，次のようなことができるようになります。

プロパティの一覧として情報を取得する

属性検索の対象にする

検索結果をソートするときのキーにする

XMLプロパティマッピング機能を使用するXMLファイルの例を，次の図に示します。

図3-52　XMLプロパティマッピング機能を使用するXMLファイルの例

<prop>タグで囲まれた内容には，タイトルや著者，著者に関する情報，バージョン情報などが，それぞれのタグ内の文字列または属性値として記述されています。

ここでは，XMLファイルをバージョン付き文書のコンテントとして登録する場合について説明します。タイトルと著者の情報はバージョン付き文書のプロパティ（DMAオブジェクトのConfigurationHistoryオブジェクトのプロパティ）として，バージョン情報はバージョンなし文書（バージョン付き文書の1バージョン）のプロパティ（DMAオブジェクトのDocVersionオブジェクトのプロパティ）としてマッピングすることにします。

図3-52のXMLファイルに含まれる情報をXML文書のプロパティにマッピングした例を，次の図に示します。

図3-53　XMLプロパティマッピング機能によってXML文書のプロパティにマッピングした例

この例では，<title>タグ間の情報は，バージョン付き文書のusrProp_Titleプロパティにマッピングしています。<author>タグ間の情報は，複数の情報を表すタグを含むので，VariableArray型プロパティであるusrProp_Authorプロパティにマッピングしています。<author>タグの属性であるnameの値，<author>タグ間に含まれる<birthday>タグおよび<organization>タグ間の情報は，VariableArray型プロパティの構成要素を表すusrProp_Nameプロパティ，usrProp_BirthdayプロパティおよびusrProp_Organizationプロパティにそれぞれマッピングしています。

(b)　機能

XMLプロパティマッピング機能は，XMLファイルに対して構文解析を実行し，タグ間の文字列や属性値を抽出して，プロパティにマッピングするための機能です。抽出した情報は，文書を作成する時に指定するDMAオブジェクト生成用の構造体（SDBR_DMAINFO構造体）として出力されます。SDBR_DMAINFO構造体は，文書の作成時に使用する，DMAオブジェクトのクラス識別子とプロパティの初期値をメンバとして持つ構造体です。SDBR_DMAINFO構造体の詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

作成したSDBR_DMAINFO構造体を指定して文書を作成することで，XMLファイルのコンテントの情報をプロパティにマッピングしたXML文書が作成できます。

なお，この機能を使用する場合は，登録するXMLファイルの論理構造を明確にして，どのタグをどのプロパティにマッピングするかの対応を定義しておく必要があります。定義に必要なファイルには，ユーザが作成するファイルと，DocumentBrokerおよびHiRDB Adapter for XMLによって作成されるファイルがあります。

定義ファイルの詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

(3)　XMLインデクスデータ作成機能

ここでは，XMLインデクスデータ作成機能について説明します。

(a)　XMLインデクスデータ作成機能とは

論理構造を持つ文書の構造を指定して実行する全文検索を，構造指定検索といいます。XMLインデクスデータ作成機能を使用して全文検索インデクスを作成したXML文書は，構造指定検索の対象になります。

構造指定検索について，次の図に示したXML文書1およびXML文書2の例で説明します。

図3-54　構造指定検索で使用するXML文書の例

構造指定検索では，これらの文書に対して，「構造<chap>の下の構造<topic>の中に『W3C』が含まれる文書を検索する」といった検索ができます。この例の場合は，XML文書2が検索結果として取得できます。

検索についての詳細は，「4.　オブジェクトの検索」を参照してください。

(b)　機能

XMLインデクスデータ作成機能は，XMLファイルの構文解析を実行して，構造指定検索に必要なインデクスデータを作成するための機能です。また，構造指定検索の対象にならない，プレーンテキスト形式の全文検索インデクスデータも作成できます。作成したインデクスデータは，インデクスデータ出力ファイルに出力されます。このファイルを指定してXML文書を作成することによって，構造指定検索またはプレーンテキストを対象にした全文検索に必要な全文検索インデクスを登録できます。

また，インデクスデータを作成する時には，XMLファイルの内容から不要なタグを表す情報を削除したり，不要なタグおよびそのタグに囲まれた文字列全体を削除したりできます。この場合，削除するタグについての定義は，フィルタリング定義ファイルとして作成しておく必要があります。フィルタリング定義ファイルについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

なお，XMLインデクスデータ作成機能は，次の文字コードで記述されたXMLファイルを対象に実行できます。

HiRDB Adapter for XMLの場合

Shift-JIS

EUC

UTF-8

UTF-16

ただし，DocumentBrokerの文書の全文検索インデクスは，次の文字コードで登録されます。

AIXまたはWindowsの場合

Shift-JIS

このため，AIXまたはWindowsの場合は，XML文書に対して構造指定検索を実行するとき，検索条件をすべてShift-JISで入力してください。

また，構造指定検索の対象になるXML文書は，次の条件に従って作成する必要があります。

CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトの構成要素として，全文検索を実行するためのプロパティを追加したdmaClass_DocVersionクラスまたはそのサブクラス（全文検索機能付き文書クラス）を指定してください。

全文検索機能付き文書クラスに追加するプロパティのうち，全文検索インデクス用プロパティは，次のプロパティのどれかにしてください。

edmProp_StIndexプロパティ（構造指定検索用全文検索インデクス）

edmProp_ConceptStIndexプロパティ（構造指定検索用概念検索インデクス）

edmProp_Contentプロパティ（Version 1互換用全文検索インデクス）

全文検索機能付き文書クラスおよび全文検索インデクス用プロパティについての詳細は，「4.4　全文検索の対象になる文書の作成」を参照してください。また，登録した文書に対して実行できる全文検索の詳細については，「4.2.2　全文検索」を参照してください。

(4)　XML文書管理機能を実現するクラスとDMAオブジェクト

ここでは，XML文書管理機能を実現するための，クラスライブラリのクラスとDMAオブジェクトについて説明します。

(a)　XML文書管理機能を実現するためのクラス

XML文書管理機能は，次の二つのクラスの機能を使用して実現されます。

CdbrXmlTranslatorFactoryクラス
CdbrXmlTranslatorオブジェクトを作成するためのクラスです。このクラスは，XML文書管理機能を実行するための操作環境を管理します。

CdbrXmlTranslatorクラス
実際にXMLプロパティマッピング機能およびXMLインデクスデータ作成機能を実行するためのクラスです。
このクラスの機能は，CdbrXmlTranslatorオブジェクトが作成された状態で使用できます。

(b)　XML文書を表すDMAオブジェクト

XML文書は，CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトとして作成，管理します。これらのオブジェクトを構成するDMAオブジェクトについては，「3.2.1　文書を表すクラスの概要」を参照してください。

ここでは，それぞれのオブジェクトに対して，XML文書管理機能によって設定される情報について説明します。

CdbrDocumentオブジェクトの場合，XMLプロパティマッピング機能によって抽出した情報は，DMAオブジェクトのDocVersionオブジェクトのプロパティにマッピングできます。
CdbrDocumentオブジェクトに対するXMLプロパティマッピングの例を，次の図に示します。

図3-55　CdbrDocumentオブジェクトに対するXMLプロパティマッピングの例

また，XMLインデクスデータ作成機能で作成したインデクスデータを基に，DocVersionオブジェクトの全文検索インデクス用プロパティが設定できます。

CdbrVersionableDocumentオブジェクトの場合，XMLプロパティマッピング機能によって抽出した情報は，DMAオブジェクトのConfigurationHistoryオブジェクトとDocVersionオブジェクトのプロパティにマッピングできます。
例えば，タイトルや著者などバージョン共通の情報を表すタグの情報は，ConfigurationHistoryオブジェクトのプロパティにマッピングできます。バージョンや作成日などバージョンごとに異なる情報を表すタグの情報は，DocVersionオブジェクトのプロパティにマッピングできます。
CdbrVersionableDocumentオブジェクトに対するXMLプロパティマッピングの例を，次の図に示します。

図3-56　CdbrVersionableDocumentオブジェクトに対するXMLプロパティマッピングの例

また，XMLインデクスデータ作成機能で作成したインデクスデータを基に，DocVersionオブジェクトの全文検索インデクス用プロパティが設定できます。

3.11.2　DocumentBrokerが管理できるXML文書

ここでは，DocumentBrokerがXML文書のコンテントとして管理できるXMLファイルについて説明します。

＜この項の構成＞

(1)　XMLファイルの形式

(2)　XMLプロパティマッピング機能が使用できるXMLファイルの例

(1)　XMLファイルの形式

DocumentBrokerでは，次のようなXMLファイルをXML文書のコンテントとして管理できます。

外部参照を含まない，単一ファイルで構成されたXMLファイル

イメージファイルなど，構文解析の対象外の外部参照を含むXMLファイル
ただし，この場合も，XMLファイルそのものは単一ファイルで構成されることが必要です。

また，XMLプロパティマッピング機能を使用する場合は，XMLファイルの構造は，次の条件を満たしていることが必要です。

XML宣言が記載されている

一つのタグで文書全体が囲まれている

プロパティにマッピングするタグが，一度だけ出現する（VariableArray型プロパティにマッピングするタグは除く）

VariableArray型プロパティにマッピングするタグの構造が，次の図に示す形式である

図3-57　VariableArray型プロパティにマッピングできるタグの構造

(2)　XMLプロパティマッピング機能が使用できるXMLファイルの例

XMLプロパティマッピング機能を使用できるXMLファイルの例を，次の図に示します。なお，それぞれのタグ名は任意です。

図3-58　XMLプロパティマッピング機能を使用できるXMLファイルの例

次にXMLプロパティマッピング機能が使用できないXMLファイルの形式の例と，使用できる形式への変更例を説明します。

使用できない例1：プロパティにマッピングするタグが複数回出現するXMLファイル

例えば，次の図のような文書です。

図3-59　マッピングできない例1：プロパティにマッピングするタグが複数回出現するXMLファイルの例

例1のXMLファイルには，<title>タグで囲まれた情報が複数あるため，一つ値を取るプロパティにマッピングすることはできません。

複数回出現するタグの情報をプロパティにマッピングするためには，VariableArray型プロパティとしてマッピングする方法があります。例えば，次の図のように複数回出現するタグの前後にVariableArray型プロパティを表すタグを記述すれば，<title>タグの情報をプロパティにマッピングできます。

図3-60　例1を登録できる構造に変更した例

使用できない例2：要素が繰り返し出現するときにVariableArray型プロパティを表すタグがないXMLファイル

例えば，次の図のようなXMLファイルです。

図3-61　マッピングできない例2：要素が繰り返し出現するときにVariableArray型プロパティを表すタグがないXMLファイルの例

この例では，<author>タグと<organization>タグを繰り返していますが，出現順序が明確にならないため，VariableArray型プロパティにマッピングできません。

この場合，次の図のようにVariableArray型プロパティを表す<list>タグを追加して構造を変更すれば，VariableArray型プロパティとして登録できます。

図3-62　例2を登録できる構造に変更した例

3.11.3　XML文書管理機能を使用した文書の管理

ここでは，XML文書管理機能を使用したXML文書の管理方法について説明します。

＜この項の構成＞

(1)　XML文書管理機能を使用するための準備

(2)　XML文書のプロパティにマッピングするプロパティ情報の取得

(3)　XML文書を構造指定検索するためのインデクスデータの作成

(4)　イメージファイルなど関連を持つファイルの管理

(1)　XML文書管理機能を使用するための準備

まず，XMLプロパティマッピングに使用する定義ファイル類を解析して，XML文書管理機能を実行するためのCdbrXmlTranslatorオブジェクトを作成します。これには，CdbrXmlTranslatorFactoryクラスの機能を使用します。

手順を次に示します。

CdbrXmlTranslatorFactory::Initializeメソッドをコールして，CdbrXmlTranslatorFactoryオブジェクトを初期化します。
このメソッドによって，XMLプロパティマッピングに使用する定義ファイルが解析されます。

CdbrXmlTranslatorFactory::CreateTranslatorメソッドをコールして，CdbrXmlTranslatorオブジェクトを作成します。
XML文書管理機能を使用するために必要なCdbrXmlTranslatorオブジェクトを作成します。

(2)　XML文書のプロパティにマッピングするプロパティ情報の取得

XMLプロパティマッピング機能を使用して，バージョンなしオブジェクトまたはバージョン付きオブジェクトに設定するプロパティの情報を取得します。

「(1)XML文書管理機能を使用するための準備」で示した手順でCdbrXmlTranslatorオブジェクトを作成した状態で，CdbrXmlTranslator::GetDmaInfoListメソッドをコールします。XMLファイルが構文解析されて，プロパティマッピングするためのDMAオブジェクト生成用の構造体（SDBR_DMAINFO構造体）が作成されます。

ここで取得した構造体は，次の時に使用します。

XML文書を作成する時
XMLファイルをコンテントとするXML文書を作成する場合に，プロパティの初期値を設定した構造体として使用します。
XMLプロパティマッピング機能によって取得したSDBR_DMAINFO構造体を，CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドの引数に指定します。

XML文書のプロパティを更新する時
XML文書のコンテントを更新した時に，更新するプロパティの値を設定した構造体として使用します。この場合は，XMLファイルから取得したSDBR_DMAINFO構造体のメンバである，SDBR_PROPLIST構造体を使用します。
CdbrDocument::PutPropertyValuesメソッドまたはCdbrVersionableDocument::PutPropertyValuesメソッドの引数に指定します。

(3)　XML文書を構造指定検索するためのインデクスデータの作成

XMLインデクスデータ作成機能を使用して，バージョンなしオブジェクトまたはバージョン付きオブジェクトの全文検索インデクスとして登録するインデクスデータを作成します。

「(1)XML文書管理機能を使用するための準備」で示した手順でCdbrXmlTranslatorオブジェクトを作成した状態で，CdbrXmlTranslator::GetDmaInfoListメソッドまたはCdbrXmlTranslator::GetIndexDataメソッドをコールします。XMLファイルが構文解析されて，インデクスデータがファイルに出力されます。このとき，フィルタリング定義ファイルの内容によって，不要なタグの情報も除去できます。

なお，GetDmaInfoListメソッドとGetIndexDataメソッドのどちらのメソッドをコールした場合も，構文解析が実行されます。XMLプロパティマッピング機能も使用する場合は，GetDmaInfoListメソッドでSDBR_DMAINFO構造体とインデクスデータを同時に作成することをお勧めします。構文解析が一度で済むため，処理時間が短縮できます。

また，すでにXML文書に登録されているコンテントからは，構造指定検索の対象になるインデクスデータを作成できません。インデクスデータは，クライアント環境にあるXMLファイル（file://で指定できるパスのファイル）を指定して作成してください。

XMLインデクスデータ作成機能で出力したインデクスデータ出力ファイルは，次の時に使用できます。

XML文書を作成する時
XMLファイルをコンテントとするXML文書を作成する時に，構造指定検索用全文検索インデクスを作成するためのファイルとして使用できます。
CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドでXML文書を作成してから，CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドによって全文検索インデクスを作成します。

XML文書のコンテントを更新する時
XML文書のコンテントを更新する時に，更新するXMLファイルの内容に合った全文検索インデクスを作成するためのファイルとして使用できます。
CdbrDocument::UpdateContentメソッドまたはCdbrVersionableDocument::UpdateContentメソッドなどでXML文書のコンテントを更新してから，CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドによって全文検索インデクスを作成します。

(4)　イメージファイルなど関連を持つファイルの管理

DocumentBrokerでXML文書として管理できるのは，一つのファイルから構成されるXMLファイルだけです。

イメージファイルなどの外部エンティティもDocumentBrokerでまとめて管理したい場合は，文書間リレーションやコンテナを使用して管理してください。XML文書およびイメージファイルをバージョン付き文書，コンテナを構成管理コンテナとして作成すれば，XML文書とイメージファイルの構成管理もできます。

文書間リレーションについては，「3.8　文書間リレーションを設定した文書管理」を参照してください。コンテナについては，「3.9　コンテナを使用した文書管理」および「3.10　構成管理コンテナを使用した文書の構成管理」を参照してください。

3.11.4　XML文書の操作

XML文書の操作を実行する場合に使用するメソッドと，そのメソッドの発行順序の例を説明します。

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　XML文書の作成

(2)　XML文書の更新

(1)　XML文書の作成

XMLプロパティマッピング機能およびXMLインデクスデータ作成機能を使用してXML文書を作成する場合の，メソッドと，そのメソッドの発行順序について説明します。

なお，XMLプロパティマッピングに必要な定義ファイル類およびXMLインデクスデータを作成するために必要なフィルタリング定義ファイルは，あらかじめ作成しておきます。それぞれの定義ファイルについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

CdbrXmlTranslatorFactoryクラスを初期化します。
CdbrXmlTranslatorFactory::Initializeメソッドをコールします。

CdbrXmlTranslatorオブジェクトを作成します。
CdbrXmlTranslatorFactory::CreateTranslatorメソッドをコールします。

XMLプロパティマッピング機能を使用して，DMA生成用構造体（SDBR_DMAINFO構造体）を作成します。同時に，XMLインデクスデータ作成機能を使用して，インデクスデータをファイルに出力します。
CdbrXmlTranslator::GetDmaInfoListメソッドをコールします。
なお，インデクスデータだけを出力する場合は，CdbrXmlTranslator::GetIndexDataメソッドをコールします。

文書空間に接続して，トランザクションを開始します。
CdbrSession::ConnectメソッドおよびCdbrSession::Beginメソッドをコールします。

手順3.で作成したDMA生成用構造体を引数に指定して，CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトを作成します。
CdbrDocument::CreateObjectメソッドまたはCdbrVersionableDocument::CreateObjectメソッドをコールします。

手順3.でインデクスデータを出力したファイルを引数に指定して，CdbrDocumentオブジェクトまたはCdbrVersionableDocumentオブジェクトの全文検索インデクスを作成します。
CdbrDocument::CreateIndexメソッドまたはCdbrVersionableDocument::CreateIndexメソッドをコールします。

コールシーケンスの例を次に示します。なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetDmaInfoListメソッドの引数に指定するファイルパスは「"file:///c:¥temp¥xmlcontent.xml"」，「"file:///c:¥temp¥NorParamFile.txt"」および「"file:///c:¥temp¥index.txt"」のように指定してください。CreateIndexメソッドの引数に指定するファイルパスは，「"file:///c:¥temp¥index.txt"」のように指定してください。

XML文書を作成するコールシーケンスの例

CdbrSession              Session;
CdbrVersionableDocument  VerDoc;
CdbrXmlTranslatorFactory XmlTransFactory
CdbrXmlTranslator        XmlTrans;
//CdbrXmlTranslatorFactoryオブジェクトを初期化する
XmlTransFactory.Initialize(pDocSpaceId,
                          pXmsFileName, &pMessage);
//CdbrXmlTranslatorオブジェクトを作成する
XmlTransFactory.CreateTranslator(&XmlTrans);
//XMLファイルからDMAオブジェクト生成用の構造体
//(SDBR_DMAINFO構造体）と
//インデクスデータ出力ファイルを作成する
XmlTrans.GetDmaInfoList("file:///tmp/xmlcontent.xml",
 DBR_XMLPARSE_NO_EXTERNAL_ENTITIES, pMappingId,
 DBR_INDEXTYPE_STRUCTURED, "file:///tmp/NorParamFile.txt",
 "file:///tmp/index.txt", &DmaInfoList, &pMessage);
//セッションを接続してトランザクションを開始する
Session.Connect(pDocSpaceId, pUserId, pPassword);
Session.Begin();
//SDBR_DMAINFO構造体を使用して文書を作成する
VerDoc.CreateObject(&Session, pDmaInfoList->lCount,
pDmaInfoList->pItem, pXmlFile, "text::xml", &pOIID);
//インデクスデータ出力ファイルを使用して全文検索インデクスを作成する
VerDoc.CreateIndex("file:///tmp/index.txt");
Session.Commit();
//セッションを切断する
Session.Disconnect();

(2)　XML文書の更新

XML文書の更新時に，XMLプロパティマッピング機能およびXMLインデクスデータ作成機能を使用して，プロパティの更新と全文検索インデクスの再作成をする場合の，メソッドと，そのメソッドの発行順序について説明します。

なお，XMLプロパティマッピングに必要な定義ファイル類およびXMLインデクスデータを作成するために必要なフィルタリング定義ファイルは，あらかじめ作成しておきます。それぞれの定義ファイルについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

CdbrXmlTranslatorFactoryクラスを初期化します。
CdbrXmlTranslatorFactory::Initializeメソッドをコールします。

CdbrXmlTranslatorオブジェクトを作成します。
CdbrXmlTranslatorFactory::CreateTranslatorメソッドをコールします。

XMLプロパティマッピング機能を使用して，更新するXMLファイルからDMA生成用構造体（SDBR_DMAINFO構造体）を作成します。同時に，XMLインデクスデータ作成機能を使用して，インデクスデータをファイルに出力します。
CdbrXmlTranslator::GetDmaInfoListメソッドをコールします。
なお，インデクスデータだけを出力する場合は，CdbrXmlTranslator::GetIndexDataメソッドをコールします。

文書空間に接続して，トランザクションを開始します。
CdbrSession::ConnectメソッドおよびCdbrSession::Beginメソッドをコールします。

更新するXML文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッドまたはConnectObjectメソッドをコールします。

XML文書のコンテントを更新します。
更新するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドをコールします。
なお，ここでXML文書のコンテントとして登録するXMLファイルと，手順3.でXMLインデクスデータを作成する時に使用したXMLファイルの内容は，同じにものにしてください。

XML文書の全文検索インデクスを更新します。このとき，手順3.で作成したインデクスデータ出力ファイルをメソッドの引数に指定します。
更新するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，CreateIndexメソッドをコールします。

XML文書のプロパティを更新します。このとき，手順3.で作成したDMAオブジェクト生成用構造体（SDBR_DMAINFO構造体）のメンバである，SDBR_PROPLIST構造体をメソッドの引数に指定します。
更新するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，PutPropertyValuesメソッドをコールします。

コールシーケンスの例を次に示します。なお，このコールシーケンスは，UNIXの場合です。Windowsの場合は，GetDmaInfoListメソッドの引数に指定するファイルパスは「"file:///c:¥temp¥xmlcontent.xml"」，「"file:///c:¥temp¥NorParamFile.txt"」および「"file:///c:¥temp¥index.txt"」のように指定してください。UpdateContentメソッドの引数に指定するファイルパスは，「"file:///c:¥temp¥xmlcontent.xml"」のように指定してください。CreateIndexメソッドの引数に指定するファイルパスは，「"file:///c:¥temp¥index.txt"」のように指定してください。

XML文書を更新するコールシーケンスの例

CdbrSession              Session;
CdbrVersionableDocument  VerDoc;
CdbrXmlTranslatorFactory XmlTransFactory
CdbrXmlTranslator        XmlTrans;
//CdbrXmlTranslatorFactoryオブジェクトを初期化する
XmlTransFactory.Initialize(pDocSpaceId, pXmsFileName,
                          &pMessage);
//CdbrXmlTranslatorオブジェクトを作成する
XmlTransFactory.CreateTranslator(&XmlTrans);
//XMLファイルからDMAオブジェクト生成用の構造体
//(SDBR_DMAINFO構造体）と
//構造指定検索用全文検索インデクスを生成する。
XmlTrans.GetDmaInfoList("file:///tmp/xmlcontent.xml",
 DBR_XMLPARSE_NO_EXTERNAL_ENTITIES, pMappingId,
 DBR_INDEXTYPE_STRUCTURED, "file:///tmp/NorParamFile.txt",
 "file:///tmp/index.txt", &DmaInfoList, &pMessage);
// セッションを接続してトランザクションを開始する
Session.Connect(pDocSpaceId, pUserId, pPassword);
Session.Begin();
//XML文書に接続する
VerDoc.SetOIID(&Session,pOIID);
//XML文書のコンテントを更新する
VerDoc.UpdateContent("file:///tmp/xmlcontent.xml",
                     DBR_NOT_CREATE_INDEX);
//XML文書の全文検索インデクスを更新する
VerDoc.CreateIndex("file:///tmp/index.txt");
//XML文書のプロパティを更新する
SDBR_PROPLIST* pPropList;
pPropList=&DmaInfoList.pItem[0].Proplist;
VerDoc.PutPropertyValues(pPropList);
Session.Commit();
//セッションの切断
Session.Disconnect();

3.12　レンディションのコンテント種別変換機能を使用した文書管理

この節では，レンディションのコンテント種別変換機能を使用した文書管理について説明します。

＜この節の構成＞

3.12.1　レンディションのコンテント種別変換機能の概要

3.12.2　レンディションのコンテント種別変換機能を使用したコンテント種別の変換

3.12.3　レンディションのコンテント種別変換機能に関する操作

3.12.1　レンディションのコンテント種別変換機能の概要

ここでは，レンディションのコンテント種別変換機能の概要について説明します。

＜この項の構成＞

(1)　機能

(2)　変換できるコンテント種別

(1)　機能

レンディションのコンテント種別変換機能は，レンディションのコンテントの格納先（コンテント種別）を，最適な格納先へ変換する機能です。文書の実体であるコンテントの格納先を変化するデータの利用価値に応じて，最適な格納先へ変換したい場合などに使用できます。

(2)　変換できるコンテント種別

レンディションのコンテント種別変換機能で変換できるコンテント種別を，次の表に示します。

表3-10　レンディションのコンテント種別変換機能で変換できるコンテント種別

変換前のコンテント種別 | 変換後のコンテント種別
シングルファイル文書 | リファレンスファイル文書
リファレンスファイル文書 | シングルファイル文書

レンディションのコンテント種別は，レンディションのコンテント種別を表すプロパティを参照することで判別できます。プロパティの詳細は，「3.4.3(5)　レンディションのコンテント種別を表すプロパティ（dbrProp_ContentTypeプロパティ）」を参照してください。

3.12.2　レンディションのコンテント種別変換機能を使用したコンテント種別の変換

ここでは，レンディションのコンテント種別変換機能を使用したコンテント種別の変換について説明します。

＜この項の構成＞

(1)　コンテント種別の変換

(1)　コンテント種別の変換

レンディションのコンテント種別変換機能を使用してコンテント種別を変換する例を次の図に示します。

図3-63　レンディションのコンテント種別変換例

コンテント種別の変換は文書のマルチレンディション管理機能を使用して変換後のコンテントをサブレンディションとして追加します。図3-63の例では，シングルファイル文書のコンテントを，リファレンスファイル文書のコンテントに変換し，レンディションを追加します。これをコンテントの二重化と呼びます。コンテントを二重化する場合，追加するレンディションのレンディションタイプにコメントを付与して格納先を分類します。

なお，二重化した後のレンディションを操作する場合は，マルチレンディション管理機能を使用します。

3.12.3　レンディションのコンテント種別変換機能に関する操作

レンディションのコンテント種別変換機能に関する操作を実行する場合に使用するメソッドとそのメソッドの発行順序について説明します。

ここでは，次の操作について説明します。

シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換する。

リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換する。

これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。また，すべての操作はコンテント種別を変換する文書に接続した状態で実行します。コンテント種別を変換する文書に接続するためには，次の準備をしてください。

準備

コンテント種別を変換する文書の構成要素であるDMAオブジェクトのOIIDを，検索によってあらかじめ取得します。ここでは，次の操作について説明します。

CdbrDocumentオブジェクトのコンテント種別を変換する場合は，DMAオブジェクトのDocVersionオブジェクトのOIIDを取得します。

CdbrVersionableDocumentオブジェクトのコンテント種別を変換する場合は，DMAオブジェクトのConfigurationHistoryオブジェクトのOIIDを取得します。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換

(2)　リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換

(1)　シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換

シングルファイル文書として登録されている文書のコンテントをリファレンスファイル文書のコンテントに変換する操作について説明します。

コンテント種別を変換する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッド，またはConnectObjectメソッドをコールします。

シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換します。
変換後のリファレンスファイル文書のコンテントを格納するコンテント格納先ベースパスをSetReferencePathメソッドで指定し，ConvertContentTypeメソッドをコールします。このとき，変換の対象とするレンディションの範囲を１つのレンディションとするかすべてのレンディションとするかを指定し，変換後のレンディションのレンディションタイプにコメントとして設定する文字列を指定します。また，変換後のコンテントを格納するコンテント格納先パスをコンテント格納先ベースパスからの相対パスで指定します。
シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換するコールシーケンスの例を次に示します。

シングルファイル文書のコンテントをリファレンスファイル文書のコンテントに変換するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパス設定をしておく。
//…
pSession->Begin
pSession->SetReferencePath(pTargetContentPath);
//…
//コンテントの格納先を変換する文書のOIIDを取得する。
//…
CdbrDocument Doc;
SDBR_REFERENCE_PATHINFO RefInfo;
//RefInfoにリファレンスファイル文書の登録に必要な情報を設定する。
//…
SDBR_RENDITION_COMMENTINFO CommentInfo;
//CommentInfoにコンテント格納先の変換に必要なレンディションコメント情報を設定する。
//…
//コンテントの格納先を変換する文書に接続する。
Doc.SetOIID(pSession, pOIID);
//…
//コンテントの格納先を変換する。
Doc.ConvertContentType(DBR_CONVERT_MODE_VERVOSE,
                      DBR_CONVERT_SOURCE_ALL,
                      DMA_FALSE,
                      NULL,
                      DBR_CONTENTTYPE_CONTENT,
                      CommentInfo,
                      RefInfo);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

(2)　リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換

リファレンスファイル文書として登録されている文書のコンテントをシングルファイル文書のコンテントに変換する操作について説明します。

コンテント種別を変換する文書に接続します。
接続するオブジェクトに応じて，CdbrDocumentクラスまたはCdbrVersionableDocumentクラスの，SetOIIDメソッド，またはConnectObjectメソッドをコールします。

リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換します。
変換前のリファレンスファイル文書のコンテントを格納したコンテント格納先ベースパスをSetReferencePathメソッドで指定し，ConvertContentTypeメソッドをコールします。このとき，変換の対象とするレンディションの範囲を１つのレンディションとするかすべてのレンディションとするかを指定し，変換後のレンディションのレンディションタイプにコメントとして設定する文字列を指定します。
リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換するコールシーケンスの例を次に示します。

リファレンスファイル文書のコンテントをシングルファイル文書のコンテントに変換するコールシーケンス

//pTargetContentPathにコンテント格納先ベースパス設定をしておく。
//…
pSession->Begin
pSession->SetReferencePath(pTargetContentPath);
//…
//コンテント格納先を変換する文書のOIIDを取得する。
//…
CdbrDocument Doc;
SDBR_RENDITION_COMMENTINFO CommentInfo;
//CommentInfoにコンテント格納先の変換に必要なレンディションコメント情報を設定する。
//…
//コンテントの格納先を変換する文書に接続する。
Doc.SetOIID(pSession, pOIID);
//…
//コンテントの格納先を変換する。
Doc.ConvertContentType(DBR_CONVERT_MODE_VERVOSE,
                      DBR_CONVERT_SOURCE_ALL,
                      DMA_FALSE,
                      NULL,
                      DBR_CONTENTTYPE_REFERENCE,
                      CommentInfo);
Doc.ReleaseObject();
//処理の確定
pSession->Commit();

3.13　独立データの管理

この節では，独立データの管理について説明します。独立データとは，ほかのオブジェクトに従属しない，独立したオブジェクトです。これは，CdbrIndependentPersistenceクラスを継承しているサブクラスを基にして作成します。

＜この節の構成＞

3.13.1　CdbrIndependentPersistenceクラスの概要

3.13.2　独立データの操作

3.13.1　CdbrIndependentPersistenceクラスの概要

CdbrIndependentPersistenceクラスは，ほかのオブジェクトに依存せずに，個々にオブジェクトを生成するクラスです。

CdbrIndependentPersistenceクラスは，DMAの拡張クラスであるedmClass_IndependentPersistenceクラスに対応します。

作成したオブジェクトは，CdbrDMAクラスの機能を継承します。

独立データには，ユーザ定義プロパティを設定しておくことをお勧めします。プロパティを設定しておくことで，DocumentBrokerでの独立データの取得や検索ができるようになります。

3.13.2　独立データの操作

ここでは，独立データの作成，設定と取得および問い合わせについて説明します。

＜この項の構成＞

(1)　独立データの作成

(2)　独立データの設定と取得

(3)　独立データの検索

(1)　独立データの作成

独立データを作成して，データベースに格納する場合，CdbrIndependentPersistence::CreateObjectメソッドを使用します。メソッドの発行順序については，「3.2.3(1)　文書の作成」を参照してください。次に，独立データとしてCdbrIndependentPersistenceオブジェクトを作成する場合の準備について示します。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体（SDBR_DMAINFO構造体）を作成しておきます。CdbrIndependentPersistenceオブジェクトを作成する場合は，SDBR_DMAINFO構造体に，edmClass_IndependentPersistenceクラスまたはサブクラスの識別子を指定します。

(2)　独立データの設定と取得

独立データとして作成したオブジェクトでは，プロパティ名を使用してプロパティ値を設定および取得することで，オブジェクトのデータを設定および取得できます。

(3)　独立データの検索

作成した独立データを検索する場合，ユーザ定義プロパティを指定して属性検索することで，独立データのオブジェクトが取得できます。検索については，「4.　オブジェクトの検索」を参照してください。

3.14　排他制御

この節では，DocumentBrokerでの排他制御について説明します。

オブジェクトを操作するときには，複数のユーザから同時にオブジェクトに対して操作が実行されないように，排他制御をする必要があります。排他制御は，オブジェクトに対してロックを設定することで実現します。

クラスライブラリでは，使用するメソッドによって設定できるロックが異なります。それぞれのメソッドごとの特徴を理解して，適切なメソッドを使用してロックを設定する必要があります。

ここでは，クラスライブラリのメソッドによって設定できるロックの種類と，設定方法について説明します。

＜この節の構成＞

3.14.1　ロックの概要

3.14.2　ロックの設定方法

3.14.3　ロックが設定されているオブジェクトに対する接続

3.14.4　ロックの範囲

3.14.5　ロックの設定に関する注意事項

3.14.1　ロックの概要

クラスライブラリのメソッドでは，オブジェクトに接続するときに排他制御をするためのロックを設定します。ロックには，次の種類があります。

readロック（DMA_LOCK_READ）

writeロック（DMA_LOCK_WRITE）

それぞれのロックによるオブジェクトの操作について説明します。

＜この項の構成＞

(1)　ロックの種類

(2)　複数のクライアント間でのロックの関係

(3)　ロックの有効期間

(4)　ロックの遷移

(1)　ロックの種類

(a)　readロック（DMA_LOCK_READ）

オブジェクトを参照するときに設定するロックです。あるクライアントがreadロックを設定して取り出したオブジェクトに対して，ほかのクライアントがwriteロックを設定してオブジェクトを更新，削除することはできません。ただし，readロックを設定してオブジェクトを参照することはできます。

readロックを設定したオブジェクトの操作について次の図に示します。

図3-64　readロックを設定したオブジェクトの操作

クライアントAがほかのクライアントより先に文書Xにreadロックを設定して参照している場合，そのほかのクライアントは文書Xにreadロックを設定して参照することはできますが，writeロックを設定して更新および削除することはできません。

●分割取得中の検索結果のオブジェクトに対して更新または削除処理を行う場合（DMA_LOCK_READ | DBR_RLT_FOR_UPDATE）

このロック種別（DMA_LOCK_READ | DBR_RLT_FOR_UPDATE）を指定すると，対象オブジェクトにはreadロックが設定されて，分割取得中の検索結果のオブジェクトに対して更新または削除処理が実行できます。

このロック種別は次に示すメソッドで指定できます。

GetVersionListAndLock

GetVersionableListAndLock

GetContainableListAndLock

GetContainerListAndLock

GetVTContaineeListAndLock

(b)　writeロック（DMA_LOCK_WRITE）

オブジェクトを更新または削除する場合に設定するロックです。あるクライアントがwriteロックを設定して取り出したオブジェクトに対して，ほかのクライアントはreadロックまたはwriteロックを設定できません。したがって，writeロックを設定した以外のクライアントが，readロックまたはwriteロックを設定してオブジェクトを参照，更新または削除することはできません。

writeロックを設定したオブジェクトの操作について，次の図に示します。

図3-65　writeロックを設定したオブジェクトの操作

クライアントAがほかのクライアントより先に文書Xにwriteロックを設定して更新または削除しようとしている場合，そのほかのクライアントは文書Xにreadロックを設定して参照したり，writeロックを設定して更新および削除することはできません。

●分割取得中の検索結果のオブジェクトに対して更新または削除処理を行う場合（DMA_LOCK_WRITE | DBR_RLT_FOR_UPDATE）

このロック種別（DMA_LOCK_WRITE | DBR_RLT_FOR_UPDATE）を指定すると，対象オブジェクトにはwriteロックが設定されて，分割取得中の検索結果のオブジェクトに対して更新または削除処理が実行できます。

このロック種別は次に示すメソッドで指定できます。

GetVersionListAndLock

GetVersionableListAndLock

GetContainableListAndLock

GetContainerListAndLock

GetVTContaineeListAndLock

(2)　複数のクライアント間でのロックの関係

次の表に，複数のクライアント間でのロックの関係について示します。ここでは，クライアントAがオブジェクトにロックを設定している状態でほかのクライアントから設定できるロックの種類を示します。

表3-11　複数のクライアント間でのロックの関係

クライアントAが設定したロック | read | write
ほかのクライアントが設定するロック | read | ○ | ×
write | × | ×

（凡例）

○：ロックを設定できます。

×：ロックを設定できません。

(3)　ロックの有効期間

ロックは，次の時点まで継続します。

文書空間との接続が切断されるとき

トランザクションが決着するとき（CdbrSession::CommitメソッドまたはCdbrSession::Rollbackメソッドをコールしたとき）

(4)　ロックの遷移

同一トランザクション内でのロックの遷移について説明します。ユーザが同一トランザクション内で一つのオブジェクトに異なる種類のロックを設定するメソッドを発行した場合，オブジェクトに設定されるロックは次の表に示すように遷移します。

表3-12　同一トランザクション内でのロックの遷移

設定済みのロック | read | write
新たに設定しようとしたロック | read | readのまま | writeのまま
write | writeに遷移 | writeのまま

このように，すでにロックを設定しているオブジェクトに対して異なる種類のロックを設定しようとした場合は，強い種類のロックに変更しようとした場合だけ，ロックの種類が遷移します。

3.14.2　ロックの設定方法

ロックは，メソッドで設定します。クラスライブラリのメソッドによるロックの設定方法には，次の4種類があります。

処理と同時にロックを設定するメソッド（～AndLockメソッド）による明示的なロックの設定

処理を実行するときに明示的にロックを設定するメソッドを使用する方法です。

これらのメソッドでは，事前にSetOIIDメソッドによって接続したオブジェクトに対して，処理と同時に指定したロックが設定できます。

SetOIIDメソッドと～AndLockメソッドを組み合わせた操作を実行することで，ConnectObjectメソッドによってロックを設定して操作するよりも，データベースへのアクセス回数が減り，高速な処理ができます。

ConnectObjectメソッドによる明示的なロックの設定

オブジェクトに接続するときに明示的にロックを設定する，ConnectObjectメソッドを使用する方法です。このメソッドでは，クラスライブラリを構成するDMAオブジェクトのうち，トップオブジェクトに当たるオブジェクトにロックを設定します。

検索実行メソッドによる明示的なロックの設定

検索を実行するメソッドによって，検索結果集合に対して明示的にロックを設定する方法です。

CdbrEqlStatement::ChangeLockTypeメソッドの引数として，ロックの種類を明示的に指定します。このメソッドで指定したロックが，CdbrEqlStatement::Executeメソッド実行時に検索結果集合に対して設定されます。

なお，この方法で明示的なロックを設定しない場合は，検索結果集合に対してロックは設定されません。暗黙に設定されるロックはありません。

それ以外のメソッドによる暗黙のロックの設定

ユーザが明示的にロックを設定するメソッドをコールしなかった場合，DocumentBrokerによってデータベースのアクセスに必要なロックを暗黙に設定させる方法です。

＜この項の構成＞

(1)　処理と同時にロックを設定するメソッド（～AndLockメソッド）による明示的なロックの設定

(2)　ConnectObjectメソッドによる明示的なロックの設定

(3)　DocumentBrokerによる暗黙のロックの設定

(1)　処理と同時にロックを設定するメソッド（～AndLockメソッド）による明示的なロックの設定

ユーザが明示的にロックを設定する場合，処理と同時にロックを設定するメソッドによって必要なロックを設定できます。このメソッドとSetOIIDメソッドを組み合わせた操作では，ConnectObjectメソッドとロックの指定をしないメソッドを組み合わせて操作する場合に比べて，高速な処理ができます。これは，データベースへのアクセス数が減るためです。

明示的なロックを設定するメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

処理と同時にロックを設定するメソッドを使用する場合のコールシーケンスを次に示します。

処理と同時にロックを設定するメソッドを使用する例

CdbrDocument Obj;
pSession->Begin();
//ObjにOIIDを設定する
Obj.SetOIID( pSession, pOIID);
//データベースからプロパティを参照すると同時に
//WRITE_LOCKモードでロックを設定する
Obj.GetPropertyValuesAndLock( ..., DMA_LOCK_WRITE );
//プロパティを更新する
Obj.PutPropertyValues(...);
//処理の確定
pSession->Commit();

(2)　ConnectObjectメソッドによる明示的なロックの設定

CdbrDMAクラスで定義されているConnectObjectメソッドによって，明示的なロックを設定することもできます。このメソッドでは，オブジェクトに接続すると同時に指定したロックが設定できます。

ConnectObjectメソッドでは，そのオブジェクトを構成するDMAオブジェクトのうち，トップオブジェクトにロックを設定します。それ以外のDMAオブジェクトについては，それぞれの参照系メソッドおよび更新系メソッドをコールするときに，必要なロックが設定されます。

なお，ConnectObjectメソッドでは，ロックの設定時にWAITモードまたはNOWAITモードの指定ができます。モードの指定については，「3.14.3　ロックが設定されているオブジェクトに対する接続」を参照してください。

また，ConnectObjectメソッドでreadロックを設定したあとでそのオブジェクトに対して更新系メソッドをコールした場合は，改めてwriteロックが設定されます。

ConnectObjectメソッドによってロックを設定する場合のコールシーケンスを次に示します。

ConnectObjectメソッドを使用する例

CdbrDocument Obj;
pSession->Begin();
//データベース中の文書オブジェクトのロックをWRITEモードで設定する
Obj.ConnectObject( pSession, DMA_LOCK_WRITE, pOIID);
//プロパティを参照する
Obj.GetPropertyValues(...);
// プロパティを更新する
Obj.PutPropertyValues(...);
Obj.ReleaseObject();
// 処理の確定
pSession->Commit();

(3)　DocumentBrokerによる暗黙のロックの設定

ユーザが明示的にロックを指定しないでデータベースを直接操作するメソッドをコールした場合，DocumentBrokerによってデータベースのアクセスに必要なロックが暗黙に設定されます。

暗黙のロックは，クラスライブラリのオブジェクトを構成するDMAオブジェクトのうち，トップオブジェクトに設定されます。それ以外のオブジェクトには，メソッドの実行に必要なロックが設定されます。

DocumentBrokerの各メソッドによってトップオブジェクトに暗黙に設定されるロックについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

3.14.3　ロックが設定されているオブジェクトに対する接続

ここでは，すでにほかのユーザによってロックが設定されているオブジェクトに対してロックを設定しようとした場合について説明します。

ロックを設定しようとしたオブジェクトが，すでにほかのユーザからロックを設定されているとき，クラスライブラリのメソッドではデフォルトとしてロックが解除されるまでウエイトするように設定されています。

ただし，ConnectObjectメソッドでは，ほかのユーザによってロックが設定されていた場合，対処として次のどちらかを選択できます。

ロックが解除されるまでウエイトする（WAITモード）
ほかのユーザがロックを解除するまで，メソッドはウエイトします。ただし，タイムアウトやデッドロックが発生した場合は，終了します。

直ちに終了する（NOWAITモード）
ほかのユーザがロックを設定していると，直ちにメソッドを終了します。

3.14.4　ロックの範囲

ここでは，メソッドによって設定されるロックの範囲について説明します。ロックは，クラスライブラリのオブジェクトを構成するDMAオブジェクトのうち，トップオブジェクトとメソッドの処理に必要なオブジェクトに対して設定されます。

まず，メソッドごとのロックの範囲について例を示します。続いて，複数のバージョンを持っているオブジェクトに設定されるロックの範囲について説明します。

ここでは，CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトを例として説明します。

＜この項の構成＞

(1)　処理と同時にロックを設定するメソッド（～AndLockメソッド）によって設定されるロックの範囲

(2)　ConnectObjectメソッドによって設定されるロックの範囲

(3)　暗黙のロックを設定するメソッドによって設定されるロックの範囲

(4)　複数のバージョンを持つオブジェクトに設定されるロックの範囲

(5)　プロパティの取得によって設定されるロックの範囲

(6)　バージョン一覧の取得によって設定されるロックの範囲

(7)　チェックイン，チェックアウトによって設定されるロックの範囲

(8)　検索結果に設定されるロック

(9)　マルチレンディション文書に設定されるロック

(1)　処理と同時にロックを設定するメソッド（～AndLockメソッド）によって設定されるロックの範囲

処理と同時にロックを設定するメソッドでは，DMAオブジェクトのうち，トップオブジェクトと処理に必要なオブジェクトに対してロックを設定します。

例として，CdbrDocument::GetContentAndLockメソッドによって設定されるロックの範囲について次の図に示します。なお，このときメソッドの引数にDMA_LOCK_WRITEを指定して，writeロックを設定することにします。

図3-66　CdbrDocument::GetContentAndLockメソッドによって設定されるロックの範囲

(2)　ConnectObjectメソッドによって設定されるロックの範囲

ConnectObjectメソッドでは，トップオブジェクトにだけロックを設定します。

例として，CdbrDocument::ConnectObjectメソッドによって設定されるロックの範囲を次の図に示します。なお，このときメソッドの引数にDMA_LOCK_WRITEを指定して，writeロックを設定することにします。

図3-67　CdbrDocument::ConnectObjectメソッドによって設定されるロックの範囲

このメソッドによってオブジェクトに接続した場合は，以降のロックを必要とする操作（GetContentメソッドなど）を実行するときには，再びデータベースにアクセスして，操作に関係するオブジェクトに対して必要なロックを設定することになります。

(3)　暗黙のロックを設定するメソッドによって設定されるロックの範囲

ユーザが明示的にロックを指定しないでデータベースを直接操作するメソッドをコールした場合には，DocumentBrokerによって最低限必要なロックが暗黙に設定されます。例えば，CdbrDocument::GetContentメソッドをロックの指定なしにコールした場合，必要なオブジェクトに対してreadロックが設定されます。

CdbrDocument::GetContentメソッドによって設定されるロックの範囲を次の図に示します。

図3-68　CdbrDocument::GetContentメソッドによって設定されるロックの範囲

(4)　複数のバージョンを持つオブジェクトに設定されるロックの範囲

複数のバージョンを持つオブジェクトに設定されるロックの範囲について説明します。バージョン管理についての詳細は，「3.3　文書のバージョン管理」を参照してください。

複数のバージョンを持っているオブジェクトに対してメソッドをコールした場合，引数で指定したバージョンに対応するDMAオブジェクトにだけロックを設定します。

例えば複数のバージョンを持つCdbrVersionableDocumentオブジェクトに対して，引数にカレントバージョンのバージョン識別子を指定してCdbrVersionableDocument::GetContentAndLockメソッドをコールした場合，次の図に示す範囲に，ロックが設定されます。なお，このときメソッドの引数にDMA_LOCK_WRITEを指定して，writeロックを設定することにします。

図3-69　CdbrVersionableDocument::GetContentAndLockメソッドによって設定されるロックの範囲

(5)　プロパティの取得によって設定されるロックの範囲

プロパティの取得には，CdbrDMAクラスで定義されているGetPropertyValuesメソッドまたはGetPropertyValuesAndLockメソッドを使用します。このメソッドをコールすると，トップオブジェクトのほか，複数のバージョンを持つ文書やコンテナの場合は幾つのバージョンを持っているかを示すDMAオブジェクトおよび文書やコンテナを表すDMAオブジェクトにもロックが設定されます。

CdbrVersionableDocumentオブジェクトに対して，CdbrVersionableDocument::GetPropertyValuesAndLockメソッドをコールした場合に設定されるロックの範囲を次の図に示します。なお，このときメソッドの引数にDMA_LOCK_WRITEを指定して，writeロックを設定することにします。

図3-70　CdbrVersionableDocument::GetPropertyValuesAndLockメソッドによって設定されるロックの範囲

(6)　バージョン一覧の取得によって設定されるロックの範囲

バージョン一覧の取得には，CdbrVersionableクラスで定義されているGetVersionListメソッドまたはGetVersionListAndLockメソッドを使用します。このメソッドをコールした場合，トップオブジェクトのほか，幾つのバージョンを持っているかを示すDMAオブジェクトにもロックを設定します。

例えばCdbrVersionableDocumentオブジェクトの場合は，ConfigurationHistoryオブジェクトのほか，VersionSeriesオブジェクトに対してもロックを設定します。

CdbrVersionableDocument::GetVersionListAndLockメソッドによって設定されるロックの範囲を次の図に示します。なお，このときメソッドの引数にDMA_LOCK_WRITEを指定して，writeロックを設定することにします。

図3-71　CdbrVersionableDocument::GetVersionListAndLockメソッドによって設定されるロックの範囲

(7)　チェックイン，チェックアウトによって設定されるロックの範囲

文書などをバージョンアップするためにチェックイン，チェックアウトをするには，CdbrVersionableクラスなどで定義されているVersionCheckOutメソッドおよびVersionCheckInメソッドを使用します。これらのメソッドをコールする場合は，バージョンアップする基になるバージョンと，新しく作成するバージョン文書などを構成するDMAオブジェクトに対してロックを設定します。

例えば，CdbrVersionableDocument::VersionCheckOutメソッドおよびCdbrVersionableDocument::VersionCheckInメソッドによって文書をバージョンアップする場合は，次の図に示す範囲に，ロックが設定されます。

図3-72　CdbrVersionableDocument::VersionCheckOutメソッドおよびCdbrVersionableDocument::VersionCheckInメソッドによって設定されるロックの範囲

(8)　検索結果に設定されるロック

オブジェクトの検索を実行した時に，検索結果であるオブジェクトにロックを設定しないと，検索結果を取得する前にデータベースの内容が更新され，正しい検索結果を取得できない可能性があります。

検索結果に設定するロックは，次のメソッドで設定します。

CdbrEqlStatement::ChangeLockTypeメソッド
このメソッドでは，検索結果にロックを設定するかどうかの指定，および設定する場合のロックの種別が指定できます。

ただし，検索結果にロックを設定する場合，処理はロックを設定しない場合に比べて検索処理が遅くなります。必要に応じて使い分けてください。

(9)　マルチレンディション文書に設定されるロック

マルチレンディション管理をしている文書を操作する場合，ロックは，マルチレンディション文書に対応するCdbrVersionableDocumentオブジェクトおよびCdbrDocumentオブジェクトを構成するDMAオブジェクトのうち，操作に必要なDMAオブジェクトに対して設定されます。

3.14.5　ロックの設定に関する注意事項

ロックは，トップオブジェクトとメソッドの実行に必要なオブジェクトにだけ設定されます。しかし，次のような場合は，ロックを設定していてもほかのユーザにロックを設定される可能性がありますので，ご注意ください。

CdbrVersionableDocumentオブジェクトのトップオブジェクトに対してConnectObjectメソッドでロックを設定していても，DMAオブジェクトのDocVersionオブジェクトのOIIDを使用して，直接CdbrVersionableDocumentオブジェクトを構成するCdbrDocumentオブジェクトにロックが設定される可能性があります。

次のようなパターンでメソッドをコールする場合は，明示的にロックを設定する必要はありません。

参照系メソッドのあとに参照系メソッドをコールする場合
（例）GetPropertyValuesメソッドのあとにGetContentメソッドをコールする場合

更新系メソッドのあとに更新系メソッドをコールする場合
（例）PutPropertyValuesメソッドのあとにUpdateContentメソッドをコールする場合

更新系メソッドのあとに参照系メソッドをコールする場合
（例）PutPropertyValuesメソッドのあとにGetPropertyValuesメソッドをコールする場合

3.15　アクセス制御

この節では，DocumentBrokerのアクセス制御機能について説明します。

DocumentBrokerで扱うオブジェクトへのアクセスは，必要に応じて制御できます。ここでは，アクセス制御機能の概要，設定，および操作について説明します。

なお，アクセス制御機能を使用するためには，環境設定が必要です。環境設定については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。また，アクセス制御機能は，ユーザ管理システムごとのユーザ認証方式によって，使用できる場合と使用できない場合があります。ユーザ認証方式とアクセス制御機能の使用の関係について次の表に示します。

表3-13　アクセス制御機能とユーザ認証方式との関係

ユーザ管理システム | ユーザ認証方式の指定値 | アクセス制御機能の使用可否
OS | BASIC | 使用できない
UOC | UOC | 使用できる
LDAP対応のディレクトリサービス | LDAPまたはLDAPEX | 使用できる

＜この節の構成＞

3.15.1　アクセス制御機能の概要

3.15.2　ユーザ情報の種類

3.15.3　オブジェクトごとのアクセス制御情報の種類

3.15.4　パーミッションの種類

3.15.5　それぞれのアクセス制御情報の特徴

3.15.6　アクセス制御情報を表すプロパティの詳細

3.15.7　オブジェクトの操作とアクセス制御情報の関係

3.15.8　アクセス制御機能と検索

3.15.9　アクセス制御機能に関する操作

3.15.10　アクセス制御と排他制御の関係

3.15.1　アクセス制御機能の概要

ここでは，アクセス制御機能の概要について説明します。

＜この項の構成＞

(1)　アクセス制御機能とは

(2)　アクセス制御機能の仕組み

(3)　アクセス制御情報の種類

(4)　アクセス制御情報の構成

(1)　アクセス制御機能とは

DocumentBrokerで作成，管理している文書やコンテナなどのオブジェクトは，そのままの状態では，DocumentBrokerにログインしたユーザであれば，だれでも参照したり更新したりできます。例えば，あるユーザが作成した文書をDocumentBrokerに登録した場合に，ほかのユーザが自由に参照したり，更新したり，削除したりできます。これでは，DocumentBroker上の文書やコンテナに対して，作成者以外のユーザが悪意を持って変更したり，誤って削除してしまったりすることが考えられます。

こうしたことを防ぐためには，DocumentBrokerによって，オブジェクトに対して「どのユーザはどの操作が可能」という情報を設定しておく必要があります。例えば，ユーザAが作成した「文書X」に対して，「文書Xは，ユーザA以外からは参照だけできて，更新，削除はできないようにしたい」としたり，「文書Xは特定のグループに所属する人だけに参照，更新ができて，それ以外の人には参照もできないようにしたい」としたりしておきます。これによって，文書やコンテナにアクセスするユーザを制限できます。これを実現する機能を，アクセス制御機能といいます。また，それぞれのユーザが持つ，オブジェクトにアクセスするための権限をアクセス権といいます。

アクセス制御機能の概要を次の図に示します。ここでは，文書Xに対して，ユーザAとグループGだけが参照できるように，DocumentBrokerによってアクセス制御されています。

図3-73　アクセス制御の概要（文書XはユーザAとグループGだけが参照できるようにする）

(2)　アクセス制御機能の仕組み

ここでは，DocumentBrokerのアクセス制御機能の仕組みについて説明します。

DocumentBrokerでは，ユーザがログインしたときにログインユーザ情報を作成します。ログインユーザ情報には，ログインユーザのユーザ識別子やグループ識別子，そのユーザが持つ特権やそのユーザの権限が設定されます。

また，それぞれのオブジェクトには，そのオブジェクトがだれにどのような操作を許可するかについて表す情報が設定されています。

DocumentBrokerでは，ユーザ情報と，オブジェクトに設定されている情報を基に，ユーザのアクセス権を判定します。

これらのアクセス権判定に使用するための情報のことを，アクセス制御情報といいます。

DocumentBrokerによるアクセス制御の概要を次の図に示します。

図3-74　DocumentBrokerによるアクセス制御の概要

図3-74では，ユーザA（所属しているグループはグループG）が，文書を更新する場合について説明しています。説明の番号は，図3-74の番号と対応しています。なお，説明のうち，ゴシック体の操作はユーザが明示的に実行した操作を，それ以外はDocumentBrokerの内部で実行されている処理を示します。

ユーザAが文書空間にログインします。

文書空間では，ユーザAのユーザ識別子とグループ識別子，ユーザの特権およびユーザ権限が取得され，ログインユーザ情報が作成されます。

ユーザAが文書Xに接続します（SetOIIDメソッドまたはConnectObjectメソッドをコールします）。

ユーザAが文書Xを更新するメソッド（UpdateContentメソッド）をコールします。

4.でユーザがコールしたメソッドによって，DocumentBrokerの内部で文書を更新する機能（文書更新機能）が動作します。文書更新機能は，アクセス制御機能に対して，ユーザAのアクセス権の判定を要求します。
ただし，このときユーザが特権を持つユーザである場合は，アクセス権判定を要求しません。また，ユーザ権限として文書を更新する権限を持つユーザである場合は，文書Xのアクセス制御情報に関係なく，アクセス権が確認されます。

アクセス制御機能によって，ユーザAのログインユーザ情報と，文書Xのアクセス制御情報が取得され，アクセス権が判定されます。

ユーザAのアクセス権が確認できたら，アクセス制御機能は文書更新機能に対して文書の更新を許可します。

文書更新機能によって，文書Xの更新が実行されます。

(3)　アクセス制御情報の種類

ここでは，アクセス制御情報の種類について説明します。

アクセス制御情報とは，メソッドを実行したときに，DocumentBrokerがアクセス権判定をするために必要な情報のことです。

アクセス制御情報には，次の情報があります。

ユーザ情報
ユーザごとの識別子や，文書空間全体のオブジェクトに対する権限について示した情報です。
ユーザ情報は，ユーザが文書空間にログインしたときに作成され，DocumentBrokerサーバに保持されます。

オブジェクトごとのアクセス制御情報
オブジェクトごとに設定された「どのユーザまたはグループ」が「どのような操作」を実行できるかについて示した情報です。
この情報は，各オブジェクトのプロパティとして保持されています。

(4)　アクセス制御情報の構成

アクセス制御情報は，「だれに」「どの操作を」許可するかを示す情報です。この情報は，「アクセスを許可する対象（主体）」と「対象に対して許可する操作」の組み合わせで構成されます。

なお，アクセスを許可する対象を，サブジェクトといいます。許可する操作の種別を表す基本単位をパーミッションといいます。

3.15.2　ユーザ情報の種類

ここでは，アクセス制御情報のうち，ユーザ情報について説明します。

ユーザ情報は，文書空間にログインしたときにサーバ上に作成されます。なお，ログインしたユーザのユーザ情報は，CdbrSession::GetUserInfoメソッドによって取得して確認できます。

＜この項の構成＞

(1)　ユーザ識別子とグループ識別子

(2)　文書空間に対する特権

(3)　ユーザ権限

(1)　ユーザ識別子とグループ識別子

ユーザ識別子およびグループ識別子は，ユーザが文書空間にログインしたときに使用しているユーザ管理システムから取得される，ログインユーザを識別するための情報です。

個々のオブジェクトに対するアクセス権を判定する場合，ユーザ識別子やグループ識別子によってログインユーザが識別され，オブジェクトに設定されているアクセス制御情報にそのユーザに対するパーミッションが設定されているかどうかが判定されます。

(2)　文書空間に対する特権

特権とは，アクセス権判定なしにすべての操作が実行できる権限です。文書空間に対する特権を持つユーザは，文書空間のすべてのオブジェクトに対しての操作や，オブジェクトの所有者の変更，およびオブジェクトに設定されたアクセス制御情報の変更ができます。

文書空間に対して特権を持つユーザとは，セキュリティ管理者のことです。セキュリティ管理者は，文書空間のオブジェクトのアクセス制御情報の保守をするユーザとして，セキュリティ定義ファイル（docaccess.ini）に定義したユーザです。セキュリティ定義ファイルの定義方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

ユーザ情報としては，ログインしたユーザがセキュリティ管理者であるかどうかという情報が，サーバに保持されます。

(3)　ユーザ権限

ユーザ権限とは，ユーザ権限定義ファイルに定義した情報を基に，ユーザ，グループまたはすべてのユーザに対して設定できる権限です。ユーザ権限定義ファイルには，文書空間のすべてのオブジェクトに対するアクセス権を定義します。

ユーザ権限として定義する権限には，次の2種類があります。

オブジェクト作成権限
アクセス制御機能を使用している文書空間で，文書，コンテナおよびパブリックACLなどのオブジェクトを作成する権限です。この権限を与えられたユーザまたはグループだけが，文書空間にオブジェクトを作成できます。

オブジェクト操作権限
文書空間のすべてのオブジェクトを操作する権限です。文書を参照したり，更新したり，削除したりする権限が定義できます。例えば，ユーザAには文書空間上のすべての文書またはコンテナなどのオブジェクトを参照できる権限を与えておきたい場合や，すべてのユーザに対して，文書空間上のすべての文書またはコンテナなどのオブジェクトを参照できる権限を与えておきたいという場合に，ユーザ権限として「ユーザAに参照を許可する」，「すべてのユーザに参照を許可する」という定義をします。これによって，個々のオブジェクトで，これらのアクセス権を設定する必要がなくなります。

なお，ユーザ権限は，すべてのオブジェクトに対する権利であり，強い権利です。例えば，ユーザ権限として参照権が与えられているユーザは，一部のユーザにだけ参照させたいような極秘の文書もすべて参照できるようになります。このため，ユーザ権限を設定する場合は，運用方法を考慮して，注意して設定してください。

ユーザ権限定義ファイルの定義方法や，オブジェクト作成権限およびオブジェクト操作権限として指定できる内容の詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

3.15.3　オブジェクトごとのアクセス制御情報の種類

ここでは，アクセス制御情報のうち，オブジェクトごとに設定するアクセス制御情報について説明します。

オブジェクトごとのアクセス制御情報は，ACFlagまたはACLとして設定します。また，オブジェクトごとに設定されたアクセス制御情報を管理するための情報も，ACLとして設定します。

＜この項の構成＞

(1)　ACFlag（アクセス制御フラグ）

(2)　ACL（アクセス制御リスト）

(1)　ACFlag（アクセス制御フラグ）

ここでは，ACFlagについて説明します。

ACFlagは，所有者，プライマリグループおよび全ユーザに対して許可する操作を設定できるアクセス制御情報です。

例えば，「所有者にはすべての操作を許可する」としたり，「プライマリグループに所属するユーザには参照，更新を許可する」としたりできます。また，「すべてのユーザに参照を許可する」といった指定もできます。

ACFlagは，データベース上ではトップオブジェクトと同じテーブルにあるプロパティです。このため，ACLを使用したアクセス権判定に比べて高速なアクセス権判定ができるのが特長です。

(a)　ACFlagを表すプロパティ

ACFlagは，次の三つのプロパティで表されます。

dbrProp_OwnerPermissionプロパティ
所有者のアクセス権を設定するプロパティです。

dbrProp_PrimaryGroupPermissionプロパティ
プライマリグループに所属するユーザのアクセス権を設定するプロパティです。

dbrProp_EveryonePermissionプロパティ
すべてのユーザのアクセス権を設定するプロパティです。

これらのプロパティは，クラスライブラリのオブジェクトのトップオブジェクトに存在します。

ACFlagの参照には，GetPropertyValuesメソッドなどのプロパティを参照するメソッドを使用します。設定や更新には，PutPropertyValuesメソッドを使用します。ただし，これらのプロパティを検索に使用することはできません。

(b)　ACFlagでアクセス権を設定する対象

ACFlagによってアクセス権を設定できるのは，次の3種類のユーザおよびグループです。

所有者

所有者とは，オブジェクトに設定されているアクセス制御情報を変更することができるユーザです。所有者以外のユーザにアクセス制御情報の変更ができるようにしたい場合，まず所有者によってアクセス制御情報を変更する権利を与える必要があります。また，所有者自身を，自分以外のユーザに変更することもできます。

アクセス制御機能を使用している場合，文書空間で作成した文書やコンテナなどのオブジェクトには必ず所有者が存在します。オブジェクトの作成時には，オブジェクトの作成者が所有者として登録されます。

ACFlagでは，アクセス制御情報の変更および所有者の変更以外に所有者が実行できる操作を設定できます。

注意

所有者がアクセス制御情報を変更したり所有者を変更したりする場合，対象オブジェクトのOIIDを指定して変更します。OIIDを取得するために対象オブジェクトのプロパティを参照する場合は，基本プロパティ参照権が設定されている必要がありますので，注意してください。基本プロパティ参照権については，「3.15.4　パーミッションの種類」を参照してください。また，所有者が基本プロパティ参照権を持たない場合，必要に応じてセキュリティ管理者が所有者に基本プロパティ参照権を設定してください。

所有者は，オブジェクトのdbrProp_OwnerIdプロパティに設定されたユーザ識別子によって表されます。CreateObjectメソッドによってオブジェクトを作成したとき，このメソッドをコールしたユーザのユーザ識別子が，dbrProp_OwnerIdプロパティに設定されます。このプロパティは，検索に使用できます。ただし，検索するときにはプロパティ識別子を「edmProp_OwnerId」と指定してください。

所有者を変更する場合は，dbrProp_OwnerIdプロパティの値を変更します。このプロパティは，所有者自身またはセキュリティ管理者が変更できます。

プライマリグループ

プライマリグループとは，ACFlagの設定によってACLよりも先にアクセス権判定が実行されるグループです。

プライマリグループは，オブジェクトごとに一つ設定できます。そのオブジェクトに対してアクセスが多いグループなどを設定しておくことをお勧めします。

例えば，文書を表すオブジェクトのプライマリグループに「第一設計部」を指定して，ACFlagに「プライマリグループに対して文書の参照，編集を許可する」と設定しておけば，その文書は第一設計部に所属する全員が参照，編集できるようになります。

プライマリグループは，オブジェクトのdbrProp_PrimaryGroupIdに設定されたグループ識別子によって表されるグループです。オブジェクト作成時にこのプロパティに設定されるグループの情報は，連携しているユーザ管理システムによって異なります。

LDAP対応のディレクトリサーバと連携してユーザ管理をしている場合，CreateObjectメソッドをコールしてオブジェクトを作成した時点では，このプロパティは設定されません。

UOCをユーザ管理システムとして使用する場合，ユーザ管理システムにプライマリグループに対応する概念があり，かつそのグループを返却するUOCが作成されているときは，CreateObjectメソッドをコールしたときにプライマリグループが設定されます。それ以外の場合は，CreateObjectメソッドをコールしてオブジェクトを作成した時点でこのプロパティは設定されません。

CreateObjectメソッドをコールしたときにプライマリグループが設定されない場合，または必要に応じてプライマリグループの値を変更したい場合は，アクセス制御情報変更権を持つユーザが明示的にPutPropertyValuesメソッドによって値を設定してください。アクセス制御情報変更権については，「(2)(c)セキュリティACL（Security-ACL）」を参照してください。

このプロパティは，検索に使用できます。ただし，検索するときにはプロパティ識別子を「edmProp_PrimaryGroupId」と指定してください。

全ユーザ

ACFlagでは，所有者およびプライマリグループに所属するユーザ以外のすべてのユーザに対するアクセス権も設定できます。

(2)　ACL（アクセス制御リスト）

ACLは，ユーザやグループそれぞれに対して，許可する操作を設定して，アクセス権を与えるためのリストです。このリストは，操作を許可する対象（ユーザまたはグループなど），その対象が何であるかの種別，および許可する操作の種類を組み合わせたものを，個々の要素とします。個々の要素は，ACEとして作成します。

例えば，文書やコンテナを表すオブジェクトに対して，「ユーザAに対してはすべての操作を許可する」，「ユーザBに対しては参照と編集を許可する」，「グループXに対しては参照だけを許可する」といった詳細なアクセス権の設定ができます。この場合，「ユーザAに対してすべての操作を許可する」や「ユーザBに対して参照と編集を許可する」という，個々の対象に対する設定が，ACEに対応します。ACLとACEの関係を次の図に示します。

図3-75　ACLとACEの関係

ACLは，クラスライブラリのオブジェクトのプロパティである，dbrProp_ACLプロパティとして表されます。dbrProp_ACLプロパティは，CdbrVariableArrayクラスのオブジェクトとして扱う，VariableArray型プロパティです。個々のACEはCdbrCompoundクラスのオブジェクトとして扱います。このため，ACLおよびACEの作成などの操作には，CdbrVariableArrayクラスおよびCdbrCompoundクラスのメソッドを使用します。

VariableArray型プロパティとして作成したACLは，GetPropertyValuesメソッドなどを使用して参照できます。また，PutPropertyValuesメソッドを使用してクラスライブラリのオブジェクトに設定，更新できます。ただし，このプロパティを検索に使用することはできません。

なお，ACLは，設定されるオブジェクトや用途によって，次の3種類に分けられます。

パブリックACL
複数のオブジェクトで共有するためのACLです。

ローカルACL
それぞれのオブジェクトごとに設定するACLです。

セキュリティACL
それぞれのオブジェクトごとに設定する，アクセス制御情報を操作するためのACLです。

(a)　パブリックACL

パブリックACLは，複数のオブジェクトに対して同じアクセス制御情報を設定したい場合に使用します。パブリックACLを使用すると，複数の文書やコンテナの間で，同じアクセス制御情報を共有できます。

パブリックACLは，ACLを共有するために使用する，独立したオブジェクトです。このオブジェクトに共有したいACLを設定し，複数のオブジェクトから参照することで，ACLを共有できます。

例えば，それぞれ異なるユーザが作成した文書Aと文書Bについて，どちらの文書にも「第一設計部に所属するユーザ全員に対して参照と編集を許可したい」，また，「営業部に所属するユーザ全員に対して参照だけを許可したい」場合，まず「第一設計部に所属するユーザ全員に対して参照と編集を許可する」というACEと，「営業部に所属するユーザ全員に対して参照だけを許可する」というACEを作成します。次に，これらのACEを要素として，ACLを作成します。このACLを，パブリックACLを表すオブジェクトのプロパティ（dbrProp_ACLプロパティ）として設定することで，複数のオブジェクト間で共有できるパブリックACLが作成できます。文書Aと文書Bには，このパブリックACLを参照するように設定します。

なお，文書やコンテナを表すオブジェクトからパブリックACLを参照することを，バインドといいます。また，パブリックACLのバインドを解除することを，アンバインドといいます。パブリックACLの概要を，次の図に示します。

図3-76　パブリックACLの概要

パブリックACLは，CdbrPublicACLクラスのオブジェクトとしてCreateObjectメソッドをコールして作成します。このオブジェクトは，DMAオブジェクトの，edmClass_PublicACLクラスのオブジェクトを構成要素とします。パブリックACLとして，複数のオブジェクト間で共有するために設定するアクセス制御情報は，CdbrPublicACLオブジェクトのdbrProp_ACLプロパティとして設定します。

また，パブリックACLは，ローカルACLやセキュリティACLとは異なり，独立して文書空間に存在する，OIIDを持つオブジェクトです。ユーザ定義プロパティを設定したり，OIIDやユーザ定義プロパティを指定して検索も実行したりすることもできます。ユーザ定義プロパティの設定方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

なお，パブリックACLには，それ自身をアクセス制御するためのACFlagやローカルACLはありません。パブリックACLに対するアクセス権は，次に示すユーザに与えられています。

表3-14　パブリックACLに対するアクセス権

実行できる操作 | 対象
作成 | 文書空間にオブジェクト作成権限を持つユーザ
参照 | すべてのユーザ
ローカルACLとユーザプロパティの変更 | セキュリティACLでアクセス制御情報変更権が与えられているユーザ，パブリックACLの所有者およびセキュリティ管理者
セキュリティACLの変更 | パブリックACLの所有者およびセキュリティ管理者
削除 | パブリックACLの所有者およびセキュリティ管理者

(b)　ローカルACL

ローカルACLは，オブジェクトごとのアクセス権を設定するためのACLです。

ローカルACLは，個々のオブジェクトのdbrProp_ACLプロパティとして設定します。dbrProp_ACLプロパティは，ACEを表すオブジェクトを構成要素とした，VariableArray型プロパティです。

(c)　セキュリティACL（Security-ACL）

DocumentBrokerでは，ACFlagやACLを使用して，オブジェクトに対するユーザのアクセスを制御します。オブジェクトに対してアクセス権を持たないユーザでも，ACFlagやACLを変更すれば，アクセス権を得ることができます。このため，ACFlagやACLは，適切な権利を持つユーザだけが変更でき，それ以外のユーザからは変更されないように制御する必要があります。

アクセス制御情報を変更するための権利を，アクセス制御情報変更権といいます。アクセス制御情報変更権は，各オブジェクトのプロパティに，ACLとして設定されています。アクセス制御情報変更権を制御するためのACLをセキュリティACLといいます。

セキュリティACLは，オブジェクトのdbrProp_SACLプロパティに，VariableArray型プロパティとして設定します。

CreateObjectメソッドをコールしてオブジェクトを作成した時点では，オブジェクトの所有者およびセキュリティ管理者がアクセス制御情報変更権を持っています。また，CreateObjectメソッドの引数としてdbrProp_SACLプロパティの初期値を設定した場合は，初期値として設定されたユーザやグループもアクセス制御情報変更権を持ちます。

作成後のオブジェクトで，アクセス制御情報変更権をほかのユーザやグループに対して与えたい場合は，所有者またはセキュリティ管理者が必要に応じてセキュリティACLを変更してください。

なお，パブリックACLはオブジェクトとして独自のセキュリティACLを持っています。このため，パブリックACLをバインドしている文書やコンテナを表すオブジェクトのアクセス制御情報変更権を持つユーザであっても，パブリックACLに設定されたACLを変更することはできません。また，パブリックACLのアクセス制御情報変更権を持つユーザが，そのパブリックACLをバインドしているオブジェクトのACFlagまたはACLを変更することはできません。

3.15.4　パーミッションの種類

アクセス制御情報は，サブジェクトとパーミッションの組み合わせで構成されます。ここでは，アクセス制御情報に設定できるパーミッションの種類について説明します。

パーミッションは，実行可能な操作の範囲を表す値です。アクセス制御情報として設定するパーミッションは，用途によって，次の3種類に分けられます。

個々のオブジェクトに対する操作を許可するパーミッション

アクセス制御情報に対する操作を許可するパーミッション（アクセス制御情報変更権）

文書空間全体のオブジェクトに対する操作を許可するパーミッション（ユーザ権限）

ユーザ権限はユーザ権限定義ファイルで定義します。このファイルで定義するパーミッションについては，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

ここでは，ACFlagおよびACLで指定できるパーミッションの種類について説明します。

＜この項の構成＞

(1)　パーミッションの種別

(2)　基本パーミッション

(3)　組み合わせパーミッション

(4)　アクセス制御情報変更権

(1)　パーミッションの種別

パーミッションの種別には，次のものがあります。

基本パーミッション

組み合わせパーミッション

アクセス制御情報変更権

個々のオブジェクトに対する操作を許可するパーミッション（ACFlagやACLに指定するパーミッション）には，基本パーミッションおよび組み合わせパーミッションを使用します。パーミッションは複数指定できます。例えば，複数の基本パーミッションを指定したり，複数の組み合わせパーミッションを指定したり，基本パーミッションと組み合わせパーミッションを混在させて指定したりできます。この場合，パーミッションとして設定される内容は，指定したパーミッションの論理和になります。

アクセス制御情報変更権は，アクセス制御情報に対する操作を許可するパーミッションであり，セキュリティACLにだけ指定できます。

(2)　基本パーミッション

オブジェクトを操作する範囲を限定するために，DocumentBrokerが提供する基本的なパーミッションは次のとおりです。これを基本パーミッションといいます。基本パーミッションの種類を次の表に示します。

表3-15　基本パーミッションの種類

パーミッションの名称 | パーミッション文字列 | 定数 | 説明
基本プロパティ参照権 | PRIM_READ_PROPS | DBR_PERM_PRIM_READ_PROPS | プロパティの参照を許可する
基本プロパティ更新権 | PRIM_WRITE_PROPS | DBR_PERM_PRIM_WRITE_PROPS | プロパティの更新を許可する
基本コンテント参照権 | PRIM_READ_CONTENTS | DBR_PERM_PRIM_READ_CONTENTS | 文書のコンテントの参照を許可する
基本コンテント更新権 | PRIM_WRITE_CONTENTS | DBR_PERM_PRIM_WRITE_CONTENTS | 文書のコンテントの更新を許可する
基本リンク権 | PRIM_LINK | DBR_PERM_PRIM_LINK | リンクに関する操作を許可する
基本バージョン管理権 | PRIM_VERSION | DBR_PERM_PRIM_VERSION | バージョンに関する操作を許可する
基本オブジェクト削除権 | PRIM_DELETE | DBR_PERM_PRIM_DELETE | オブジェクトの削除を許可する

基本パーミッションでは，それぞれのパーミッションは独立であり，包含関係はありません。複数の基本パーミッションを設定した場合は，それらの論理和がサブジェクトに対して許可される操作になります。ただし，基本プロパティ参照権は，すべての基本パーミッションに含まれます。例えば，基本コンテント参照権を設定すれば，同時に，基本プロパティ参照権も設定したことになります。基本プロパティ参照権と基本コンテント参照権を個別に設定する必要はありません。

次に，それぞれの基本パーミッションの内容について説明します。

基本プロパティ参照権

オブジェクトのプロパティを参照する権利です。

このパーミッションを設定されたユーザは，文書やコンテナのOIIDや，ユーザ定義プロパティを参照できます。プロパティを指定した属性検索を実行する場合も，このパーミッションが必要です。

また，このパーミッションを与えないユーザに対しては，オブジェクトの存在もわからないようにできます。

このパーミッションには，コンテナに設定されたリンクのプロパティを参照したり，コンテナと関連づけられている要素のプロパティを参照したりする権利も含まれます。

基本プロパティ更新権

オブジェクトのプロパティを更新する権利です。

このパーミッションを設定されたユーザは，文書やコンテナに設定されたユーザ定義プロパティや，そのほかの読み取り専用以外のプロパティを更新できます。

基本コンテント参照権

文書を表すオブジェクトのコンテントを参照する権利です。

このパーミッションを設定されたユーザは，GetContentメソッドなどによって文書の内容を参照できます。

このパーミッションには，全文検索を実行する権利も含まれます。つまり，全文検索インデクスを使用した検索を実行する場合には，このパーミッションが必要です。

基本コンテント更新権

文書を表すオブジェクトのコンテントを更新する権利です。

このパーミッションを設定されたユーザは，UpdateContentメソッドなどによって，文書の内容を更新できます。

このパーミッションには，全文検索インデクスを作成，削除する権利も含まれます。

基本リンク権

リンクに関する操作をする権利です。

リンクに関する操作とは，コンテナと文書またはコンテナとコンテナを関連づけたり，関連づけを解除したりする操作です。また，このパーミッションにはリンクのプロパティを更新する権利も含まれます。これによって，例えば，コンテナと文書を関連づけた時に，関連づけた日時をリンクのプロパティに設定したりできます。構成管理コンテナの場合は，構成管理モードを変更する権利も含まれます。

基本バージョン管理権

バージョンに関する操作をする権利です。

バージョンに関する操作とは，バージョンアップやバージョン削除をする権利です。チェックアウト，チェックイン，チェックアウトの取り消しなどをする権利が含まれます。

基本オブジェクト削除権

RemoveObjectメソッドなどによって，オブジェクトを削除する権利です。

(3)　組み合わせパーミッション

組み合わせパーミッションとは，基本パーミッションを組み合わせて定義されたパーミッションです。あるオブジェクトに対するパーミッションを指定する場合に，一般的に同時に設定すると考えられる複数の基本パーミッションが，まとめて一つのパーミッションとして指定できるようにされています。

組み合わせパーミッションと基本パーミッションとの対応を次の表に示します。

表3-16　組み合わせパーミッションと基本パーミッションの対応

組み合わせパーミッションの名称

パーミッション文字列
基本パーミッション
（パーミッション文字列）

PRIM_
READ
_PROPS
PRIM
_WRITE
_PROPS
PRIM_
READ
_CONTENTS
PRIM
_WRITE
_CONTENTS
PRIM
_LINK
PRIM
_VERSION
PRIM
_DELETE

プロパティ参照権
READ
_PROPS
○
－
－
－
－
－
－

参照権
READ
○
－
○
－
－
－
－

プロパティ更新権
WRITE
_PROPS
○
○
－
－
－
－
－

参照更新権
READ
_WRITE
○
○
○
○
－
－
－

削除権
DELETE
○
－
－
－
－
－
○

リンク権
LINK
○
－
－
－
○
－
－

バージョン権
VERSION
○
○
○
○
－
○
－

フルコントロール
FULL
_CONTROL
○
○
○
○
○
○
○

（凡例）

○：組み合わせパーミッションに対応する基本パーミッションです。

－：組み合わせのパーミッションに対応しない基本パーミッションです。

組み合わせパーミッションを表すパーミッション文字列を表す定数について，次の表に示します。

表3-17　組み合わせパーミッションのパーミッション文字列を表す定数の対応

パーミッションの名称 | パーミッション文字列 | 定数
プロパティ参照権 | READ_PROPS | DBR_PERM_READ_PROPS
参照権 | READ | DBR_PERM_READ
プロパティ更新権 | WRITE_PROPS | DBR_PERM_WRITE_PROPS
参照更新権 | READ_WRITE | DBR_PERM_READ_WRITE
削除権 | DELETE | DBR_PERM_DELETE
リンク権 | LINK | DBR_PERM_LINK
バージョン権 | VERSION | DBR_PERM_VERSION
フルコントロール | FULL_CONTROL | DBR_PERM_FULL_CONTROL

組み合わせパーミッションを使用すると，一つ指定することで複数の基本パーミッションを指定した場合と同じパーミッションが設定できます。

例えば，あるユーザに対して文書のコンテントの更新を許可したい場合，運用によっては，「検索によって文書を取得し，既存のコンテントの内容を参照した上で，修正，更新する」という操作の流れが考えられます。また，「コンテントを更新する場合には，更新した日時を表すプロパティを更新する」という操作があるとします。この場合，基本パーミッションでは，「基本プロパティ更新権」，「基本コンテント参照権」および「基本コンテント更新権」の3種類のパーミッションをそのユーザに設定する必要があります。これに対して，組み合わせパーミッションの「参照更新権」だけ指定すれば，3種類の基本パーミッションを指定した場合と同じパーミッションとして定義できます。

次に，それぞれの運用での，組み合わせパーミッションの設定例について示します。

プロパティ参照権（READ_PROPS）

コンテナの階層をたどったり，コンテナの名称や文書の名称などのオブジェクトのプロパティとして設定されている情報だけを参照できるようにするユーザに対して設定します。

参照権（READ）

文書名などのプロパティを参照した上で，文書のコンテントの参照も許可したいユーザに対して設定します。

プロパティ更新権（WRITE_PROPS）

文書名などのプロパティを参照して，そのプロパティの値の変更を許可したいユーザに対して設定します。

複数のユーザが作成した文書を集めて整理するユーザなどに設定します。

参照更新権（READ_WRITE）

コンテナや文書をプロパティ，コンテントも含めて参照，更新することを許可したいユーザに対して設定します。

削除権（DELETE）

文書名やコンテナ名など，プロパティとして設定されている情報を参照させて，その文書やコンテナの削除を許可したいユーザに対して設定します。

使われていない文書を削除してデータベースを保守するユーザなどに設定します。

リンク権（LINK）

コンテナに対して，コンテナの名称等は変更させずに，コンテナに文書を格納させるユーザに対して設定します。

すでにフォルダの体系が決定されている場合に，あるユーザにその体系に従って文書を格納させたいときなどに設定します。

バージョン権（VERSION）

バージョン管理を実行させたいユーザに対して設定します。

ただし，文書をバージョンアップする場合などには，バージョン管理の対象になる文書に対してこのパーミッションを与えると同時に，個々のバージョンに対応する文書に対して参照更新権が必要です。

詳細は，「3.15.7　オブジェクトの操作とアクセス制御情報の関係」を参照してください。

フルコントロール（FULL_CONTROL）

そのオブジェクトに対するすべての操作を許可したいユーザに対して設定します。

また，組み合わせパーミッションを指定する場合に，そのパーミッションに含まれない操作をする権利も含ませたいときは，組み合わせパーミッションと基本パーミッションを組み合わせて指定できます。例えば，「参照更新権」を与えたユーザに対して，「オブジェクトを削除する権利も与えたい」という場合は，組み合わせパーミッションの「参照更新権」と，基本パーミッションの「基本オブジェクト削除権」をあわせて指定できます。

(4)　アクセス制御情報変更権

アクセス制御情報変更権は，セキュリティACLに設定できるパーミッションです。

セキュリティACLには，オブジェクトのアクセス制御情報を操作するユーザに対するパーミッションを指定します。

アクセス制御情報変更権について次の表に示します。

表3-18　アクセス制御情報を操作するためのパーミッション

パーミッションの名称 | パーミッション文字列 | 定数
アクセス制御情報変更権 | CHANGE_PERM | DBR_PERM_CHANGE_PERM

文書やコンテナなどを示すオブジェクトのセキュリティACLでアクセス制御情報変更権を与えられたユーザは，そのオブジェクトのACFlagおよびローカルACLの変更，パブリックACLのバインドおよびアンバインドができます。

パブリックACLのセキュリティACLのパーミッションとしてアクセス制御情報変更権を設定されたユーザは，そのパブリックACLに設定されているACLやユーザ定義プロパティを変更できます。

注意

アクセス制御情報変更権が設定されているユーザがアクセス制御情報を変更したり所有者が所有者を変更したりする場合，対象オブジェクトのOIIDを指定して変更します。OIIDを取得するために対象オブジェクトのプロパティを参照する場合は，基本プロパティ参照権が設定されている必要がありますので，注意してください。

3.15.5　それぞれのアクセス制御情報の特徴

ここでは，これまで説明してきたアクセス制御情報について，それぞれの特徴を説明します。アクセス制御情報は，アクセス権判定の順序や用途によって，それぞれ特徴を持っています。これらの特徴を考慮した上で，文書空間またはオブジェクトに適切なアクセス制御情報を設定してください。

＜この項の構成＞

(1)　アクセス権判定の流れ

(2)　アクセス制御情報の特徴

(3)　アクセス制御情報の用途による使い分けの例

(1)　アクセス権判定の流れ

ここでは，アクセス制御情報によって，どのようにオブジェクトに対するアクセス権が判定されるかについて説明します。

DocumentBrokerによるアクセス権の判定処理の流れについて，次の図に示します。

なお，メソッドをコールするユーザに関するユーザ情報は，ログインしたときにDocumentBrokerによって取得されています。このユーザ情報の詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

図3-77　アクセス権の判定処理の流れ

オブジェクトに対してメソッドがコールされます。

アクセス制御機能が，ユーザがログインした時に取得されたユーザ情報を取得します。
ユーザ情報には，ログインユーザに関する次の情報が設定されています。

ユーザ識別子

グループ識別子

文書空間に対するユーザの特権（セキュリティ管理者であるかどうかの情報）

ユーザ権限

メソッドをコールしたユーザがセキュリティ管理者である場合は，メソッドを実行します。セキュリティ管理者でない場合は，3.に進みます。

ユーザがコールしたメソッドに必要なパーミッションの情報を取得します。
各メソッドの実行に必要なパーミッションについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

ユーザ権限定義ファイルに設定したパーミッション（ユーザ権限）を取得します。ユーザに設定されているパーミッションで，メソッドが実行できるか判定します。
メソッドの実行が可能なパーミッションが設定されていた場合は，メソッドが実行されます。
メソッドの実行が可能なパーミッションが設定されていなかった場合は，5.に進みます。

ACFlagを取得します。メソッドをコールしたユーザがACFlagでパーミッションを与えられているユーザまたはグループかどうかを判定します。また，そのパーミッションでメソッドが実行できるかどうかを判定します。
メソッドの実行が可能なパーミッションが設定されている場合，メソッドを実行します。
ユーザにパーミッションが設定されていない場合，またはメソッドの実行が可能なパーミッションが設定されていない場合は，6.に進みます。

オブジェクトにバインドされているパブリックACLを取得します。ユーザ情報に登録されているユーザが，パブリックACLでパーミッションを与えられているかを判定します。また，そのパーミッションでメソッドが実行できるか判定します。
メソッドの実行が可能なパーミッションが設定されている場合は，メソッドを実行します。
ユーザにパーミッションが設定されていない場合，またはメソッドの実行が可能なパーミッションが設定されていない場合は，7.に進みます。

ローカルACLを取得します。ユーザ情報に登録されているユーザまたはグループが，ローカルACLでパーミッションを与えられているかを判定します。また，そのパーミッションでメソッドが実行できるかどうかを判定します。
メソッドの実行が可能なパーミッションが設定されている場合は，メソッドを実行します。
ユーザにパーミッションが設定されていない場合，またはメソッドの実行が可能なパーミッションが設定されていない場合は，DocumentBrokerはメソッドを実行せずに，エラー（ERR_DBR ERR_ACCESS_NOT_PERMITTED）を返却して，エラー終了します。

このように，例えば，ACFlagでユーザの操作に必要なパーミッションが設定されている場合は，DocumentBrokerはパブリックACLやローカルACLを参照しません。したがって，例えば，アクセスが多くなるユーザに対してはACFlagでパーミッションを与えるようにすることで，アクセス権判定の処理速度が向上します。

注意

メソッドをコールした時点で，アクセス権判定の前に，オブジェクトにはロックが設定されます。このロックは，アクセス権がないためにメソッドがアクセスエラーになった場合も解除されません。アクセスエラーが発生した場合は，ロールバックして，トランザクションを終了することで，ロックを解除してください。

(2)　アクセス制御情報の特徴

それぞれのアクセス制御情報の特徴を，次の表に示します。

表3-19　それぞれのアクセス制御情報の特徴

アクセス制御情報の種類
処理順序※
特徴

文書空間に対する特権
1

アクセス制御情報のうち，最初に参照されます。この特権を持つユーザに対してはアクセス権判定処理が実行されません。

文書空間内のセキュリティに関する保守を行うために登録されたセキュリティ管理者に与えられた権限です。

ユーザ権限
2

アクセス権判定のとき，最初に参照される情報なので，最も早い段階でアクセス権が判定されます。

あるユーザに対して，文書空間内で同一の操作を許可する場合に使用すると便利です。

ユーザ権限を多数定義すると，起動処理および文書空間への接続処理に時間が掛かることがあります。

ACFlag
3

所有者，プライマリグループの情報と組み合わせて判定されます。

ユーザ権限の次に参照される情報なので，ローカルACLやパブリックACLに比べて早い時点で判定されます。

データベース上ではトップオブジェクトのプロパティと同じテーブルに存在するプロパティなので，処理が高速です。

所有者，プライマリグループまたはすべてのユーザに対して許可する操作だけ設定できます。

パブリックACL
4
複数のオブジェクトに対して共通のアクセス制御情報が設定できます。

ローカルACL
5
そのオブジェクト固有のアクセス制御情報が設定できます。

注※

DocumentBrokerがアクセス権を判定する場合に，処理する順序です。

(3)　アクセス制御情報の用途による使い分けの例

ユーザ権限，ACFlag，パブリックACLおよびローカルACLの使い分け方について例を使用して説明します。なお，セキュリティ管理者が持つ特権については，文書空間全体のアクセス制御情報を保守するユーザの権限ですので，ここでは説明しません。文書空間のセキュリティについて考慮した上で，別に設定してください。

ここでは，次の図のような組織でのアクセス制御機能を使用した文書管理について説明します。

図3-78　アクセス制御情報の使い分けの例で使用する組織の構成

以降，ユーザ権限，ACFlag，パブリックACLおよびローカルACLを設定する場合の考え方を，アクセス権判定の順に説明していきます。なお，セキュリティACLは，アクセス権判定の処理とは無関係に設定するアクセス制御情報です。

ユーザ権限定義ファイルの指定によるユーザ権限の設定
ユーザ権限定義ファイルでは，文書空間内で共通で利用するアクセス制御情報を設定できます。

オブジェクト作成権限の設定
アクセス制御機能を使用している文書空間では，オブジェクトを作成できるユーザを設定する必要があります。この設定は，ユーザ権限定義ファイルで定義します。
例えば，図3-78の組織の場合に，ユーザA，ユーザCにオブジェクト作成権限を設定します。これによって，ユーザAおよびユーザCは，文書空間に文書やコンテナが作成できるようになります。

オブジェクト操作権限の設定
ユーザ権限定義ファイルには，特定のユーザおよびすべてのユーザに，文書空間内のすべてのオブジェクトに対して許可する操作が設定できます。例えば，すべてのユーザに対してすべての文書またはコンテナを参照する権利を与える場合など，このファイルで設定できます。

ユーザ権限定義ファイルの具体的な定義方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

ACFlagの設定
アクセス制御機能に対応している文書空間でオブジェクトを作成すると，オブジェクトには「所有者」として，オブジェクトを作成したユーザが設定されます。また，オブジェクトには，プライマリグループが設定されている場合があります。プライマリグループは，連携しているユーザ管理システムによって，オブジェクト作成時に設定される場合と，ユーザが明示的に設定する場合があります。プライマリグループを設定する場合は，運用によって，オブジェクトを作成したユーザが所属するグループを設定したり，オブジェクトに対してアクセスが多いと考えられるユーザのグループを設定したりできます。
図3-78の組織の場合，ユーザAがオブジェクトを作成すると，オブジェクトの所有者としてユーザAが設定されます。また，プライマリグループには，企画部を明示的に設定したとします。
ACFlagでは，この所有者およびプライマリグループに対して，許可する操作が設定できます。
例えば，ユーザAが作成した文書に対して，「所有者はすべての操作が可能で，プライマリグループは参照と編集，バージョンアップが可能」としたい場合，所有者に許可する操作として「すべての操作」を設定して，プライマリグループに対して許可する操作として「参照と更新およびバージョンアップ」と設定できます。
ACFlagに設定したアクセス制御情報は，アクセス権判定時にパブリックACLやローカルACLよりも先に処理されます。このため，ACFlagによって所有者やプライマリグループに適切なアクセス権を設定しておけば，アクセス権判定処理が高速で実行されるため，オブジェクトへのアクセスを速くできます。
また，ACFlagでは，すべてのユーザに対して許可する操作も設定できます。例えば，「この文書はすべてのユーザに対して参照を許可する」などの設定もできます。

パブリックACLの設定
パブリックACLには，複数の文書やコンテナに対して共通して設定したいアクセス制御情報を設定します。
例えば，図3-78の組織で，「ユーザA，ユーザCが作成した文書を，グループ『企画部』およびグループ『設計部』内のすべてのユーザが参照，更新できるようにしたい」場合があるとします。このとき，この条件を設定したパブリックACLを作成します。「グループ『企画部』に対して参照，更新する許可を与える」というACEと「グループ『設計部』に対して参照，更新する許可を与える」というACEを作成し，これらを構成要素としたACLを，パブリックACLに設定します。ユーザAおよびユーザCが作成したすべての文書に対してこのパブリックACLをバインドさせれば，すべての文書に同じアクセス制御情報が設定できます。
なお，パブリックACLは複数のオブジェクトで共有されますので，作成時に明確な運用方法を決めてからアクセス制御情報を設定してください。複数のオブジェクトからのバインドを設定したあとはできるだけアクセス制御情報を変更しない運用をお勧めします。
例えば，「文書の作成時には『企画部』および『設計部』に参照，更新させたいが，一度公開したあとでは『営業部』内の特定のユーザ（ユーザD）だけにすべての操作をする権利を与え，ほかのユーザには更新させないようにしたい」というような場合は，公開後にパブリックACLの内容を変更するのではなく，作成時用のパブリックACLと，公開後用のパブリックACLを複数作成しておく運用が考えられます。ある文書を公開したら，その文書からバインドするパブリックACLを「作成時用」のものから「公開後用」のものにバインドし直すことで，アクセス制御情報は変更できます。パブリックACLの運用例を，次の図に示します。

図3-79　パブリックACLの運用例

ローカルACLの設定
ローカルACLには，個々のオブジェクト固有のアクセス制御情報を設定します。
例えば，「ユーザAが作成した文書Xは，企画部，設計部のユーザ以外に，営業部のユーザDにも，参照，更新させたい」という場合，文書XにACFlag，パブリックACLの設定のほかに「ユーザDに参照，更新を許可する」というローカルACLを設定します。

セキュリティACLの設定
セキュリティACLには，オブジェクト（パブリックACLを含む）のアクセス制御情報を操作することを許可するユーザを設定します。これは，それぞれのオブジェクトごとに設定します。
例えば，「ユーザAが作成した文書Xは，ユーザBの承認を得たあとで公開する。ユーザBが承認した段階で，バインドするパブリックACLを『作成時用』から『公開後用』に変更したい」という場合，文書XのセキュリティACLに，ユーザBを設定しておきます。これによって，ユーザBは承認後，文書XからバインドするパブリックACLを変更できます。
ただし，文書の所有者は，常に所有するオブジェクトのすべてのアクセス制御情報変更権を持ちます。このため，「ユーザBの承認後，ユーザAからはアクセス制御情報変更権を無くしたい」という場合は，ユーザAまたはセキュリティ管理者によって，ほかのユーザ（例えばユーザB）に所有者を変更する必要があります。
また，パブリックACLに設定されているアクセス制御情報は，バインドしているオブジェクトのセキュリティACLを持つユーザでは変更できません。つまり，図3-79の場合，文書Xに対してアクセス制御情報変更権を持つユーザAによって，文書XからバインドするパブリックACL「作成時用」に設定されている内容を変更することはできません。
パブリックACLのアクセス制御情報は，それぞれのパブリックACLの所有者およびセキュリティACLに設定されたユーザによって変更できます。

3.15.6　アクセス制御情報を表すプロパティの詳細

ここでは，アクセス制御情報を表すプロパティの詳細について説明します。

それぞれのアクセス制御情報は，オブジェクトのプロパティの値として設定されます。このため，アクセス制御情報を取得，設定および変更する場合は，プロパティを操作するメソッドを使用します。プロパティを操作するメソッドについては，「2.6.6　プロパティの操作」を参照してください。

アクセス制御情報は，サブジェクトを示すプロパティと，パーミッションを示すプロパティの組み合わせによって表されます。

＜この項の構成＞

(1)　ACFlagで設定するサブジェクトとパーミッションの組み合わせ

(2)　ACLで設定するサブジェクトとパーミッションの組み合わせ

(3)　個々のオブジェクトに設定するアクセス制御情報を表すプロパティ

(4)　アクセス制御情報の構成要素のプロパティ

(5)　パブリックACLのプロパティ

(1)　ACFlagで設定するサブジェクトとパーミッションの組み合わせ

ACFlagでは，「所有者」「プライマリグループ」「すべてのユーザ」に対するパーミッションを設定します。所有者とは，dbrProp_OwnerIdプロパティに設定されたユーザで，オブジェクト作成時にそのオブジェクトを作成したユーザが設定され，必要に応じて所有者自身によって別のユーザに変更できます。プライマリグループは，dbrProp_PrimaryGroupIdプロパティに設定されたグループです。プライマリグループはオブジェクト作成時に設定される場合と，オブジェクト作成後にユーザが設定する場合があります。すべてのユーザとは，特定のプロパティとして設定されている値でなく，文書空間にログインできるすべてのユーザを示します。

「所有者」，「プライマリグループ」および「すべてのユーザ」を表すサブジェクトに当たるプロパティと，ACFlagでそれぞれのサブジェクトにパーミッションを設定するプロパティとの対応を，次の表に示します。これらのプロパティは，すべてクラスライブラリのオブジェクトのトップオブジェクトに設定されます。

表3-20　ACFlagによって設定できるサブジェクトとパーミッションの組み合わせ

アクセス権が
与えられる対象
サブジェクトを表すプロパティ識別子
サブジェクトに対する
パーミッションを指定する
プロパティ識別子（ACFlag）

所有者
dbrProp_OwnerId
dbrProp_OwnerPermission

プライマリグループ
dbrProp_PrimaryGroupId
dbrProp_PrimaryGroupPermission

すべてのユーザ
－
dbrProp_EveryonePermission

パーミッションに設定する値については，「3.15.4　パーミッションの種類」を参照してください。

(2)　ACLで設定するサブジェクトとパーミッションの組み合わせ

ACLは，VariableArray型プロパティです。個々の要素として，ACEを持ちます。ACEは，CdbrCompoundクラスのオブジェクトとして扱うことができます。

個々のACEには，CdbrCompoundクラスのオブジェクトのプロパティとして，「サブジェクト」，「サブジェクト種別」および「パーミッション」を指定します。

ACEに指定するサブジェクトとサブジェクト種別，およびパーミッションを表すプロパティの組み合わせを次の表に示します。なお，サブジェクト種別を表すプロパティとは，そのサブジェクトがユーザなのか，グループなのか，システムなのかを表すプロパティです。

表3-21　ACEによって設定できるサブジェクトとパーミッションの組み合わせ

設定する内容 | プロパティ識別子
サブジェクト | dbrProp_Subject
サブジェクト種別 | dbrProp_SubjectType
サブジェクトに対するパーミッション | dbrProp_Permission

注意

一つのACLに設定できるACEの個数は64個までです。セキュリティACLとして指定する場合も，一つのオブジェクトのセキュリティACLに設定できるACEの個数は64個までです。

(3)　個々のオブジェクトに設定するアクセス制御情報を表すプロパティ

個々のオブジェクトに設定するアクセス制御情報を表すプロパティについて，次の表に示します。

表3-22　個々のオブジェクトに設定するアクセス制御情報を表すプロパティ

アクセス制御情報の種類
プロパティ識別子
データ型
基本単位
制限値
検索の
可否
説明

所有者
dbrProp_OwnerId
String型
Scalar型
1～uバイト
○※¹
所有者のユーザ識別子
u：ユーザ識別子の最大長※2

プライマリグループ
dbrProp_PrimaryGroupId
String型
Scalar型
0～gバイト
○※³
プライマリグループのグループ識別子
g：グループ識別子の最大長※4

ACFlag
dbrProp_OwnerPermission
Integer32型
Scalar型
4バイト
×
所有者のパーミッション

dbrProp_PrimaryGroupPermission
Integer32型
Scalar型
4バイト
×
プライマリグループのパーミッション

dbrProp_EveryonePermission
Integer32型
Scalar型
4バイト
×
すべてのユーザのパーミッション

ローカルACL
dbrProp_ACL
Object型
VariableArray型
ACEは64個まで
×
ACL

セキュリティACL
dbrProp_SACL
Object型
VariableArray型
ACEは64個まで
×
セキュリティACL

パブリックACL
dbrProp_PublicACLCount※⁵
Integer32型
Scalar型
10個
×
バインドしているパブリックACLの個数

dbrProp_PublicACLIds
Object型
VariableArray型
一つのオブジェクトにバインドできるパブリックACLは10個まで。
個々のパブリックACLで設定できるACEは64個まで
×
バインドしているパブリックACLのOIIDのリスト（可変長配列）

ログインユーザのパーミッション
dbrProp_UserPermission※⁵
Integer32型
Scalar型
－
×
ログインユーザに設定されているパーミッションの論理和

（凡例）

○：検索に使用できます。

×：検索に使用できません。

－：該当ありません。

注※1

検索する場合は，プロパティ識別子を「edmProp_OwnerId」と指定する必要があります。

注※2

通常，ユーザ識別子の最大長は254バイトですが，次に示すコマンドでユーザ識別子の最大長を拡張できます。

メタ情報の初期設定コマンド（EDMInitMeta）
この場合，-nオプションの指定値がユーザ識別子の最大長になります。

文書空間の定義コマンド（EDMCDefDocSpace）
この場合，-sオプションに指定する文書空間情報ファイル中のUserIDMaxLengthエントリの指定値がユーザ識別子の最大長になります。

メタ情報の初期設定コマンド（EDMInitMeta）および文書空間の定義コマンド（EDMCDefDocSpace）については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

注※3

検索する場合は，プロパティ識別子を「edmProp_PrimaryGroupId」と指定する必要があります。

注※4

通常，グループ識別子の最大長は254バイトですが，次に示すコマンドでグループ識別子の最大長を拡張できます。

メタ情報の初期設定コマンド（EDMInitMeta）
この場合，-gオプションの指定値がグループ識別子の最大長になります。

文書空間の定義コマンド（EDMCDefDocSpace）
この場合，-sオプションに指定する文書空間情報ファイル中のGroupIDMaxLengthエントリの指定値がグループ識別子の最大長になります。

メタ情報の初期設定コマンド（EDMInitMeta）および文書空間の定義コマンド（EDMCDefDocSpace）については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

注※5

読み取り専用のプロパティです。

(a)　所有者（dbrProp_OwnerId）

所有者のユーザ識別子を表すプロパティです。所有者は，ACFlagによってパーミッションを与える対象になります。

このプロパティは検索に使用できます。ただし，検索に使用する場合は，プロパティ識別子を「edmProp_OwnerId」と指定します。

(b)　プライマリグループ（dbrProp_PrimaryGroupId）

プライマリグループのグループ識別子を表すプロパティです。プライマリグループは，ACFlagによってパーミッションを与える対象になります。

このプロパティは検索に使用できます。ただし，検索に使用する場合は，プロパティ識別子を「edmProp_PrimaryGroupId」と指定します。

(c)　ACFlag（dbrProp_OwnerPermission／dbrProp_PrimaryGroupPermission／dbrProp_EveryonePermission）

所有者，プライマリグループおよびすべてのユーザに対して与えるパーミッションを表すプロパティです。

パーミッションとして指定する値については，「3.15.4　パーミッションの種類」を参照してください。

(d)　ローカルACL（dbrProp_ACL）

ローカルACLを表すVariableArray型プロパティです。

ACLの要素であるACEのプロパティについては，「(4)アクセス制御情報の構成要素のプロパティ」を参照してください。

(e)　セキュリティACL（dbrProp_SACL）

ローカルACLを表すVariableArray型プロパティです。

ACLの要素であるACEのプロパティについては，「(4)アクセス制御情報の構成要素のプロパティ」を参照してください。

(f)　パブリックACL（dbrProp_PublicACLCount／dbrProp_PublicACLIds）

バインドしているパブリックACLの個数と，パブリックACLのリストを表すプロパティです。

dbrProp_PublicACLCountプロパティは，バインドしているパブリックACLの個数を表すプロパティです。一つのオブジェクトには10個のパブリックACLをバインドできます。なお，このプロパティは読み取り専用です。

dbrProp_PublicACLIdsプロパティは，バインドしているパブリックACLのOIIDのリストを表すVariableArray型プロパティです。

個々のパブリックACLのOIIDは，VariableArray型プロパティの要素を表すCdbrCompoundオブジェクトのdbrProp_ACLIdElemプロパティとして設定します。

dbrProp_ACLIdsElemプロパティの詳細を表3 35に示します。

表3-23　dbrProp_ACLIdsElemプロパティの詳細

プロパティ識別子 | データ型 | 基本単位 | 制限値 | 検索の可否 | 説明
dbrProp_ACLIdElem | String型 | Scalar型 | OIID長 | × | バインドしているパブリックACLのOIID

（凡例）

×：検索に使用できません。

パブリックACLを新規にバインドする場合，またはすべて更新する場合は，まず，このCdbrCompoundオブジェクトを要素としたVariableArray型プロパティを作成して，PutPropertyValuesメソッドによって，オブジェクトに設定します。

また，すでにパブリックACLをバインドしているオブジェクトに対してバインドするパブリックACLを追加する場合は，BindPublicACLメソッドを使用して，パブリックACLを追加します。

パブリックACLの設定方法の詳細については，「3.15.9(5)文書またはコンテナへのパブリックACLの設定」および「3.15.9(6)文書またはコンテナへのパブリックACLのバインド」を参照してください。

(g)　ログインユーザのパーミッション（dbrProp_UserPermission）

ログインユーザがユーザ権限定義ファイル，ACFlag，ローカルACLおよびバインドしているパブリックACLで与えられているパーミッションの論理和を表すプロパティです。なお，このプロパティは読み取り専用です。

(4)　アクセス制御情報の構成要素のプロパティ

ここでは，アクセス制御情報のうち，ACLの構成要素であるACEのプロパティについて説明します。

ACEのプロパティを，次の表に示します。

表3-24　ACEのプロパティ

データ名称
プロパティ識別子
データ型
基本単位
制限値
検索の可否
説明

サブジェクト
dbrProp_Subject
String型
Scalar型
sバイト
×
サブジェクトの識別子
s：サブジェクトの最大長※

サブジェクト種別
dbrProp_SubjectType
Integer32型
Scalar型
4バイト
×
サブジェクト種別を表す定数

パーミッション
dbrProp_Permission
Integer32型
Scalar型
4バイト
×
パーミッションを表す定数

（凡例）

×：検索に使用できません。

注※

通常，ユーザ識別子およびグループ識別子の最大長は254バイトですが，次に示すコマンドでユーザ識別子とグループ識別子の最大長を拡張できます。

メタ情報の初期設定コマンド（EDMInitMeta）
この場合，-nオプションの指定値がユーザ識別子の最大長に，-gオプションの指定値がグループ識別子の最大長になります。

文書空間の定義コマンド（EDMCDefDocSpace）
この場合，-sオプションに指定する文書空間情報ファイル中のUserIDMaxLengthエントリの指定値がユーザ識別子の最大長に，GroupIDMaxLengthエントリの指定値がグループ識別子の最大長になります。

メタ情報の初期設定コマンド（EDMInitMeta）および文書空間の定義コマンド（EDMCDefDocSpace）については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

なお，システムサブジェクトの場合，識別子の最大長は常に254バイトになります。

(a)　サブジェクト（dbrProp_Subject）

サブジェクトには，次のどれかを指定します。

ユーザ識別子
ユーザ単位でパーミッションを設定する場合に指定します。

グループ識別子
グループ単位でパーミッションを設定する場合に指定します。

システムサブジェクトを表す定数
システムサブジェクトに対してパーミッションを設定する場合に指定します。
システムサブジェクトは，DocumentBrokerによって設定された情報に対して，パーミッションを設定する場合に指定するサブジェクトです。
このサブジェクトは，主にパブリックACLに指定して使用します。
システムサブジェクトの定数と意味は，次のとおりです。

表3-25　システムサブジェクトの定数と意味

定数
意味

DBR_SYSSUBJECT_SELF
対象オブジェクトの所有者を表すサブジェクトです。

パブリックACLのACLに指定した場合，そのパブリックACLをバインドしている文書やコンテナを表すオブジェクトの所有者を示します。

文書やコンテナを表すオブジェクトのローカルACLおよびセキュリティACLに指定した場合は，そのオブジェクトの所有者を示します。

パブリックACLのセキュリティACLに指定した場合は，パブリックACLの所有者を示します。

DBR_SYSSUBJECT_EVERYONE
すべてのユーザを表すサブジェクトです。

(b)　サブジェクト種別（dbrProp_SubjectType）

サブジェクト種別には，サブジェクトに指定した内容に応じて，種別を示す定数を指定します。

ユーザ識別子を指定した場合
定数「DBR_SUBJECTTYPE_USR」を指定します。

グループ識別子を指定した場合
定数「DBR_SUBJECTTYPE_GRP」を指定します。

システムサブジェクトを表す定数を指定した場合
定数「DBR_SUBJECTTYPE_SYS」を指定します。

(c)　パーミッション（dbrProp_Permission）

サブジェクトに指定したユーザまたはグループに対して設定するパーミッションを表す定数を指定します。

パーミッションとして指定する値については，「3.15.4　パーミッションの種類」を参照してください。

(5)　パブリックACLのプロパティ

パブリックACLは，文書空間に独立して存在するオブジェクトです。

パブリックACLに設定するプロパティについて，次の表に示します。

表3-26　パブリックACLに設定するプロパティ

プロパティ識別子
データ型
基本単位
制限値
検索の可否
説明

dmaProp_OIID
Object型
Scalar型
OIID長
○
パブリックACLを識別するOIID

dbrProp_OwnerId
String型
Scalar型
1～uバイト
○
パブリックACL所有者のユーザ識別子
u：ユーザ識別子の最大長※1

dbrProp_ACL
Object型
VariableArray型
ACEは64個まで
×
パブリックACLのローカルACL。
ほかのオブジェクトによって共有されるACLを指定する

dbrProp_SACL
Object型
VariableArray型
ACEは64個まで
×
パブリックACLのセキュリティACL

dbrProp_BindObjectCount
Integer32型
Scalar型
－
×
バインドしているオブジェクトの数※²

dbrProp_UserPermission
Integer32型
Scalar型
－
×
ログインユーザに設定されているパーミッションの論理和※³

（ユーザ定義プロパティの識別子）
－
－
－
○
ユーザが任意に追加したプロパティ

（凡例）

○：検索に使用できます。

×：検索に使用できません。

－：該当ありません。

注※1

通常，ユーザ識別子の最大長は254バイトですが，次に示すコマンドでユーザ識別子の最大長を拡張できます。

メタ情報の初期設定コマンド（EDMInitMeta）
この場合，-nオプションの指定値がユーザ識別子の最大長になります。

文書空間の定義コマンド（EDMCDefDocSpace）
この場合，-sオプションに指定する文書空間情報ファイル中のUserIDMaxLengthエントリの指定値がユーザ識別子の最大長になります。

メタ情報の初期設定コマンド（EDMInitMeta）および文書空間の定義コマンド（EDMCDefDocSpace）については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

注※2

読み取り専用のプロパティです。

注※3

ユーザ権限定義ファイルおよびセキュリティACLによって与えられているパーミッションの論理和です。

なお，パブリックACLのローカルACLには，複数のオブジェクト間で共有したいアクセス制御情報を設定します。パブリックACLに対するアクセス制御情報を設定するものではありません。

パブリックACL自身に対するアクセス権については，「3.15.3(2)(a)パブリックACL」を参照してください。

3.15.7　オブジェクトの操作とアクセス制御情報の関係

ここでは，オブジェクトの操作とアクセス制御情報の関係について説明します。

アクセス制御情報は，クラスライブラリのオブジェクトのトップオブジェクトのプロパティとして設定されています。トップオブジェクト以外のオブジェクトに対する操作は，トップオブジェクトに設定されたアクセス制御情報に従って処理されます。

例として，CdbrReferentialContainerオブジェクトに対する操作について説明します。

CdbrReferentialContainerオブジェクトは，DMAオブジェクトのContainerオブジェクトをトップオブジェクトとして，DirectContainmentRelationshipオブジェクト，ReferentialContainmentRelationshipオブジェクトとともに構成されています。したがって，CdbrReferentialContainerオブジェクトのアクセス制御情報は，DMAオブジェクトのContainerオブジェクトのプロパティとして設定されています。

ここで，CdbrReferentialContainerオブジェクトで設定されているリンクに対して，プロパティを設定する場合について説明します。リンクのプロパティとは，DMAオブジェクトのDirectContainmentRelationshipオブジェクトまたはReferentialContainmentRelationshipオブジェクトのプロパティです。PutLinkPropertyValuesメソッドによってこのプロパティを更新しようとすると，DocumentBrokerはアクセス制御情報としてトップオブジェクトに設定されているアクセス制御情報を参照してアクセス権を判定し，アクセス権がある場合にメソッドを実行します。トップオブジェクト以外のオブジェクトにアクセスする場合の，アクセス制御の例を，次の図に示します。

図3-80　トップオブジェクト以外のオブジェクトにアクセスする場合のアクセス制御の例（CdbrReferentialContainerオブジェクトの例）

また，バージョン管理を実行したり，オブジェクト間のコンテインメントによる関連づけを実行したりする場合，複数のオブジェクトに対してパーミッションが必要なときがあります。

ここでは，複数のオブジェクトに対してパーミッションが必要な操作について説明します。

＜この項の構成＞

(1)　バージョン管理に関する操作

(2)　文書間リレーションに関する操作

(3)　コンテナへの関連づけに関する操作

(4)　構成管理に関する操作

(5)　一覧取得メソッドを使用する操作

(6)　マルチレンディション管理に関する操作

(7)　各メソッドの実行に必要なパーミッション

(1)　バージョン管理に関する操作

バージョン管理をしている文書の場合，一つのバージョン付き文書は，複数のバージョンなし文書によって構成されています。また，バージョン付き構成管理コンテナの場合も同様に，複数のバージョンなし構成管理コンテナによって構成されています。この場合，一つのバージョン付き文書を操作する場合に，バージョン付き文書のトップオブジェクトに設定されたパーミッションと，バージョンなし文書のトップオブジェクトに設定されたパーミッションが必要な場合があります。

バージョン付きオブジェクトとバージョンなしオブジェクトに設定されているアクセス制御情報について，次の図に示します。

図3-81　バージョン付きオブジェクトとバージョンなしオブジェクトに設定されているアクセス制御情報（CdbrVersionableDocumentオブジェクトおよびCdbrDocumentオブジェクトの場合）

ここでは，バージョン付き文書およびバージョン付き構成管理コンテナをバージョン付きオブジェクト，バージョンなし文書およびバージョンなし構成管理コンテナをバージョンなしオブジェクトとして，これら二つのオブジェクトにパーミッションが必要な操作について説明します。バージョン付きオブジェクトと1バージョンに相当するバージョンなしオブジェクトの対応について，次の表に示します。

表3-27　バージョン付きオブジェクトとバージョンなしオブジェクトの対応

バージョン付きオブジェクト | 1バージョンに相当するバージョンなしオブジェクト
CdbrVersionableDocumentオブジェクト | CdbrDocumentオブジェクト
CdbrConfiguratedReferentialContainerオブジェクト | CdbrVersionTraceableContainerオブジェクト

例として，CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトについて説明します。

CdbrDocumentオブジェクトは，CdbrVersionableDocumentオブジェクトの一つのバージョンに相当します。ユーザAがCdbrVersionableDocumentオブジェクトの1バージョンを削除しようとした場合，まず，CdbrVersionableDocumentオブジェクトに対して基本バージョン管理権が必要です。しかし，バージョンを削除することは実際には一つのCdbrDocumentオブジェクトを削除することと同じことになります。したがって，この場合は，CdbrVersionableDocumentオブジェクトの基本バージョン管理権のほかに，CdbrDocumentオブジェクトの基本オブジェクト削除権が必要になります。

バージョン付きオブジェクトを操作する場合に必要なパーミッション
バージョン付きオブジェクトに対してバージョン管理に関する操作をする時，操作の種類によってはバージョンなしオブジェクトに対してもアクセス権が必要な場合があります。
メソッドをコールするユーザがバージョン付きオブジェクトに対して必要なパーミッションとバージョンなしオブジェクトに対して必要なパーミッションを次の表に示します。

表3-28　バージョン付きオブジェクトとバージョンなしオブジェクトに必要なパーミッション（バージョン付きオブジェクトを操作する場合）

バージョン管理に関係する操作（メソッド）
バージョン付きオブジェクトに必要なパーミッション
バージョンなしオブジェクトに必要なパーミッション

バージョンチェックアウト

VersionCheckOut

基本バージョン管理権
（PRIM_VERSION）

CdbrDocumentオブジェクトの場合：
基本コンテント参照権
（PRIM_READ_CONTENTS※¹）

CdbrVersionTraceableContainerオブジェクトの場合：
基本プロパティ参照権
（PRIM_READ_PROPS※¹）

バージョンチェックイン

VersionCheckIn

基本バージョン管理権
（PRIM_VERSION）
－

バージョンチェックアウトのキャンセル

VersionRevoke

基本バージョン管理権
（PRIM_VERSION）
－

バージョンの削除

DeleteVersion

基本バージョン管理権
（PRIM_VERSION）
基本オブジェクト削除権
（PRIM_DELETE）

バージョン情報の一覧取得

GetVersionList

GetVersionListAndLock

基本プロパティ参照権
（PRIM_READ_PROPS）
基本プロパティ参照権※²
（PRIM_READ_PROPS）

バージョン識別子を指定したバージョンなしオブジェクトの操作
基本プロパティ参照権
（PRIM_READ_PROPS）
バージョンなしオブジェクトに直接メソッドをコールした場合に必要なパーミッション

（凡例）

－：パーミッションは必要ありません。

注※1

カレントバージョンに対応するバージョンなしオブジェクトの場合に必要です。

注※2

バージョンなしオブジェクトのプロパティを取得しない場合は不要です。また，バージョンなしオブジェクトのプロパティを取得する場合に，基本プロパティ参照権が設定されていないオブジェクトについては，一覧として取得されません。

バージョンなしオブジェクトを操作する場合に必要なパーミッション
バージョン付きオブジェクトの1バージョンに相当するバージョンなしオブジェクトを操作する時，操作の種類によってはバージョン付きオブジェクトに対してもアクセス権が必要な場合があります。
メソッドをコールするユーザがバージョン付きオブジェクトに対して必要なパーミッションとバージョンなしオブジェクトに対して必要なパーミッションを次の表に示します。

表3-29　バージョン付きオブジェクトとバージョンなしオブジェクトに必要なパーミッション（バージョンなしオブジェクトを操作する場合）

バージョンなしオブジェクトに対する操作（メソッド）
バージョン付きオブジェクトに必要なパーミッション
バージョンなしオブジェクトに必要なパーミッション

オブジェクトの削除

RemoveObject

基本バージョン管理権
（PRIM_VERSION）
基本オブジェクト削除権
（PRIM_DELETE）

自オブジェクトを1バージョンとして包含しているバージョン付きオブジェクトの一覧取得

GetVersionableList

GetVersionableListAndLock

基本プロパティ参照権※
（PRIM_READ_PROPS）
基本プロパティ参照権
（PRIM_READ_PROPS）

注※

バージョン付きオブジェクトのプロパティを取得しない場合は不要です。また，バージョン付きオブジェクトのプロパティを取得する場合に，基本プロパティ参照権が設定されていないオブジェクトについては，一覧として取得されません。

バージョンなしオブジェクトに対して表3-29に示した以外のメソッドをコールする場合，バージョン付きオブジェクトのパーミッションは必要ありません。

チェックアウトによってコピーされたオブジェクトのパーミッション
VersionCheckOutメソッドをコールすると，カレントバージョンに該当するバージョンなしオブジェクトがコピーされて，仮のバージョンに該当するバージョンなしオブジェクトが作成されます。
このとき，仮のバージョンに該当するバージョンなしオブジェクトの所有者およびプライマリグループには，コピー元のオブジェクトに設定されていた所有者およびプライマリグループが設定されます。
また，仮のバージョンに該当するバージョンなしオブジェクトには，コピー元のオブジェクトに設定されていたACFlagおよびローカルACLが設定され，チェックアウトしたオブジェクトからバインドしていたパブリックACLがバインドされます。

(2)　文書間リレーションに関する操作

文書間リレーションを設定している文書間では，メソッドによってはリレーション元文書とリレーション先文書に対して適切なパーミッションが与えられている必要があります。

メソッドをコールするユーザがリレーション元文書とリレーション先文書に対して必要なパーミッションを次の表に示します。

表3-30　リレーション元文書とリレーション先文書に対して必要なパーミッション

リレーションに関係する操作（メソッド）
リレーション元文書に必要なパーミッション
リレーション先文書に必要なパーミッション

リレーションの作成

CreateRelation

基本リンク権
（PRIM_LINK）
基本プロパティ参照権※
（PRIM_READ_PROPS）

リレーション情報の取得

GetRelationList

GetRelationListAndLock

基本プロパティ参照権※
（PRIM_READ_PROPS）
基本プロパティ参照権※
（PRIM_READ_PROPS）

リレーションの削除

RemoveRelation

基本リンク権
（PRIM_LINK）
－

リレーションのプロパティの設定

PutRelationPropertyValues

基本リンク権
（PRIM_LINK）
－

（凡例）

－：パーミッションは必要ありません。

注※

リレーション先文書のプロパティを取得しない場合は不要です。

(3)　コンテナへの関連づけに関する操作

直接型や参照型のコンテインメントによってコンテナと関連づけている文書やコンテナでは，コンテナを表すオブジェクトと関連づけられるコンテナまたは文書を表す二つのオブジェクトに対して，適切なパーミッションを与えられている必要があります。

コンテナを表すオブジェクトとコンテナに関連づけられるオブジェクトの対応について，次の表に示します。

表3-31　コンテナとコンテナに関連づけられているオブジェクトの対応

コンテナになるオブジェクト | コンテナに関連づけられるオブジェクト
CdbrReferentialContainerオブジェクト | CdbrContainableクラスのサブクラスのオブジェクト
CdbrConfiguratedReferentialContainerオブジェクト（1バージョン） | CdbrContainableクラスのサブクラスのオブジェクト
CdbrVersionTraceableContainerオブジェクト | CdbrContainableクラスのサブクラスのオブジェクト

例えば，CdbrReferentialContainerオブジェクトに対して，CdbrDocumentオブジェクトおよびCdbrVersionableDocumentオブジェクトとのコンテインメントを設定する場合に必要なアクセス制御情報が設定されているDMAオブジェクトは，次の図のようになります。

図3-82　コンテナとコンテナに関連づけられているオブジェクトに設定されているアクセス制御情報

コンテナを操作する場合に必要なパーミッション
コンテナを操作する時，操作の種類によってはコンテナに関連づけられている文書またはコンテナに対してもアクセス権が必要な場合があります。
メソッドをコールするユーザがコンテナに対して必要なパーミッションとコンテナに関連づけられる文書またはコンテナに対して必要なパーミッションを次の表に示します。

表3-32　コンテナとコンテナと関連づけられている文書またはコンテナに対して必要なパーミッション（コンテナを操作する場合）

リンクに関係する操作（メソッド）
コンテナに必要なパーミッション
コンテナに関連づけられるオブジェクトに必要なパーミッション

コンテナとオブジェクトの関連づけ

Link

LinkAndLock

基本リンク権
（PRIM_LINK）
基本プロパティ参照権
（PRIM_READ_PROPS）

コンテナとオブジェクトの関連づけの解除

Unlink

UnlinkAndLock

基本リンク権
（PRIM_LINK）
－

リンクのプロパティの参照

GetLinkPropertyValues

GetLinkPropertyValuesAndLock

基本プロパティ参照権
（PRIM_READ_PROPS）
－

リンクのプロパティの更新

PutLinkPropertyValues

基本リンク権
（PRIM_LINK）
－

コンテナと関連づけている要素の一覧取得

GetContainableList

GetContainableListAndLock

基本プロパティ参照権
（PRIM_READ_PROPS）
基本プロパティ参照権※
（PRIM_READ_PROPS）

（凡例）

－：パーミッションは必要ありません。

注※

コンテナと関連づけられるオブジェクトのプロパティを取得しない場合は不要です。また，コンテナと関連づけられるオブジェクトのプロパティを取得する場合に，基本プロパティ参照権が設定されていないオブジェクトについては，一覧として取得されません。

コンテナと関連づけられるオブジェクトを操作する場合に必要なパーミッション
コンテナと関連づけられている文書またはコンテナを操作する時，操作の種類によってはコンテナに対してもアクセス権が必要な場合があります。
メソッドをコールするユーザがコンテナに対して必要なパーミッションとコンテナと関連づけられる文書またはコンテナに対して必要なパーミッションを次の表に示します。

表3-33　コンテナとコンテナに関連づけられている文書またはコンテナに対して必要なパーミッション（コンテナと関連づけられるオブジェクトを操作する場合）

コンテナに関連づけられているオブジェクトに対する操作（メソッド）
コンテナに必要なパーミッション
コンテナに関連づけられている文書またはコンテナに必要なパーミッション

自オブジェクトを包含要素として関連づけているコンテナの一覧取得

GetContainerList

GetContainerListAndLock

基本プロパティ参照権※
（PRIM_READ_PROPS）
基本プロパティ参照権
（PRIM_READ_PROPS）

注※

コンテナであるオブジェクトのプロパティを取得しない場合は不要です。また，コンテナであるオブジェクトのプロパティを取得する場合に，基本プロパティ参照権が設定されていないオブジェクトについては，一覧として取得されません。

コンテナに関連づけられているオブジェクトに対して表3-33に示した以外のメソッドがコールされた場合，コンテナであるオブジェクトのパーミッションは必要ありません。

(4)　構成管理に関する操作

構成管理コンテナ（CdbrConfiguratedReferentialContainerオブジェクトまたはCdbrVersionTraceableContainerオブジェクト）によって構成管理機能を使用している場合は，構成管理コンテナと構成管理されているオブジェクトの二つのオブジェクトに対して，適切なパーミッションが必要です。

バージョン付き構成管理コンテナまたはバージョンなし構成管理コンテナを表すオブジェクトに構成管理型のコンテインメントで関連づけられるオブジェクトの対応について，次の表に示します。

表3-34　構成管理コンテナと構成管理型で関連づけられるオブジェクトの対応

構成管理コンテナになるオブジェクト
構成管理コンテナに関連づけられる
オブジェクト

CdbrConfiguratedReferentialContainerオブジェクト
CdbrVersionableクラスのサブクラスのオブジェクト

CdbrVersionTraceableContainerオブジェクト
CdbrVersionableクラスのサブクラスのオブジェクト

構成管理コンテナを操作する場合に必要なパーミッション
構成管理コンテナを操作する時，操作の種類によっては，構成管理コンテナに構成管理型のコンテインメントで関連づけられる文書またはコンテナに対してもアクセス権が必要な場合があります。
メソッドをコールするユーザが，構成管理コンテナに対して必要なパーミッションと，構成管理コンテナに構成管理型のコンテインメントで関連づけられる文書またはコンテナに対して必要なパーミッションを，次の表に示します。

表3-35　構成管理コンテナと構成管理型のコンテインメントで関連づけられる文書またはコンテナに必要なパーミッション

構成管理型のリンクに関係する操作（メソッド）
構成管理コンテナに必要なパーミッション
構成管理型のコンテインメントで関連づけられる文書またはコンテナに必要なパーミッション

構成管理コンテナとオブジェクトの構成管理型での関連づけ

LinkVTFix

LinkVTFixAndLock

LinkVTFloat

LinkVTFloatAndLock

基本リンク権
（PRIM_LINK）
基本プロパティ参照権
（PRIM_READ_PROPS※）

構成管理コンテナとオブジェクトの構成管理型での関連づけの解除

UnlinkVT

UnlinkVTAndLock

基本リンク権
（PRIM_LINK）
－

構成管理モードのFIXモードへの変更

SetVTFix

基本リンク権
（PRIM_LINK）
－

構成管理モードのFLOATINGモードへの変更

SetVTFloat

基本リンク権
（PRIM_LINK）
－

（凡例）

－：パーミッションは必要ありません。

注※

バージョン付きオブジェクトと，FIXモードまたはFLOATINGモードで関連づける1バージョンに対応するバージョンなしオブジェクトの基本プロパティ参照権が必要です（例えば，CdbrVersionableDocumentオブジェクトを構成管理型で関連づける場合，CdbrVersionableDocumentオブジェクトの基本プロパティ参照権と，FIXモードまたはFLOATINGモードで関連づけるバージョンに対応するCdbrDocumentオブジェクトの基本プロパティ参照権が必要です）。

なお，FLOATINGモードによって構成管理している場合，構成管理型で関連づけているオブジェクトがバージョンアップすると，関連づけているオブジェクトが変更されますが，表3-35のパーミッションは，メソッドによって関連づけを作成，変更した場合にだけチェックされます。バージョンアップ時にはチェックされません。

(5)　一覧取得メソッドを使用する操作

一覧取得メソッドとは，Get～ListメソッドまたはGet～ListAndLockメソッドなどのメソッドです。クラスライブラリのオブジェクトがほかのクラスライブラリのオブジェクトとコンテインメントやバージョン管理機能によって関連づけられている場合に，その関連づけられているオブジェクトの一覧を取得します。

一覧取得メソッドには，メソッドで設定されたデフォルトの情報だけを取得する以外に，明示的に指定した接続先オブジェクトのプロパティが取得できるメソッドがあります。これらのメソッドで，接続先のオブジェクトのプロパティを取得する場合は，接続先オブジェクトに基本プロパティ参照権が必要です。このパーミッションが設定されていない場合は，一覧に取得されません。なお，デフォルトの情報だけを取得する場合は，接続先のオブジェクトにパーミッションは必要ありません。これは，ユーザプログラムの内部処理に使うことを想定しています。システムを使用するエンドユーザに対してプロパティを表示して文書一覧を表示する場合などには，接続先のオブジェクトのプロパティを取得するメソッドを使用して，アクセス権があるものだけを表示するといった運用方法をお勧めします。

また，GetPropertyValuesメソッドを使用して，該当するプロパティ識別子を指定した場合も，接続先オブジェクトの個数は取得できます。ただし，このメソッドでは，接続先オブジェクトに対するパーミッションに関係なく，接続されているすべてのオブジェクトの個数が取得されます。

(6)　マルチレンディション管理に関する操作

マルチレンディション管理をしている文書の場合，レンディションの操作は，そのレンディションを含むCdbrDocumentオブジェクトのトップオブジェクトに当たる，DMAオブジェクトのDocVersionオブジェクトに対して設定されているアクセス権に従って制御されます。

(7)　各メソッドの実行に必要なパーミッション

アクセス制御機能を使用している文書空間で，メソッドをコールするユーザはそのメソッドのコールに必要なパーミッションを持っている必要があります。

各メソッドのコールに必要なパーミッションについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

3.15.8　アクセス制御機能と検索

ここでは，アクセス制御機能を使用した検索について説明します。なお，検索の詳細については，「4.　オブジェクトの検索」を参照してください。

＜この項の構成＞

(1)　アクセス制御機能付き検索とは

(2)　検索に必要なパーミッション

(3)　検索実行時のアクセス制御モードの設定

(4)　アクセス制御機能付き検索を実行する場合の制限事項

(1)　アクセス制御機能付き検索とは

アクセス制御機能を使用している文書空間では，検索を実行したときに，ユーザが指定した問い合わせの条件を満たすオブジェクトの集合のうち，そのユーザが参照を許可されているオブジェクトだけを検索結果として取得させることができます。

このように，アクセス権を参照して，参照が許可されているオブジェクトだけを検索結果として取得する検索を，アクセス制御機能付き検索といいます。

アクセス制御機能付き検索の概要を次の図に示します。

図3-83　アクセス制御機能付き検索の概要

ユーザAは，オブジェクトXとオブジェクトYについて，参照権を持っていますが，オブジェクトZについては参照権を持っていません。このような場合に，ユーザAがアクセス制御機能付き検索を実行すると，検索結果集合のうちオブジェクトXとオブジェクトYだけが検索結果として返却されます。オブジェクトZについては，参照権がないため，ユーザAは検索結果としてオブジェクトZを取得できません。

DocumentBrokerでは，まずデータベースから検索条件を満たすオブジェクトの集合を取得します。そして，それぞれのオブジェクトに設定されているアクセス制御情報のパーミッションを取得します。これを検索を実行したユーザのユーザ情報と比較して，ユーザがアクセス権を持つオブジェクトだけを検索結果として返却します。

(2)　検索に必要なパーミッション

検索を実行して検索結果としてオブジェクトを取得するためには，そのオブジェクトに対してユーザは基本プロパティ参照権（PRIM_READ_PROPS）を与えられている必要があります。

ただし，全文検索を実行する場合，検索実行時にオブジェクトのコンテントを参照する必要があるため，基本コンテント参照権（PRIM_READ_CONTENTS）も必要になります。

(3)　検索実行時のアクセス制御モードの設定

アクセス制御機能付き検索は，アクセス権判定をする処理が増えるため，アクセス制御機能を使用しない場合の検索に比べて処理が遅くなります。

このため，DocumentBrokerでは，アクセス制御機能付き検索を実行するかどうかが選択できます。なお，検索実行時にアクセス権を参照しないで検索結果をユーザに返却する検索を，アクセス制御機能なし検索といいます。

アクセス制御機能付き検索を実行するか，アクセス制御機能なし検索を実行するかは，アクセス制御モードによって設定します。

アクセス制御モードには，次の2種類があります。

アクセス制御機能付き検索モード（DBR_QUERY_WITH_ACL）
アクセス制御機能付き検索を実行するモードです。

アクセス制御機能なし検索モード（DBR_QUERY_WITHOUT_ACL）
アクセス制御機能なし検索を実行するモードです。

通常，アクセス制御モードは文書空間の設定に従って設定されており，アクセス制御機能を使用している文書空間では，デフォルトの設定としてアクセス制御機能付き検索モードが設定されています。変更する場合は，CdbrEqlStatement::ChangeACLModeメソッドで，アクセス制御機能なし検索モードに変更してください。

アクセス制御機能なし検索モードで検索を実行した場合，ユーザはパーミッションに関係なくオブジェクトを参照できます。したがって，文書空間の設計や文書管理の運用方法を決定する時に，セキュリティについて考慮しておくことが必要です。

なお，アクセス制御機能を使用していない文書空間では，アクセス制御機能付き検索モードを設定しても，アクセス制御機能なし検索モードに強制的に切り替わります。

(4)　アクセス制御機能付き検索を実行する場合の制限事項

アクセス制御機能付き検索を実行する場合の制限事項については，「4.8.4　アクセス制御機能付き検索を実行する場合の制限事項」を参照してください。

3.15.9　アクセス制御機能に関する操作

アクセス制御機能を使用するため，アクセス制御情報を操作する場合に使用するメソッドと，そのメソッドの発行順序の例を説明します。

ここでは，次の操作について説明します。

ACFlagの設定

ACE，ACLの作成と設定

文書またはコンテナへのACLの設定

パブリックACLの作成

文書またはコンテナへのパブリックACLの設定

文書またはコンテナへのパブリックACLのバインド

なお，これらの操作を実行する前に，まず，文書空間と接続してトランザクションを開始してください。

それぞれの操作に使用するメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　ACFlagの設定

(2)　ACE，ACLの作成と設定

(3)　文書またはコンテナへのACLの設定

(4)　パブリックACLの作成

(5)　文書またはコンテナへのパブリックACLの設定

(6)　文書またはコンテナへのパブリックACLのバインド

(1)　ACFlagの設定

ACFlagは，クラスライブラリのオブジェクトのプロパティである，dbrProp_OwnerPermissionプロパティ，dbrProp_PrimaryGroupPermissionプロパティおよびdbrProp_EveryonePermissionプロパティとして設定します。これらの設定方法は，ほかのプロパティの設定方法と同じです。プロパティの設定については，「2.6.6　プロパティの操作」を参照してください。

ただし，ACFlagが設定できるのは，設定しようとしているクラスライブラリのオブジェクトの所有者，セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。

(2)　ACE，ACLの作成と設定

ACEは，可変長配列の個々の要素を表すCdbrCompoundクラスのオブジェクトのプロパティとして設定します。それぞれ，サブジェクトをdbrProp_Subjectプロパティに，サブジェクト種別をdbrProp_SubjectTypeプロパティに，パーミッションをdbrProp_Permissionプロパティに設定します。

ACLは可変長配列を表すVariableArray型プロパティです。CdbrVariableArrayクラスのオブジェクトとして作成します。

ここでは，CdbrDocumentオブジェクトとして作成した文書に対して，USER_Aというユーザ識別子を持つユーザに参照更新権を設定する場合について説明します。

準備

ローカルACLを設定するオブジェクトのOIIDを検索などによってあらかじめ取得しておきます。検索については，「4.　オブジェクトの検索」を参照してください。

CdbrCompoundクラスのオブジェクトのACEを表すプロパティ（dbrProp_Subjectプロパティ，dbrProp_SubjectTypeプロパティ，dbrProp_Permissionプロパティ）に，それぞれサブジェクト，サブジェクト種別，パーミッションを設定します。

1.で作成したCdbrCompoundオブジェクトを，CdbrVariableArrayクラスのオブジェクトの要素として設定します。

2.をSDBR_PROP構造体のuniValue.ppObjectに設定します。

3.をSDBR_PROPLIST構造体に格納して，PutPropertyValuesメソッドの引数として，メソッドをコールします。

ACE，ACLを作成して，オブジェクトのローカルACLとして設定するコールシーケンスの例を次に示します。

ACE，ACLを作成して，オブジェクトのローカルACLとして設定するコールシーケンス

// 変数DocumentはCdbrDocumentクラスから作成した文書
SDBR_PROP     Prop;
SDBR_PROPLIST PropList;
Dmapv         pObj;
CdbrCompound ACE;
CdbrVariableArray  ACL(DBR_DATATYPE_COMPOUND);
pSession->Begin();
Document.SetOIID(pSession, pOIID);
// ACEにサブジェクト，サブジェクト種別およびパーミッションを設定する
ACE.SetValue(&dbrProp_Subject, "USER_A");
ACE.SetValue(&dbrProp_SubjectType, DBR_SUBJECTTYPE_USR);
ACE.SetValue(&dbrProp_Permission, DBR_PERM_READ_WRITE);
// ACLの要素数を1にして，ACEをACLに格納する
ACL.Resize(1);
ACL.SetValue(0,ACE);
// ACLをプロパティ構造体に設定する
Prop.PropId = dbrProp_ACL;
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &ACL;
Prop.uniValue.ppObject = &pObj;
// プロパティ構造体の値（＝ACL）をDMAオブジェクトに設定する
PropList.pItem = &Prop;
PropList.lCount = 1;
Document.PutPropertyValues(&PropList);
Document.ReleaseObject();
pSession->Commit();

(3)　文書またはコンテナへのACLの設定

VariableArray型プロパティであるACLを文書またはコンテナのローカルACLに設定する場合は，PutPropertyValuesメソッドをコールして設定します。操作の詳細については，「2.6.7　VariableArray型プロパティの操作」を参照してください。

ただし，ACLをオブジェクトに設定できるのは，ローカルACLを設定しようとしている文書やコンテナの所有者，セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。

(4)　パブリックACLの作成

パブリックACLは，文書やコンテナなどのオブジェクトと同じように，CreateObjectメソッドをコールして作成します。メソッドの発行順序については，「3.2.3(1)　文書の作成」を参照してください。ここでは，パブリックACLを作成する場合の準備について示します。

準備

オブジェクトの構成要素になるDMAオブジェクト作成用のクラス識別子を指定した構造体（SDBR_DMAINFO構造体）を作成しておきます。

このとき，ClassIdにはedmClass_PublicACLクラスのクラス識別子を指定します。これ以外のクラスは指定できません。

また，設定するACLをプロパティ構造体（SDBR_PROP）に設定して，プロパティリスト構造体（SDBR_PROPLIST）に設定します。これを，SDBR_DMAINFO構造体に設定しておきます。

(5)　文書またはコンテナへのパブリックACLの設定

作成したパブリックACLを文書やコンテナからバインドする場合の操作について説明します。

ここでは，CdbrDocumentオブジェクトからパブリックACLをバインドする場合について説明します。

なお，パブリックACLをオブジェクトにバインドできるのは，バインドしようとしているオブジェクトの所有者，セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。

準備

パブリックACL（CdbrPublicACLオブジェクト）の構成要素であるedmClass_PublicACLクラスのオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。

CdbrCompoundクラスのオブジェクトのdbrProp_ACLIdElemプロパティに，バインドするパブリックACLのOIIDを設定します。

VariableArray型プロパティとして，CdbrVariableArrayオブジェクトの構成要素に1.を設定します。

2.をSDBR_PROP構造体のuniValue.ppObjectに設定します。このプロパティ構造体を，SDBR_PROPLIST構造体に設定して，PutPropertyValuesメソッドをコールします。

パブリックACLをCdbrDocumentオブジェクトからバインドするコールシーケンスの例を次に示します。

CdbrDocumentオブジェクトにパブリックACLを設定するコールシーケンス

SDBR_PROP     Prop;
SDBR_PROPLIST PropList;
Dmapv         pObj;
CdbrDocument  Document;
CdbrCompound  PublicACLOIID1,PublicACLOIID2;
CdbrVariableArray  Varray(DBR_DATATYPE_COMPOUND);
pSession->Begin();
Document.SetOIID(pSession, pOIID);
//パブリックACLのOIIDを可変長配列の要素として指定する
PublicACLOIID1.SetValue(&dbrProp_ACLIdElem,pPubOIID1);
PublicACLOIID2.SetValue(&dbrProp_ACLIdElem,pPubOIID2);
//VariableArrayプロパティの要素数を設定する
Varray.Resize(2):
//要素を設定する
Varray.SetValue(0,PublicACLOIID1);
Varray.SetValue(1,PublicACLOIID2);
//OIIDリスト（VariableArray型プロパティ）を
//プロパティ構造体に設定する
Prop.PropId = dbrProp_PublicACLIds,
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &Varray;
Prop.uniValue.ppObject = &pObj;
//プロパティ構造体の値をCdbrDocumentオブジェクトに設定する
PropList.pItem = &Prop;
PropList.lCount = 1;
Document.PutPropertyValues(&PropList);
Document.ReleaseObject();
pSession->Commit();

(6)　文書またはコンテナへのパブリックACLのバインド

文書やコンテナがすでにパブリックACLをバインドしている場合，PutPropertyValuesメソッドによってパブリックACLを追加すると，それまでバインドしていたパブリックACLはアンバインドされます。

ここでは，文書やコンテナに設定された既存のパブリックACLに，ほかのパブリックACLを追加してバインドする場合の操作について説明します。

ここでは，CdbrDocumentオブジェクトにパブリックACLを追加してバインドする場合について説明します。

なお，パブリックACLをオブジェクトからバインドできるのは，バインドしようとしているオブジェクトの所有者，セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。

準備

パブリックACL（CdbrPublicACLオブジェクト）の構成要素であるedmClass_PublicACLクラスのオブジェクトのOIIDを，検索などによってあらかじめ取得しておきます。

CdbrDocumentオブジェクトに接続します。
CdbrDocument::SetOIIDメソッドまたはCdbrDocument::ConnectObjectメソッドをコールします。

CdbrDocumentオブジェクトとCdbrPublicACLオブジェクトをバインドします。
CdbrDocument::BindPublicACLメソッドをコールします。
これによって，CdbrDocumentオブジェクトとCdbrPublicACLオブジェクトがバインドされ，CdbrDocumentオブジェクトのVariableArray型プロパティであるdbrProp_PublicACLIdsプロパティにOIIDが設定されます。

CdbrDocumentオブジェクトにパブリックACLをバインドするコールシーケンス

pSession->Begin();
//…
//検索によってバインドするパブリックACLのOIIDを取得する
//…
CdbrDocument Document;
pDmaString_T ppIdList[2];
DmaInteger32 lIdListCount;
//CdbrDocumentオブジェクトに接続する
Document.SetOIID(pSession, pOIID);
//CdbrDocumentオブジェクトとパブリックACLをバインドする
lIdListCount = 2;
ppIdList[0] = pPubOIID1;
ppIdList[1] = pPubOIID2;
Document.BindPublicACL(lIdListCount,ppIdList);
Document.ReleaseObject();
pSession->Commit();

3.15.10　アクセス制御と排他制御の関係

ここでは，アクセス制御と排他制御の関係について説明します。

＜この項の構成＞

(1)　アクセス権判定時に設定されるロック

(2)　アクセス制御情報の参照，更新時に設定されるロック

(1)　アクセス権判定時に設定されるロック

作成したオブジェクトに対してメソッドをコールすると，DocumentBrokerではオブジェクトの操作に必要なロックを設定して処理します。アクセス制御では，まず，クラスライブラリのオブジェクトに対してロックを設定してから，ACFlag，パブリックACLおよびローカルACLを参照して，アクセス権を判定します。

ACFlagおよびローカルACLは，クラスライブラリのオブジェクトのプロパティとして設定されています。したがって，アクセス権判定でこれらを参照するとき，ACFlagおよびローカルACLには，オブジェクトに設定されているロックと同じ種類のロックが設定されます。

また，アクセス権判定でパブリックACLを参照する場合は，参照するパブリックACLにreadロックを設定します。

注意

オブジェクトの排他制御では，メソッドをコールした時点で，アクセス権判定の前にオブジェクトに対してロックが設定されます。このロックは，アクセス権がないためにメソッドがアクセスエラーになっても解除されません。アクセスエラーが発生した場合は，ロールバックをするか，トランザクションを終了してロックを解除してください。

(2)　アクセス制御情報の参照，更新時に設定されるロック

GetPropertyValuesメソッドなどのプロパティを参照するメソッドによってACFlagやACLなどのアクセス制御情報を参照する場合や，PutPropertyValuesメソッドによってアクセス制御情報を更新する場合，アクセス制御情報をプロパティとして設定してあるクラスライブラリのオブジェクトに対してロックを設定します。このロックの設定方法には，次の2種類があります。

ユーザが明示的にreadロックまたはwriteロックを設定する場合

DocumentBrokerが暗黙的にメソッドの実行に必要なロックを設定する場合

次の手順でメソッドがコールされた場合の排他制御の関係を，表3-36に示します。

ユーザAがメソッドをコールしてオブジェクトのロックを設定する。

1.でユーザAがロックを設定したオブジェクトに対して，ユーザBがロックを設定するメソッドをコールする。

表3-36　コールするメソッドの種類とアクセス制御情報の排他制御の関係

ユーザAがコールした
メソッドの種類
ユーザBがコールしたメソッドの種類

readロックを設定するメソッド
writeロックを設定するメソッド
ACFlagまたはローカルACLを参照するメソッド
ACFlagまたはローカルACLを更新するメソッド
パブリックACLを参照するメソッド
パブリックACLを更新するメソッド
パブリックACLを削除するメソッド

readロックを設定するメソッド
○
×
○
×
○
△
×

writeロックを設定するメソッド
×
×
×
×
○
△
×

ACFlagまたはローカルACLを参照するメソッド
○
×
○
×
○
○
×

ACFlagまたはローカルACLを更新するメソッド
×
×
×
×
○
○
×

パブリックACLを参照するメソッド
○
○
○
○
○
×
×

パブリックACLを更新するメソッド
△
△
○
○
×
×
×

パブリックACLを削除するメソッド
×
×
×
×
×
×
×

（凡例）

○：排他されます。

×：排他されません。

△：アクセス権判定時にパブリックACLが参照されている場合は，排他されます。

参考

readロックまたはwriteロックにDBR_RLT_FOR_UPDATEを指定しても，この表で説明している排他制御の関係は変わりません。DBR_RLT_FOR_UPDATEについては，「3.14.1　ロックの概要」を参照してください。

パブリックACLに対するメソッドが排他制御されるのは，アクセス権判定のときにパブリックACLの内容が参照されている場合です。つまり，ユーザAがあるオブジェクトを参照しようとしたときに，ユーザ権限やACFlagの内容でアクセス権が確認できず，パブリックACLの内容を参照してアクセス権判定を行った場合，そのパブリックACLにはユーザAによってreadロックが設定されます。このとき，ユーザBはパブリックACLの内容を更新できません。

また，パブリックACLをユーザAが更新している場合に，パブリックACLによるアクセス権判定が必要なメソッドをユーザBがコールすることはできません。パブリックACLを削除するときには，このパブリックACLをバインドしているオブジェクトにもwriteロックが設定されます。

4.　オブジェクトの検索

この章では，オブジェクトを検索する方法について説明します。

DocumentBrokerでは，SQLに準じた構文規則を持つedmSQLを使用してオブジェクトを検索できます。この検索では，プロパティの値を指定した検索や，検索タームを指定した検索が実行できます。

＜この章の構成＞

4.1　検索の概要

4.2　検索の種類

4.3　検索対象になるクラスおよびプロパティ

4.4　全文検索の対象になる文書の作成

4.5　edmSQLの文法

4.6　edmSQLの指定例

4.7　edmSQLの障害対策とデバッグ

4.8　edmSQL検索での留意事項

4.1　検索の概要

この節では，DocumentBrokerで提供する検索機能の概要について説明します。

＜この節の構成＞

4.1.1　DocumentBrokerでの検索

4.1.2　edmSQLとは

4.1.3　検索とアクセス制御

4.1.4　edmSQL検索の流れ

4.1.1　DocumentBrokerでの検索

DocumentBrokerで作成した文書やコンテナを表すオブジェクトは，データベースに格納されます。

既存のオブジェクトを操作するためには，そのオブジェクトの情報（プロパティ）を取得して，オブジェクトに接続する必要があります。

オブジェクトの情報を取得するには，次のような方法があります。

検索を実行するメソッドをコールする方法
OIIDを知らない場合でも，そのオブジェクトについて知っている情報を検索条件に指定して，検索を実行してオブジェクトの情報を取得できます。DocumentBrokerでは，検索条件を指定する検索の実行方法として，次の方法を提供しています。

CdbrEqlStatementクラスの機能を使用してedmSQL文によって検索条件を設定する検索

プロパティを取得するメソッドをコールする方法
すでにOIIDを知っているオブジェクトの場合は，そのOIIDを指定してオブジェクトと接続して，OIID以外のプロパティを取得できます。プロパティを取得するメソッドとしては，GetPropertyValuesメソッドなどのほか，一覧取得メソッドにも同時にプロパティを取得できるものがあります。例えば，コンテインメントの一覧を取得したり，リレーションの一覧を取得したりすることで，コンテインメントやリレーションをたどったオブジェクトの検索ができます。
プロパティを取得するメソッドについては，「2.6.6(4)　プロパティの取得」を参照してください。また，それぞれのメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

この章では，CdbrEqlStatementクラスの機能で検索を実行する場合の方法と，検索条件を設定するためのedmSQL文の概要について説明します。

4.1.2　edmSQLとは

edmSQLとは，クラスライブラリのオブジェクトを検索するための手段としてDocumentBrokerが提供する検索方法です。SQLの文法に関する知識を活用して，DocumentBrokerでのオブジェクトの検索ができます。なお，これ以降，このマニュアルでは，edmSQLを使用した検索を，edmSQL検索といいます。また，edmSQLに従って記述した条件式を，edmSQL文といいます。

edmSQLには，次のような特長があります。

文書管理で使用する概念に基づいた検索条件を指定できます。
edmSQLでは，DocumentBrokerの文書管理で使用するクラス名やプロパティ名を使用して，検索条件を指定できます。

データベース標準問い合わせ言語であるSQLに基づいた文法です。
edmSQLの文法は，標準的なSQLの文法に基づいています。SQLの文法に関する知識を活用してedmSQL文を作成できます。

クラスライブラリと違和感なく組み合わせて使用するためのインターフェースが提供されています。
クラスライブラリのほかのクラスやメソッドと違和感なく組み合わせて使用するために，CdbrEqlStatementクラスを提供しています。

デバッグ情報を取得できます。
edmSQL検索のデバッグ情報を取得できます。

なお，edmSQLの検索モデルは，DMAのQuery Modelに基づきますが，拡張機能のサポートなどに伴い，一部DMAの仕様と異なる部分があります。

4.1.3　検索とアクセス制御

アクセス制御機能を使用している環境の場合，検索結果として取得される情報に対して，アクセス制御ができます。アクセス制御情報は，検索対象のオブジェクトごとに設定できます。アクセス制御情報の詳細については，「3.15　アクセス制御」を参照してください。アクセス制御機能を実行するか実行しないかは，検索ごとに指定できます。

アクセス制御を実行すると，アクセス制御を実行しない場合に比べて，処理に時間がかかります。このため，検索結果に対してアクセス制御をするかしないかは，業務に応じて決定してください。

また，アクセス制御を実行する場合の検索には，次の制限があります。

アクセス制御の対象になるオブジェクトは，主問い合わせの検索対象であるオブジェクトだけです。したがって，副問い合わせの検索対象であるオブジェクトには，アクセス制御は適用されません。

アクセス制御は，オブジェクトを対象に実行されます。この場合の問い合わせはオブジェクトの識別性に基づいた検索になります。したがって，重複排除のようなオブジェクトのプロパティ値に基づく問い合わせ，集合関数のような統計演算をする検索，および複数のオブジェクトを一つのグループとする問い合わせは実行できません。

4.1.4　edmSQL検索の流れ

ここでは，edmSQL検索を実行する場合の検索の流れについて説明します。edmSQL検索の流れは，?パラメタを使用しない場合と使用する場合で異なります。

なお，それぞれのメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

＜この項の構成＞

(1)　?パラメタを使用しない場合のedmSQL検索の流れ

(2)　?パラメタを使用する場合のedmSQL検索の流れ

(3)　データが保持される期間

(1)　?パラメタを使用しない場合のedmSQL検索の流れ

?パラメタを使用しない場合のedmSQL検索の流れを次に示します。

CdbrEqlStatementオブジェクトを作成します。
CdbrEqlStatementオブジェクトは，newによって作成します。

CdbrEqlStatementオブジェクトを初期化します。
CdbrEqlStatement::Initializeメソッドをコールします。

実行するedmSQL文を設定します。
CdbrEqlStatement::Setメソッドをコールします。
edmSQLの文法については，「4.5　edmSQLの文法」を参照してください。

検索を実行します。
CdbrEqlStatement::Executeメソッドをコールします。

検索結果を取得します。
CdbrEqlStatement::GetResultメソッドをコールします。

edmSQL検索を終了します。
CdbrEqlStatement::Terminateメソッドをコールします。

CdbrEqlStatementオブジェクトを削除します。
CdbrEqlStatementオブジェクトは，deleteによって削除します。

(2)　?パラメタを使用する場合のedmSQL検索の流れ

?パラメタを使用する場合のedmSQL検索の流れを次に示します。

CdbrEqlStatementオブジェクトを作成します。
CdbrEqlStatementオブジェクトは，newによって作成します。

CdbrEqlStatementオブジェクトを初期化します。
CdbrEqlStatement::Initializeメソッドをコールします。

実行するedmSQL文を設定します。
CdbrEqlStatement::Setメソッドをコールします。
edmSQLの文法については，「4.5　edmSQLの文法」を参照してください。

edmSQL文中の?パラメタの値を設定します。
CdbrEqlStatement::SetParamメソッドをコールします。
?パラメタの値としてOIIDを設定する場合は，CdbrEqlStatement::SetOIIDParamメソッドをコールします。
?パラメタの値としてDMAオブジェクトを設定する場合は，CdbrEqlStatement::SetObjParamメソッドをコールします。
edmSQL文中に?パラメタが複数存在する場合には，設定する?パラメタの数だけメソッドをコールしてください。

検索を実行します。
CdbrEqlStatement::Executeメソッドをコールします。

検索結果を取得します。
CdbrEqlStatement::GetResultメソッドをコールします。

同一のedmSQL文に対して，?パラメタの値を変更します。
コールするメソッドについては，4.と同様です。

?パラメタの値を変更した検索条件で，検索を実行します。
CdbrEqlStatement::Executeメソッドをコールします。

検索結果を取得します。
CdbrEqlStatement::GetResultメソッドをコールします。
なお，以降，変更する?パラメタの値の数だけ，7.～9.を繰り返し実行してください。

edmSQL検索を終了します。
CdbrEqlStatement::Terminateメソッドをコールします。

CdbrEqlStatementオブジェクトを削除します。
CdbrEqlStatementオブジェクトは，deleteによって削除します。

(3)　データが保持される期間

ここでは，edmSQL検索で設定したデータがどの時点まで保持されるかについて，説明します。

(a)　設定したedmSQL文および?パラメタの値

CdbrEqlStatement::Setメソッドで設定したedmSQL文は，次にSetメソッドをコールして異なるedmSQL文を設定するまで保持されます。

CdbrEqlStatement::SetParamメソッド，CdbrEqlStatement::SetOIIDParamメソッドおよびCdbrEqlStatement::SetObjParamメソッドで設定した?パラメタの値は，次にSetメソッドをコールするまで保持されます。

(b)　ロック種別・検索結果の取得個数・アクセス制御モード

設定したロック種別は，次にCdbrEqlStatement::ChangeLockTypeメソッドをコールするまで有効です。

検索結果の取得個数の指定は，次にCdbrEqlStatement::ChangeGetObjCountメソッドをコールするまで有効です。

アクセス制御モードは，次にCdbrEqlStatement::ChangeACLModeメソッドをコールするまで有効です。

4.2　検索の種類

ここでは，edmSQLで実現できる検索の種類について説明します。edmSQLでは，次に示す検索が実行できます。

属性検索

全文検索

全文検索機能付き文字列型プロパティを使用した全文検索

これらの検索は，組み合わせて指定することもできます。ここでは，それぞれの検索の概要について説明します。

また，edmSQL検索では?パラメタも使用できます。?パラメタを使用した検索の概要についても説明します。

＜この節の構成＞

4.2.1　属性検索

4.2.2　全文検索

4.2.3　全文検索機能付き文字列型プロパティを使用した全文検索

4.2.4　?パラメタを使用した検索

4.2.1　属性検索

属性検索とは，オブジェクトの一つまたは複数個のプロパティの値を指定して実行する検索です。例えば，「文書名」がプロパティとして設定されている文書に対して，「文書名が『SQL入門』である文書を探す」といった検索が実行できます。複数個のプロパティの値を指定する場合は，論理条件を指定して，「文書名が『SQL入門』で，かつ，出版社が『ABC出版』である文書を探す」といった検索もできます。

検索の対象として，Scalar型のプロパティのほか，VariableArray型のプロパティも指定できます。例えば，著者が複数人存在する可能性がある文書を管理するために，「著者」をVariableArray型プロパティで管理して，それぞれの「名前」をその要素のプロパティとして管理している場合，「『田中』という名前の著者が含まれる文書を探す」といった条件を指定した検索が実行できます。

4.2.2　全文検索

全文検索とは，登録した全テキストを対象に，キーワードとなる文字列（検索ターム）を一つまたは複数個指定して実行する検索です。例えば，「文書の中に『コンピュータ』が含まれる文書を探す」といった検索が実行できます。

また，全文検索には，検索条件に単語ではなく文章を指定できる検索もあります。これを概念検索といいます。概念検索では，検索条件に指定した文章（種文章）に近い概念を持つ（同じ単語が多く含まれる）文書が検索できます。

なお，全文検索を実行する場合は，HiRDB Text Search Plug-inが必要です。概念検索を実行する場合は，HiRDB Text Search Plug-inのほか，HiRDB Text Search Plug-in Conceptual Extensionが必要です。

全文検索の対象にする文書は，全文検索機能付き文書クラスを基に作成されている必要があります。全文検索機能付き文書クラスの作成方法については，「4.4.2　全文検索機能付き文書クラスの作成」を参照してください。

edmSQLでは，全文検索の次の機能を実現するための関数を提供しています。

プレーンテキストおよび構造を持った文書に対する全文検索

プレーンテキストおよび構造を持った文書に対する概念検索

検索結果にスコアを付ける全文検索

検索結果にハイライトタグの埋め込みをしてSGML形式で出力する全文検索

ここでは，これらの検索の概要と，edmSQLで提供する関数について説明します。関数についての詳細は，「4.5.9　関数指定の構文規則」を参照してください。

また，全文検索では，HiRDB Text Search Plug-inの機能によって，検索タームや種文章をそのまま指定する検索だけでなく，同義語や異表記を同時に検索したり，検索タームに重みを指定したりすることもできます。

これらの，全文検索で指定できる機能の概要についても説明します。

＜この項の構成＞

(1)　全文検索の種類

(2)　全文検索で指定できる機能

(1)　全文検索の種類

ここでは，全文検索の種類について説明します。

(a)　プレーンテキストに対する全文検索

プレーンテキストとは，構造を持たないテキスト形式の文書のことです。文書の全テキストに対して，一つまたは複数個の検索タームを指定した検索が実行できます。複数個の検索タームを指定する場合，それらの論理条件も指定できます。

例えば，「文書中に『コンピュータ』または『データベース』を含む文書」を検索したりできます。また，属性検索条件と組み合わせて，「文書のタイトル（プロパティ）が『データベース入門』であり，文書中に『コンピュータ』を含む文書」のような検索も実行できます。

また，検索タームとして指定した単語と完全一致または前方一致する単語を含む文書を検索したり，複数の単語をフレーズとして指定して，そのフレーズを含む文書を検索したりできます。

例えば，「文書中に『DocumentBroker』を含む文書」を検索したり，「文書中に『DocumentBroker Development Kit』というフレーズを含む文書」を検索したりできます。

この検索には，contains関数を使用します。

(b)　構造を持った文書に対する全文検索

プレーンテキストに対して実行できる全文検索に加えて，XML文書のような構造を持った文書に対しては，その構造を条件に指定した全文検索ができます。このような検索を構造指定検索といいます。

構造指定検索では，XML文書のように論理構造を持っている文書に対して，その構造を指定した検索が実行できます。例えば，「文書・章・節」という構造で定義されたXML文書に対して，「構造『章』の中に『XML』という単語が含まれる文書」などが検索できます。

また，構造に付けられた属性の値を指定した検索もできます。例えば，「文書・タイトル・本文」という構造で定義され，構造「タイトル」が「分類」という属性を持っているXML文書に対して，「構造『タイトル』の属性『分類』が『政治経済』である文書」などが検索できます。

さらに，複数の検索条件を指定するときに，それらの検索条件が特定の構造内に含まれることを指定することもできます。例えば，「文書・著者」という構造に，「所属」という構造と「名前」という構造が含まれるXML文書に対して，「特定の『文書・著者』という構造の中の，構造『所属』に『設計部』が含まれ，構造『名前』に『山田』が含まれる文書」などが検索できます。

この検索には，contains関数を使用します。

(c)　プレーンテキストに対する概念検索

全文検索を実行する時に，特定の検索タームを基に検索する以外に，「ある文章に似た内容の文書を検索したい」というような検索が実行できます。例えば，「リサイクルを含む環境問題」について書かれた文書を探したいときに，「ゴミのリサイクル」に関する文章を基に検索が実行できます。なお，以降このマニュアルでは，全文検索のうち概念検索だけに特有の説明については，概念検索と明記して，それ以外の全文検索と区別します。

概念検索は，edmSQLなどの検索条件に種文章を指定することで実行されます。ここでは，種文章に「…ゴミのリサイクルによって，資源が有効活用され，ゴミが減量化されます。…」という文字列を指定した場合の，概念検索の実行の流れを説明します。なお，種文章として指定できる容量は，5メガバイト以内です。

HiRDB Text Search Plug-in Conceptual Extensionの機能によって，種文章から特徴タームが抽出されます。
特徴タームとは，種文章に指定した文章から，漢字，かたかな，およびアルファベットを抽出した単語です。
この例の場合は，「ゴミ」，「リサイクル」，「資源」，「有効活用」，「減量化」というような単語が抽出されます。

HiRDB Text Serach Plug-in Conceptual Extensionによって，1.の特徴タームに優先順位が付与された検索用特徴タームが選出されます。
検索用特徴タームの抽出基準については，HiRDB Text Search Plug-inの環境定義ファイルに指定します。詳細は，マニュアル「HiRDB Text Search Plug-in」を参照してください。

検索用特徴タームを検索タームとして，全文検索が実行されます。さらに，種文章との適合度順に，スコア値が設定されて，検索結果が出力されます。
概念検索では，この検索用特徴タームを基に，検索が実行されます。

なお，概念検索に指定する概念検索条件は，?パラメタを使用して指定する必要があります。

この検索には，concept_with_score関数を使用します。

(d)　構造を持った文書に対する概念検索

構造を持った文書に対して概念検索を実行する場合も，検索条件に構造が指定できます。例えば，「文書・章・節」という構造が定義されている文書に対して，「構造『章』の中に『…ゴミのリサイクルによって，資源が有効に活用され，…』という文章に似た概念を含んでいる文書を検索する」というような検索が実行できます。

この検索には，concept_with_score関数を使用します。

(e)　検索結果にスコアを付けて，スコア順にソートして取得できる全文検索

全文検索の検索結果には，スコアが付けられます。スコアの算出方法は，検索タームを指定する全文検索と，種文章を指定する概念検索で異なります。

検索タームを指定する全文検索の場合

スコアは，「検索結果として取得する文書の中に含まれる検索タームの数×検索タームに指定した重み×構造に指定した重み」の値として算出されます。ただし，検索条件に複数の検索タームの論理条件を指定したり，近傍検索条件を指定したりする場合，スコアの算出方法は異なります。

スコアの算出方法の詳細については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

この検索には，contains_with_score関数を使用します。スコア値はscore関数を使用して取得します。

種文章を指定する概念検索の場合

スコアは，種文章との適合度によって算出されます。適合度とは，種文章から抽出した，検索用特徴タームが，検索結果に含まれる割合のことです。

また，種文章を検索した場合のスコアを100として，スコアを正規化して算出することもできます。

スコアの算出方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

この検索には，concept_with_score関数を使用します。スコア値はscore_concept関数を使用して取得します。

(f)　検索結果にハイライトタグの埋め込みをしてSGML形式で出力する検索

全文検索の実行時に，検索結果として検索タームがハイライト表示されるSGML形式のファイルを出力します。例えば，「ネットワーク」という検索タームが含まれるテキスト形式の文書を検索する場合に，検索結果と同時に「<STRONG>」というハイライト表示用タグが埋め込まれたSGML形式のファイルを出力できます。

なお，検索結果として取得するハイライト表示用の文書は，検索対象である文書とは異なる文書として作成されます。

次に，検索対象文書とハイライト表示用文書の例を示します。

検索対象文書

<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
ネットワーク変更については，添付資料を参照してください。
</body>

検索結果として取得するハイライト表示用の文書

<!DOCTYPE body SYSTEM "DOC.dtd">
<body>
<p>
連絡事項
<note>
<STRONG>ネットワーク</STRONG>変更については，添付資料を参照してください。
</body>

(2)　全文検索で指定できる機能

edmSQLでは，全文検索条件として，HiRDB Text Search Plug-inの規則に従った検索条件が指定できます。HiRDB Text Search Plug-inでは，単純文字列としての検索タームおよび種文章のほか，検索タームを展開したり，重みを設定したりする指定ができます。ここでは，これらの全文検索条件に指定できる機能の概要について説明します。

edmSQLでは，これらの指定は全文検索を実行する関数の引数として指定します。指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

ここでは，概要を説明します。

(a)　検索タームの異表記を検索対象にした検索（異表記展開指定）

異なる表記方法で表記された検索タームを含む文書も検索条件に指定できる検索です。

検索タームに指定したかたかなの異表記を含む文書を検索したり，全角アルファベットの大文字・小文字の異表記を含む文書を検索したり，アルファベットの全角・半角の異表記を含む文書を検索したりできます。例えば，検索ターム「バイオリン」を検索するときに，「ヴァイオリン」のように表記されている文書も検索できます。また，検索ターム「Ski」を検索するときに，「ski」や「Ｓｋｉ」のように表記されている文書も検索できます。

異表記展開検索では，データベースで決められた規則に従って，検索タームの異表記を含む文書を検索します。

(b)　検索タームの同義語を検索対象にした検索（同義語展開指定）

検索タームと同じ意味を持つ単語（同義語）を含む文書も検索条件に指定できる検索です。

例えば，検索ターム「Ski」を検索するときに，「スキー」を含む文書も一緒に検索できます。同義語展開検索では，あらかじめ作成してある同義語辞書を基に，検索タームの同義語を含む文書を検索します。

(c)　複数の検索ターム間の距離条件や出現順序を指定した検索（近傍条件指定）

複数の検索タームを指定した場合に，検索タームが出現する距離（文字数）を検索条件に指定できる検索です。

例えば，「『最新』と『技術』という検索タームを含み，これらの二つの単語が10文字以内に存在する文書」などが検索できます。この場合には，「最新印刷技術」や「最新の技術」などの文字列を含む文書が検索されます。

(d)　検索タームおよび構造に重みを付ける検索（重み指定）

検索タームに重み（重要度）を付ける検索です。重みを付けた検索とは，「『インターネット』および『データベース』が含まれる文書が検索したい。ただし，『インターネット』をより多く含む文書から取り出したいので，『インターネット』に『5』，『データベース』に『2』の重みを付けて検索する」のように指定する検索です。重みは構造にも付けられます。重みを付けた場合，スコアは重みによって算出されます。

概念検索では，重みは構造だけに指定できます。

(e)　種文章のスコアを100として，検索結果に相対的なスコアを付ける検索（概念検索のスコアオプション指定）

概念検索を実行する時に取得するスコア値を，正規化して取得する指定です。正規化した値は，種文章を検索した場合を100とした，相対的な値として算出されます。

(f)　構造の属性値を指定した検索（属性値指定）

構造を指定する場合に，その属性値も指定する検索です。

例えば，構造「文章」の属性「Author」に「Tanaka」を含む文書などが検索できます。

なお，概念検索では，属性値指定はできません。

(g)　複数の構造を対象にした検索条件を満たす構造が，ある特定の構造に含まれていることを指定する検索（特定構造検索指定）

複数の構造を対象にした検索を実行する場合に，その検索条件を満たす構造が，ある特定の構造に含まれていることを指定する検索です。構造「文章」の下位構造として「作成者」と「所属」がある場合に，特定の構造「文章」の構造「作成者」に「Tanaka」が含まれ，かつ構造「所属」に「営業部」が含まれる文書などが検索できます。

なお，概念検索では，特定構造検索指定はできません。

4.2.3　全文検索機能付き文字列型プロパティを使用した全文検索

ここでは，全文検索機能付き文字列型プロパティを使用した全文検索について説明します。なお，全文検索機能付き文字列型プロパティを使用するにはHiRDB Text Search Plug-inが必要です。

＜この項の構成＞

(1)　全文検索機能付き文字列型プロパティとは

(2)　全文検索機能付き文字列型プロパティの全文検索

(3)　全文検索機能付き文字列型プロパティに対応しているクラスおよびメソッド

(1)　全文検索機能付き文字列型プロパティとは

全文検索が実行できる文字列型プロパティのことを全文検索機能付き文字列型プロパティといいます。全文検索機能付き文字列型プロパティを使用すると，edmSQLで次に示す検索条件を指定して文書の検索ができます。

指定した文字列がプロパティの値に含まれているか

指定した文字列を異表記展開した文字列がプロパティの値に含まれているか

指定した文字列を同義語展開した文字列がプロパティの値に含まれているか

指定した文字列の距離（文字数）が指定の距離内にあるか

また，これらの検索条件をANDまたはORで結ぶことができます。

(2)　全文検索機能付き文字列型プロパティの全文検索

edmSQLを使用して全文検索機能付き文字列型プロパティの値を取得する場合は，SELECT句にextracts関数を指定してください。また，全文検索機能付き文字列型プロパティを全文検索する場合は，WHERE句にcontains関数を指定してください。

全文検索機能付き文字列型プロパティを使用した全文検索の例を次に示します。

［例］

全文検索機能付き文字列型プロパティusrProp_DocSummaryに対応する文書中に，「コンピュータ」を同義語展開した文字列があるかどうかを検索し，文字列があればそのテキストデータを抽出します。

edmSQLの指定例

SELECT extracts(usrProp_DocSummary)
 FROM   usrClass_PropTextSearch
 WHERE  contains(usrProp_DocSummary,'{SYNONYM(myDic, "コンピュータ")}') is true

注　usrClass_PropTextSearchはdmaClass_DocVersionクラスのサブクラスです。

注意

全文検索機能付き文字列型プロパティはextracts関数またはcontains関数の第一引数に指定してください。それ以外の個所には指定できません。

(3)　全文検索機能付き文字列型プロパティに対応しているクラスおよびメソッド

全文検索機能付き文字列型プロパティに対応しているクラスおよびメソッドを次の表に示します。

表4-1　全文検索機能付き文字列型プロパティに対応しているクラスおよびメソッド

対応しているクラス
対応するメソッド

CdbrVersionableDocument

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrDocument

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrReferentialContainer

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrConfiguratedReferentialContainer

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrVersionTraceableContainer

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrIndependentPersistence

CreateObject

GetPropertyValues

GetPropertyValuesAndLock

PutPropertyValues

CdbrEqlStatement

すべてのメソッド

4.2.4　?パラメタを使用した検索

業務によっては，検索条件のうち，一部の定数値だけを変更して繰り返し同じ検索を実行したい場合があります。このような場合に，?パラメタを使用できます。

例えば，文書の作成日がプロパティとして設定されている場合に，作成日の値だけを「20000103」，「20000104」,「20000105」と変更して検索したい場合があります。このような，検索条件の特定の個所だけ変更して繰り返し検索を実行する場合に，このパラメタが使用できます。この検索では，検索条件式の作成日の値には「?」を設定しておきます。実行するたびに変更する値については別のパラメタとして指定します。これによって，複数の検索に対して一つの検索条件式を繰り返し使用でき，2回目以降の検索にかかる処理時間を短縮できます。このパラメタを，?パラメタといいます。

なお，?パラメタを使用した検索はedmSQL検索だけで実行できます。

4.3　検索対象になるクラスおよびプロパティ

この節では，edmSQL検索の対象になるクラスとプロパティについて説明します。

＜この節の構成＞

4.3.1　検索対象になるクラス

4.3.2　検索結果として取得できるプロパティ

4.3.3　検索条件に指定できるプロパティ

4.3.1　検索対象になるクラス

検索では，DMAクラスを検索対象として指定します。DMAクラスを指定すると，文書空間内に存在する，そのクラスを基に作成されているすべてのオブジェクトが，検索の対象になります。

例えば，DMAクラスのusrClass_DocVersionクラス（dmaClass_DocVersionクラスのサブクラス）を検索対象に指定すると，そのクラスを基に作成されたDocVersionオブジェクトを構成要素とする，バージョン付き文書およびバージョンなし文書（またはバージョン付き文書の1バージョン）がすべて検索対象になります。

edmSQL文で検索条件を指定する場合，FROM句に検索対象にするDMAクラスを指定します。

検索対象には，複数のクラスを結合して指定することもできます。実現できる結合の種類は，データベースによって異なります。

edmSQLでは，次の種類の結合ができます。

内部結合（INNER JOIN）

左外部結合（LEFT OUTER JOIN）

検索対象として指定できるのは，次のクラスまたはそのサブクラスとしてユーザがデータベースに登録したクラスです。

dmaClass_ConfigurationHistoryクラス

dmaClass_Containerクラス

dmaClass_DirectContainmentRelationshipクラス

dmaClass_DocVersionクラス

dmaClass_ReferentialContainmentRelationshipクラス

edmClass_ComponentDocVersionクラス

edmClass_ContainerVersionクラス

edmClass_ContentSearchクラス

edmClass_Relationshipクラス

edmClass_VersionTraceableContainerクラス

edmClass_VersionTraceableContainmentRelationshipクラス

edmClass_VersionTracedComponentDocVersionクラス

edmClass_VersionTracedDocVersionクラス

edmClass_PublicACLクラス（アクセス制御機能を使用している環境の場合）

これらのクラスは，検索対象として，DocumentBrokerサーバのメタ情報ファイル（edms.ini）に検索可能なクラスとして登録されています。

4.3.2　検索結果として取得できるプロパティ

検索結果としては，検索条件に合ったオブジェクトのプロパティが取得できます。取得できるプロパティは，DMAが規定したプロパティ（dmaProp_またはedmProp_で始まるプロパティ）や，ユーザが定義したプロパティなどです。

edmSQL文で検索条件を指定する場合，検索結果として取得するプロパティは，SELECT句に指定します。データベース上のデータである検索結果は，データ型ごとに対応するクラスライブラリのデータ型に変換されて，構造体の形式で取得できます。検索結果として指定した項目が一つで，検索結果として取得した件数が一つの場合，検索結果は，直接そのプロパティのデータ型の値として扱えます。また，検索結果の件数が複数の場合は，そのデータ型の値の集合として扱えます。これらの値は，副問い合わせの評価値として，述語や演算子にも使用できます。

検索結果として取得できるプロパティは，永続プロパティ（データベースに存在するプロパティ）またはVariableArray型プロパティで，かつプロパティ定義に「dmaProp_IsSelectable = bool = 1」と指定されているプロパティです。

4.3.3　検索条件に指定できるプロパティ

検索対象に指定したクラスのオブジェクト集合から必要な検索結果だけを絞り込んで取得したり，複数の検索対象クラスを指定するときにどのような条件で結合するかを指定したりする場合，検索条件を指定します。

検索条件は，WHERE句やFROM句のON節に指定できます。検索条件には，検索条件の対象になるデータ型に従って，四則演算などを指定するための演算，比較演算子などを指定するための述語，全文検索などを指定するための関数を指定します。

検索条件に指定できるプロパティは，永続プロパティ（データベースに存在するプロパティ）またはVariableArray型プロパティで，かつプロパティ定義に「dmaProp_IsSearchable = bool = 1」と指定されているプロパティです。

4.4　全文検索の対象になる文書の作成

ここでは，全文検索の対象になるクラスとその作成方法について説明します。

DocumentBrokerでは，全文検索に必要なプロパティを持ったクラスを基に作成した文書に対してだけ全文検索を実行できます。また，すべての形式（レンディションタイプ）の文書に対して全文検索が実行できますが，全文検索をする文書に対応するテキストデータを基に，全文検索インデクスをあらかじめ作成，登録しておく必要があります。この全文検索インデクスは，文書の形式によって，作成方法が異なります。

ここでは，全文検索の対象になる文書および全文検索インデクスの作成方法について説明します。

＜この節の構成＞

4.4.1　全文検索対象文書の作成手順

4.4.2　全文検索機能付き文書クラスの作成

4.4.3　全文検索インデクスの作成

4.4.4　全文検索インデクスの削除

4.4.5　注意事項

4.4.1　全文検索対象文書の作成手順

全文検索の対象となる文書は，次のように登録します。

全文検索機能付き文書クラスを作成します。
全文検索機能付き文書クラスの作成方法については，「4.4.2　全文検索機能付き文書クラスの作成」を参照してください。

CdbrDocumentクラスまたはCdbrVersionableDocumentクラスのCreateObjectメソッドをコールして，全文検索が可能なクラスライブラリのオブジェクトを作成します。
CreateObjectメソッドの引数には，1.で作成した全文検索機能付き文書クラスのクラス識別子を指定します。
また，このとき，全文検索に必要なデータの構文解析情報を同時に作成するかどうか，指定できます。
全文検索に必要なデータ（全文検索インデクス）の作成方法については，「4.4.3　全文検索インデクスの作成」を参照してください。

4.4.2　全文検索機能付き文書クラスの作成

ここでは，全文検索の対象になる文書の基になるクラスの作成方法について説明します。

＜この項の構成＞

(1)　全文検索機能付き文書クラスとは

(2)　全文検索機能付き文書クラスに追加するプロパティ

(3)　概念検索機能付き文書クラスに追加するプロパティ

(1)　全文検索機能付き文書クラスとは

全文検索は，全文検索機能を持ったクラスを基に作成された文書に対して実行できます。

全文検索に必要な機能を持ったプロパティを追加したdmaClass_DocVersionクラスのサブクラスを，全文検索機能付き文書クラスといいます。

また，全文検索のうち，概念検索の対象になるクラスについては，全文検索用の機能を持ったプロパティのほか，概念検索用の機能を持ったプロパティも追加します。全文検索機能付き文書クラスのうち，概念検索に必要な機能を持ったプロパティを追加したdmaClass_DocVersionクラスのサブクラスを特に，概念検索機能付き文書クラスといいます。

クラスライブラリで全文検索の対象になるオブジェクトを作成する場合は，全文検索機能付き文書クラスまたは概念検索機能付き文書クラスを，次に示すクラスライブラリのオブジェクトの構成要素として指定します。

CdbrVersionableDocumentクラス

CdbrDocumentクラス

(2)　全文検索機能付き文書クラスに追加するプロパティ

全文検索機能付き文書クラスを作成する場合には，次のプロパティを追加する必要があります。

全文検索インデクス用プロパティ

edmProp_Scoreプロパティ

edmProp_RawScoreプロパティ

edmProp_DocLengthプロパティ

edmProp_ContentIndexStatusプロパティ

プロパティの追加方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

次に，全文検索インデクス用プロパティと，edmProp_ContentIndexStatusプロパティについて説明します。

全文検索インデクス用プロパティ

全文検索インデクス用プロパティには，表4-2に示す5種類があります。作成する文書で実現したい全文検索の種類によって，これらのプロパティを使い分けてください。なお，このマニュアルでは，以降，これらのプロパティとして生成される全文検索用のインデクスを，全文検索インデクスと呼びます。

全文検索インデクス用プロパティの種類と，それぞれの全文検索インデクス用プロパティで実行できる全文検索の種類について，次の表に示します。

表4-2　全文検索インデクス用プロパティの種類

プロパティ
全文検索※
構造指定検索
概念検索

edmProp_TextIndex
（プレーンテキスト検索用全文検索インデクス）
○
×
×

edmProp_StIndex
（構造指定検索用全文検索インデクス）
○
○
×

edmProp_ConceptTextIndex
（プレーンテキスト検索用概念検索インデクス）
○
×
○

edmProp_ConceptStIndex
（構造指定検索用概念検索インデクス）
○
○
○

edmProp_Content
（Version 1互換用全文検索インデクス）
○
○
×

（凡例）

○：実行できます。

×：実行できません。

注※

プレーンテキストに対して検索タームを指定して実行する全文検索を示します（構造指定検索および概念検索を含みません）。

edmProp_ContentIndexStatusプロパティ

全文検索インデクスの登録状態を表すプロパティです。Integer32型のデータが設定されます。このプロパティの値は，DocumentBroker Text Search Index Loaderで使用されます。

全文検索インデクスの登録状態ごとに，DocumentBrokerによって次の表に示す値が設定されます。

表4-3　edmProp_ContentIndexStatusプロパティの内容

値 | 内容
0 | 文書が未登録です。
1 | 文書は登録されていますが，全文検索インデクスは作成されていません。
2 | 文書が登録されており，対応する全文検索インデクスも作成されています。
3 | 文書が更新されていますが，全文検索インデクスが更新されていないため，文書と全文検索インデクスが一致しません。
100以上 | エラー情報など，DocumentBroker Text Search Index Loaderが使用する値です。

(3)　概念検索機能付き文書クラスに追加するプロパティ

概念検索機能付き文書クラスを作成する場合には，次のプロパティを追加する必要があります。

全文検索インデクス用プロパティ（edmProp_ConceptTextIndexプロパティまたはedmProp_ConceptStIndexプロパティ）

edmProp_Scoreプロパティ

edmProp_RawScoreプロパティ

edmProp_DocLengthプロパティ

edmProp_ContentIndexStatusプロパティ

edmProp_ScoreConceptプロパティ

プロパティの追加方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

4.4.3　全文検索インデクスの作成

ここでは，全文検索インデクスの作成方法について説明します。全文検索インデクスとは，全文検索機能付き文書クラスに追加した全文検索インデクス用プロパティに格納される，全文検索の対象になるテキストデータです。

全文検索インデクスは，どの時点で作成するか，また，どのレンディションタイプを持つ文書に対して作成するかによって，作成方法が異なります。

＜この項の構成＞

(1)　全文検索インデクスの作成時点

(2)　レンディションタイプと全文検索インデクスの作成方法との対応

(3)　全文検索インデクスの作成方法

(1)　全文検索インデクスの作成時点

全文検索インデクスは，次のどちらかの時点で作成，登録できます。それぞれの特長について説明します。

文書の登録と同時に全文検索インデクスを作成・登録する
個々の文書の登録ごとに全文検索インデクスを作成します。大量の文書を登録するときにこの方法を利用すると，まとめて作成する場合に比べて処理時間がかかりますが，登録と同時に全文検索が実行できます。
また，新規に作成した文書の全文検索インデクスを，全文検索対象文書全体の全文検索インデクスとは別に，一時的なインデクスとして作成する方法もあります。ここで作成したインデクスを差分インデクスといい，差分インデクスを作成する機能を差分インデクス作成機能といいます。
差分インデクス作成機能を使用すると，全文検索インデクスの追加登録が高速に処理できます。ただし，個々の検索処理は差分インデクスを使用しない場合に比べて若干遅くなります。また，差分インデクスは，容量が増えた段階で，まとめて全体のインデクスに反映させる必要があります。
なお，マルチファイル管理機能を使用している場合は，文書の登録と同時に全文検索インデクスは作成できません。

文書の登録時には全文検索インデクスを作成しないで，あとで複数の文書の全文検索インデクスをまとめて作成・登録する（全文検索インデクスの遅延一括作成）
個々の文書作成時には全文検索インデクスを作成しないで，あとで大量の文書の全文検索インデクスをまとめて作成する方法です。これを，全文検索インデクスの遅延一括作成といいます。この機能を使用すると，文書ごとに全文検索インデクスを作成する場合に比べて，処理時間を短縮できます。ただし，文書登録と同時に全文検索を実行することはできません。

差分インデクスの作成には，HiRDB Text Search Plug-inの差分インデクス作成機能を使用します。差分インデクス作成機能を使用する場合は，インデクス情報ファイルに差分インデクス作成を定義する必要があります。インデクス情報ファイルの定義については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。差分インデクス作成機能の詳細については，マニュアル「HiRDB Text Search Plug-in」を参照してください。また，全文検索インデクスの遅延一括作成には，HiRDBのプラグインインデクスの遅延一括作成機能を使用します。全文検索インデクスを遅延一括作成する場合の環境設定および運用方法については，マニュアル「HiRDB　システム運用ガイド」の，プラグインインデクスの遅延一括作成機能についての説明を参照してください。

(2)　レンディションタイプと全文検索インデクスの作成方法との対応

DocumentBrokerでは，全文検索インデクスを持つすべての形式の文書に対して全文検索を実行できます。ただし，全文検索インデクスは，レンディションタイプで表される形式によって，作成方法が異なります。

レンディションタイプごとの全文検索インデクスの作成方法について説明します。

なお，バージョンなし文書およびバージョン付き文書の全文検索インデクスを作成する場合に，文書がマルチレンディション文書である場合には，マスタレンディションのレンディションタイプが対象になります。

特定のレンディションタイプを持つテキストファイルの全文検索インデクスの作成
特定のレンディションタイプとは，次のレンディションタイプです。

先頭が「MIME::text/」で始まるレンディションタイプ
例えば，「MIME::text/plain」や「MIME::text/sgml」などです。

MIME::application/x-edm-sgml

これらのレンディションタイプを持つ文書は，文書の登録時に，登録した文書のコンテントから自動的に全文検索インデクスが作成できます。また，文書登録後に登録されている文書のコンテントから全文検索インデクスを作成したり，文書のコンテント以外のファイルから作成した全文検索インデクスと関連づけたりすることもできます。

特定のレンディションタイプを持たない文書の全文検索インデクスの作成
前に示したレンディションタイプ以外の形式を持つ文書です。ビットマップなどのイメージデータや，Wordなどのアプリケーションプログラムで作成した文書などが該当します。
これらの文書は登録した文書のコンテントから全文検索インデクスを作成できません。この場合は，別に作成した全文検索インデクス作成用のテキストデータから，明示的に全文検索インデクスを作成して，登録した文書と関連づける必要があります。

なお，文書のコンテントから全文検索インデクスを作成した場合，レンディションタイプによって，可能な検索形式が異なります。レンディションタイプと，登録した文書のコンテントから作成した全文検索インデクスで可能な検索形式について，次の表に示します。

表4-4　全文検索文書として登録されるレンディションタイプと検索形式

レンディションタイプ
検索形式

「MIME::text/」で始まるレンディションタイプ
プレーンテキストの全文検索※

MIME::application/x-edm-sgml
プレーンテキストの全文検索
構造指定検索

注※

ただし，XMLインデクスデータ作成機能を使用してインデクスデータを作成，登録したXML文書に対しては，構造指定検索も実行できます。

(3)　全文検索インデクスの作成方法

ここでは，作成する時期およびレンディションタイプごとの作成方法を考慮した，全文検索インデクスの作成方法について説明します。作成方法には，作成時期および文書のレンディションタイプに応じて，次の3通りの作成方法があります。

文書を登録する時に，全文検索インデクスも同時に作成する方法
特定のレンディションタイプを持つ文書に対して，文書の作成と同時に全文検索インデクスを作成する方法です。ただし，この方法は，マルチファイル管理機能を使用しているバージョンなし文書およびバージョン付き文書では使用できません。

文書を登録する時には全文検索インデクスを作成しないで，全文検索インデクスだけあとから作成する方法
特定のレンディションタイプを持つ文書に対して，文書を作成したあとで全文検索インデクスだけ別に作成する方法です。マルチレンディション文書の場合は，特定のレンディションタイプをマスタレンディションのレンディションタイプとして持つ文書が対象になります。なお，オブジェクトのレンディションタイプは，必要に応じて登録後に変更できます。ただし，この方法は，マルチファイル管理機能を使用しているバージョンなし文書およびバージョン付き文書では使用できません。

アプリケーションプログラムで作成した形式の文書に対応する全文検索インデクスを，文書とは別に作成して登録する方法
特定のレンディションタイプを持たない文書に対して，文書とは別に作成した全文検索インデクスを関連づける方法です。

次の図に，それぞれの方法の概要を示します。

図4-1　全文検索インデクスの作成方法

それぞれの方法について説明します。

文書を登録する時に，全文検索インデクスも同時に作成する方法
文書を作成，登録する時に，CreateObjectメソッドの引数にDBR_CREATE_INDEXを指定する方法です。
なお，この場合，次の条件に合致する必要があります。

構成要素になるDMAオブジェクトを指定する引数に，全文検索機能付き文書クラスのクラス識別子を指定している

レンディションタイプが表4-4に示した形式である

なお，UpdateContentメソッドなどによって文書を更新する場合にも，同じように引数を指定することで，同時に全文検索インデクスが作成できます。

文書を登録する時には全文検索インデクスを作成しないで，全文検索インデクスだけあとから作成する方法
文書を作成，登録する時に，CreateObjectメソッドの引数にDBR_NOT_CREATE_INDEXを指定する方法です。このとき，全文検索インデクスは作成されません。登録済みの文書に対して，全文検索インデクスを作成するCreateIndexメソッドをコールします。
この方法を使用して，プラグインインデクスの遅延一括作成機能によって，全文検索インデクスをバッチ処理で作成することができます。
なお，この場合，全文検索インデクスを作成する文書は，構成要素のDMAオブジェクトが全文検索機能付き文書クラスのオブジェクトであり，かつレンディションタイプが表4-4の形式として登録されている必要があります。または，文書を登録するまたは更新する時点で表4-4の形式に変更することが必要です。
登録の手順を示します。

CreateObjectメソッドによって，文書を作成，登録します。文書を更新する場合は，UpdateContentメソッドまたはUpdateContentAndRenditionTypeメソッドによって，文書を更新します。

1.で登録した文書に対して，CreateIndexメソッドを使用して全文検索インデクスを作成します。

アプリケーションプログラムで作成した形式の文書に対応する全文検索インデクスを，文書とは別に作成して登録する方法
表4-4で示したレンディションタイプ以外の形式を持つ文書に対して，全文検索インデクスを作成したい場合に使用する方法です。アプリケーションプログラムで作成した文書に全文検索インデクスを付けたい場合に使用します。
Wordで作成した文書など，表4-4で示したレンディションタイプ以外の形式を持つファイルを文書として作成，登録した場合，引数にどの値を指定しても，全文検索インデクスは作成されません。この文書を全文検索の対象にしたい場合は，全文検索インデクスの作成対象とする文書（プレーンテキスト）を別に作成して，登録する必要があります。この場合は，ユーザプログラムによって，Wordなどのアプリケーションプログラムで作成した文書からテキストデータを抽出してください。
DocumentBrokerでは，すでに登録されている全文検索インデクスを持たない文書に対して，クライアント環境で作成した全文検索可能なデータを関連づけることができます。また，すでに全文検索インデクスを持つ文書に対して，異なる内容のファイルを利用して，全文検索インデクスを更新することもできます。
登録の手順を示します。ここでは，Wordで作成した文書を「文書B.doc」，これに対応する全文検索インデクスの作成対象とする文書を「文書B'.txt」とします。

Wordで作成した形式の文書「文書B.doc」と，この文書に対応する全文検索可能なレンディションタイプの文書「文書B'.txt」を作成します。
この処理は，ユーザプログラムで行ってください。

「文書B.doc」をCreateObjectメソッドまたはUpdateContentメソッドなどでDocumentBrokerの文書として作成，登録します。

手順2.で登録した文書に接続して，CreateIndexメソッドをコールします。このとき，引数のファイルパスにfile:プロトコルを使用した「文書B'.txt」のファイルパスを指定します。

これによって，「文書B'.txt」の内容を基に全文検索インデクスが作成され，「文書B.doc」の全文検索インデクスとして登録されます。

注意事項

DocumentBrokerでは，CreateIndexメソッドで登録するファイルの内容とすでに登録されている文書の実体との対応は管理しません。CreateIndexメソッドの引数に指定したファイルの内容と登録されている文書の内容の対応については，ユーザプログラムで管理してください。

4.4.4　全文検索インデクスの削除

全文検索インデクスは，RemoveIndexメソッドによって削除できます。このとき，文書そのものは削除されません。文書も同時に削除する場合は，RemoveObjectメソッドをコールしてください。

4.4.5　注意事項

次のメソッドをコールすると，メソッドの処理を終了する時に，RDエリア全体に排他ロックが設定されます。

全文検索インデクスを作成・削除するメソッド
CdbrDocumentクラスおよびCdbrVersionableDocumentクラスの次のメソッドに該当します。

CreateIndexメソッド

RemoveIndexメソッド

このため，これらのメソッドをコールしたあとには，CdbrSession::Commitメソッドをコールしてください。CdbrSession::Commitメソッドをコールしないで他テーブルに対して検索メソッドなどをコールすると，デッドロックが発生する可能性が高くなります。

4.5　edmSQLの文法

この節では，edmSQLの文法について説明します。

edmSQLで使用する文字列の長さやデータ型などは，データベースの制限に従います。DocumentBrokerで使用できるデータベースは，HiRDBです。

HiRDBのSQLで指定できる文字列の長さやデータ型の制限については，マニュアル「HiRDB　SQLリファレンス」を参照してください。

＜この節の構成＞

4.5.1　edmSQLの文法の概要

4.5.2　表記規則

4.5.3　使用できるデータ型と演算子・関数・述語の関係

4.5.4　字句規則

4.5.5　検索の実行単位の構文規則

4.5.6　問い合わせ式の構文規則

4.5.7　スカラー式表現の構文規則

4.5.8　述語の構文規則

4.5.9　関数指定の構文規則

4.5.10　データ操作の構文規則

4.5.1　edmSQLの文法の概要

ここでは，edmSQLの文法の概要として，次の項目について説明します。

データ型

字句規則

構文規則

＜この項の構成＞

(1)　データ型

(2)　字句規則

(3)　構文規則

(1)　データ型

edmSQLでは，クラスライブラリで扱えるデータ型のうち，Id型を除いたデータ型が使用できます。また，HiRDB Text Search Plug-inと連携した検索の検索条件などには，クラスライブラリでは扱えないBinary型のデータも扱えます。Binary型のデータは，クラスライブラリではString型の値として取得できます。

なお，それぞれのデータ型ごとに，表現形式や使用できる演算子・関数・述語などが決まっています。

データ型と演算子，関数および述語の関係については，「4.5.3　使用できるデータ型と演算子・関数・述語の関係」を参照してください。

(2)　字句規則

edmSQLでは，使用できる字句が定義されています。

定義されているのは，<区切り文字>，<トークン>，<キーワード>，<リテラル>，<識別子>，<名前>，<ID文字列>，<特殊なプロパティ>，<?パラメタ>および<OIID>です。

字句規則については，「4.5.4　字句規則」を参照してください。

(3)　構文規則

edmSQL文で指定できる構文は，SELECT文です。したがって，edmSQLでは，SELECT文の構文規則が定義されています。

(a)　構文の概要

検索の実行単位
検索は，edmSQLプログラム単位で実行されます。edmSQLプログラムは，一つのedmSQL文によって構成されています。edmSQLプログラムは，1回のCdbrEqlStatement::Setメソッドのコールで設定できる検索条件です。
edmSQL文に指定できるのは，問い合わせ文（SELECT文）だけです。
検索の実行単位については，「4.5.5　検索の実行単位の構文規則」を参照してください。

問い合わせ式（SELECT文）
問い合わせは，問い合わせ文によって表現します。
問い合わせ文には，SELECT句，FROM句，WHERE句，GROUP BY句，HAVING句およびORDER BY句が指定できます。最も単純な問い合わせ文は，SELECT句とFROM句から構成されます。
それぞれの句は，次のような要素で構成されています。

値

述語

関数

データ操作

問い合わせ表現については，「4.5.6　問い合わせ式の構文規則」を参照してください。

(b)　構文の詳細

SELECT文は，次のような要素で構成されます。

値（スカラー式）
値は，スカラー式として指定します。スカラー式によって，プロパティの指定やルーチンの起動，数値関数および集合関数によって得られる値を表現します。
値を表現するスカラー式については，「4.5.7　スカラー式表現の構文規則」を参照してください。

述語
FROM句のON条件，WHERE句，またはHAVING句に指定する検索条件は，述語によって表現します。述語では，比較述語，論理述語，Between述語，In述語，Like述語，Null述語およびExists述語で構成される検索条件が指定できます。
述語の結果は，「真」，「偽」または「不定」のどれかで得られます。
述語の表現については，「4.5.8　述語の構文規則」を参照してください。

関数
DocumentBrokerでは，基本的なSQLの文法では表現できないedmSQLでの拡張機能を，関数で表現します。
関数には，HiRDB Text Search Plug-inの機能を使用した検索を実現する関数と，DocumentBrokerで扱うオブジェクトや文字列の変換機能を実現する関数があります。
関数の表現については，「4.5.9　関数指定の構文規則」を参照してください。

データ操作
edmSQLで実行できるデータ操作とは，ORDER BY句による検索結果の並び替えです。
データ操作の表現については，「4.5.10　データ操作の構文規則」を参照してください。

4.5.2　表記規則

ここでは，edmSQLの文法を説明する際に使用する文法規則について説明します。

edmSQLの構文規則は，BNF表記を使用して説明します。

BNF表記について，次に示します。

<a> ::= <b><c>は，構文要素<a>は，構文要素<b>および<c>から構成されることを意味します。

特殊記号およびキーワードは，終端記号であるため，このマニュアルに記載してあるとおりに記述する必要があります。「<」と「>」で囲まれた構文要素は，終端記号ではない構文要素です。

「|」（ストローク）は，選択肢の分割を意味します。A | B | Cの場合は，選択肢として，A，B，またはCを選択することを意味します。

「〔」と「〕」で囲まれた要素は，オプションであり，省略できます。

「{」と「}」で囲まれている要素は，その内部の「|」で区切られた要素の中からどれか一つを選択することを意味します。

「...」は，直前の構文要素の1回以上の繰り返しを意味します。

「!!」は，注釈の開始を意味します。注釈は改行で終わります。

4.5.3　使用できるデータ型と演算子・関数・述語の関係

ここでは，edmSQL文で使用できるデータ型と演算子・関数・述語との関係について説明します。

＜この項の構成＞

(1)　edmSQLで使用できるデータ型

(2)　Boolean型

(3)　Integer32型

(4)　String型

(5)　Object型

(6)　Binary型

(1)　edmSQLで使用できるデータ型

edmSQL文で使用できるデータ型は，次のとおりです。

Boolean型

Integer32型

String型

Object型

Binary型

なお，Id型は，edmSQLのデータ型としては提供しませんが，クラスやプロパティをIDで指定することはできます。

使用できるデータ型を，次の項目ごとに説明します。

edmSQL文の表現形式

演算子

関数

述語

クラスライブラリのデータ型との値の受け渡しのインタフェース

(2)　Boolean型

Boolean型は，値と評価の二つの概念を持ちます。それぞれに対して，TRUE，FALSE，UNKNOWNの三つの表現があります。

値としてのBoolean型

値として扱うBoolean型のデータ型は，物理的実体として存在します。これは，Boolean型のプロパティの値または定数値として表現します。

値には，TRUE，FALSE，UNKNOWNの三つの値があります。表現と評価の定数値は，SQLの概念にない，edmSQLで導入される概念で対応付けられます。

値としてのBoolean型の表現と定数値の対応を，次の表に示します。

表4-5　値としてのBoolean型の表現と定数値の対応

表現 | 定数値
TRUE | 1
FALSE | 0
UNKNOWN | 2

評価としてのBoolean型

評価として扱うBoolean型のデータ型は，物理的な実体を持ちません。検索条件や検索関数の評価結果として返ってくるデータ型です。

評価には，真，偽，不定の三つの値があります。表現と評価の定数値は，SQLと同じ概念で対応付けられます。

評価としてのBoolean型の表現と定数値の対応を，次の表に示します。

表4-6　評価としてのBoolean型の表現と定数値の対応

表現 | 評価の値
TRUE | 真
FALSE | 偽
UNKNOWN | 不定

次に，Boolean型の値または評価を使用する表現形式，演算子，関数および述語について説明します。また，クラスライブラリの値との対応について説明します。

(a)　表現形式

値として扱うBoolean型の表現形式を次の表に示します。

表4-7　Boolean型の値の表現形式

値
定義

リテラル
TRUE
FALSE
UNKNOWN

プロパティ
Boolean型のプロパティ
格納値：0，1，2

変数として指定できる値
?パラメタ

Boolean型の評価には，直接の表現形式はありません。

(b)　演算子・関数

Boolean型の値を被演算子として扱う演算子・関数はありません。

Boolean型の評価を被演算子として扱う演算子を，次の表に示します。

表4-8　Boolean型の評価を被演算子として扱う演算子

演算子の種類
演算子

論理演算子
AND
OR
NOT

Boolean型の値を被演算子として扱う演算子・関数はありません。

(c)　述語

Boolean型の値

評価対象が，Boolean型の値である述語を次の表に示します。

表4-9　評価対象がBoolean型の値である述語

述語の種類
述語

比較述語
=
<>

In述語
IN

Boolean型の評価

評価対象が，Boolean型の評価である述語を次の表に示します。

表4-10　評価対象がBoolean型の評価である述語

述語の種類 | 述語
論理述語 | IS TRUE

(d)　クラスライブラリのデータ型との対応

Boolean型の値と，クラスライブラリのデータ型との対応を，次の表に示します。

表4-11　Boolean型の値とクラスライブラリのデータ型との対応

データ型
値

DmaBoolean型
DMA_TRUE（=1）
DMA_FALSE（=0）
DMA_UNKNOWN（=2）

Boolean型の評価に，クラスライブラリのデータ型と対応するものはありません。

(3)　Integer32型

Integer32型で表現するのは，4バイト（32ビット）で表現できる符号付き整数値，または符号と数字文字列で表現する，整数リテラルです。

次に，Integer32型のデータ型を使用する表現形式，演算子，関数および述語について説明します。また，クラスライブラリとの値との対応についても説明します。

(a)　表現形式

Integer32型の値の表現形式を次の表に示します。

表4-12　Integer32型の値の表現形式

値の種類
定義

リテラル
符号および数字列

プロパティ
Integer32型のプロパティ
格納値：-2,147,483,648～2,147,483,647

変数として指定できる値
?パラメタ

(b)　演算子・関数

Integer32型の値を被演算子または引数として扱う演算子および関数を次の表に示します。

表4-13　Integer32型の値を被演算子または引数とする演算子・関数

演算子・関数の種類
演算子・関数

整数の四則演算子
+
-
*
/

単項演算子
+
-

数値関数
ABS()

(c)　述語

評価対象がInteger32型の値である述語を次の表に示します。

表4-14　Integer32型の値を評価対象とする述語

述語の種類
述語

比較述語
=
<
>
<=
>=
<>

In述語
IN

Between述語
BETWEEN

(d)　クラスライブラリのデータ型との対応

クラスライブラリのデータ型との対応を次の表に示します。

表4-15　Integer32型の値とクラスライブラリのデータ型との対応

データ型 | 値
DmaInteger32型 | -2,147,483,648～2,147,483,647

(4)　String型

String型で表現するのは，DocumentBrokerで使用できる文字コードセットから構成される任意の長さの文字列です。DocumentBrokerで使用できる文字コードセットについては，「4.5.4(1)　文字コードセットとの対応」を参照してください。

次に，String型のデータ型を使用する表現形式，演算子，関数および述語について説明します。また，クラスライブラリとの値との対応についても説明します。

(a)　表現形式

String型の値の表現形式を，次の表に示します。

表4-16　String型の値の表現形式

値の種類
定義

リテラル
'任意の文字列'
詳細は，「4.5.4(6)　<リテラル>」を参照してください。

プロパティ
String型のプロパティ
格納値：
定義長（dmaProp_MaximumLengthStringの値）以下の文字列

変数として指定できる値
?パラメタ

(b)　演算子・関数

String型の値を被演算子または引数とする，演算子を次の表に示します。

表4-17　String型の値を被演算子または引数とする演算子

演算子の種類 | 演算子
文字列結合演算子 | ||

(c)　述語

評価対象がString型の値である述語を次の表に示します。

表4-18　String型の値を評価対象とする述語

述語の種類
述語

比較述語
=
<
>
<=
>=
<>

In述語
IN

Between述語
BETWEEN

Like述語
LIKE
XLIKE

(d)　クラスライブラリのデータ型との対応

クラスライブラリのデータ型との対応を次の表に示します。

表4-19　String型の値とクラスライブラリのデータ型との対応

データ型 | 値
pDmaString_T型 | 4,294,967,295バイト以下の文字列

(5)　Object型

Object型の値には，次の2種類があります。

VariableArray型プロパティの値

DMAオブジェクトを識別するためのオブジェクトリファレンスの値

オブジェクトリファレンスとは，DMAオブジェクトへのリファレンスを示すObject型プロパティの値です。例えば，dmaProp_ParentContainerプロパティの値がこれに当たります。

Object型の値のうち，オブジェクトリファレンスは検索条件に直接指定できません。検索で指定する場合には，オブジェクトリファレンスが示す実体であるDMAオブジェクトのOIID文字列を指定します。例えば，dmaProp_ParentContainerプロパティの値を指定したい場合，検索条件にはdmaProp_ParentContainerプロパティが参照している実体のDMAオブジェクト（Containerオブジェクトなど）のOIIDを指定します。

このOIID文字列の値は，検索実行時には，次のどちらかの方法でオブジェクトリファレンスであるObject型プロパティの値に変換する必要があります。

objref関数で変換する。
edmSQL文にオブジェクトリファレンスの実体であるOIIDを直接指定する場合の変換方法です。
objref関数の詳細については，「4.5.9(2)(d)　<objref関数>」を参照してください。

CdbrEqlStatement::SetObjParamメソッドで変換する。
edmSQL文に<?パラメタ>を指定しておく場合の変換方法です。SetObjParamメソッドの引数として，OIID文字列を指定します。
CdbrEqlStatement::SetObjParamメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

また，検索結果としてObject型の値を取得した場合は，oiidstr関数を使用して，そのObject型の値が表すオブジェクトリファレンスの実体であるオブジェクトのOIIDが取得できます。oiidstr関数の詳細については，「4.5.9(2)(c)　<oiidstr関数>」を参照してください。

次に，Object型のデータ型を使用する表現形式および述語について説明します。また，クラスライブラリとのデータ型との対応についても説明します。Object型の値を使用する演算子および関数はありません。

(a)　表現形式

Object型の値の表現形式を，次の表に示します。

表4-20　Object型データの表現形式

値の種類 | 定義
プロパティ | Object型のプロパティ（VariableArray型）

(b)　述語

評価対象がObject型の値である述語を次の表に示します。

表4-21　Object型の値を評価対象とする述語

述語の種類 | 述語
比較述語 | =
In述語 | IN

なお，比較述語，IN述語では，オブジェクトリファレンス同士を比較します。

(c)　クラスライブラリのデータ型との対応

クラスライブラリのデータ型との対応を次の表に示します。

表4-22　Object型の値とクラスライブラリのデータ型との対応

データ型
値

CdbrVariableArray型オブジェクト
（基本単位がVariableArray型）
次のように定義されているプロパティの値としてだけ対応します。

dmaProp_DataType = DMA_DATATYPE_OBJECT

dmaProp_Cardinality=255

Object型のデータ型の値としてVariableArray型プロパティ以外の値（オブジェクトリファレンス）を扱う場合は，<変換関数>を使用するか，?パラメタを使用してください。

(6)　Binary型

Binary型で表現するのは，任意のバイト列を表現するデータです。主に，文書のコンテンツを表現します。関数の引数や，戻り値に指定する型としてだけ使用できます。プロパティの型としては定義できません。

Binary型が使用できる関数についての詳細は，「4.5.9　関数指定の構文規則」を参照してください。

(a)　表現形式

Binary型のデータの表現形式を，次の表に示します。

表4-23　Binary型のデータの表現形式

値の種類 | 定義
変数 | ?パラメタ

Binary型のデータは，?パラメタ以外の形式では表現できません。

(b)　クラスライブラリのデータ型との対応

クラスライブラリのデータ型との対応を，次の表に示します。

表4-24　Binary型のデータとクラスライブラリのデータ型との対応

データ型 | 値
pDmaString_T型 | 4,294,967,295バイト以下の文字列※

注※

Binary型のデータはクラスライブラリではString型の値として取得できます。

4.5.4　字句規則

ここでは，edmSQLで使用する字句に関する規則について説明します。

＜この項の構成＞

(1)　文字コードセットとの対応

(2)　edmSQLで使用できる文字

(3)　<区切り文字>

(4)　<トークン>

(5)　<キーワード>

(6)　<リテラル>

(7)　<識別子>

(8)　<名前>

(9)　<ID文字列>

(10)　<特殊なプロパティ>

(11)　<?パラメタ>

(12)　<OIID>

(1)　文字コードセットとの対応

ここでは，edmSQLで使用できる字句と，文字コードセットとの対応について説明します。

各国語を表記するための文字などは，文字コードセットに依存します。
edmSQLで使用できる文字コードセットは，前提プログラムである，OSとHiRDBに依存します。したがって，これらのプログラムで使用できない文字を使用した場合は，前提プログラムのエラーになります。

edmSQLで使用する字句の規則は，検索の対象になる文書のコンテントには適用されません。全文検索機能を使用する場合に検索対象になる文書の字句については，全文検索機能を提供するHiRDB Text Search Plug-inに依存します。

次の文字コードセットが使用できます。

DocumentBrokerのメタ定義で使用できる文字コードセット

HiRDBで使用できる文字コードセット

HiRDB Text Search Plug-inで使用できる文字コードセット

(2)　edmSQLで使用できる文字

edmSQLで使用できる文字を，次の表に示します。

表4-25　edmSQLで使用できる文字

文字
値

英大文字
A～Z

英小文字
a～z

数字
0～9

16進数字
0～9，a～f，およびA～F

特殊文字（半角文字コード）
<空白>
<ダブルクォート>（"）
<パーセント>（%）
<アンパサンド>（&）
<シングルクォート>（'）
<左括弧>（(）
<右括弧>（)）
<アスタリスク>（*）
<+符号>（+）
<コンマ>（,）
<-符号>（-）
<ピリオド>（.）
<斜線>（/）
<コロン>（:）
<セミコロン>（;）
<小なり演算子>（<）
<等号演算子>（=）
<大なり演算子>（>）
<疑問符>（?）
<左角括弧またはtrigraph >（ [ または (??）
<右角括弧またはtrigraph >（ ] または ??)）
<サーカムフレックス>（^）
<下線文字>（_）
<垂直棒>（|）
<左中括弧>（{）
<右中括弧>（}）

(a)　規約詳細

edmSQLで使用できる文字の詳細について説明します。

<空白>は，JIS X 0201では，0x20に対応します。

<拡張文字>とは，使用できる文字コードセットに対応して，使用可能な文字として拡張した文字です。使用できる文字コードセットについては，「(1)　文字コードセットとの対応」を参照してください。

(3)　<区切り文字>

<トークン>は，<区切り文字>によって分割されます。<区切り文字>は，<トークン>を抽出するための字句解析で削除される文字です。このため，構文解析を実行する時点では，<区切り文字>は出現しません。

(a)　<区切り文字>として指定できる字句

<区切り文字>として指定できる字句は，<white space>です。

(b)　規約詳細

<区切り文字>の詳細について説明します。

edmSQLでは，次の定義を<white　space>として定義します。

Horizontal Tab　　　 [0x09]
Line Feed　　　　　　[0x0A]
Vertical Tabulation　[0x0B]
Form Feed　　　　　　[0x0C]
Carriage Return　　　[0x0D]
Space　　　　　　　　[0x20]

[　]内は，対応するASCIIコードです。

(4)　<トークン>

<トークン>の定義について説明します。<トークン>は，構文の基本要素です。

<トークン>の定義には，次の要素の定義が含まれます。

<キーワード>

<リテラル>の一部

<識別子>

それぞれの要素については，「(5)<キーワード>」，「(6)<リテラル>」および「(7)<識別子>」を参照してください。

なお，<トークン>として指定できる文字列の長さなどは，データベースに依存します。

(a)　<トークン>として指定できる字句

<トークン>として指定できる字句を，次の表に示します。

表4-26　<トークン>として指定できる字句

種類
値
参照先

正規識別子
先頭が<英字>で，先頭以外が<英字>，<数字>および<下線文字>の値
(7)<識別子>

キーワード
<予約されたキーワード>および<予約されないキーワード>の値
(5)<キーワード>

符号なし数値リテラル
符号なしの数字の値
(6)<リテラル>

バイナリ長トークン
<符号なし数値>に<multiplier>（k，m，g）が付いた値
「4.5.9　関数指定の構文規則」のAS<データ型指定>

区切られた識別子
<ダブルクォート>で囲まれた値
（<区切り文字>，<ダブルクォート以外の文字>および<二重ダブルクォート>を含むことができる）。
(7)<識別子>

文字列リテラル
<シングルクォート>で囲まれた値
（<シングルクォート以外の文字>または<二重シングルクォート>（''）が指定できる）。
(6)<リテラル>

特殊文字
edmSQLで使用できる特殊文字
(2)edmSQLで使用できる文字

そのほかの文字

<不等号演算子>（<>）

<大なり等号演算子>（>=）

<小なり等号演算子>（<=）

<文字列連結演算子>（||）

<右矢印演算子>（->）

<二重コロン>（::）

<左大括弧> （[）

<右大括弧>（]）

<アンパサンド>（&）

－

（凡例）

－：該当しません。

(b)　規約詳細

<トークン>の詳細について説明します。

<トークン>が区切られる単位についての詳細

<トークン>で指定できる要素のうち，<正規識別子>，<キーワード>，<符号なし数値リテラル>および<バイナリ長トークン>は，<トークン>を区切る要素として扱われます。これ以外の<トークン>を指定する場合は，前後に<区切り文字>または区切る要素になる<トークン>を指定して，前後との区切りを明確にしてください。区切る要素を指定しないで指定した場合，複数の<トークン>が一つの<トークン>として扱われたり，字句解析エラーになったりします。
<トークン>の表記例とedmSQL検索実行時の値の対応を，次の表に示します。

表4-27　トークンの表記例とedmSQL検索実行時の値の対応

トークンの表記例 | edmSQL検索実行時の値
ABC□123 | 正規識別子ABCと数値リテラル123
ABC123 | 正規識別子ABC123
ABC'123' | 正規識別子ABCと文字列リテラル'123'
123ABC | 正規識別子の先頭に数字は指定できないため，字句解析エラーになります。

（凡例）

□：区切り文字

<トークン>と<トークン>の間には任意の個数の区切り文字を指定できます。
例えば，□を区切り文字とした場合，「prop□□□=□□□□□□□□□10」は，「prop=10」と同じ意味になります。また，「COUNT□□□□□(□□□*□□)」は，「COUNT(*)」と同じ意味になります。

<トークン>の中に区切り文字を指定することはできません。ただし，<シングルクォート>に囲まれた文字列リテラルや<ダブルクォート>に囲まれた区切られた識別子の中には，区切り文字を指定できます。
例えば，□を区切り文字とした場合，「<□=」は，演算子「<=」ではなく，二つの演算子「<」と「=」と識別されるため，構文解析エラーになります。また，「'<□='」は，文字列定数「'<□='」と識別されるため，エラーにはなりません。

<ダブルクォート><ダブルクォート以外の文字><二重ダブルクォート>に関する詳細

<ダブルクォート以外の文字>は，使用できる文字コードセットの文字から，<ダブルクォート>を除外したものです。edmSQLで使用できる文字で構成されている必要はありません。
ただし，DocumentBrokerのメタ定義で使用できる文字およびHiRDBで使用できる文字以外は指定できません。

<二重ダブルクォート>は，<区切られた識別子>内で<ダブルクォート>を指定する場合に使用します。

<バイナリ長トークン>についての詳細

<バイナリ長トークン>は，Binary型の定義長を指定するためのトークンです。関数の引数に指定する?パラメタに対して，データ型を明示するためのAS<データ型指定>で使用します。

使用できる<特殊文字>についての詳細

次に示す<特殊文字>および演算子は，文字列リテラルの字句としてだけ使用できます。それ以外で使用した場合，字句解析時にエラーになります。
%　&　:　(??　??)　^　|　{　}　->　::

(5)　<キーワード>

<キーワード>の定義について説明します。<キーワード>には<予約されるキーワード>（予約語）と<予約されないキーワード>があります。

<キーワード>では，大文字と小文字は区別されません。

ただし，このマニュアルの例では，<予約されるキーワード>を大文字で，<予約されないキーワード>を小文字で表記します。

edmSQLのキーワードはSQLのキーワードを基盤として，次のように定義されています。

edmSQLでは，SQLのキーワードおよびHiRDBのキーワードのうち，最小限のものをキーワードとして定義しています。すべてのSQLのキーワードおよびHiRDBのキーワードが定義されているのではありません。ただし，ユーザが識別子を指定する場合には，edmSQLのキーワードのほか，HiRDBのキーワードも指定できません。識別子としてHiRDBのキーワードを指定した場合，HiRDBのエラーになります。なお，クラス名やプロパティ名については，定義する時点でHiRDBのキーワードは指定できません。このため，登録済みのクラス名やプロパティ名をedmSQLのキーワードとして指定した場合に，HiRDBのエラーになることはありません。

edmSQLでは，全文検索関数などの関数名は<予約されないキーワード>として定義されています。そのほかのキーワードは<予約されるキーワード>として定義されています。

DMAの検索モデルで定義されている演算子のうち，キーワードとして表現されているものは，edmSQLでは使用しないものも含めてすべて<予約されるキーワード>として定義されています。

DocumentBrokerの文書管理モデルで使用する用語として，幾つかのキーワードが<予約されるキーワード>として定義されています。

(a)　<キーワード>として指定できる字句

<キーワード>として指定できる字句を，次の表に示します。

表4-28　<キーワード>として指定できる字句

種類
値
特徴

関数名
concept_with_score
contains
cotains_with_score
extracts
objref
oiid
oiidstr
score
score_concept
予約されないキーワードです。

multiplier
k
m
g

句に使用するキーワード
SELECT
FROM
WHERE
ORDER
GROUP
BY
HAVING
予約されるキーワードです。

述語に使用するキーワード
IS
ALL
SOME
ANY
IN
LIKE
XLIKE
EXISTS
BETWEEN
AS
ESCAPE

論理演算に使用するキーワード
NOT
AND
OR

リテラルに使用するキーワード
NULL
TRUE
FALSE
UNKNOWN

結合条件に使用するキーワード
JOIN
INNER
OUTER
LEFT
ON

データ操作および重複排除に使用するキーワード
DISTINCT
ASC
DESC

集合関数で使用するキーワード
COUNT

数値関数で使用するキーワード
ABS

DMAの検索モデルで使用するキーワード
ID

プロパティのデータ型で使用するキーワード
BINARY
BOOL
BOOLEAN
INT
INTEGER
STRING

DocumentBrokerの文書モデルで使用するキーワード
ACL
CARDINALITY
CLASS
CONTAINER
CONTENT
DOCUMENT
EVERYONE
FOLDER
FOR
GROUP
LINK
LOCK
OBJECT
OF
OWNER
PARENT
PRIVATE
PROPERTY
PUBLIC
READ
TO
TYPE
UNLINK
UPDATE
VARRAY
VERSION
VERSIONABLE
WRITE

(b)　規約詳細

<キーワード>の詳細について説明します。

<キーワード>の表記についての詳細

キーワードでは，大文字と小文字が区別されません。正規識別子の規約とは異なりますので，ご注意ください。edmSQLでは，キーワードはすべて大文字として管理されます。

例えば，次の表記は，すべて<予約されるキーワード>「SELECT」として識別されます。

Select　SeLect　select　selecT

また，次の表記はすべて<予約されないキーワード>「contains_with_score」として識別されます。

Contains_With_SCORE　contains_with_scorE
CONTAINS_WITH_SCORE

<キーワード>と<正規識別子>の関係についての詳細

<予約されるキーワード>は正規識別子として使用できません。

<予約されないキーワード>は正規識別子として使用できますが，HiRDBで予約語として定義されている場合は，使用できません。使用すると，データベースエラーになります。

(6)　<リテラル>

<リテラル>の定義について説明します。<リテラル>とは，NULL値以外の値です。

<リテラル>には，次の種類があります。

文字列リテラル

数値リテラル

論理リテラル

(a)　<リテラル>として指定できる字句

<リテラル>として指定できる字句を，次の表に示します。

表4-29　<リテラル>として指定できる字句

種類
値

文字列リテラル
<シングルクォート>で囲まれた文字列
（文字列には，<シングルクォート以外の文字>※または<二重シングルクォート>（''）が指定できる）。

数値リテラル
符号（+または）付きの数字
（符号は省略できる）。

論理リテラル
TRUE
FALSE
UNKNOWN

注※

<シングルクォート以外の文字>は，使用できる文字コードセットの文字から，<シングルクォート>を除外したものです。edmSQLで使用できる文字で構成される必要はありません。ただし，文字列リテラルはString型の値であるため，String型を格納するHiRDBのデータ型（MVARCHAR型）で制限される文字は使用できません。

(b)　規約詳細

<リテラル>の詳細について説明します。

文字列リテラルの詳細

文字列リテラルは，任意の文字列定数を表現する場合に使用します。文字列リテラルは，String型の値に対応します。したがって，文字列リテラルで使用できる文字列の長さは，データベースの制限に従います。データベースの制限以上の長さの文字列を文字列リテラルとして指定したい場合は，?パラメタを使用してください。

文字列リテラルの表記例とedmSQL検索実行時の値の対応を，次の表に示します。なお，文字列リテラルを表すString型の値は，HiRDBではMVARCHAR型のデータとして格納されます。

表4-30　文字列リテラルの表記例とedmSQL検索実行時の値の対応

文字列リテラルの表記例 | 値の扱われ方 | edmSQL検索実行時の値
'aaa' | 文字列データ | aaa
'124' | 文字列データ | 124
'abc あいうえお' | 混在文字列データ | abc あいうえお
'ab''c あ''いうえお' | シングルクォートのエスケープ | ab'c あ'いうえお

数値リテラル（符号付き数値リテラル）の詳細

数値リテラルは，任意の数値定数を表現する場合に使用します。なお，DocumentBrokerで使用できる数値リテラルは，4バイトの整数値だけです。

なお，4バイトの整数値の有効値は，-2,147,483,648～2,147,483,647までの値です。この範囲外の値を指定した場合，データベースの制限に従って，目的の検索が実行できなかったり，データベースのエラーになったりします。

数値リテラルの表記例とedmSQL検索実行時の値の対応を，次の表に示します。

表4-31　数値リテラルの表記例とedmSQL検索実行時の値の対応

数値リテラルの表記例 | 値の扱われ方 | edmSQL検索実行時の値
123 | 数値データ | 123
0000000123​ | 数値データ | 123
+1234567890​ | 数値データ（正の整数値） | 1234567890​
-1234567890​ | 数値データ（負の整数値） | -1234567890​
987654321000000000​ | リテラルとしては正しい表記ですが，4バイト整数値の有効値ではないため，正しく扱われません。 | －

（凡例）

－：該当する値がありません。

論理リテラルの詳細

論理リテラルは，論理値である「真」，「偽」および「不定」の三つの値を，それぞれ「TRUE」，「FALSE」および「UNKNOWN」で表現します。

論理型の値を表すBoolean型のプロパティの値は，TRUEは「1」，FALSEは「0」，UNKNOWNは「2」として，数値で格納されます。ただし，この値をedmSQLで数値として扱うことはできません。edmSQLで指定する場合は，必ずTRUE，FALSEまたはUNKNOWNとして表現してください。

また，論理リテラルを整数の演算に使用する値として使用することもできません。ただし，クラスライブラリを使用して，C++のデータモデルに変換した場合は，論理リテラルの値を数値として扱うこともできます。この場合の数値のデータベースでの扱われ方は，データベースでのデータモデルの対応付けに依存します。

論理リテラルの表記ごとの，論理値を表すTRUEの扱われ方について，例に示します。

次のTRUEはデータベースによって，論理述語として処理されます。

　contains(edmProp_Content,'文章[概要{"コンピュータ"}]') IS TRUE

次のTRUEはクラスライブラリを通して数値として処理されます。ただし，myProp_OKはBoolean型のプロパティです。

　myProp_OK = TRUE

(7)　<識別子>

<識別子>の定義について説明します。<識別子>には，<正規識別子>と<区切られた識別子>があります。

なお，識別子には，日本語の文字コードセットは使用できません。

(a)　<識別子>として指定できる字句

<識別子>として指定できる字句を，次の表に示します。

表4-32　<識別子>として指定できる字句

種類
値

正規識別子
先頭は<英字>で，先頭以外が<英字>，<数字>および<下線文字>の値

例

usrClass_ABC

区切られた識別子
<ダブルクォート>で囲まれた値
（<区切り文字>，<ダブルクォート以外の文字>※または<二重ダブルクォート>（""）を含むことができる）

例

"user class"

"user""class"

注※

<ダブルクォート以外の文字>として指定できるのは，英字，数字および「"」を除いた特殊文字です。

(b)　規約詳細

<識別子>の詳細について説明します。

<正規識別子>に関する詳細

edmSQLでは，<正規識別子>に使用される英字の<英大文字>と<英小文字>が区別して扱われます。このため，SQLを使用する時のように，<英大文字>と<英小文字>を区別するために，<区切られた識別子>を使用する必要はありません。

<正規識別子>に<キーワード>は使用できません。<キーワード>と同じ識別子を使用する場合は，<区切られた識別子>として指定してください。

<区切られた識別子>に関する詳細

値が空の区切られた識別子「""」は，無効な識別子として扱われます。これを指定した場合は，字句解析エラーになります。

(8)　<名前>

<名前>の定義について説明します。<名前>では，クラス名，プロパティ名，相関名および関数名を表現します。

<名前>の基本要素は，<識別子>と<ID文字列>です。

(a)　<名前>として指定できる字句

<名前>として指定できる字句を，次の表に示します。

表4-33　<名前>として指定できる字句

種類
値
参照先

クラス名

<識別子>

<ID文字列>

(7)<識別子>

(9)<ID文字列>

プロパティ名

<識別子>

<ID文字列>

<特殊なプロパティ>

(7)<識別子>

(9)<ID文字列>

(10)<特殊なプロパティ>

関数名
（変換関数）

oiidstr

objref

oiid

（全文検索関数）

contains

contains_with_score

score

extracts

（概念検索関数）

concept_with_score

score_concept

4.5.9　関数指定の構文規則

相関名
<識別子>

(7)<識別子>

(b)　規約詳細

<名前>の詳細について説明します。

クラス名の詳細

<クラス名>は，文書空間内でクラスを識別するための名称（dmaProp_DisplayNameの値），またはGUID値のID文字列表現です。使用できる文字列の長さは，データベースのテーブル名に使用できる文字列の長さに従います。

一つのedmSQL文の中で，同じクラスを識別するための<クラス名>の表現に，名称とID文字列を混用することはできません。一つのedmSQL文では，<クラス名>は，名称またはID文字列で統一して表記してください。例えば，<FROM句>の<クラス名>にID文字列を指定した場合は，<WHERE句>などでプロパティを修飾する<クラス名>にもID文字列を指定する必要があります。

<識別子>および<ID文字列>の詳細は，「(7)<識別子>」および「(9)<ID文字列>」を参照してください。

プロパティ名の詳細

<プロパティ名>は，文書空間内でプロパティを識別するための名称（dmaProp_DisplayNameの値），またはGUID値のID文字列表現です。使用できる文字列の長さは，データベースのカラム名に使用できる文字列の長さに従います。

一つのedmSQL文の中で，同じプロパティを識別するための<プロパティ名>の表現に，名称とID文字列を混用することはできません。なお，そのプロパティがどのクラスのプロパティであるかが明確でない場合は，<プロパティ名>を<クラス名>または<相関名>で修飾する必要があります。

一つのedmSQL文では，<プロパティ名>は，名称またはID文字列で統一して表記してください。例えば，<選択項目>の<プロパティ名>にID文字列を指定した場合は，ORDER BY句で指定する<プロパティ名>にも，ID文字列を指定する必要があります。

<識別子>，<ID文字列>および<特殊なプロパティ>の詳細は，「(7)<識別子>」，「(9)<ID文字列>」および「(10)<特殊なプロパティ>」を参照してください。

注意事項

DocumentBrokerでは，プロパティの定義は文書空間ごとに定義されています。したがって，異なるクラスに登録されたプロパティであっても，同じ文書空間内のクラスであれば，プロパティの性質は同じことが保証されています。ほかのオブジェクト指向言語で，クラスのスコープ単位にプロパティが定義されているものとは異なりますので，ご注意ください。

関数名の詳細

<関数名>は，edmSQLで予約されないキーワードとして登録されている関数を識別するための名称です。

関数についての詳細は，「4.5.9　関数指定の構文規則」を参照してください。

相関名の詳細

<相関名>は，同じクラスを結合する場合に，結合するクラスを区別するための名称です。一つの<FROM句>の中に，同じクラスを複数回指定する場合には，必ず<相関名>を指定して，それぞれのクラスを一意に識別できるようにしてください。

そのほか，<相関名>は，<クラス名>の別名としても使用できます。

<相関名>として使用できる文字列の長さなどの制限については，データベースの相関名に関する制限に従います。

(9)　<ID文字列>

<ID文字列>の定義について説明します。<ID文字列>は，<クラス名>や<プロパティ名>を，名称（dmaProp_DisplayNameに定義した値）以外で表記するための文字列です。

DocumentBrokerの文書空間では，クラスやプロパティはGUIDによって定義され，識別されます。クラスライブラリのメソッドでも，クラスやプロパティの識別には，このGUIDを指定します。これと同様に，edmSQLでも，GUIDでクラスやプロパティを指定できます。

なお，クラスライブラリでは，GUID値は，DmaId型という構造体で管理されますが，edmSQLでは，データ型ではなく，GUIDを<ID文字列>という記述形式で表現します。<クラス名>や<プロパティ名>と同じ扱いになるため，<ID文字列>に?パラメタによって値を指定することはできません。

(a)　<ID文字列>として指定できる字句

<ID文字列>は，<シングルクォート>で囲まれたGUID文字列として指定します。

GUID文字列とは，「X」を0～9およびa～f（小文字）で表される16進数とした「XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX（8けた-4けた-4けた-4けた-12けた）」の形式の文字列です。

なお，<ID文字列>に指定する「ID」と<ID本体>の間に，区切り文字は指定できません。

(b)　規約詳細

<ID文字列>の詳細について説明します。

<ID文字列>が区切られる単位についての詳細

ID文字列の「ID」は，<予約されるキーワード>です。したがって，<非区切りトークン>として扱われます。また，<ID本体>は，<区切りトークン>として扱われます。このため，<ID文字列>の前に<区切り文字>なしで<非区切りトークン>は指定できませんが，<ID文字列>の後ろに<区切り文字>なしで<非区切りトークン>は指定できます。

<ID文字列>の表記例とedmSQL検索実行時の値の扱われ方を，次の表に示します。

表4-34　<ID文字列>の表記例とedmSQL検索実行時の値の扱われ方

<ID文字列>の表記 | 扱われ方
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​' | 正しい<ID文字列>として扱われます。
ID□'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​' | 「ID」と<ID本体>の間に区切り文字が入っているため，字句解析エラーになります。
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​'FROM | <ID文字列>と「FROM」として扱われます。
SELECTID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​' | 「SELECTID」と文字リテラルとして扱われます。

（凡例）

□：区切り文字または<空白>

(10)　<特殊なプロパティ>

<特殊なプロパティ>の定義について説明します。<特殊なプロパティ>とは，全文検索で使用する全文検索インデクス用プロパティです。

(a)　<特殊なプロパティ>として指定できる字句

<特殊なプロパティ>として指定できる字句を，次の表に示します。

表4-35　<特殊なプロパティ>として指定できる字句

種類 | 値 | 説明
特殊なプロパティ | edmProp_TextIndex | edmProp_TextIndexプロパティを表す<正規識別子>
edmProp_StIndex | edmProp_StIndexプロパティを表す<正規識別子>
edmProp_ConceptTextIndex | edmProp_ConceptTextIndexプロパティを表す<正規識別子>
edmProp_ConceptStIndex | edmProp_ConceptStIndexプロパティを表す<正規識別子>
edmProp_Content | edmProp_Contentプロパティを表す<正規識別子>

これらのプロパティの特長については，「4.4.2　全文検索機能付き文書クラスの作成」を参照してください。

(b)　規約詳細

<特殊なプロパティ>の詳細について説明します。

<特殊なプロパティ>と<プロパティ名>についての詳細

<特殊なプロパティ>は，edmSQLで，DMAの検索モデルを拡張するための導入されたプロパティです。このプロパティは，edmSQLによって予約されたプロパティ名であるため，<プロパティ名>としては使用できません。なお，DocumentBrokerとしても，ユーザプロパティに「dmaProp_」，「edmProp_」および「dbrProp_」で始まるプロパティ名称は使用できません。
なお，クラスライブラリで拡張したプロパティのうち，<特殊なプロパティ>として定義されていないプロパティについては，ほかのプロパティと同様の処理ができます。

<特殊なプロパティ>を指定できる関数についての詳細

<特殊なプロパティ>を指定できる関数を示します。

edmProp_TextIndex，edmProp_StIndex，edmProp_Contentを第1引数に指定できる関数

contains関数

contains_with_score関数

score関数

extracts関数

edmProp_ConceptTextIndex，edmProp_ConceptStIndexを第1引数に指定できる関数

contains関数

contains_with_score関数

score関数

extracts関数

concept_with_score関数

score_concept関数

<特殊なプロパティ>を引数に指定できる関数の詳細については，「4.5.9　関数指定の構文規則」を参照してください。

(11)　<?パラメタ>

<?パラメタ>は，検索条件の定数を構文解析時には固定しないで，検索実行時に定数を指定するために使用するパラメタです。edmSQL文には定数を指定する代わりに「?」を指定して，問い合わせの実行直前にCdbrEqlStatementクラスのSetParamメソッドなどで値を「?」に設定します。<?パラメタ>を使用することで，構文解析済みのedmSQL文を定数値だけを変えて繰り返し利用できるので，処理性能があがります。

また，概念検索を実行する場合には，検索条件は<?パラメタ>を使用しないと指定できません。

(a)　<?パラメタ>として指定できる字句

<?パラメタ>として指定できるのは，?だけです。

(b)　規約詳細

<?パラメタ>の詳細について説明します。

<?パラメタ>に指定する値のデータ型に関する詳細

<?パラメタ>で指定される値のデータ型は不定です。このため，edmSQL文の構文解析時にはデータ型はチェックされません。ただし，AS<データ型指定>で明示的にデータ型を指定した<?パラメタ>については，データ型のチェックの対象になります。

<ルーチンの起動>の引数として<?パラメタ>を使用する場合は，AS<データ型指定>で明示的にデータ型を指定してください。

<?パラメタ>に値を設定するメソッドについての詳細

CdbrEqlStatement::SetParamメソッド，CdbrEqlStatement::SetObjParamメソッドおよびCdbrEqlStatement::SetOIIDParamメソッドで<?パラメタ>に値を設定する場合，メソッドの引数には，edmSQLの定数表現ではなくクラスライブラリのデータ型に従った値を指定してください。

CdbrEqlStatement::SetParamメソッドによって<?パラメタ>の値を設定した場合，メソッドの引数に指定した値がそのまま<?パラメタ>の値として設定されます。

CdbrEqlStatement::SetOIIDParamメソッドによって<?パラメタ>の値を設定した場合，メソッドの引数に指定した値（OIID文字列）をdmaProp_OIIDプロパティの格納形式（16バイト）に変換された値が<?パラメタ>の値として設定されます。

CdbrEqlStatement::SetObjParamメソッドによって<?パラメタ>の値を設定した場合，メソッドの引数に指定した値（OIID文字列）をオブジェクトリファレンスの形式に変換された値が<?パラメタ>の値として設定されます。

(12)　<OIID>

<OIID>の定義について説明します。

検索対象になるオブジェクトは，OIIDによって識別されます。OIIDの値は，データベース上では，各オブジェクトのdmaProp_OIIDプロパティに，String型の16バイトの値として格納されています。

一方，クラスライブラリでは，OIIDを「dma://」で始まるOIID文字列（DMA URL）で表記します。これは，実際にdmaProp_OIIDプロパティに格納されている値とは異なります。したがって，クラスライブラリで使用するOIID文字列を直接edmSQL文に指定しても，OIIDを対象にした検索はできません。また，検索結果としてdmaProp_OIIDプロパティの値を取得した場合は，クラスライブラリで使用するOIID文字列に変換されたものを使用します。

(a)　OIID文字列をdmaProp_OIIDプロパティの値に変換する指定（OIID変換インタフェース）

検索条件にOIID文字列を指定する場合に，指定したOIID文字列をdmaProp_OIIDプロパティの値に変換するためには，次のどちらかの方法を使用します。

oiid関数で変換する。
edmSQL文中にOIID文字列を直接指定する場合の変換方法です。
oiid関数の詳細については，「4.5.9(2)(d)　<objref関数>」を参照してください。

CdbrEqlStatement::SetOIIDParamメソッドで変換する。
edmSQLに<?パラメタ>として指定しておく場合の変換方法です。SetOIIDParamメソッドの引数として，OIID文字列を指定します。
CdbrEqlStatement::SetObjParamメソッドについては，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

OIID変換インタフェースの使用例

次に，OIID変換インタフェースの使用例について説明します。

OIID変換インタフェースを使用しないでOIIDを検索しようとしている例

dmaProp_OIIDプロパティの値とOIID文字列の形式は異なるため，検索結果が「真」になる（検索結果が取得できる）ことはありません。

SELECT  myProp_Foo
FROM    myClass
WHERE  dmaProp_OIID = 'dma:///xxx/xxx/xxx…x'

oiid関数を使用してOIIDを検索する例

検索結果が「真」になる（検索結果が取得できる）可能性があります。

SELECT  myProp_Foo
FROM    myClass
WHERE  dmaProp_OIID = oiid('dma:///xxx/xxx/xxx…x')

SetOIIDParamメソッドを使用してOIIDを検索する例

検索結果が「真」になる（検索結果が取得できる）可能性があります。

SELECT  myProp_Foo
FROM    myClass
WHERE  dmaProp_OIID = ?

このとき，SetParamメソッドやSetObjParamメソッドを使用して<?パラメタ>の値を設定しても，正しい検索はできません。

(b)　dmaProp_OIIDプロパティの値をOIID文字列に変換する指定（dmaProp_OIID取得インタフェース）

検索結果としてdmaProp_OIIDプロパティの値として取得した場合，検索結果として取得する構造体には，edmSQLによってOIID文字列に変換された値が格納されます。明示的に変換する必要はありません。

4.5.5　検索の実行単位の構文規則

edmSQL検索は，一つの<edmSQL文>から構成される，<edmSQLプログラム>ごとに実行されます。

＜この項の構成＞

(1)　形式

(2)　<edmSQLプログラム>

(3)　<edmSQL文>

(1)　形式

!! <edmSQLプログラム>の形式
<edmSQLプログラム> ::= <edmSQL文>
　　　　　　　　　　 ｜<edmSQL文> <セミコロン>

!! <edmSQL文>の形式
<edmSQL文>::= <問い合わせ文>

　!! <問い合わせ文>については，「4.5.6　問い合わせ式の構文規則」を
　!!参照してください。

(2)　<edmSQLプログラム>

形式

<edmSQLプログラム> ::= <edmSQL文>
　　　　　　　　　　 ｜<edmSQL文> <セミコロン>

<edmSQLプログラム>についての規則

<edmSQLプログラム>は，一つの<edmSQL文>から構成されます。

<edmSQLプログラム>が<edmSQL文>で構成されていない場合は，構文エラーになります。また，<セミコロン>だけを指定した場合も，構文エラーになります。

(3)　<edmSQL文>

形式

<edmSQL文>::= <問い合わせ文>

<edmSQL文>についての規則

<edmSQL文>に指定できるのは，<問い合わせ文>（SELECT文）だけです。

<edmSQL文>として指定できる文字列の長さの最大値は，データベースに依存します。

4.5.6　問い合わせ式の構文規則

問い合わせは，<問い合わせ文>（SELECT文）によって表現します。<問い合わせ文>には，SELECT句，FROM句，WHERE句，ORDER BY句，GROUP BY句およびHAVING句を指定できます。最も基本的な<問い合わせ文>は，SELECT句とFROM句から構成されます。

SELECT句には，検索結果として取得する項目を指定します。

FROM句，WHERE句，GROUP BY句およびHAVING句は，検索対象式として指定します。FROM句には，検索対象になるクラスを指定します。WHERE句には，検索条件を指定します。検索条件は，述語で表現します。述語については，「4.5.8　述語の構文規則」を参照してください。GROUP BY句には，複数のオブジェクトを一つのグループとするかどうかを指定します。HAVING句には，WHERE句，FROM句，GROUP BY句の結果，得られる各グループを選択する条件を指定します。なお，WHERE句およびHAVING句には，副問い合わせも指定できます。

ORDER BY句には，検索結果として取得した集合をソートするかどうかを指定します。ORDER BY句については，「4.5.10　データ操作の構文規則」を参照してください。

＜この項の構成＞

(1)　形式

(2)　<問い合わせ文>

(3)　<問い合わせ指定>

(4)　<検索対象式>

(5)　<FROM句>

(6)　<WHERE句>

(7)　<副問い合わせ>

(8)　GROUP BY句

(9)　HAVING句

(1)　形式

!! <問い合わせ文>の形式
<問い合わせ文> ::= <問い合わせ式> 〔 <ORDER BY句>〕
<問い合わせ式> ::= <問い合わせ指定>
　　　　　　　　 ｜<左括弧> <問い合わせ式> <右括弧>

!! <問い合わせ指定>の形式
<問い合わせ指定> ::= SELECT 〔 <集合指定子> 〕
　　　　　　　　　　<選択項目の並び> <検索対象式>
<選択項目の並び> ::= <アスタリスク>
　　　　　　　　　 ｜<選択項目> 〔 { <コンマ> <選択項目> }... 〕
<選択項目> ::= <一次子>
<集合指定子> ::= DISTINCT｜ALL

!! <検索対象式>の形式
<検索対象式> ::= <FROM句>
　　　　　　　　〔 <WHERE句> 〕
　　　　　　　　〔 <GROUP BY句> 〕
　　　　　　　　〔 <HAVING句> 〕

!! <FROM句>の形式
<FROM句> ::= FROM <検索対象>
<検索対象> ::=  <検索対象参照リスト>
　　　　　　　  <結合された検索対象>
<検索対象参照リスト> ::=<検索対象参照>
　　　　　　　　　　　 〔 { <コンマ> <検索対象参照> }... 〕
<検索対象参照> ::= <クラス名> 〔<相関名>〕

<結合された検索対象> ::= <条件指定結合>
<条件指定結合> ::= <検索対象一次子> 〔 <結合種別> 〕
　　　　　　　　JOIN <検索対象参照> <結合指定>

<検索対象一次子> ::= <検索対象参照>
　　　　　　　　　　　　｜<結合された検索対象>
　　　　　　　　　　　　｜<左括弧><結合された検索対象><右括弧>

<結合指定> ::= <結合条件>
<結合条件> ::= ON <検索条件>

<結合種別> ::= INNER
　　　　　　　｜<外部結合種別> 〔 OUTER 〕
<外部結合種別> ::= LEFT

!! <WHERE句>の形式
<WHERE句> ::= WHERE <検索条件>

!! <GROUP BY句>の形式
<GROUP BY句> ::= GROUP BY <グループ化項目の並び>
<グループ化項目の並び> ::= <グループ化項目>
　　　　　　　　　　　[ { <コンマ> <グループ化項目> }... ]
<グループ化項目> ::= <一次子>

!! <HAVING句>の形式
<HAVING句> ::= HAVING <検索条件>

!! <副問い合わせ>の形式
<副問い合わせ> ::=<左括弧> <問い合わせ式> <右括弧>

!!検索条件については，「4.5.8　述語の構文規則」を
!!参照してください。

(2)　<問い合わせ文>

形式

<問い合わせ文> ::= <問い合わせ式> 〔 <ORDER BY句>〕
<問い合わせ式> ::= <問い合わせ指定>
　　　　　　　　 ｜<左括弧> <問い合わせ式> <右括弧>

<問い合わせ式>についての規則

<問い合わせ式>は，少なくともSELECT句とFROM句から構成される問い合わせの表現です。<問い合わせ式>は，検索結果集合として評価されます。

<ORDER BY句>についての規則

<ORDER BY句>には，<問い合わせ式>の評価である検索結果集合に対して，検索結果要素を並べ替えるためのソート方法を指定します。

(3)　<問い合わせ指定>

形式

<問い合わせ指定> ::= SELECT 〔 <集合指定子> 〕
　　　　　　　　　　<選択項目の並び> <検索対象式>
<選択項目の並び> ::= <アスタリスク>
　　　　　　　　　 ｜<選択項目> 〔 { <コンマ> <選択項目> }... 〕
<選択項目> ::= <一次子>

<選択項目>および<選択項目の並び>についての規則

<選択項目の並び>には，検索を実行した場合の結果として出力する項目を指定します。一つまたは複数の<選択項目>（<選択項目の並び>）と<検索対象式>を指定することで，検索結果集合が求められます。

<選択項目>に指定できるプロパティは，<検索対象式>に指定したクラスに定義されているプロパティだけです。

<選択項目の並び>に<アスタリスク>を指定できるのは，<検索対象式>の中の<Exists述語>で指定された<副問い合わせ>の中だけです。

<検索対象式>中の<比較述語>や<In述語>で副問い合わせを指定する場合は，それぞれの述語によって求める検索結果と整合性のあるデータ型の項目を<選択項目>として指定してください。

<選択項目>の<一次子>に指定できる要素は，<プロパティ指定>，<集合関数>または<ルーチンの起動>だけです。
<ルーチンの起動>に指定できる関数については，「4.5.9　関数指定の構文規則」を参照してください。

<選択項目>に，VariableArray型プロパティ以外のObject型プロパティを直接指定することはできません。オブジェクトリファレンスであるObject型プロパティを指定する場合は，oiidstr関数によって，OIID文字列に変換して指定してください。

<集合指定子>についての規則

<集合指定子>は，検索結果集合内の結果として同じ要素が返却された場合に，その重複した要素を排除（重複排除）する場合に指定します。

DISTINCTを指定すると，検索結果集合に対して重複排除が実行され，重複を排除した検索結果集合が返却されます。

ALLを指定すると，重複している要素も含めて，すべての検索結果集合が返却されます。

省略した場合は，ALLが仮定されます。

<選択項目>にVariableArray型プロパティを指定した場合は，<集合指定子>にDISTINCTは指定できません。DISTINCTを指定できる選択項目のデータ型については，データベースの制限に従います。

アクセス制御機能を使用している場合，<集合指定子>にDISTINCTは指定できません。

(4)　<検索対象式>

形式

<検索対象式> ::= <FROM句>
　　　　　　　　〔 <WHERE句> 〕
　　　　　　　　〔 <GROUP BY句> 〕
　　　　　　　　〔 <HAVING句> 〕

なお，<WHERE句>，<GROUP BY句>および<HAVING句>は，省略できます。

(5)　<FROM句>

<FROM句>には，検索対象になる一つまたは複数のクラスを指定します。複数のクラスを検索対象に指定する場合には，結合条件も指定できます。

edmSQLでは，結合方法として，次の方法が使用できます。

複数のクラスを並べて指定した暗黙的な結合

結合種別に内部結合（INNER JOIN）を指定した結合

結合種別に左外部結合（LEFT OUTER JOIN）を指定した結合

形式

<FROM句> ::= FROM <検索対象>
<検索対象> ::=  <検索対象参照リスト>
　　　　　　　｜<結合された検索対象>
<検索対象参照リスト> ::= <検索対象参照>
　　　　　　　　　　　  〔{ <コンマ> <検索対象参照> }...〕
<検索対象参照> ::= <クラス名> 〔<相関名>〕

<結合された検索対象> ::= <条件指定結合>
<条件指定結合> ::= <検索対象一次子> 〔 <結合種別> 〕
　　　　　　　　　　JOIN <検索対象参照> <結合指定>

<検索対象一次子> ::= <検索対象参照>
　　　　　　　　　　　　｜<結合された検索対象>
　　　　　　　　　　　　｜<左括弧><結合された検索対象><右括弧>

<結合指定> ::= <結合条件>
<結合条件> ::= ON <検索条件>

<結合種別> ::= INNER
　　　　　　　｜<外部結合種別> 〔 OUTER 〕
<外部結合種別> ::= LEFT

<検索対象>についての規則

<検索対象>には<検索対象参照リスト>を指定します。<検索対象参照リスト>として<コンマ>で区切った<検索対象参照>を指定すると，それぞれの<検索対象参照>は暗黙的な結合で結合されて，検索対象として扱われます。
暗黙的な結合によって検索対象を結合した場合は，結合条件を<WHERE句>に指定することで，内部結合を指定した場合と同じ結合が表現できます。<WHERE句>に結合条件を指定しない場合は，指定したクラスの直積空間が検索の対象になります。

<結合された検索対象>についての規則

<結合された検索対象>は，複数の検索対象（クラス）を明示的に結合種別と結合条件を指定して結合する場合に指定します。

<条件指定結合>についての規則

<条件指定結合>には，内部結合（INNER JOIN）または左外部結合（LEFT OUTER JOIN）が指定できます。

<条件指定結合>では，<結合種別>の左側に指定する<検索対象一次子>に，さらに<結合された検索対象>を指定できます。つまり，結合のネストができます。

<条件指定結合>を指定する場合は，必ず<結合指定>（ON条件）を指定してください。

<結合条件>についての規則

<結合条件>に指定するプロパティには，その<結合条件>を含む<検索対象一次子>および<検索対象>で指定しているクラスのプロパティ，またはその<問い合わせ指定>の外側の検索対象のクラスのプロパティを指定してください。

<結合種別>についての規則

内部結合を指定する場合は，<結合種別>に「INNER」を指定します。内部結合を指定すると，指定したクラスの直積空間のうち，<結合条件>を満たす結果の集合が検索対象になります。<結合条件>に結合キーとして指定したプロパティがNULL値の場合，<結合条件>を満たす集合が存在しないので，指定したクラスの直積空間は検索対象にはなりません。このため，結合を指定したどちらのクラスのオブジェクトも検索対象になりません。

左外部結合を指定する場合は，<結合種別>に「LEFT」または「LEFT OUTER」を指定します。外部結合を指定した場合，<結合条件>に結合キーとして指定したプロパティがNULL値であっても，<結合種別>の左側に指定した<検索対象一次子>のクラスのオブジェクトは，すべて検索対象になります。この場合，<結合種別>の右側に指定した検索対象のクラスのオブジェクトは存在しないことになるため，該当する項目にはNULL値が設定されます。

<結合種別>を省略すると，「INNER」が仮定されます。

<FROM句>全体についての規則

次の項目については，データベースの制限に従います。
結合できるクラスの数や，結合で指定できるネストの深さ。
<結合条件>に指定できるプロパティ。
実行できる結合および結合の組み合わせ。

一つのFROM句内で，相関名は重複できません。また，検索対象クラスのクラス名と相関名も，重複できません。

FROM句で指定する<クラス名>および<相関名>の有効範囲は，次のとおりです。副問い合わせでこれらの<クラス名>および<相関名>を指定するときには，ご注意ください。

<クラス名>と<相関名>の有効範囲

FROM句で指定した<相関名>および<相関名>なしで指定した<クラス名>の有効範囲は，その<FROM句>を含む<問い合わせ指定>内全体です。したがって，その<問い合わせ指定>内にある<副問い合わせ>でも有効になります。

<相関名>を指定した<クラス名>の有効範囲は，そのFROM句を含む<問い合わせ指定>だけです。したがって，<問い合わせ指定>内にある<副問い合わせ>では，その名前は有効になりません。

(6)　<WHERE句>

<WHERE句>には，検索条件を指定します。

検索対象のオブジェクトに対して，<WHERE句>で指定した<検索条件>が真である場合に，そのオブジェクトが検索結果として取得できます。取得した検索結果は，<選択項目>に指定した項目の値として取得できます。

形式

<WHERE句> ::= WHERE <検索条件>

<検索条件>については，「4.5.8　述語の構文規則」を参照してください。

(7)　<副問い合わせ>

形式

<副問い合わせ> ::=<左括弧> <問い合わせ式> <右括弧>

<副問い合わせ>についての規則

<副問い合わせ>は，<In述語>，<比較述語>または<Exists述語>の対象として指定します。それぞれの述語については，「4.5.8　述語の構文規則」を参照してください。

<副問い合わせ>の<選択項目>にVariableArray型プロパティは指定できません。

アクセス制御機能を使用している場合も，<副問い合わせ>ではアクセス制御は実行されません。<副問い合わせ>の検索結果として取得できる検索結果には，アクセス権を持たないものが含まれる可能性があります。

<副問い合わせ>の外側に指定したクラスのプロパティを<副問い合わせ>で指定する場合は，<副問い合わせ>で指定するプロパティに<プロパティ修飾子>を指定してください。

(8)　GROUP BY句

<GROUP BY句>には，複数のオブジェクトを一つのグループとする条件を指定します。

形式

<GROUP BY句> ::= GROUP BY <グループ化項目の並び>
<グループ化項目の並び> ::= <グループ化項目>
　　　　　　　　　　　[ { <コンマ> <グループ化項目> }... ]
<グループ化項目> ::= <一次子>

<GROUP BY句>全体についての規則

GROUP BY句で指定したプロパティの検索結果がすべて同じオブジェクトを一つのグループとして，検索結果をグループごとに取得できます。

GROUP BY句にはプロパティだけが指定できます。

<グループ化項目の並び>に指定できるプロパティは，GROUP BY句を指定した問い合わせのFROM句で指定したクラスのプロパティです。

<グループ化項目の並び>に指定できる <一次子 > の最大数は，前提となるDBMSの仕様に制限されます。

SELECT句に指定できる選択項目はGROUP BY句で指定したプロパティおよび集合関数です。

オブジェクト型，バイナリ型のプロパティ，特殊なプロパティおよび関数はGROUP BY句に指定できません。

同一のプロパティを重複してGROUP BY句に指定することはできません。

(9)　HAVING句

<HAVING句>には，GROUP BY句，WHERE句，FROM句の結果，得られる各グループを選択する条件を指定します。

形式

<HAVING句> ::= HAVING <検索条件>

<HAVING句>全体についての規則

GROUP BY句，WHERE句，またはFROM句の結果，得られる各グループを選択する条件を指定します。

NULL述語およびLIKE述語はHAVING句に直接指定できません。

HAVING句に指定できるプロパティは，GROUP BY句で指定したプロパティ，集合関数の引数として指定したプロパティ，または外側の問い合わせのFROM句に指定したクラスのプロパティです。

4.5.7　スカラー式表現の構文規則

値は，スカラー式によって表現できます。スカラー式で表現できる値は，プロパティの指定，ルーチン起動，数値関数および集合関数によって得られる値です。

＜この項の構成＞

(1)　形式

(2)　<プロパティ指定>

(3)　<要素参照>

(4)　<フィールド参照>

(5)　<ルーチンの起動>

(6)　<数値関数>

(7)　<集合関数>

(8)　<値式>

(1)　形式

!! <プロパティ指定>の形式
<プロパティ指定> ::= 〔<プロパティ修飾子> <ピリオド>〕 <プロパティ名>
<プロパティ修飾子> ::= <相関名>     !! <相関名>による修飾
　　　　　　　　　　 ｜<クラス指定> !! <クラス指定>による修飾

!! <要素参照>の形式
<要素参照> ::= <一次子>
               <左角括弧> ANY <右角括弧>

!! <フィールド参照>の形式
<フィールド参照> ::= <要素参照> <ピリオド> <フィールド名>
<フィールド名> ::= <プロパティ名>

!! <ルーチンの起動>の形式
<ルーチンの起動> ::= <ルーチン名> <引数リスト>
<引数リスト> ::= <左括弧> 〔 <引数>
　　　　　　　　　　〔 { <コンマ> <引数> }... 〕 〕 <右括弧>
<引数> ::=  <値式>
　　　　　｜<値式> AS <データ型指定>
<ルーチン名> ::= <関数指定>

<データ型指定> ::= INT
　　　　　　　　 ｜INTEGER
　　　　　　　　 ｜BOOL
　　　　　　　　 ｜BOOLEAN
　　　　　　　　 ｜STRING <左括弧> <符号なし数値> <右括弧>
　　　　　　　　 ｜BINARY <左括弧> <バイナリ長> <右括弧>

<バイナリ長> ::=  <符号なし数値>
　　　　　　　　｜<バイナリ長トークン>

!! <数値関数>の形式
<数値関数> ::= <絶対値関数>
<絶対値関数> ::= ABS <左括弧> <値式> <右括弧>

!! <集合関数>の形式
<集合関数> ::= COUNT <左括弧> <アスタリスク> <右括弧>
　　　　　　 ｜<一般集合関数>
<一般集合関数> ::= <集合関数種別>
　　　　　　　　　 <左括弧> 〔 <集合指定子> 〕 <値式> <右括弧>
<集合関数種別> ::= COUNT
<集合指定子> ::= DISTINCT｜ALL

!! <値式>の形式
<値式> ::= <一次子>
　　　　　｜<符号> <一次子>
　　　　　｜<値式> <+符号> <値式>
　　　　　｜<値式> <-符号> <値式>
　　　　　｜<値式> <アスタリスク> <値式>
　　　　　｜<値式> <斜線> <値式>
　　　　　｜<値式> <文字列連結演算子> <値式>
<一次子> ::= <左括弧> <値式> <右括弧>
　　　　　 ｜<プロパティ指定>
　　　　　 ｜<符号なし値指定>
　　　　　 ｜<集合関数>
　　　　　 ｜<数値関数>
　　　　　 ｜<ルーチンの起動>
　　　　　 ｜<フィールド参照>
<符号なし値指定> ::= <符号なし数値リテラル>
　　　　　　　　　　｜<文字列リテラル>
　　　　　　　　　　｜<疑問符>
　　　　　　　　　　｜<論理リテラル>
<値指定> ::= 〔<符号>〕<符号なし数値リテラル>
　　　　　　｜<文字列リテラル>
　　　　　　｜<疑問符>
　　　　　　｜<論理リテラル>

(2)　<プロパティ指定>

形式

<プロパティ指定> ::= 〔<プロパティ修飾子> <ピリオド>〕 <プロパティ名>
<プロパティ修飾子> ::= <相関名>     !! <相関名>による修飾
　　　　　　　　　　 ｜<クラス指定> !! <クラス指定>による修飾

<プロパティ指定>についての規則

同じ名称のプロパティを持つクラスを結合する場合など，<プロパティ名>だけではプロパティを一意に識別できない場合は，<プロパティ修飾子>を指定して<プロパティ指定>が一意になるようにしてください。

<プロパティ修飾子>についての規則

<相関名>および<クラス指定>として指定できるのは，<FROM句>に指定したものだけです。

<プロパティ指定>の指定例を，次の表に示します。

表4-36　<プロパティ指定>の指定例

指定例 | 説明
myProp_Foo | <識別子>によって<プロパティ名>だけを指定しています。
ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​' | <ID文字列>によって<プロパティ名>だけを指定しています。
myClass_XX.myProp_Foo | <プロパティ名>を<クラス名>によって修飾して指定しています。
P0.myProp_Foo | <プロパティ名>を<相関名>によって修飾して指定しています。
myClass_XX.ID'FA7DA34B-CFF3-11d3-A03E-00A0C9967923​' | <ID文字列>によって表現した<プロパティ名>を，<クラス名>によって修飾して指定しています。

(3)　<要素参照>

<要素参照>には，VariableArray型プロパティの要素を参照するための表現を指定します。

形式

<要素参照> ::= <一次子>
               <左角括弧> ANY <右角括弧>

<要素参照>についての規則

<要素参照>は，<WHERE句>だけで指定できます。

<要素参照>は，必ず<フィールド参照>とともに指定してください。

要素を指定する値には，「ANY」以外の要素は指定できません。

<一次子>には，<プロパティ指定>だけが指定できます。

(4)　<フィールド参照>

<フィールド参照>では，VariableArray型プロパティの要素を参照する時の，フィールドの参照を表現します。

形式

<フィールド参照> ::= <要素参照> <ピリオド> <フィールド名>
<フィールド名> ::= <プロパティ名>

<フィールド参照>についての規則

<フィールド参照>は，VariableArray型プロパティの要素を参照する場合だけ指定します。

<フィールド名>には，VariableArray型プロパティの<プロパティ名>を指定します。

例えば，「VariableArray型プロパティAuthorsの要素Ageが30である」という指定は，次のように記述します。

Authors[ANY].Age = 30

(5)　<ルーチンの起動>

<ルーチンの起動>には，edmSQLで提供する関数を起動するための表現を指定します。

edmSQLで使用するルーチンは，関数だけです。

edmSQLによって起動する関数を次に示します。なお，これらの関数名はすべて，<予約されないキーワード>として登録されています。

全文検索を実行するための関数

contains関数

contains_with_score関数

score関数

extracts関数

概念検索を実行するための関数

concept_with_score関数

score_concept関数

変換関数

oiidstr関数

objref関数

oiid関数

それぞれの関数の詳細については，「4.5.9　関数指定の構文規則」を参照してください。

形式

<ルーチンの起動> ::= <ルーチン名> <引数リスト>
<ルーチン名> ::= <関数指定>
<引数リスト> ::= <左括弧> 〔 <引数>
　　　　　　　　〔 { <コンマ> <引数> }... 〕 〕 <右括弧>
<引数> ::= <値式>
　　　　 ｜<値式> AS <データ型指定>

<データ型指定> ::= INT
　　　　　　　　 ｜INTEGER
　　　　　　　　 ｜BOOL
　　　　　　　　 ｜BOOLEAN
　　　　　　　　 ｜STRING <左括弧> <符号なし数値> <右括弧>
　　　　　　　　 ｜BINARY <左括弧> <バイナリ長> <右括弧>

<バイナリ長> ::= <符号なし数値>
　　　　　　　 ｜<バイナリ長トークン>
!!<バイナリ長トークン>については，「4.5.4(4)<トークン>」を
!!参照してください。

<ルーチンの起動>についての規則

関数の<引数リスト>に指定できる引数の数は，<ルーチン名>に指定した，それぞれの関数の仕様に従います。

<引数>に指定できる<一次子>は，<ルーチン名>に指定した関数の仕様に従います。各引数は，関数に規定された順序で指定する必要があります。

<引数リスト>に<一次子>として<?パラメタ>を指定する場合は，AS<データ型指定>によって，データ型を明示してください。
また，<?パラメタ>以外の<一次子>に対してAS<データ型指定>を指定することはできません。

AS<データ型指定>についての規則

AS<データ型指定>に指定できるデータ型について説明します。関数の仕様に従って，適切なデータ型を指定してください。また，String型およびBinary型を指定する場合には，定義長も指定してください。
AS<データ型指定>に指定できる値と指定例を，次の表に示します。

表4-37　AS<データ型指定>に指定できる値と指定例

値
指定例

Boolean型の引数
BOOL
BOOLEAN
? AS BOOL
? AS BOOLEAN

Integer32型の引数
INT
INTEGER
? AS INT
? AS INTEGER

String型の引数
STRING(n※¹)
? AS STRING(3200)
定義長3200バイトのString型データ

Binary型の引数
BINARY(n※²)
? AS BINARY(256)
　定義長256バイトのBinary型データ
? AS BINARY(256k)
　定義長が256キロバイトのBinary型データ
? AS BINARY(256m)
　定義長が256メガバイトのBinary型データ
? AS BINARY(2g)
　定義長が2ギガバイトのBinary型データ

注※1

String型データの定義長を指定します。単位はバイトです。

注※2

Binary型データの定義長を指定します。次の単位が指定できます。

（省略）：バイト

k：キロバイト

m：メガバイト

g：ギガバイト

数字と単位の間に<区切り文字>を入れることはできません。

(6)　<数値関数>

<数値関数>としては，絶対値関数（ABS関数）があります。<数値関数>は，<結合条件>には指定できません。また，<SELECT句>には指定できません。

<数値関数>は，次の形式で定義されています。

<数値関数> ::= <絶対値関数>
<絶対値関数> ::= ABS <左括弧> <値式> <右括弧>

(a)　絶対値関数

<絶対値関数>の詳細について示します。

関数名

ABS

形式

ABS <左括弧> <値式> <右括弧>

引数

<値式>

Integer32型の値を指定します。

機能

<値式>の値の絶対値を算出します。

被演算子のデータ型

Integer32型

評価値

整数値（Integer32型）

(7)　<集合関数>

<集合関数>には，検索結果集合に対する演算を実行するための表現を指定します。

形式

<集合関数> ::= COUNT <左括弧> <アスタリスク> <右括弧>
　　　　　　｜<一般集合関数>
<一般集合関数> ::= <集合関数種別><左括弧> 〔 <集合指定子> 〕
　　　　　　　　　 <値式> <右括弧>
<集合関数種別> ::= COUNT
<集合指定子> ::= DISTINCT｜ALL

<集合関数>についての規則

<集合関数>には，次の2種類があります。

COUNT(*)
検索結果の個数を算出します。

COUNT
検索結果のプロパティのキー数を算出します。

<集合指定子>についての規則

<集合指定子>では，演算対象である集合の要素に対して，同じ要素がある場合に，重複排除を実施するかどうかを指定します。DISTINCTかALLを指定します。

DISTINCTを指定した場合，演算の対象である要素に対して，重複排除が実施されてから，演算が実行されます。

ALLを指定した場合，重複排除は実施されません。

<集合指定子>を省略した場合は，「ALL」が仮定されます。
「COUNT(*)」を指定した場合には，「DISTINCT」の指定は無視されます。

<集合指定子>に「DISTINCT」を指定した場合，データベースによっては，この集合関数を選択項目とする問い合わせ指定の<集合指定子>指定が制限されることがあります。

アクセス制御機能を使用している場合，主問い合わせの選択項目に集合関数は指定できません。

(a)　COUNT(*)関数

COUNT(*)関数の詳細について説明します

関数名

COUNT(*)

形式

COUNT <左括弧> <アスタリスク> <右括弧>

引数

なし(アスタリスク)

機能

検索結果集合の要素の数を算出します。

評価値

整数値（Integer32型）

属性

この関数は，<SELECT句>に指定できます。

また，<ORDER BY句>のソートキーとして指定できます。

(b)　COUNT関数

COUNT関数の詳細について説明します。

関数名

COUNT

形式

COUNT <左括弧> 〔<集合指定子>〕 <値式> <右括弧>

引数

<値式>

Integer32型，String型，Boolean型の<プロパティ指定>だけが指定できます。

機能

検索結果集合から，<値式>に指定した要素の数を算出します。

評価値

整数値（Integer32型）

属性

この関数は，<SELECT句>に指定できます。

また，<ORDER BY句>のソートキーとして指定できます。

(8)　<値式>

<値式>とは，評価として値を得ることができる式の定義です。

形式

<値式> ::= <一次子>
　　　　　｜<符号> <一次子>
　　　　　｜<値式> <+符号> <値式>
　　　　　｜<値式> <-符号> <値式>
　　　　　｜<値式> <アスタリスク> <値式>
　　　　　｜<値式> <斜線> <値式>
　　　　　｜<値式> <文字列連結演算子> <値式>
<一次子> ::= <左括弧> <値式> <右括弧>
　　　　　 ｜<プロパティ指定>
　　　　　 ｜<符号なし値指定>｜<集合関数>｜<数値関数>
　　　　　 ｜<要素参照>
　　　　　 ｜<ルーチンの起動>｜<フィールド参照>
<符号なし値指定> ::= <符号なし数値リテラル>
　　　　　　　　　｜<文字列リテラル>
　　　　　　　　　｜<疑問符>
　　　　　　　　　｜<論理リテラル>
<値指定> ::= 〔<符号>〕<符号なし数値リテラル>
　　　　　　｜<文字列リテラル>｜<疑問符>｜<論理リテラル>

<値式>についての規則

<値式>内の演算子は，次の順序で評価されます。

演算子の評価順序

括弧内

単項演算子<符号>の<+符号>または<-符号>

<アスタリスク>または<斜線>

二項演算子の<+符号>，<-符号>または<結合演算子>

演算子の両側に指定する<値式>には，同じデータ型のものを指定してください。

演算の途中でオーバフローが発生したり，0で除算を実行したりした場合，NULL値が返却されるかエラーが発生するかについては，データベースに依存します。

指定できる演算子のネストの深さは，データベースの制限に従います。

<値指定>と<符号なし値指定>の違いは，符号が付けられるかどうかです。<値式>で指定できるのは，<符号なし値指定>です。符号を付ける場合は，<値式>を<符号>と<符号なし値指定>で構成してください。
<値指定>は，<In述語>などで使用します。

演算子の詳細

<値式>で指定する演算子の詳細を，次の表に示します。

表4-38　<値式>で指定する演算子の詳細

演算子
意味
被演算子の
データ型
評価値

<符号>
（単項演算子+）
値に正符号を付けます。評価値に変化はありません。
Integer32型
整数値（Integer32型）

<符号>
（単項演算子-）
値の符号を反転します。
Integer32型
整数値（Integer32型）

<+符号>
（+）
被演算子を加算します。
Integer32型
整数値（Integer32型）

<-符号>
（-）
左辺の被演算子から右辺の被演算子を減算します。
Integer32型
整数値（Integer32型）

<アスタリスク>
（*）
被演算子を乗算します。
Integer32型
整数値（Integer32型）

<斜線>
（/）
左辺の被演算子を右辺の被演算子で除算します。
Integer32型
整数値（Integer32型）

<文字列連結演算子>
（||）
文字列を連結します。
String型
文字列値（String型）

注※

edmSQLの<+符号>および<アスタリスク>では多項演算は実行できません。このため，多項演算と同じ演算を実行したい場合は，2項演算を組み合わせてください。

4.5.8　述語の構文規則

ここでは，述語の構文について説明します。

FROM句のON条件やWHERE句に指定する検索条件は，述語によって表現します。述語では，次のような演算ができます。

比較演算

論理演算

Between演算

In演算

Like演算

Null演算

Exists演算

これらの演算では，評価が「真」，「偽」または「不定」として得られます。

＜この項の構成＞

(1)　形式

(2)　<検索条件>

(3)　<述語>

(4)　<比較述語>

(5)　<論理述語>

(6)　<Between述語>

(7)　<In述語>

(8)　<Like述語>

(9)　<Null述語>

(10)　<Exists述語>

(1)　形式

!! <検索条件>の形式
<検索条件> ::= <左括弧> <検索条件> <右括弧>
　　　　　　　｜<述語>
　　　　　　　｜NOT <検索条件>
　　　　　　　｜<検索条件> OR <検索条件>
　　　　　　　｜<検索条件> AND <検索条件>

!! <述語>の形式
<述語> ::= <比較述語>
　　　　　｜<論理述語>
　　　　　｜<Between述語>
　　　　　｜<In述語>
　　　　　｜<Like述語>
　　　　　｜<Null述語>
　　　　　｜<Exists述語>

!! <比較述語>の形式
<比較述語> ::= <値式> <比較演算子> <比較述語値式>
<比較述語値式> ::= <値式>｜<副問い合わせ>
<比較演算子> ::= <等号演算子>
　　　　　　　｜<不等号演算子>
　　　　　　　｜<小なり演算子>
　　　　　　　｜<大なり演算子>
　　　　　　　｜<小なり等号演算子>
　　　　　　　｜<大なり等号演算子>

!! <論理述語>の形式
<論理述語> ::= <値式> IS TRUE

!! <Between述語>の形式
<Between述語> ::= <値式>
　　　　　　　　　〔 NOT 〕 BETWEEN <値式> AND <値式>

!! <In述語>の形式
<In述語> ::= <値式> 〔 NOT 〕 IN <In述語値>
<In述語値> ::= <副問い合わせ>
　　　　　　  ｜<左括弧> <In項目リスト> <右括弧>
<In項目リスト> ::= <値指定> { <コンマ> <値指定> }...

!! <Like述語>の形式
<Like述語> ::= <文字列Like述語>
<文字列Like述語> ::= <値式>
　　　　　　　　　　〔 NOT 〕 <Like種別> <パターン文字列>
　　　　　　　　　　〔 ESCAPE <エスケープ文字> 〕
<Like種別> ::=  LIKE
　　　　　　　｜XLIKE
<パターン文字列> ::= <値指定>
<エスケープ文字> ::= <値指定>

!! <Null述語>の形式
<Null述語> ::= <値式> IS 〔 NOT 〕 NULL

!! <Exists述語>の形式
<Exists述語> ::= EXISTS <副問い合わせ>

(2)　<検索条件>

<検索条件>は，<FROM句>のON条件式<結合指定>や，<WHERE句>に指定します。<検索条件>では，複数の<検索条件>の論理演算を指定できます。

形式

<検索条件> ::= <左括弧> <検索条件> <右括弧>
　　　　　　　｜<述語>
　　　　　　　｜NOT <検索条件>
　　　　　　　｜<検索条件> OR <検索条件>
　　　　　　　｜<検索条件> AND <検索条件>

<検索条件>についての規則

<検索条件>の論理演算は，次の順序で評価されます。

論理演算の評価順序

括弧内

NOT

AND

OR

論理演算で指定できるネスト数については，データベースの制限に従います。

edmSQLでは，DMAの検索モデルのedmQueryOperator_AndNotオペレータに該当する演算子はありません。指定する場合は，ANDとNOTを組み合わせて指定してください。

edmSQLで提供している論理演算子ANDおよびORは，2項演算子です。DMAの検索モデルのオペレータの仕様とは異なりますので，ご注意ください。複数の被演算子を指定したい場合は，演算子を複数組み合わせて指定してください。
例えば，「a」，「b」，「c」および「d」のAND演算は，「a AND b AND c AND d」または「((a AND b) AND c) AND d」のように表記してください。

論理演算子の詳細

否定演算

演算子：NOT

形式：NOT <検索条件>

否定演算の演算結果を次の表に示します。

表4-39　否定演算の演算結果

NOT | 演算結果
真 | 偽
偽 | 真
不定 | 不定

論理和演算

演算子：OR

形式：<検索条件> OR <検索条件>

論理和演算の演算結果を次の表に示します。

表4-40　論理和演算の演算結果

OR | 真 | 偽 | 不定
真 | 真 | 真 | 真
偽 | 真 | 偽 | 不定
不定 | 真 | 不定 | 不定

論理積演算

演算子：AND

形式：<検索条件> AND <検索条件>

論理積演算の演算結果を次の表に示します。

表4-41　論理積演算の演算結果

AND | 真 | 偽 | 不定
真 | 真 | 偽 | 不定
偽 | 偽 | 偽 | 偽
不定 | 不定 | 偽 | 不定

(3)　<述語>

<述語>では，edmSQLで提供されている述語の一覧が定義されています。

形式

<述語> ::= <比較述語>
　　　　　｜<論理述語>
　　　　　｜<Between述語>
　　　　　｜<In述語>
　　　　　｜<Like述語>
　　　　　｜<Null述語>
　　　　　｜<Exists述語>

(4)　<比較述語>

<比較述語>は，演算子の両辺の比較によって結果を返却します。

形式

<比較述語> ::= <値式> <比較演算子> <比較述語値式>
<比較述語値式> ::= <値式>｜<副問い合わせ>
<比較演算子> ::= <等号演算子>｜<不等号演算子>｜<小なり演算子>
　　　　　　　　　　　　　　 ｜<大なり演算子>｜<小なり等号演算子>
　　　　　　　　　　　　　　 ｜<大なり等号演算子>

<比較述語>の評価

演算子が示す比較演算子が，両辺の被演算子の関係を満たす場合，「真」になります。

演算子の示す比較条件が，両辺の被演算子の関係を満たさない場合，「偽」になります。

指定した被演算子がNULL値の場合，「不定」になります。

指定した被演算子が<副問い合わせ>であり，その検索結果集合が空の場合，「不定」になります。

<比較述語>の規則

<比較演算子>の両辺に指定する被演算子には，同じデータ型の値を指定してください。値がNULL値である場合も，同じデータ型にしてください。

<比較演算子>によって比較できるのは，データ型がBoolean型，Integer32型，String型およびObject型の値です。ただし，演算子によって使用できるデータ型は異なります。

比較できるデータ型は，データベースによって制限されます。

<副問い合わせ>が指定できるのは，<比較演算子>の右辺だけです。

<副問い合わせ>を<比較演算子>の被演算子に指定する場合，<副問い合わせ>で指定できる<選択項目>は一つだけです。また，<副問い合わせ>の検索結果として得られる検索件数も，1件または0（空集合）になる必要があります。

<FROM句>に指定する<比較述語>には，<副問い合わせ>は指定できません。

VariableArray型プロパティを指定する場合は，必ず<フィールド参照>（要素指定の添え字はANY）を指定して，比較できるデータ型のプロパティとして指定してください。また，VariableArray型プロパティのフィールド参照同士の比較はできません。

<比較述語>で使用する演算子の詳細

演算子の詳細を，次の表に示します。

表4-42　<比較述語>で使用できる演算子の詳細

演算子
意味
比較可能なデータ型

<等号演算子>
（=）
値が等しい場合に「真」になります。

Boolean型

Integer32型

String型

Object型

<不等号演算子>
（<>）
値が等しくない場合に「真」になります。

Boolean型

Integer32型

String型

<小なり演算子>
（<）
左辺の値が右辺の値よりも小さい場合に「真」になります。

Integer32型

String型

<大なり演算子>
（>）
左辺の値が右辺の値よりも大きい場合に「真」になります。

Integer32型

String型

<小なり等号演算子>
（<=）
左辺の値が右辺の値よりも小さいか，等しい場合に「真」になります。

Integer32型

String型

<大なり等号演算子>
（>=）
左辺の値が右辺の値よりも大きいか，等しい場合に「真」になります。

Integer32型

String型

(5)　<論理述語>

<論理述語>では，Boolean型の値を評価して結果を返却します。

形式

<論理述語> ::= <値式> IS TRUE

<論理述語>の評価

<値式>のBoolean型の値が，真（TRUE）の場合に「真」になります。

<値式>のBoolean型の値が，真（TRUE）以外の場合，「偽」になります。

<論理述語>の規則

<値式>に指定できるのは，戻り値がBoolean型の<ルーチンの起動>だけです。なお，<論理述語>に指定する<ルーチンの起動>で呼び出せる関数は，HiRDB Text Search Plug-inと連携するための，次の関数だけです。
contains関数
contains_with_score関数
concept_with_score関数
例えば，WHERE句に，次のように指定できます。

　WHERE contains(edmProp_StIndex, '{"コンピュータ"}') IS TRUE

(6)　<Between述語>

形式

<Between述語> ::= <値式>
　　　　　　　　　〔 NOT 〕 BETWEEN <値式> AND <値式>

<Between述語>の評価

第1の<値式>を「値式1」，第2の<値式>を「値式2」，第3の<値式>を「値式3」とした場合，「値式1」の値が，「値式2」と「値式3」の範囲内の値の場合，「真」になります。範囲外の場合，「偽」になります。

第1の<値式>を「値式1」，第2の<値式>を「値式2」，第3の<値式>を「値式3」とした場合，BETWEEN述語は，次の表記と同じ意味を表します。
〔NOT〕((値式2 <= 値式1) AND (値式1 <= 値式3))

<Between述語>の規則

「値式2 ≦ 値式3」である必要はありません。

(7)　<In述語>

形式

<In述語> ::= <値式> 〔 NOT 〕 IN <In述語値>
<In述語値> ::= <副問い合わせ>
　　　　　　  ｜<左括弧> <In項目リスト> <右括弧>
<In項目リスト> ::= <値指定> { <コンマ> <値指定> }...

<In述語>の評価

第1の<値式>が，<In述語値>の中の任意の値と一致する場合，<IN述語>は「真」になります。
NOTを指定した場合は，第1の<値式>が<In述語値>の中の任意の値と一致するとき，「偽」になります。

第1の<値式>が，<In述語値>の中のすべての値と一致しない場合，<IN述語>は「偽」になります。
NOTを指定した場合は，第1の<値式>が，<In述語値>の中のすべての値と一致しないとき，「真」になります。

<In述語>の規則

第1の<値式>のデータ型と，<In述語値>のデータ型は一致させてください。指定できるデータ型は，Boolean型，Integer32型，String型およびObject型です。

データベースによって，指定できるデータ型や，<In項目リスト>に指定できる<値指定>が制限される場合があります。

<In項目リスト>を指定する場合は，第1の<値式>に<値指定>は指定できません。

<In述語＞で<副問い合わせ>の検索結果と比較する場合，<副問い合わせ>で指定できる<選択項目>は一つだけです。

<副問い合わせ>の検索結果集合が空集合の場合は，<IN述語>は「偽」になります。
NOTを指定した場合に，<副問い合わせ>の検索結果集合が空集合のときは，「真」になります。

(8)　<Like述語>

形式

<Like述語> ::= <文字列Like述語>
<文字列Like述語> ::= <値式>
　　　　　　　　　　〔 NOT 〕 <Like種別> <パターン文字列>
　　　　　　　　　　〔 ESCAPE <エスケープ文字> 〕
<Like種別> ::= LIKE
　　　　　　　｜XLIKE
<パターン文字列> ::= <値指定>
<エスケープ文字> ::= <値指定>

パターンの詳細

<パターン文字列>

_：1文字の任意の文字を示します。

%：0文字以上の任意の文字数の文字列を示します。

<エスケープ文字>

<エスケープ文字>は，パターン文字列中に「_」や「%」を記述したい場合に指定する文字です。<エスケープ文字>には，任意の１文字を指定します。

<Like述語>の評価

<値式>の値が，<パターン文字列>で表すパターンと一致した場合，「真」になります。
NOTを指定した場合は，<値式>の値が，<パターン文字列>の表すパターンと一致したとき，「偽」になります。

<値式>の値が，<パターン文字列>の表すパターンと一致しない場合，「偽」になります。
NOTを指定した場合，<値式>の値が，<パターン文字列>の表すパターンと一致しないとき，「真」になります。

<Like述語>の規則

<値式>に指定できるのは，String型の値だけです。

<パターン文字列>に指定できるのは，String型の値だけです。

<エスケープ文字>に指定できるのは，String型の値だけです。

<Like述語>は，<FROM句>には指定できません。

データベースによっては，<値式>，<パターン文字列>，<エスケープ文字>に指定できる値に制限があります。また，処理性能を上げるための指定方法については，データベースの使用方法に従ってください。

指定した文字の認識のされ方は，String型がデータベース上でどの文字列型に対応するかに依存します。

<Like種別>の規則

<Like種別>がLIKEの場合，パターン文字列とのパターン一致で，大文字・小文字を区別して評価します。

<Like種別>がXLIKEの場合，パターン文字列とのパターン一致で，大文字・小文字を区別しないで評価します。

(9)　<Null述語>

形式

<Null述語> ::= <値式> IS 〔 NOT 〕 NULL

<Null述語>の評価

<値式>がNULL値の場合に「真」になります。
NOTを指定した場合は，<値式>がNULL値のとき，「偽」になります。

<値式>がNULL値でない場合に「偽」になります。
NOTを指定した場合は，<値式>がNULL値でないとき，「真」になります。

<Null述語>の規則

<値式>に使用できるデータ型は，Boolean型，Integer32型，String型およびObject型（VariableArray型を除く）のプロパティです。ただし，Boolean型のプロパティは，NULL値をとることができません。

データベースによって，指定できるデータ型に制限があります。

(10)　<Exists述語>

形式

<Exists述語> ::= EXISTS <副問い合わせ>

<Exists述語>の評価

<副問い合わせ>の検索結果が，空集合でなければ「真」になります。

<副問い合わせ>の検索結果が，空集合の場合は「偽」になります。

<Exists述語>の規則

<副問い合わせ>の検索結果が空集合とは，検索結果の件数が0件であることです。つまり，検索結果の件数が1以上の場合に，<Exists述語>は「真」になります。

<Exists述語>の<副問い合わせ>では，SELECT句の<選択項目>には，<アスタリスク>が指定できます。これ以外の<選択項目>に，<アスタリスク>は指定できません。

4.5.9　関数指定の構文規則

edmSQLでは，基本的なSQLの文法で表現できないDocumentBrokerの拡張検索機能を，関数として提供します。

edmSQLが提供する関数には，HiRDBの拡張検索機能を使用するための関数と，edmSQLで独自に拡張した関数があります。

それぞれの関数について説明します。

HiRDBの拡張検索機能（HiRDB Text Search Plug-inおよびHiRDB Text Search Plug-in Conceptual Extensionを使用した検索の機能）を使用するための関数（DBMS関数）
DBMS関数には，次の2種類があります。

全文検索関数（概念検索を含まない全文検索をするための関数）

概念検索関数

DBMS関数は，データベース上で，データベースの制限に従って実行されます。

edmSQLで独自に拡張した関数（edmSQL関数）
edmSQL関数として提供されているのは，変換関数です。

edmSQL関数は，データベースへのアクセスの前後で実行されます。

なお，この項で説明する<関数>には，SQLの基本機能として提供されている<集合関数>および<数値関数>は含みません。

＜この項の構成＞

(1)　文書検索関数（DBMS関数）

(2)　変換関数（edmSQL関数）

(1)　文書検索関数（DBMS関数）

<文書検索関数>には，次の機能があります。

全文検索機能（概念検索を含まない全文検索）

概念検索機能

<文書検索関数>では，次に示す関数が定義されています。なお，以降，関数の説明で使用する"<全文検索関数>"という表記は，概念検索の機能を持たない全文検索を実行するための関数を表します。

全文検索関数

contains関数

cotains_with_score関数

score関数

extracts関数

概念検索関数

concept_with_score関数

score_concept関数

なお，全文検索関数を実行する場合は，HiRDB Text Search Plug-inが必要です。

また，概念検索関数を実行する場合は，HiRDB Text Search Plug-inおよびHiRDB Text Search Plug-in Conceptual Extensionが必要です。

(a)　形式

!! <文書検索関数>の形式
<文書検索関数> ::= <全文検索関数>
　　　　　　　　　｜<概念検索関数>

!! <全文検索関数>の形式
<全文検索関数> ::= <contains関数>
　　　　　　　　　｜<contains_with_score関数>
　　　　　　　　　｜<score関数>
　　　　　　　　　｜<extracts関数>

!! <contains関数>の形式
<contains関数> ::= contains <左括弧><プロパティ指定>
　　　　　　　　　　　　　　<コンマ><全文検索条件><右括弧>

!! <contains_with_score関数>の形式
<contains_with_score関数> ::= contains_with_score
　　　　　　　　　　　　　　　 <左括弧><プロパティ指定>
　　　　　　　　　　　　　　　 <コンマ><全文検索条件><右括弧>

!! <score関数>の形式
<score関数> ::= score <左括弧><プロパティ指定><右括弧>

!! <extracts関数>の形式
形式1
<extracts関数> ::= extracts <左括弧><プロパティ指定><コンマ>
　　　　　　　　　　　　　　<抽出対象構造文字列> <コンマ>
　　　　　　　　　　　　　　<全文検索条件> <コンマ>
　　　　　　　　　　　　　　<ハイライトタグ文字列> <右括弧>

形式2
<extracts関数> ::= extracts <左括弧><全文検索機能付き文字列型プロパティ><右括弧>

!! <概念検索関数>の形式
<概念検索関数> ::=  <concept_with_score関数>
　　　　　　　　　｜<score_concept関数>

!! <concept_with_score関数>の形式
<concept_with_score関数> ::= concept_with_score
　　　　　　　　　　　　　　　 <左括弧><プロパティ指定>
　　　　　　　　　　　　　　　 <コンマ><概念検索条件><右括弧>

!! <score_concept関数>の形式
<score_concept関数> ::= score_concept
　　　　　　　　　　　　　　　 <左括弧><プロパティ指定><右括弧>

!! <全文検索条件><概念検索条件><抽出構造文字列>および<ハイライトタグ文字列>の形式
<全文検索条件> ::= <文字列リテラル> | <?パラメタ>
<概念検索条件> :: = <?パラメタ>
<抽出対象構造文字列> ::= <文字列リテラル> | <?パラメタ>
<ハイライトタグ文字列> ::= <文字列リテラル> | <?パラメタ>

!! <全文検索条件>，<概念検索条件>，<抽出対象構造文字列>
!! および<ハイライトタグ文字列>の指定方法については，
!! マニュアル「HiRDB Text Search Plug-in」を参照してください。

(b)　<文書検索関数>

<文書検索関数>は，次の形式で定義されています。

<文書検索関数> ::= <全文検索関数>｜<概念検索関数>

<文書検索関数>の規則

<文書検索関数>は，HiRDB Text Search Plug-inの機能によって提供されている検索機能をedmSQLで使用するための関数です。
この関数で実行する検索の検索条件の指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。ただし，関数の第1引数には，列ではなくDocumentBrokerのプロパティを指定します。

第1引数の<プロパティ指定>に指定できるのは，その関数で指定できる<特殊なプロパティ>だけです。

<文書検索関数>は，<結合条件>には指定できません。

(c)　<全文検索関数>

全文検索関数には，次の種類があります。なお，この関数で実行する全文検索に，概念検索は含まれません。

contains関数
全文検索を実行します。

contains_with_score関数
全文検索を実行すると同時に，スコア値を算出します。

score関数
contains_with_score関数で算出したスコア値を取得します。

extracts関数
文書からテキストデータを抽出します。抽出するデータは，構造を持つ文書の特定の構造にハイライトタグを埋め込んだデータです。

(d)　<contains関数>

contains関数の詳細について説明します。

関数名

contains

形式

contains <左括弧><プロパティ指定><コンマ><全文検索条件><右括弧>

引数

<プロパティ指定>（<特殊なプロパティまたは全文検索機能付き文字列型プロパティ>）

●特殊なプロパティの場合

検索対象の文書クラスが特定できる形式でプロパティを指定します。

指定できるのは，次の<特殊なプロパティ>です。

edmProp_StIndexプロパティ

edmProp_TextIndexプロパティ

edmProp_Contentプロパティ

edmProp_ConceptTextIndexプロパティ

edmProp_ConceptStIndexプロパティ

●全文検索機能付き文字列型プロパティの場合

全文検索機能付き文字列型プロパティを指定します。

<全文検索条件>（String型の値：STRING(32000)）

全文検索条件を指定します。

検索タームを含む文書が検索されます。

<全文検索条件>には，検索タームのほか，構造指定検索，同義語異表記展開検索および近傍条件検索などを実行するための検索条件を文字列で指定します。指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

<全文検索条件>に<?パラメタ>を指定する場合は，次のようにAS<データ型指定>をします。

? AS STRING(32000)

機能

<プロパティ指定>で指定したプロパティに対応する文書の内容（コンテント）に対して，<全文検索条件>で指定した条件で，全文検索を実行します。

評価値

Boolean型（評価）

属性

この関数は，<WHERE句>の<検索条件>に指定できます。

(e)　<contains_with_score関数>

contains_with_score関数の詳細について説明します。

関数名

contains_with_score

形式

contains_with_score <左括弧><プロパティ指定><コンマ><全文検索条件><右括弧>

引数

<プロパティ指定>（<特殊なプロパティ>）

検索対象の文書クラスが特定できる形式でプロパティを指定します。

指定できるのは，次の<特殊なプロパティ>です。

edmProp_TextIndexプロパティ

edmProp_StIndexプロパティ

edmProp_Contentプロパティ

edmProp_ConceptTextIndexプロパティ

edmProp_ConceptStIndexプロパティ

<全文検索条件>（String型の値：STRING(32000)）

全文検索条件を指定します。全文検索条件に指定した検索タームが含まれる文書が検索されます。定義長は32,000バイトです。

<全文検索条件>には，検索タームのほか，構造指定検索や同義語異表記展開検索，近傍条件検索などの検索を実行するための検索条件を文字列で指定します。指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

<全文検索条件>に<?パラメタ>を指定する場合は，次のようにAS<データ型指定>をします。

? AS STRING(32000)

機能

<プロパティ指定>で指定したプロパティに対応する文書に対して，<全文検索条件>で指定した条件で，全文検索を実行します。

このとき，検索結果として取得した文書から，全文検索条件が含まれる割合を，スコアとして算出します。

算出したスコアの取得には，<score関数>を使用します。

評価値

Boolean型（評価）

属性

この関数は，<WHERE句>の<検索条件>に指定できます。

(f)　<score関数>

<score関数>の詳細について説明します。

関数名

score

形式

score <左括弧><プロパティ指定><右括弧>

引数

<プロパティ指定>（<特殊なプロパティ>）

スコアの値を取得する文書クラスが特定できる形式でプロパティを指定します。

指定できるのは，次の<特殊なプロパティ>です。

edmProp_TextIndexプロパティ

edmProp_StIndexプロパティ

edmProp_Contentプロパティ

edmProp_ConceptTextIndexプロパティ

edmProp_ConceptStIndexプロパティ

機能

<conatins_with_score関数>で検索結果として取得した文書に対して，文書の検索条件に対するスコア値（全文検索条件が含まれる割合に応じた値）を返却します。

評価値

スコア値（Integer32型）

属性

この関数は，<SELECT句>の<選択項目>に指定できます。

(g)　<extracts関数>

<extracts関数>は，検索結果として取得する文書から，テキストデータを抽出する関数です。

<extracts関数>は，次の関数と組み合わせて使用することで，全文検索条件を満たした文書のテキストデータを抽出できます。

contains関数

contains_with_score関数

また，次の関数と組み合わせて使用することで，全文検索条件を満たした全文検索機能付き文字列型プロパティを抽出できます。

contains関数

<extracts関数>の詳細について説明します。

関数名

extracts

形式1

extracts <左括弧><プロパティ指定><コンマ><抽出対象構造文字列><コンマ><全文検索条件><コンマ><ハイライトタグ文字列><右括弧>

形式2

extracts＜左括弧＞＜全文検索機能付き文字列型プロパティ＞＜右括弧＞

引数

<プロパティ指定>（<特殊なプロパティ>）

抽出対象の文書クラスが特定できる形式でプロパティを指定します。

指定できるプロパティは，次の<特殊なプロパティ>です。

edmProp_TextIndexプロパティ

edmProp_StIndexプロパティ

edmProp_Contentプロパティ

edmProp_ConceptStIndexプロパティ

edmProp_ConceptTextIndexプロパティ

<全文検索機能付き文字列型プロパティ>

全文検索機能付き文字列型プロパティを指定します。

<抽出対象構造文字列>（String型の値：STRING(1024)）

抽出対象にする構造を表す文字列を指定します。

構造を指定しない場合は，「''」（空文字列）を指定してください。

<抽出対象構造文字列>に<?パラメタ>を指定する場合は，次のようにAS<データ型指定>をします。

? AS STRING(1024)

<全文検索条件>（String型の値：STRING(32000)）

ハイライト表示する検索タームを指定します。

条件を指定しない場合は，「''」（空文字列）を指定してください。この場合，ハイライトタグは挿入されません。

<全文検索条件>に<?パラメタ>を指定する場合は，次のようにAS<データ型指定>をします。

? AS STRING(32000)

<ハイライトタグ文字列>（String型の値：STRING(255)）

ハイライト表示に使用するタグを表す文字列を指定します。

ハイライトタグを指定しない場合は，「''」（空文字列）を指定してください。この場合，ハイライトタグは挿入されません。

<ハイライトタグ文字列>に<?パラメタ>を指定する場合は，次のようにAS<データ型指定>をします。

? AS STRING(255)

機能

<プロパティ指定>で指定したプロパティに対応する文書の内容（コンテント）から，<抽出指定構造文字列>および<全文検索条件>で指定した文字列に<ハイライトタグ文字列>に指定したタグ（文字列）を埋め込んだ状態で抽出します。

HiRDB Text Search Plug-inの「SGML出力」に対応します。

また，＜全文検索機能付き文字列型プロパティ＞で指定した全文検索機能付き文字列型プロパティの値を抽出します。

評価値

抽出したテキストまたはプロパティの値（Binary型データ）

抽出するデータは，HiRDB Text Search Plug-inのBLOB型で2ギガバイトまでのデータです。ただし，DocumentBrokerのクラスライブラリの検索結果としては，String型の値に変換されて，取得します。

属性

この関数は，<SELECT句>の<選択項目>に指定できます。

ただし，この関数を<SELECT句>に指定した場合，<集合指定子>としてDISTINCTは指定できません。

(h)　<概念検索関数>

概念検索関数には，次の種類があります。

concept_with_score関数
概念検索を実行すると同時に，スコア値を算出します。

score_concept関数
concept_with_score関数で算出したスコア値を取得します。

(i)　<concept_with_score関数>

<concept_with_score関数>の詳細について説明します。

関数名

concept_with_score

形式

concept_with_score <左括弧><プロパティ指定><コンマ><概念検索条件><右括弧>

引数

<プロパティ指定>（<特殊なプロパティ>）

検索対象の文書クラスが特定できる形式でプロパティを指定します。

指定できるプロパティは，次の<特殊なプロパティ>です。

edmProp_ConceptTextIndex

edmProp_ConceptStIndex

<概念検索条件>（Binary型のデータ：BINARY(5m)）

概念検索条件を指定します。概念検索条件には，種文章を指定します。種文章を含む<概念検索条件>を指定する場合には，必ず<?パラメタ>を使用して指定してください。また，ここで指定する<?パラメタ>には，構造指定検索や同義語異表記検索などの検索を実行するための検索条件も指定します。指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

<概念検索条件>を<?パラメタ>で指定する場合は，次のようにAS<データ型指定>をします。

? AS BINARY(5m)

AS<データ型指定>を含んだ，concept_with_score関数を呼び出す論理述語は，次のように指定します。

concept_with_score(edmProp_ConceptStIndex,
                   ? AS BINARY(5m)) IS TRUE

機能

<プロパティ指定>で指定したプロパティに対応する文書の内容（コンテント）に対し，<概念検索条件>で指定した条件で，概念検索を実行します。

また，検索実行時に，検索結果として取得した文書から検索用特徴タームが含まれる割合をスコアとして算出します。

このスコアを取得する場合は，<score_concept関数>を使用します。

評価値

Boolean型（評価）

属性

この関数は，<WHERE句>の<検索条件>に指定できます。

(j)　<score_concept関数>

<score_concept関数>の詳細について説明します。

関数名

score_concept

形式

score_concept <左括弧><プロパティ指定><右括弧>

引数

<プロパティ指定>（<特殊なプロパティ>）

スコアの値を取得する文書クラスが特定できる形式でプロパティを指定します。

指定できるのは，次の<特殊なプロパティ>です。

edmProp_ConceptTextIndexプロパティ

edmProp_ConceptStIndexプロパティ

機能

<concept_with_score関数>で検索結果として取得した文書に対して，文書の検索条件に対するスコア値（検索用特徴タームが含まれる割合に応じた値）を返却します。

評価値

スコア値（Integer32型）

属性

この関数は，<SELECT句>の<選択項目>に指定できます。

(2)　変換関数（edmSQL関数）

<変換関数>は，Object型の値を，クラスライブラリで扱えるデータ型に変換するための関数です。クラスライブラリでは，VariableArray型プロパティを表すObject型の値以外は，すべてOIID文字列として扱います。

<変換関数>には，<選択可能な変換関数>と<検索可能な変換関数>があります。

(a)　形式

!! <変換関数>の形式
<変換関数> ::= <選択可能な変換関数>
　　　　　　 ｜<検索可能な変換関数>

<選択可能な変換関数> ::= <oiidstr関数>

<検索可能な変換関数> ::= <objref関数>
　　　　　　　　　　　 ｜<oiid関数>

!! <oiidstr関数>の形式
<oiidstr関数> ::= oiidstr <左括弧> <プロパティ指定> <右括弧>

!! <objref関数>の形式
<objref関数> ::= objref<左括弧> <OIID文字列> <右括弧>

!! <oiid関数>の形式
<oiid関数> ::= oiid<左括弧> <OIID文字列> <右括弧>

<OIID文字列> ::= <文字列リテラル>

(b)　<変換関数>

<変換関数>は，データベースで処理する関数ではなく，DocumentBrokerサーバでedmSQLを発行した前後にデータの変換を実行する関数です。

<変換関数>には，<選択可能な変換関数>と<検索可能な変換関数>があります。<選択可能な変換関数>は，主問い合わせの<選択項目>だけに指定できます。<検索可能な変換関数>は，<検索条件>だけに指定できます。なお，<変換関数>は，<結合条件>には指定できません。

これら関数では，次の変換ができます。

オブジェクトリファレンス（Object型の値）からOIID文字列（String型の値）への変換

OIID文字列からオブジェクトリファレンス（Object型の値）をOIID文字列（String型の値）への変換

OIID文字列からdmaProp_OIIDプロパティの値への変換

(c)　<oiidstr関数>

<oiidstr関数>の詳細について説明します。

関数名

oiidstr

形式

oiidstr <左括弧><プロパティ指定><右括弧>

引数

<プロパティ指定>（VariableArray型以外のObject型の値）

機能

Object型の値であるオブジェクトリファレンスを，OIID文字列表記に変換します。

評価値

String型の値。

OIID文字列表記を，String型の値として返却します。

属性

<選択可能な変換関数>

この関数は，<SELECT句>の<選択項目>に指定できます。

(d)　<objref関数>

<objref関数>の詳細について説明します。

関数名

objref

形式

objref <左括弧> <OIID文字列><右括弧>

引数

<OIID文字列>（String型の値）

機能

<OIID文字列>（String型の値）を，オブジェクトリファレンス（Object型の値）に変換します。

評価値

Object型の値。

オブジェクトリファレンスを，Object型の値として返却します。

属性

<検索可能な変換関数>

この関数は，<WHERE句>の<検索条件>に指定できます。

(e)　<oiid関数>

<oiid関数>の詳細について説明します。

関数名

oiid

形式

oiid <左括弧><OIID文字列><右括弧>

引数

<OIID文字列>（Sring型の値）

評価値

String型の値。

実際にdmaProp_OIIDプロパティに格納されている形式（16バイトの値）のString型の値を返却します。

属性

<検索可能な変換関数>

この関数は，<WHERE句>の<検索条件>に指定できます。

4.5.10　データ操作の構文規則

ここでは，データ操作を表現する構文について説明します。edmSQLで実行できるデータ操作は，ORDER BY句による検索結果の並び替えです。

＜この項の構成＞

(1)　形式

(2)　<ORDER BY句>

(1)　形式

!! <ORDER BY句>の形式
<ORDER BY句> ::= ORDER BY <ソート指定リスト>
<ソート指定リスト> ::= <ソート指定> 〔 { <comma> <ソート指定> }... 〕
<ソート指定> ::= <ソートキー>  〔 <順序指定> 〕
<ソートキー> ::= <プロパティ指定>
　　　　　　　 ｜<符号なし整数>
<順序指定> ::= ASC｜DESC

(2)　<ORDER BY句>

<ORDER BY句>では，検索結果を昇順または降順に並び替える場合の，そのソート方法を指定します。<ORDER BY句>を省略した場合，検索結果の取得順序は不定になります。これは，検索結果が集合として管理されているためです。<ORDER BY句>では，この検索結果集合から要素を取り出す時の，ソート方法を指定します。

形式

<ORDER BY句> ::= ORDER BY <ソート指定リスト>
<ソート指定リスト> ::= <ソート指定> 〔 { <コンマ> <ソート指定> }... 〕
<ソート指定> ::= <ソートキー>  〔 <順序指定> 〕
<ソートキー> ::= <プロパティ指定>
　　　　　　　 ｜<符号なし整数>
<順序指定> ::= ASC｜DESC

<ソート指定リスト>についての規則

<ソート指定リスト>に指定できる<ソート指定>の最大数は，データベース制限に従います。

<ソートキー>についての規則

<ソートキー>に指定できるのは，<プロパティ指定>またはソート項目を指定する番号である<符号なし整数>です。ただし，指定できる<ソートキー>のデータ型については，データベースの制限に従います。

<ソートキー>を<プロパティ指定>で指定する場合，指定できるのは，最も外側のSELECT句（主問い合わせのSELECT句）の<選択項目>に指定したプロパティだけです。<副問い合わせ>のSELECT句で指定した<選択項目>のプロパティは，指定できません。

最も外側のSELECT句（主問い合わせのSELECT句）の<選択項目>が<ルーチンの起動>や<集合関数>の場合，<プロパティ指定>で<ソートキー>は指定できません。この場合は，ソート項目指定番号を指定してください。

ソート項目指定番号とは，検索結果として指定した<選択項目>のうち，どの選択項目を<ソートキー>とするかを，<選択項目>の出現番号で表現したものです。したがって，SELECT句で先頭に指定した<選択項目>が「1」になります。

<ソートキー>の<選択項目>として指定できるプロパティは，ソート可能（Orderable）なプロパティです。これは，プロパティ定義に次のように指定されたプロパティのことです。
dmaProp_IsOrderable = bool = 1

複数の<ソートキー>を指定した場合は，<ソートキー>を指定した順番（指定の左側からの順番）でソートします。

<順序指定>についての規則

<順序指定>では，<ソートキー>を並べる順序の方向を，昇順にするか，降順にするかを指定します。

ASCは<ソートキー>を昇順に並べる場合に指定します。

DESCは<ソートキー>を降順に並べる場合に指定します。

<順序指定>を省略した場合は，ASCが仮定されます。

4.6　edmSQLの指定例

この節では，edmSQLの指定例について説明します。

＜この節の構成＞

4.6.1　属性検索

4.6.2　全文検索（HiRDB Text Search Plug-inを利用した検索）

4.6.1　属性検索

ここでは，属性検索（プロパティを指定した検索）でのedmSQLの指定例を示します。

＜この項の構成＞

(1)　指定例で使用するクラスとプロパティ

(2)　一つのクラスに対して実行する属性検索

(3)　結合したクラスに対して実行する属性検索

(4)　副問い合わせを実行する属性検索

(5)　検索結果を取得する順序を指定した属性検索

(6)　VariableArray型プロパティを指定した属性検索

(7)　集合関数を指定した属性検索

(8)　グループ分けをする属性検索

(1)　指定例で使用するクラスとプロパティ

この指定例で検索の対象になる文書は，次のようなクラスから作成された文書です。

文書X

Document Xクラスを基に作成された文書です。ユーザ定義プロパティとして，次の表に示すプロパティが設定されています。

表4-43　Document Xクラスのプロパティ

プロパティ識別子 | 内容
DocCode | 文書を管理するためのコード
Title | タイトル
Author | 著者
AuthorId | 著者ID
Publisher | 出版元
Abstract | 概要
CreateDate | 作成日

所有書一覧

OwnersListクラスを基に作成された文書です。ユーザ定義プロパティとして，次の表に示すプロパティが設定されています。

表4-44　OwnersListクラスのプロパティ

プロパティ識別子 | 内容
DocCode | 文書を管理するためのコード
Owner | 所有者

辞書Y

Dictionary Yクラスを基に作成された文書です。ユーザ定義プロパティとして，次の表に示すプロパティが設定されています。

表4-45　Dictionary Yクラスのプロパティ

プロパティ識別子 | 内容
Name | 名前
Birthday | 誕生日
EntryId | エントリーID

論文

myPaperクラスを基に作成された文書です。次の表に示すプロパティが設定されています。

表4-46　myPaperクラスのプロパティ

プロパティ識別子 | 内容
Title | タイトル
Authors※ | Name | 名前
Org | 所属

注※

VariableArray型プロパティです。

(2)　一つのクラスに対して実行する属性検索

ここでは，一つのクラスに対して実行する属性検索の指定例を示します。

(a)　SELECT句とFROM句だけを指定する検索

<検索対象>としてDocument Xクラスを，<選択項目>としてTitleプロパティ，AuthorプロパティおよびAbstractプロパティを取得する例を示します。

指定例

SELECT Title,Author,Abstract
FROM   "Document X"

(b)　SELECT句，FROM句およびWHERE句を指定する検索

(a)に加えて，検索条件としてWHERE句に「Authorプロパティが『日立太郎』で，CreateDateプロパティが20000101より大きい」という条件を指定する例を示します。

指定例

SELECT Title,Author,Abstract
FROM "Document X"
WHERE Author = '日立太郎' AND CreateDate > '20000101'

(c)　重複排除を指定する検索

Document Xクラスから，Authorプロパティを，重複を排除して取得する例を示します。

指定例

SELECT DISTINCT Author
FROM "Document X"

(d)　検索条件としてOIIDを指定した検索

Document Xクラスから作成された文書から，OIIDを指定して，Titleプロパティ，AuthorプロパティおよびAbstractプロパティを取得する例を示します。なお，OIIDは，oiid関数を使用して指定します。

指定例

SELECT Title,Author,Abstract
FROM "Document X"
WHERE dmaProp_OIID = oiid('dma:///xxx/xxx/xxxxxxxxxx...xxx')

(3)　結合したクラスに対して実行する属性検索

ここでは，複数のクラスを結合した検索対象クラスに対して実行する属性検索の指定例を示します。

なお，edmSQLで実行できる結合の方法には，次の2種類があります。

内部結合

左外部結合

なお，実現できる結合の種類については，データベースに従います。

それぞれの場合の指定例を示します。

(a)　二つのクラスを内部結合した検索

Document XクラスとOwnersListクラスを内部結合して，Document Xクラスの文書のTitleプロパティ，Document XクラスのAuthorプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。ここでは，次の二つの方法の指定例を示します。

FROM句に<クラス指定>を並べて内部結合して，結合の条件をWHERE句に指定する方法

INNER JOINを使用して，二つのクラスの結合を指定する方法

結合するときには，Document XクラスのDocCodeプロパティとOwnersListクラスのDocCodeプロパティが一致することを条件とします。

なお，Document Aクラスの<相関名>としてDX，OwnersListクラスの<相関名>としてOLを使用します。

FROM句に<クラス指定>を並べて内部結合して，結合の条件をWHERE句に指定する方法

次のように指定します。

指定例

SELECT DX.Title,DX.Author,OL.Owner
FROM "Document X" DX, OwnersList OL
WHERE DX.DocCode = OL.DocCode

INNER JOINを使用して二つのクラスの結合を指定する検索

次のように指定します。

指定例

SELECT DX.Title,DX.Author,OL.Owner
FROM   "Document X" DX INNER JOIN OwnersList OL
          ON DX.DocCode = OL.DocCode

(b)　三つのクラスを内部結合した検索

Document Xクラス，OwnersListクラスおよびDictionary Yクラスを結合して，Document XクラスのTitleプロパティとDocument XクラスのAuthorプロパティ，Dictionary YクラスのBirthdayプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。ここでは，次の二つの方法の指定例を示します。

FROM句に<クラス指定>を並べて内部結合して，結合の条件をWHERE句に指定する方法

INNER JOINを使用して，三つのクラスの結合を指定する方法

結合するときには，Document XクラスのDocCodeプロパティとOwnersListクラスのDocCodeプロパティが一致することと，Document XクラスのAuthorIdプロパティとDictionary YクラスのEntryIdプロパティが一致することを条件とします。

FROM句に<クラス指定>を並べて内部結合して，結合の条件をWHERE句に指定する方法

次のように指定します。

指定例

SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM  "Document X" DX,
            OwnersList OL,"Dictionary Y" DY
WHERE  DX.DocCode = OL.DocCode
AND DX.AuthorId = DY.EntryId

INNER JOINを使用して三つのクラスの結合を指定する検索

次のように指定します。

指定例

SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM ("Document X" HD INNER JOIN OwnersList OL
ON DX.DocCode = OL.DocCode)
INNER JOIN "Dictionary Y" DY
 ON DX.AuthorId = DY.EntryId

(c)　二つのクラスを外部結合した検索

Document XクラスとOwnersListクラスを外部結合して，Document Xクラスの文書のTitleプロパティとDocument XクラスのAuthorプロパティおよびOwnersListクラスのTitleプロパティを取得する例を示します。

次のように指定します。

指定例

SELECT DX.Title,DX.Author,OL.Owner
FROM "Document X" DX LEFT OUTER JOIN OwnersList OL
       ON DX.DocCode = OL.DocCode

(d)　三つのクラスを外部結合した検索

Document Xクラス，OwnersListクラスおよびDictionary Yクラスを外部結合して，Document XクラスのTitleプロパティ，Document XクラスのAuthorプロパティ，Dictionary YクラスのBirthdayプロパティおよびOwnersListクラスのOwnerプロパティを取得する例を示します。

指定例

SELECT DX.Title,DX.Author,DY.Birthday,OL.Owner
FROM ("Document X" DX LEFT OUTER JOIN OwnersList OL
   ON DX.DocCode = OL.DocCode) LEFT OUTER JOIN
 "Dictionary Y" DY ON DX.AuthorId = DY.EntryId

(4)　副問い合わせを実行する属性検索

ここでは，副問い合わせを指定する場合の属性検索の指定例を示します。

(a)　比較述語を指定した副問い合わせ

OIIDがわかっているDocument XクラスのオブジェクトのCreateDateプロパティよりも，Birthdayプロパティが新しい（値が大きい）Dictionary Yクラスのオブジェクトの，NameプロパティとBirthdayプロパティを取得する例を示します。

指定例

SELECT Name, Birthday
FROM "Dictionary Y"
WHERE  Birthday > (SELECT CreateDate
       FROM "Document X"
       WHERE dmaProp_OIID =
              oiid( 'dma:///xxx/xxx/xxxxxxxxxx...xxx'))

(b)　IN述語を指定した副問い合わせ

CreateDateプロパティが19990101よりも値が大きいDocument XクラスのオブジェクトのAuthorIdプロパティのどれかと，Dictionary YクラスのEntryIdプロパティの値が等しい，Dictionary YクラスのオブジェクトのNameプロパティとBirthdayプロパティを取得する例を示します。

指定例

SELECT Name, Birthday
FROM "Dictionary Y"
WHERE EntryId IN (SELECT AuthorId
                     FROM "Document X"
                     WHERE CreateDate > '19990101')

(c)　EXISTS述語を指定した副問い合わせ

Dictionary YクラスのオブジェクトのNameプロパティとDocument XクラスのオブジェクトのAuthorプロパティが一致する文書が一つでもあれば，そのDictionary Yクラスの文書のNameプロパティとBirthdayプロパティを取得する例を示します。

指定例

SELECT Name, Birthday
FROM "Dictionary Y" DY
WHERE EXISTS (SELECT *
                  FROM "Document X" DX
                  WHERE DY.Name = DX.Author)

(5)　検索結果を取得する順序を指定した属性検索

ここでは，取得する検索結果の順序を指定する場合の属性検索の指定例を示します。

Document Xクラスの文書のうち，CreateDateプロパティの値が20000101よりも大きいオブジェクトを検索して，Titleプロパティ，Authorプロパティ，およびCreateDateプロパティを取得します。このとき，Authorプロパティによって昇順に並び替え，その中でCreateDateプロパティで降順に並び替えて検索結果を取得する例を示します。まず，並び替えのキーとしてソート項目指定番号を指定する例を示します。ソート項目番号は，AuthorプロパティはSELECT句で2番目に指定されているので「2」，CreateDateプロパティはSELECT句で3番目に指定されているので「3」になります。

指定例

SELECT Title,Author,CreateDate
FROM "Document X"
WHERE CreateDate > '20000101'
ORDER BY 2 ASC,3 DESC

これを，プロパティ名で指定すると，次のようになります。

指定例

SELECT Title,Author,CreateDate
FROM "Document X"
WHERE CreateDate > '20000101'
ORDER BY Author ASC,CreateDate DESC

(6)　VariableArray型プロパティを指定した属性検索

ここでは，VariableArray型のプロパティの検索方法について説明します。

(a)　VariableArray型のプロパティを取得する検索

ここでは，myPaperクラスのVariableArray型プロパティであるAuthorsプロパティを取得する例を示します。

指定例

SELECT Title,Authors
FROM myPaper
WHERE CreateDate > '20000101'

(b)　VariableArray型プロパティの要素の値を指定した検索

ここでは，myPaperクラスのVariableArray型プロパティであるAuthorsプロパティの，Orgプロパティが「日立製作所」であるオブジェクトのTitleプロパティとAuthorsプロパティを取得します。

指定例

SELECT Title,Authors
FROM myPaper
WHERE Authors[ANY].Org = '日立製作所'

(7)　集合関数を指定した属性検索

ここでは，COUNT(*)関数およびCOUNT関数を使用した検索の指定例を示します。

Document Xクラスの文書のうち，作成日が「2000年1月1日」よりも新しい（CreateDateプロパティの値が「20000101」よりも大きい）文書の数を取得します。

指定例

SELECT COUNT(*) FROM "Document X"
WHERE CreateDate > '20000101'

次に，Document Xクラスの文書のうち，作成日が「2000年1月1日」よりも新しい（CreateDateプロパティの値が「20000101」よりも大きい）文書のAuthorsプロパティの値の数を，重複排除して取得します。

指定例

SELECT COUNT(DISTINCT Authors) FROM "Document A"
WHERE CreateDate > '20000101'

(8)　グループ分けをする属性検索

ここでは，GROUP BY句を使用した検索方法について説明します。

Document Xクラスの文書について，文書のAuthorプロパティでグループ化したときのグループ数を取得します。

指定例

SELECT Author, COUNT(*) FROM "Document X"
GROUP BY Author

次に，Document Xクラスの文書について，文書のAuthorプロパティとPublisherプロパティとの組み合わせでグループ化し，Publisherプロパティの値が「日立製作所」であるグループの数を取得します。

指定例

SELECT Author, Publisher, COUNT(*)
FROM "Document X"
GROUP BY Author, Publisher
HAVING Publisher= '日立製作所'

4.6.2　全文検索（HiRDB Text Search Plug-inを利用した検索）

ここでは，HiRDB Text Search Plug-inを利用して実現する全文検索の，edmSQLでの指定例を示します。

なお，<全文検索条件>および<概念検索条件>の指定方法については，マニュアル「HiRDB Text Search Plug-in」を参照してください。

＜この項の構成＞

(1)　指定例で使用するクラスとプロパティ

(2)　contains関数を使用した全文検索

(3)　extracts関数を使用した全文検索

(4)　score関数とcontains_with_score関数を使用した全文検索

(5)　score_concept関数とconcept_with_score関数を使用した概念検索

(1)　指定例で使用するクラスとプロパティ

この指定例で使用する文書は，次のようなクラスから作成された文書です。

文書X

Document Xクラスを基に作成された文書です。Document Xクラスは，全文検索の対象になる文書クラスとして作成されており，次の表に示すプロパティが設定されています。

表4-47　Document Xクラスのプロパティ

プロパティ識別子 | 内容
Code | 文書を管理するためのコード
Title | タイトル
Author | 著者
Abstract | 概要
CreateDate | 作成日
edmProp_ConceptStIndex | 全文検索インデクス（概念検索および構造検索が可能な全文検索インデクス）

全文検索の対象になる文書の作成方法については，「4.4　全文検索の対象になる文書の作成」を参照してください。

また，Document Xクラスは，構造を持ったXML文書の基になるDMAクラスです。構造『文章』の下位に，構造『名前』，構造『キーワード』および構造『本文』が定義されています。

Document Xクラスを基に作成したXML文書の例を次に示します。

Document Xクラスを基に作成したXML文書の例

<?xml version="1.0" encoding="Shift_JIS"?>
・・・
<文章>
　<名前>
　日立太郎
　</名前>
　<キーワード>
　edmSQL・・・
　</キーワード>
　<本文>
　edmSQLとは，SQLに準拠した・・・。
　</本文>
</文章>

(2)　contains関数を使用した全文検索

ここでは，contains関数を使用した全文検索の指定方法について説明します。

Document Xクラスの文書のうち，最上位の構造「文章」の下にある構造「本文」に，「コンピュータ」を含む文書のOIIDを取得します。ただし，「コンピュータ」は，同義語辞書「myDic」を使用して，同義語展開して検索します。

指定例

SELECT dmaProp_OIID
FROM   "Document X"
WHERE  contains(edmProp_ConceptStIndex,
      '文章[本文{SYNONYM(myDic,"コンピュータ")}]') IS TRUE

(3)　extracts関数を使用した全文検索

ここでは，extracts関数を使用した全文検索の指定方法について説明します。

Document Xクラスの文書のうち，最上位の構造「文章」の下にある構造「本文」に，「Computer」を含む文書のコンテントを検索して，「Computer」に<STRONG>タグを付けたテキストを出力します。

指定例

SELECT extracts(edmProp_ConceptStIndex
'文章.本文','文章[本文{"COMPUTER"}]', 'STRONG')
FROM  "Document X"
WHERE contains(edmProp_ConceptStIndex,
      '文章[本文{"COMPUTER"}]') IS TRUE

(4)　score関数とcontains_with_score関数を使用した全文検索

ここでは，score関数とcontains_with_score関数を使用した全文検索の指定方法について説明します。

Document Xクラスの文書のうち，最上位の構造「文章」の下にある構造「本文」に，「コンピュータ」を含む文書のOIIDを取得します。ただし，「コンピュータ」は，同義語辞書「myDic」を使用して，同義語展開して検索します。

また，検索結果として，Titleプロパティ，Authorプロパティとともに，検索条件に対する文書のスコア（score）を取得します。scoreは，contains_with_score関数によって算出されます。したがって，スコア値を取得する検索を実行する場合は，このようにscore関数とcontains_with_score関数を組み合わせて指定します。

さらに，この例では，取得したスコア値を基に，検索結果を昇順にソートします。

指定例

SELECT dmaProp_OIID,Title,Author,score(edmProp_ConceptStIndex)
FROM   "Document X"
WHERE contains_with_score(edmProp_ConceptStIndex,
       '文章[本文{SYNONYM(myDic,"コンピュータ")}]') IS TRUE
ORDER BY 3 ASC

(5)　score_concept関数とconcept_with_score関数を使用した概念検索

ここでは，score_concept関数とconcept_with_score関数を使用した概念検索の指定方法について説明します。

Document Xクラスの文書のうち，種文章と近い概念を含んでいる文書を検索します。種文章は，?パラメタとして指定します。したがって，実際の種文章の内容は，Binary型のデータとして，CdbrEqlStatement::SetParamメソッドによって指定してください。種文章は5メガバイトまで指定できます。

この例では，種文章から抽出された検索用特徴タームを，同義語辞書myDicを使用して同義語展開して検索します。

指定例

SELECT dmaProp_OIID,score_concept(edmProp_ConceptStIndex)
FROM   "Document X"
WHERE concept_with_score
      (edmProp_ConceptStIndex, ? AS BINARY (5m));

4.7　edmSQLの障害対策とデバッグ

ここでは，edmSQL検索の実行時に障害が発生したときの障害対策と，デバッグ情報について説明します。

＜この節の構成＞

4.7.1　CdbrEqlStatementクラスが出力する障害情報

4.7.2　詳細エラーメッセージ

4.7.3　edmSQL構文解析情報

4.7.4　CdbrEqlStatementクラスで出力するトレース情報

4.7.1　CdbrEqlStatementクラスが出力する障害情報

edmSQLの検索を実行するCdbrEqlStatementクラスの各メソッドには，エラーが発生した時に，次の障害情報を出力する機能があります。これらの情報は，エラーの原因を調査するために使用できます。

戻り値

詳細エラーコード

トレース出力

詳細エラーメッセージ

edmSQL文構文解析情報

詳細エラーメッセージおよびedmSQL文構文解析情報の出力先と，必要な環境変数の設定および使用方法を，次の表に示します。なお，これらの情報はすべてクライアントに出力されます。

表4-48　CdbrEqlStatementクラスで出力する障害情報

情報の種類
出力先
必要な環境変数
出力方法

詳細エラーメッセージ
詳細エラーメッセージファイル

DBR_DETAIL_ERRORLOG

DBR_DETAIL_ERRORLOG_DIR

DBR_DETAIL_ERRORLOG_SIZE

DBR_DETAIL_ERRORLOG_DIRに指定したパスのファイルを取得します。

詳細エラーメッセージ
特になし。
CdbrSession::GetLastDetailErrorメソッドをコールします。

edmSQL文構文解析情報
edmSQL構文解析情報ファイル

DBR_EQL_PARSELOG

DBR_EQL_PARSELOG_DIR

DBR_EQL_PARSELOG_DIRに指定したパスのファイルを取得します。

構文解析結果メッセージ
特になし。
CdbrEqlStatement::ExecuteメソッドのppParseMessageを指定します。

詳細エラーメッセージに関する環境変数の設定方法については，「5.　環境設定」を参照してください。

4.7.2　詳細エラーメッセージ

DocumentBrokerのほかのクラスと同様，エラーになったメソッド，戻り値の詳細およびその原因を，クライアント環境のファイルおよびメモリに出力します。

なお，CdbrEqlStatementクラスでは，メソッドをコールした時にエラーになった原因を，詳細エラーメッセージとして出力します。

出力されるメッセージについては，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。

4.7.3　edmSQL構文解析情報

edmSQL文を構文解析して，構文解析情報をクライアントのファイルおよびメモリに出力します。構文解析情報は，実行したedmSQL文の情報および構文解析時に出力されたメッセージの情報です。

構文解析情報には，次の2種類があります。

edmSQL構文解析情報ファイル
edmSQL構文解析情報ファイルとは，edmSQLを構文解析した時のトレース情報が出力されるクライアントのファイルです。

構文解析結果メッセージ
検索を実行するCdbrEqlStatement::Executeメソッドをコールした時に，引数ppParseMessageとして出力されます。

＜この項の構成＞

(1)　edmSQL構文解析情報ファイル

(2)　構文解析結果メッセージ

(1)　edmSQL構文解析情報ファイル

edmSQL構文解析情報ファイルの出力方法および出力される情報について説明します。

出力方法

edmSQL構文解析情報ファイルを出力する場合は，次の環境変数の指定が必要です。

DBR_EQL_PARSELOG
出力する場合は，この環境変数にONを設定します。なお，デフォルトはOFFです。したがって，この環境変数を設定していない場合，edmSQL構文解析情報ファイルは出力されません。

DBR_EQL_PARSELOG_DIR
edmSQL構文解析情報ファイルの出力パスを指定します。なお，デフォルトは実行ファイルと同じパスになります。指定したパスが存在しない場合は，edmSQL構文情報ファイルは出力されません。
文書空間で使用する文字コード種別がUTF-8の場合，印刷可能なASCIIコードで記述できる値を設定してください。

edmSQL構文解析情報ファイルのファイル名

edmSQL構文解析情報ファイルのファイル名は，日時を基に，次のように決定されます。なお，ファイル名は，マルチスレッド対応とシングルスレッド対応の場合で異なります。

形式

（マルチスレッド対応の場合）

EDMEQLINFOxxxxxxxxxxxxx_yyyyyyyy_zzzzzzzz.log
- EDMEQLINFO：プレフィクス
- xxxxxxxxxxxxx(13バイト)：日時から生成された値
- yyyyyyyy(8バイト)：スレッドIDで生成した値
- zzzzzzzz(8バイト)：プロセスIDで生成した値

（シングルスレッド対応の場合）

EDMEQLINFOxxxxxxxxxxxxx_yyyyyyyy.log
- EDMEQLINFO：プレフィクス
- xxxxxxxxxxxxx(13バイト)：日時から生成された値
- yyyyyyyy(8バイト)：プロセスIDで生成した値

説明

例えば，2000年1月1日 午後6時30分1.111秒に出力する場合，xxxxxxxxxxxxxは「0101183001111」になります（年の値は含まれません）。

なお，出力したファイルの名称は，詳細メッセージ（KMBR22021-E）に出力されます。詳細メッセージについては，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。

edmSQL構文解析情報ファイルに出力される内容

ファイルには，次の場合に，CdbrEqlStatement::Executeメソッドで出力される構文解析情報が出力されます。

構文解析を実行した時に構文解析エラーが検出された場合

構文解析を実行した時にワーニングが検出された場合

なお，構文解析を実行したedmSQL文が正しい構文である場合は，ファイルは出力されません。

次に，edmSQL構文解析情報ファイルの出力形式を，次の図に示します。なお，出力形式は，マルチスレッド対応の場合とシングルスレッド対応の場合で異なります。

図4-2　edmSQL構文解析情報ファイルの出力形式

ヘッダー情報が29カラムで出力されます。

次のように出力されます。マルチスレッド対応の場合とシングルスレッド対応の場合で出力内容が異なります。

文字の下の数字はカラム数です。

「Input edmSQL >」は15カラムで出力されます。「実行するedmSQL文」は，任意の指定したedmSQL文の長さです。

「Error」は，10カラムで出力されます。空白が2カラム出力されて，コードを表す数字が4カラムで出力され，「コードに対応したメッセージ」が任意の長さで出力されます。
出力されるメッセージの内容と対処方法については，「付録B　edmSQLの構文解析エラー情報」を参照してください。

(2)　構文解析結果メッセージ

メソッドをコールした時に出力される構文解析結果メッセージについて説明します。

必要な設定

このメッセージは，CdbrEqlStatement::Executeメソッドで，出力引数ppParseMessageを指定した場合に出力されます。なお，ppParseMessageを指定しないでこのメソッドをコールした場合は，エラーが発生しても，メッセージは出力されません。

また，ほかの詳細メッセージとは異なり，環境変数「DBR_EQL_PARSELOG」にOFFを指定した場合も，引数を指定すれば，メッセージが取得できます。

返却されるメッセージの内容

返却されるメッセージの内容については，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。なお，構文解析したedmSQL文の構文が正しい場合に，ppParseMessageを指定しているときは，指定した領域にNULLが設定されて返却されます。

構文解析中にエラーまたはワーニングが検出された場合，この領域に返却されるメッセージは最初に検出したエラーまたはワーニングに関するメッセージです。

構文解析のトレースを確認する場合は，「(1)edmSQL構文解析情報ファイル」を参照して，トレース内容をファイルに出力して確認してください。

構文解析結果メッセージを取得したエラー処理の例

次に，構文解析結果メッセージを取得する場合の，エラー処理の例を示します。

DmaBoolean brc = DMA_FALSE;
pDmaString_T pParseMessage = NULL;
DmaInteger32 i32MajorCode = ( -1 );
DmaInteger32 i32MinorCode = ( -1 );

brc = cEql->Execute( &pParseMessage );

if ( DMA_TRUE != brc ) {
 //エラー処理
 i32MajorCode = GetLastError( &i32MinorCode );
 if ( ( ERR_DBR == i32MajorCode ) &&
      ( ERR_EQL_BAD_STATEMENT == i32MinorCode ) )
 {
   //構文解析エラーを表示
   printf( "構文解析エラー：%s¥n", pParseMessage );
   dbrDelete( pParseMessage );
   pParseMessage = NULL;
   goto ErrorExit;
 }
}

4.7.4　CdbrEqlStatementクラスで出力するトレース情報

CdbrEqlStatementクラスでは，サーバトレースとクライアントトレースにトレース情報を出力します。エラーが発生した場合，トレース情報を基にエラーの原因が調査できます。

トレースの出力機能についての詳細は，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。ここでは，それぞれのトレースレベルでCdbrEqlStatementクラスが出力するトレース情報の内容について説明します。

トレースレベルごとの，サーバのトレースファイルに出力されるCdbrEqlStatementクラスの出力情報を，次の表に示します。

表4-49　トレースレベルとサーバトレースファイルへの出力情報

トレースレベル
出力情報

0以上

入力したedmSQL文と構文解析後に生成したSQL文
この情報は，構文解析エラーの原因を調査するための情報として，必ず出力されます。CdbrEqlStatement::ExecuteSearchメソッドをコールするたびに出力されます。

エラー情報
エラーが発生した場合の，詳細エラーコードとその原因が出力されます。

10以上
ほかのメソッドで出力される情報と同じです。

クライアントトレースファイルに出力される情報は，ほかのメソッドで出力される情報と同じです。

4.8　edmSQL検索での留意事項

ここでは，edmSQLを使用して検索を実行する場合に，留意する必要がある内容について説明します。

＜この節の構成＞

4.8.1　プロパティに関する制限事項

4.8.2　検索条件に指定する値の制限事項

4.8.3　複数のクラスを対象にした検索の制限事項

4.8.4　アクセス制御機能付き検索を実行する場合の制限事項

4.8.5　コーディング上の留意事項

4.8.1　プロパティに関する制限事項

「dbrProp_」で始まるクラスライブラリで定義したプロパティは，検索条件には指定できません。

また，「dmaProp_」および「edmProp_」で始まるプロパティについては，検索できるプロパティと検索できないプロパティがあります。検索できるプロパティについては，「4.3　検索対象になるクラスおよびプロパティ」を参照してください。

4.8.2　検索条件に指定する値の制限事項

ここでは，検索条件に設定できる値についての制限事項を示します。

なお，制限事項には，DocumentBrokerとしての制限のほか，データベースの制限に基づくものもあります。指定する値のバイト数などについては，データベースであるHiRDBの制限に従います。HiRDBの制限を超えた検索を実行した場合は，データベースエラーとして，次のエラーが返却されます。

major_code：ERR_DB　minor_code：ERR_DB_FAILED

HiRDBの制限事項の詳細については，マニュアル「HiRDB　SQLリファレンス」を参照してください。

ここでは，FROM句，SELECT句，WHERE句およびORDER BY句に指定する内容に関する制限事項などについて説明します。

＜この項の構成＞

(1)　FROM句に関する制限事項

(2)　SELECT句に関する制限事項

(3)　WHERE句に関する制限事項

(4)　ORDER BY句に関する制限事項

(5)　検索条件として指定できる値についての制限

(6)　オペレータに指定する値についての制限

(7)　?パラメタに関する制限事項

(8)　問い合わせ指定全体に関する制限事項

(1)　FROM句に関する制限事項

ロックを設定するインターフェースを使用した場合に，ロック種別にDBR_LOCK_WRITEを指定したときに，次の条件で検索を実行すると，データベースエラーになります。

主問い合わせでFROM句に指定したクラスを，副問い合わせのFROM句に指定した条件

主問い合わせでクラスの結合を指定した条件

(2)　SELECT句に関する制限事項

副問い合わせのSELECT句に指定できるプロパティは一つです。複数指定した場合は，次のエラーが返却されます。

major_code：ERR_DBR　minor_code：ERR_EQL_BAD_STATEMENT

また，ここで指定できるプロパティのデータ型も，副問い合わせで指定している<述語>の規則に従います。不正なデータ型のプロパティを指定した場合には，次のエラーが返却されます。

major_code：ERR_DBR　minor_code：ERR_EQL_BAD_STATEMENT

SELECT句にString型のプロパティを指定して重複排除をする場合，SELECT句には255バイト以内で定義しているString型のプロパティを指定してください。定義が255バイトを超えるString型のプロパティを指定した場合，重複排除は実行できません。実行した場合，データベースエラーになります。

ロックを取得するインターフェースを使用する場合に，ロックの種別にDBR_LOCK_WRITEを指定して，次の条件での検索を実行すると，データベースエラーになります。

主問い合わせに重複排除（DISTINCT）を指定した条件。

主問い合わせにCOUNT関数を指定した条件。

VariableArray型プロパティを指定して，重複排除を指定すると，次のエラーが返却されます。

major_code：ERR_DBR　minor_code：ERR_EQL_BAD_STATEMENT

VariableArray型プロパティのヒット件数をCOUNT関数で取得しようとすると，データベースエラーになります。

(3)　WHERE句に関する制限事項

WHERE句に文字列定数を使用した条件を指定する場合，255バイト以内で指定してください。制限を超えて指定した場合は，データベースエラーになります。

WHERE句にString型のプロパティを指定する場合は，255バイト以内で定義されたプロパティを指定してください。制限を超えたプロパティを指定した場合は，データベースエラーになります。

WHERE句で指定する論理演算のネスト数は，255個以内で指定してください。255個を超えた場合は，データベースエラーになります。

(4)　ORDER BY句に関する制限事項

ORDER BY句で指定できるSELECT句でのプロパティのインデクス，またはプロパティは，255個以内で指定してください。255個を超えた場合は，データベースエラーになります。

ORDER BY句にString型のプロパティを指定する場合は，255バイト以内で定義されたプロパティを指定してください。制限を超えたプロパティを指定した場合は，データベースエラーになります。

(5)　検索条件として指定できる値についての制限

検索条件として指定するプロパティの値や，全文検索で指定できる文字については，制限があります。検索条件として指定できるクラスやプロパティについては，「4.3　検索対象になるクラスおよびプロパティ」を参照してください。また，edmSQL文に指定できる値については，「4.5.4　字句規則」を参照してください.。

(6)　オペレータに指定する値についての制限

次のような演算を指定した場合は，データベースエラーになります。

比較演算の両辺に値を指定した検索は，データベースエラーになります。
例えば，<比較演算子>「=」の両辺に，<リテラル>または<?パラメタ>を指定した検索などはできません。

右辺に値を指定するIN述語の左辺に値を指定した検索は，データベースエラーになります。
例えば，<In述語>の両辺に<文字列リテラル>を指定した検索などはできません。

/演算子の右辺（除数）として，0を指定すると，データベースエラーになります。

そのほか，edmSQL文を指定する際の詳細な規則については，「4.5　edmSQLの文法」を参照してください。

(7)　?パラメタに関する制限事項

<?パラメタ>に文字列を指定する場合は，32,000バイト以内の文字列を指定してください。制限を超えて指定した場合は，データベースエラーになります。

(8)　問い合わせ指定全体に関する制限事項

一つの問い合わせ指定内で，DISTINCTを2回以上指定することはできません。

4.8.3　複数のクラスを対象にした検索の制限事項

複数クラスを対象にした検索での制限は，HiRDBの制限に従います。また，複数クラスを対象にした全文検索での制限は，HiRDB Text Search Plug-inおよびHiRDBの制限に従います。

それぞれの制限については，マニュアル「HiRDB　SQLリファレンス」およびマニュアル「HiRDB Text Search Plug-in」の，表の結合に関する規則の説明を参照してください。

4.8.4　アクセス制御機能付き検索を実行する場合の制限事項

アクセス制御機能付き検索は，必ずアクセス制御機能を使用している文書空間で実行してください。また，アクセス制御機能に対応していないクライアントアプリケーションをアクセス制御機能を使用している文書空間で使用した場合，検索結果が不正になることがあります。文書空間の設定と，クライアントアプリケーションの機能は一致させてください。
アクセス制御機能付き検索では，検索結果の重複排除は指定できません。指定した場合は，次のエラーが返却されます。

major:ERR_DBR　minor：ERR_EQL_BAD_STATEMENT

検索結果の個数を取得する検索は実行できません。SELECT句にCOUNT関数を指定することはできません。指定した場合は，次のエラーが返却されます。

major:ERR_DBR　minor：ERR_EQL_BAD_STATEMENT

検索結果の個数は，GetResultメソッドで，検索結果を全件取得することで取得してください。

副問い合わせは指定できません。
副問い合わせを実行した場合，副問い合わせの検索結果に対してアクセス制御がされません。
例えば，次のような検索の場合，検索結果が不正になる可能性があります。
［例］

SELECT S0.PropA
FROM ClassA As S0
WHERE S0,PropB In
(SELECT S1.PropC FROM ClassB AS S1 WHERE S1.PropD='mojiretsu')

このとき，斜体で記述した副問い合わせの結果に対してはアクセス制御されません。つまり，ユーザが参照権を持たないオブジェクトも検索結果として取得できます。このため，副問い合わせの結果として取得したオブジェクトには，ユーザのアクセス権では参照できないオブジェクトが含まれている可能性があります。
また，全文検索を含む副問い合わせの検索結果には，プロパティを参照する権利を持たないオブジェクトのほか，コンテントを参照する権利がないオブジェクトが含まれる可能性があります。
アクセス制御機能付き検索で副問い合わせに相当する検索を実行したい場合は，複数のSELECT句に分けて，複数回Executeメソッドをコールして検索を実行してください。

GROUP BY句を使用した問い合わせは指定できません。

アクセス制御機能付き検索では，ユーザがSELECT句に指定したプロパティ以外にDocumentBrokerによってアクセス制御情報を表すプロパティが取得されています。このため，ユーザがSELECT句に指定できるプロパティ数が，通常の検索で指定できる数（データベースの制限値）よりも少なくなります。

左外部結合（LEFT OUTER JOIN）を<FROM句>に指定し，左側のクラスのオブジェクトが<検索条件>を満たさない場合，左側のクラスのプロパティはNULLとなります。ユーザはこのNULLとなったプロパティに対して参照権を持ちます。

4.8.5　コーディング上の留意事項

複数のCdbrEqlStatementオブジェクトを使用して検索を実行する場合に，個々の検索を終了しないで多数の検索を実行すると，エラーになることがあります。

複数の検索を実行する場合も，一つ一つの検索をそのつど終わらせるようなコーディングにすることをお勧めします。

ここでは，エラーになる可能性があるコーディング例と，それを改善した推奨コーディング例を示します。

＜この項の構成＞

(1)　エラーになる可能性のあるコーディング

(2)　推奨するコーディング

(1)　エラーになる可能性のあるコーディング

ここでは，エラーになる可能性があるコーディング例を示します。

なお，処理の流れを明確にするため，引数は省略しています。

// 変数宣言
CdbrEqlStatement* pEqlStatement1 = NULL;
CdbrEqlStatement* pEqlStatement2 = NULL;
   ・
   ・
   ・
// オブジェクトを作成する。
pEqlStatement1 = new CdbrEqlStatement();
pEqlStatement2 = new CdbrEqlStatement();
   ・
   ・
   ・
//////////////////////////////////////
// オブジェクトを初期化する。
//////////////////////////////////////
rc = pEqlStatement1->Initialize(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
rc = pEqlStatement2->Initialize(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
   ・
   ・
   ・
//////////////////////////////////////
// 実行するedmSQL文を設定する。
//////////////////////////////////////
rc = pEqlStatement1->Set(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
rc = pEqlStatement2->Set(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
   ・
   ・
   ・
//////////////////////////////////////
// 検索を実行する。
//////////////////////////////////////
rc = pEqlStatement1->Execute(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
rc = pEqlStatement2->Execute(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
   ・
   ・
   ・
//////////////////////////////////////
// 検索結果を取得する。
//////////////////////////////////////
rc = pEqlStatement1->GetResult(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
rc = pEqlStatement2->GetResult(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
   ・
   ・
   ・

(2)　推奨するコーディング

ここでは，推奨するコーディング例を示します。

なお，処理の流れを明確にするため，引数は省略しています。

// 変数宣言
CdbrEqlStatement* pEqlStatement1 = NULL;
CdbrEqlStatement* pEqlStatement2 = NULL;
   ・
   ・
   ・
// オブジェクトを作成する。
pEqlStatement1 = new CdbrEqlStatement();
pEqlStatement2 = new CdbrEqlStatement();
   ・
   ・
   ・
//////////////////////////////////////
// オブジェクトを初期化する。
//////////////////////////////////////
rc = pEqlStatement1->Initialize(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 実行するedmSQL文を設定する。
//////////////////////////////////////
rc = pEqlStatement1->Set(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索を実行する。
//////////////////////////////////////
rc = pEqlStatement1->Execute(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索結果を取得する。
//////////////////////////////////////
rc = pEqlStatement1->GetResult(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索を終了する。
//////////////////////////////////////
rc = pEqlStatement1->Terminate();
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// オブジェクトを削除する。
//////////////////////////////////////
delete pEqlStatement1;
//////////////////////////////////////
// オブジェクトを初期化する。
//////////////////////////////////////
rc = pEqlStatement2->Initialize(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 実行するedmSQL文を設定する。
//////////////////////////////////////
rc = pEqlStatement2->Set(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索を実行する。
//////////////////////////////////////
rc = pEqlStatement2->Execute(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索結果を取得する。
//////////////////////////////////////
rc = pEqlStatement2->GetResult(...);
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// 検索を終了する。
//////////////////////////////////////
rc = pEqlStatement2->Terminate();
if(DMA_TRUE != rc)
{
   // エラー処理
}
//////////////////////////////////////
// オブジェクトを削除する。
//////////////////////////////////////
delete pEqlStatement2;

5.　環境設定

この章では，DocumentBrokerのクラスライブラリを使用するときに必要な環境設定について説明します。

＜この章の構成＞

5.1　インストール後の環境設定

5.2　プログラミング時の注意と設定

5.3　ファイル転送機能の使用

5.1　インストール後の環境設定

DocumentBrokerをインストールしたあとの環境設定について説明します。

＜この節の構成＞

5.1.1　起動ユーザとユーザ認証

5.1.2　TPBrokerでの環境設定

5.1.3　実行環境の設定

5.1.1　起動ユーザとユーザ認証

DocumentBrokerのクライアントアプリケーションとサーバを同じマシン上で動作させる場合，DocumentBrokerのクライアントアプリケーションを起動するユーザとDocumentBrokerのシステム管理者は一致させておいてください。また，DocumentBrokerは，OSのファイルシステムにアクセスする場合，DocumentBrokerのシステム管理者の権限でアクセスします。DocumentBrokerに対して認証したユーザの権限ではアクセスしませんのでご注意ください。

なお，Windows Server 2008，Windows Server 2008 R2，またはWindows Server 2012を使用している場合，DocumentBrokerのクライアントアプリケーションは管理者特権で実行する必要があります。

5.1.2　TPBrokerでの環境設定

DocumentBrokerのクラスライブラリとサーバの通信には，TPBrokerのCORBA通信を利用します。

TPBrokerのCORBA通信を利用するために必要な環境設定については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」のTPBrokerでの環境設定についての説明を参照してください。

5.1.3　実行環境の設定

DocumentBrokerのクラスライブラリの起動に必要な環境変数や，パスの指定などについて説明します。なお，DocumentBrokerのクライアントアプリケーションとサーバを同じマシン上で動作させる場合，クライアント用とサーバ用の環境変数を混在させないようにご注意ください。

また，XML文書管理機能（XMLプロパティマッピング機能・XMLインデクスデータ作成機能）を使用する場合は，ここで説明する環境変数のほかに，HiRDB Adapter for XMLの環境変数を設定する必要があります。

XML文書管理機能を使用するための環境設定については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

指定する環境変数を，OSごとに説明します。

＜この項の構成＞

(1)　環境変数（AIXの場合）

(2)　環境変数（Windowsの場合）

(3)　カレントディレクトリ

(1)　環境変数（AIXの場合）

DocumentBrokerのクライアントライブラリを起動するために必要な次の環境変数を指定してください。

LANG
環境変数「LANG」には，使用する文字コードセットを設定します。DocumentBrokerの文書空間で使用する文字コード種別に合わせて値を設定してください。

文書空間で使用する文字コード種別がShift-JISの場合

設定する値は「Ja_JP」です。

文書空間で使用する文字コード種別がUTF-8の場合

使用する言語に合わせて適切な値を設定してください。

ただし，次のときは「C」を設定してください。

文書空間で使用する文字コード種別に関係なく，ASCIIコードのデータだけを扱う英語環境の場合

一つのアプリケーションから文字コード種別の異なる複数の文書空間に接続する場合に，接続先に文字コード種別がUTF-8の文書空間が含まれるとき

なお，この環境変数に設定する値によって，メッセージの言語種別が変わります。「Ja_JP」を設定した場合は，日本語のメッセージが出力されます。「Ja_JP」以外を設定した場合は，英語のメッセージが出力されます。　

TZ
環境変数「TZ」には，マシン時間のタイムゾーンを設定します。設定する値は「JST-9」です。

XDK_HOME
環境変数「XDK_HOME」には，SystemManagerオブジェクトのレジストリファイルのロケーションを設定します。指定する値は「/opt/HiEDMS/client/etc」です。

LIBPATH
環境変数「LIBPATH」には，DocumentBrokerのクライアントライブラリのインストールディレクトリを指定します。次の値を追加してください。

TPBroker V3を使用している場合

:/opt/hitachi/common/lib
:/usr/vacpp/lib※¹
:/opt/TPBroker/lib
:/opt/HiEDMS/client/lib
:/opt/HiEDMS/ACLibrary/lib
:/opt/hirdb_xml/lib※²
:/opt/hitachi/xpk/lib※²

TPBroker V5を使用している場合

:/opt/hitachi/common/lib
:/usr/vacpp/lib※¹
:TPBroker V5インストールディレクトリ/lib
:/opt/HiEDMS/client/lib_tp5
:/opt/HiEDMS/ACLibrary/lib_tp5
:/opt/hirdb_xml/lib※²
:/opt/hitachi/xpk/lib※²

注※1　VisualAge C++ Professional for AIXまたはIBM XL C/C++ Enterprise Edition for AIXのライブラリの格納ディレクトリを設定します。これは，デフォルトのインストールディレクトリにインストールされている場合の値です。
注※2　XML文書管理機能（XMLプロパティマッピング機能・XMLインデクスデータ作成機能）を使用する場合に設定します。

PSALLOC
環境変数「PSALLOC」には，次の値を設定します。

early

NODISCLAIM
環境変数「NODISCLAIM」には，次の値を設定します。

true

DBR_CONNECTSV_ENVID
環境変数「DBR_CONNECTSV_ENVID」には，接続先の実行環境識別子を設定します。同一文書空間に実行環境が複数作成されていて，それらが同時に稼働しているサーバに接続する場合に，クライアントで接続先を選択するときに設定します。
設定できる値は，「0～254」です。
同一文書空間の実行環境として複数のサーバが存在している場合に，この環境変数を設定しないときは，クライアントで接続するサーバを選択しません。設定できる値以外を指定した場合は，設定されていないものとして動作します。
接続先の実行環境識別子をCdbrSession::Connectメソッドの引数に指定することもできます。引数で指定する場合については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。
CdbrSession::Connectメソッドの引数の指定と，この環境変数の関係は，次のようになります。

表5-1　CdbrSession::Connectメソッドの引数の指定と，環境変数「DBR_CONNECTSV_ENVID」の関係（AIXの場合）

環境変数 | CdbrSession::Connectメソッドへの引数
指定あり | 指定なし
0～254 | 範囲外
指定あり | 0～254 | 引数で指定した実行環境識別子のサーバに接続 | 環境変数で指定した実行環境識別子のサーバに接続 | 環境変数で指定した実行環境識別子のサーバに接続
範囲外 | 引数で指定した実行環境識別子のサーバに接続 | 接続するサーバを選択しない | 接続するサーバを選択しない
指定なし | 引数で指定した実行環境識別子のサーバに接続 | 接続するサーバを選択しない | 接続するサーバを選択しない

クライアントで接続先を選択する場合は，接続先のDocumentSpace構成定義ファイルのSelectServerInMultiServerエントリにYesを指定して起動しておく必要があります。

DBR_CON_TIMEOUT
環境変数「DBR_CON_TIMEOUT」には，サーバへの接続要求に対するクライアントでの接続確立待ち時間（秒）を設定します。
設定できる値は，「0～2,147,483,647」です。
0を設定した場合，TCP/IPで固有のサーバへの接続確立待ち時間（秒）が設定されます。
範囲外の値を設定した場合は，0が仮定されます。

DBR_FLINK_CONTENT_DELETE
環境変数「DBR_FLINK_CONTENT_DELETE」には，File Link連携機能を使用して管理している文書のコンテントをRemoveObjectメソッドまたはDeleteRenditionメソッドによって削除する場合に，ファイルサーバ上のファイルの実体を削除することを指定します。次の値を指定します。

ON

DBR_DETAIL_ERRORLOG
環境変数「DBR_DETAIL_ERRORLOG」は，詳細メッセージを取得する場合に指定します。詳細メッセージを取得する場合には，次の値を指定してください。

ON

DBR_DETAIL_ERRORLOG_DIR
環境変数「DBR_DETAIL_ERRORLOG_DIR」には，詳細メッセージを取得する場合に，詳細エラーログファイルを出力するためのパス名を指定します。なお，文書空間で使用する文字コード種別がUTF-8の場合，印刷可能なASCIIコードで記述できる値を設定してください。詳細エラーログファイルは，指定したパス名のディレクトリ下に，次のファイル名で出力されます。

EDMErrTraceCLXXXXX_1.log
（XXXXXはプロセスID番号）

詳細エラーログファイルにはエラーが発生していない場合もログが出力されますので，必要に応じて詳細エラーログファイルを削除するようにしてください。
詳細エラーログファイルに出力される内容については，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。なお，指定を省略した場合，環境変数「DBR_DETAIL_ERRORLOG」にONを指定していても，詳細エラーログファイルは出力されません。

DBR_DETAIL_ERRORLOG_NUM
環境変数「DBR_DETAIL_ERRORLOG_NUM」には，詳細メッセージを取得する場合に使用する，ラップアラウンドする詳細エラーログファイルの個数を指定します。2,147,483,647以下の値を指定してください。省略した場合の仮定値は2です。また，2未満の値を指定した場合も，2が仮定されます。

DBR_DETAIL_ERRORLOG_SIZE
環境変数「DBR_DETAIL_ERRORLOG_SIZE」には，詳細メッセージを取得する場合に使用する詳細エラーログファイルの容量の上限値（バイト）を指定します。2,147,483,647以下の値を指定してください。省略した場合の仮定値は10,000です。
0以下の値を設定した場合，または1回の出力データ量よりも小さい値を指定した場合には，詳細メッセージは出力されません。

環境変数の値と詳細エラーログファイルのラップアラウンド処理

1プロセスで長時間に及ぶ処理を実行する場合，出力される詳細エラーログファイルの容量が過剰に大きくなる可能性があります。

詳細エラーログファイルが必要以上の容量に増加するのを防ぐため，詳細エラーログファイルはラップアラウンド処理されます。詳細エラーログファイルの容量が環境変数で指定した最大容量になった場合，ラップアラウンド処理されて，詳細メッセージのログは最初の詳細エラーログファイルに出力されます。

最大容量とは，次の値です。

（詳細エラーログファイルのサイズ（DBR_DETAIL_ERROR_SIZEの指定値））×（詳細エラーログファイルの個数（DBR_DETAIL_ERROR_NUMの指定値））

この場合の詳細エラーログファイルの出力処理は，次のようになります。

環境変数「DBR_DETAIL_ERRORLOG_DIR」に指定したディレクトリに，次の名称で詳細エラーログファイルが作成されます。（XXXXXXはプロセスID，Nはプロセス内のファイル番号）
EDMErrTraceClXXXXXX_N.log

ファイルの容量が環境変数「DBR_DETAIL_ERROR_SIZE」で指定した容量になったら，次の詳細エラーログファイルが作成されます。

環境変数「DBR_DETAIL_ERRORLOG_NUM」に指定した個数のファイルがすべて最大容量になったら，ラップアラウンドして再び先頭のファイルにログが出力されます。

また，edmSQL構文解析情報ファイルを出力する場合は，次の環境変数の設定が必要です。

DBR_EQL_PARSELOG

DBR_EQL_PARSELOG_DIR

これらの環境変数の詳細は，「4.7.3(1)edmSQL構文解析情報ファイル」を参照してください。

(2)　環境変数（Windowsの場合）

DocumentBrokerのクライアントライブラリを起動するために必要な次の環境変数を指定してください。

DBR_CONNECTSV_ENVID
環境変数「DBR_CONNECTSV_ENVID」には，接続先の実行環境識別子を設定します。同一文書空間に実行環境が複数作成されていて，それらが同時に稼働しているサーバに接続する場合に，クライアントで接続先を選択するときに設定します。
設定できる値は，「0～254」です。
同一文書空間の実行環境として複数のサーバが存在している場合に，この環境変数を設定しないときは，クライアントで接続するサーバを選択しません。設定できる値以外を指定した場合は，設定されていないものとして動作します。
接続先の実行環境識別子をCdbrSession::Connectメソッドの引数に指定することもできます。引数で指定する場合については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。
CdbrSession::Connectメソッドの引数の指定と，この環境変数の関係は，次のようになります。

表5-2　CdbrSession::Connectメソッドの引数の指定と，環境変数「DBR_CONNECTSV_ENVID」の関係（Windowsの場合）

環境変数 | CdbrSession::Connectメソッドへの引数
指定あり | 指定なし
0～254 | 範囲外
指定あり | 0～254 | 引数で指定した実行環境識別子のサーバに接続 | 環境変数で指定した実行環境識別子のサーバに接続 | 環境変数で指定した実行環境識別子のサーバに接続
範囲外 | 引数で指定した実行環境識別子のサーバに接続 | 接続するサーバを選択しない | 接続するサーバを選択しない
指定なし | 引数で指定した実行環境識別子のサーバに接続 | 接続するサーバを選択しない | 接続するサーバを選択しない

クライアントで接続先を選択する場合は，接続先のDocumentSpace構成定義ファイルのSelectServerInMultiServerエントリにYesを指定して起動しておく必要があります。

DBR_CON_TIMEOUT
環境変数「DBR_CON_TIMEOUT」には，サーバへの接続要求に対するクライアントでの接続確立待ち時間（秒）を設定します。
設定できる値は，「0～2,147,483,647」です。
0を設定した場合，TCP/IPで固有のサーバへの接続確立待ち時間（秒）が設定されます。
範囲外の値を設定した場合は，0が仮定されます。
既に一度接続したクライアントからサーバへの接続要求でタイムアウトが発生した場合，CdbrSession::Connectメソッドで，次のエラーが返却されます。
major_code：ERR_DMA　minor_code：DMARC_NETWORK_UNAVAILABLE
TPBroker V3と連携して動作する環境の場合，エラーが返却されず，正常に接続できる場合があります。

DBR_FLINK_CONTENT_DELETE
環境変数「DBR_FLINK_CONTENT_DELETE」には，File Link連携機能を使用して管理している文書のコンテントをRemoveObjectメソッドまたはDeleteRenditionメソッドによって削除する場合に，ファイルサーバ上のファイルの実体を削除することを指定します。次の値を指定します。

ON

DBR_DETAIL_ERRORLOG
環境変数「DBR_DETAIL_ERRORLOG」は，詳細メッセージを取得する場合に指定します。詳細メッセージを取得する場合には，次の値を指定してください。

ON

DBR_DETAIL_ERRORLOG_DIR
環境変数「DBR_DETAIL_ERRORLOG_DIR」には，詳細メッセージを取得する場合に，詳細エラーログファイルを出力するためのパス名を指定します。なお，文書空間で使用する文字コード種別がUTF-8の場合，印刷可能なASCIIコードで記述できる値を設定してください。詳細エラーログファイルは，指定したパス名のディレクトリ下に，次のファイル名で出力されます。

EDMErrTraceCLXXXXX_1.log
（XXXXXはプロセスID番号）

詳細エラーログファイルにはエラーが発生していない場合もログが出力されますので，必要に応じて詳細エラーログファイルを削除するようにしてください。
詳細エラーログファイルに出力される内容については，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。なお，指定を省略した場合，環境変数「DBR_DETAIL_ERRORLOG」にONを指定していても，詳細エラーログファイルは出力されません。

DBR_DETAIL_ERRORLOG_NUM
環境変数「DBR_DETAIL_ERRORLOG_NUM」には，詳細メッセージを取得する場合に使用する，ラップアラウンドする詳細エラーログファイルの個数を指定します。2,147,483,647以下の値を指定してください。省略した場合の仮定値は2です。また，2未満の値を指定した場合も，2が仮定されます。

DBR_DETAIL_ERRORLOG_SIZE
環境変数「DBR_DETAIL_ERRORLOG_SIZE」には，詳細メッセージを取得する場合に使用する詳細エラーログファイルの容量の上限値（バイト）を指定します。2,147,483,647以下の値を指定してください。省略した場合の仮定値は10,000です。
0以下の値を設定した場合，または1回の出力データ量よりも小さい値を指定した場合には，詳細メッセージは出力されません。
環境変数の値と詳細エラーログファイルのラップアラウンド処理の関係については，「(1)環境変数（AIXの場合）」を参照してください。
また，edmSQL構文解析情報ファイルを出力する場合は，次の環境変数の設定が必要です。

DBR_EQL_PARSELOG

DBR_EQL_PARSELOG_DIR
これらの環境変数の詳細は，「4.7.3(1)edmSQL構文解析情報ファイル」を参照してください。

(3)　カレントディレクトリ

カレントディレクトリは，クライアントアプリケーションが格納されているディレクトリから移動しないでください。

5.2　プログラミング時の注意と設定

DocumentBrokerのアプリケーションプログラムをクラスライブラリを使用して作成するときの注意事項および設定について説明します。

＜この節の構成＞

5.2.1　文字コード種別とプログラミング

5.2.2　ヘッダファイル

5.2.3　コンパイルオプション

5.2.4　ライブラリの指定

5.2.5　ほかのプログラムとの併用の際の注意

5.2.6　クラス識別子，プロパティ識別子の定義

5.2.7　ユーザ定義のクラス識別子・プロパティ識別子の定義

5.2.1　文字コード種別とプログラミング

クラスライブラリを使用して，アプリケーションを開発したり，開発したクライアントアプリケーションを使用して，文書空間オブジェクトを操作する場合，クラスライブラリを使用したプログラミングで使用する文字コード種別は，接続する文書空間で使用する文字コード種別に合わせる必要があります。DocumentBrokerでは，次の文字コードセットをサポートしています。

Shift-JIS

UTF-8（使用できる文字コードの範囲はUCS-2またはUCS-4です）

このため，プログラムではlocale機能を用いてロケールを設定する必要があります。

ユーザの言語要求に従ってロケールを設定するプログラミングの例を次に示します。

ロケールを設定するプログラミングの例

#include <locale.h>
：
setlocale(LC_ALL, "");
：

＜この項の構成＞

(1)　文書空間の文字コード種別の取得

(2)　文字コード種別がUTF-8の場合に使用できる機能

(1)　文書空間の文字コード種別の取得

接続する文書空間で使用している文字コード種別は，CdbrSession::GetDocSpaceCharacterSetメソッドで取得できます。１つのクライアントアプリケーションが文字コード種別の異なる複数の文書空間に接続する場合に，このメソッドを使用することで動的に文書空間の文字コードに合わせた処理を行うことができます。CdbrSession::GetDocSpaceCharacterSetメソッドの詳細については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

(2)　文字コード種別がUTF-8の場合に使用できる機能

文書空間で使用する文字コード種別がUTF-8の場合，DocumentBrokerで使用できる機能や各クラスで提供するメソッドに制限があります。文書空間で使用する文字コード種別がUTF-8の場合に使用できる範囲を次に示します。なお，文書空間で使用する文字コード種別が，Shift-JISの場合は，すべての機能が使用できます。

表5-3　文書空間で使用する文字コード種別がUTF-8の場合に使用できる機能

分類 | 機能名 | 使用可否
文書管理 | 文書の登録機能 | ○
バージョン管理機能 | ○
マルチレンディション管理機能 | ○
マルチファイル管理機能 | ○
コンテナ管理機能 | ○
文書の構成管理機能 | ○
文書間リレーション管理機能 | ○
文書の属性情報の管理機能 | ○
File Link連携機能 | －
リファレンスファイル管理機能 | ○
レンディションのコンテント種別変換機能 | ○
XML文書管理機能 | －
独立データの管理機能 | 独立データの管理機能 | ○
アクセス制御 | アクセス制御機能 | ○
検索 | 属性検索 | ○
全文検索 | ○
構造指定検索 | －
概念検索 | ○
文字列型プロパティに対する全文検索 | ○

（凡例）

○：使用できます。

－：使用できません。

なお，文書空間で使用する文字コード種別がUTF-8の場合に使用できるメソッドの詳細は，「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

5.2.2　ヘッダファイル

クライアントがインクルードしなければならないヘッダファイルについて説明します。

ヘッダファイルには，クラスライブラリのヘッダファイル，DMAの基本ヘッダファイルおよびDocumentBrokerの拡張ヘッダファイルがあります。

インクルードするヘッダファイルを，OSごとに説明します。

＜この項の構成＞

(1)　ヘッダファイル（UNIXの場合）

(2)　ヘッダファイル（Windowsの場合）

(1)　ヘッダファイル（UNIXの場合）

DocumentBrokerのアプリケーションプログラムをクラスライブラリを使用して作成する際には，クラスライブラリのヘッダファイルをインクルードしてください。

次に，クラスライブラリのヘッダファイルについて説明します。クラスライブラリのヘッダファイルは，次のディレクトリに格納されています。

/opt/HiEDMS/ACLibrary/include
/opt/HiEDMS/client/include

クラスライブラリのヘッダファイルを次の表に示します。

表5-4　クラスライブラリのヘッダファイルの一覧

ヘッダファイル名 | 定義内容
DBR.h | クラスライブラリで使用するすべての定義
DBR_CfgRfct.h | CdbrConfiguratedReferentialContainerクラスの定義
DBR_Common.h | 共通のマクロの定義
DBR_CommonStruct.h | 構造体についての共通の定義
DBR_Compound.h | CdbrCompoundクラスの定義
DBR_Containable.h | CdbrContainableクラスの定義
DBR_Core.h | CdbrCoreクラスの定義
DBR_Delete.h | 構造体メモリの解放関数の定義
DBR_DMA.h | CdbrDMAクラスの定義
DBR_Document.h | CdbrDocumentクラスの定義
DBR_ErrorCode.h | エラーコードの定義
DBR_EqlStatement.h | CdbrEqlStatementクラスの定義
DBR_IndependentPersistence.h | CdbrIndependentPersistenceクラスの定義
DBR_PublicACL.h | CdbrPublicACLクラスの定義
DBR_QueryStruct.h | 検索に使用する構造体の定義
DBR_Rfct.h | CdbrReferentialContainerクラスの定義
DBR_Session.h | CdbrSessionクラスの定義
DBR_Tools.h | クラスライブラリが提供する関数の定義
DBR_VArray.h | CdbrVariableArrayクラスの定義
DBR_Versionable.h | CdbrVersionableクラスの定義
DBR_Vrdoc.h | CdbrVersionableDocumentクラスの定義
DBR_Vtct.h | CdbrVersionTraceableContainerクラスの定義
DBR_XmlTranslator.h | CdbrXmlTranslatorクラスの定義
DBR_XmlTranslatorFactory.h | CdbrXmlTranslatorFactoryクラスの定義

DBR.hは，クラスライブラリのメインヘッダファイルです。このヘッダファイルをインクルードすると，すべてのヘッダファイルをインクルードしたことになります。なお，DBR.hをインクルードする場合は，コンパイル時のインクルードパスに，次のディレクトリを追加してください。

/opt/TPBroker/include

ただし，TPBroker V5と連携して動作する環境では，ディレクトリを追加する必要はありません。

(2)　ヘッダファイル（Windowsの場合）

DocumentBrokerのアプリケーションプログラムをクラスライブラリを使用して作成する際には，次のヘッダファイルをインクルードします。

stdafx.hまたはwindows.h

クラスライブラリのヘッダファイル

まず，stdafx.hまたはwindows.hをインクルードしてから，クラスライブラリのヘッダファイルをインクルードしてください。

stdafx.hとwindows.hは，MFCを使用するかどうかで，次のように選択してください。

MFCを使用する場合

stdafx.h

それ以外の場合

windows.h

クラスライブラリのヘッダファイルは，次のディレクトリに格納されています。

＜インストールディレクトリ＞¥include

クラスライブラリのヘッダファイルについては，「(1)ヘッダファイル（UNIXの場合）」を参照してください。なお，クラスライブラリのヘッダファイルDBR.hをインクルードする場合は，コンパイル時のインクルードパスに，次のディレクトリを追加してください。

<TPBrokerのインクルードディレクトリ>¥include

ただし，TPBroker V5と連携して動作する環境では，ディレクトリを追加する必要はありません。

5.2.3　コンパイルオプション

指定するコンパイルオプションについて説明します。

＜この項の構成＞

(1)　コンパイルオプション（AIXの場合）

(2)　コンパイルオプション（Windowsの場合）

(1)　コンパイルオプション（AIXの場合）

IBM VisualAge C++ Professional for AIX V5でコンパイルする場合，次のオプションを追加してください。

-qchars=signed
-D_ALL_SOURCE
-D_POSIX_SOURCE
-D_REENTRANT
-D_THREAD_SAFE
-DPTHREADS
-DTHREAD
-DAIXV3
-DUNIX
-DDMA_ASTR
-DDMA_NO_BSTR

IBM VisualAge C++ Professional for AIX V6またはIBM XL C/C++ Enterprise Edition for AIXでコンパイルする場合，次のオプションを追加してください。

-qchars=signed
-qnamemangling=v5
-D_ALL_SOURCE
-D_POSIX_SOURCE
-D_REENTRANT
-D_THREAD_SAFE
-DPTHREADS
-DTHREAD
-DAIXV3
-DUNIX
-DDMA_ASTR
-DDMA_NO_BSTR

TPBroker V5と連携して動作する環境で，コンパイルするときは，上記コンパイルオプションに加えて，以下を設定してください。

-DDBR_VB_V5

注意事項

TPBroker V3と連携して動作する環境で作成したアプリケーションをTPBroker V5と連携して動作する環境で実行する場合，-DDBR_VB_V5を追加して，再度コンパイルしてください。

(2)　コンパイルオプション（Windowsの場合）

Visual C++6.0でコンパイルする場合，次のコンパイルオプションを指定してください。

/MD

ランタイムライブラリの利用［マルチスレッド DLL］

/Gd

呼び出し規則［_cdecl］

/GX

例外処理の有効化

/D

次のシンボルを設定してください。

WIN32，WINNT，DMA_ASTR，DMA_NO_BSTR

TPBroker V5と連携して動作する環境で，コンパイルするときは，上記シンボルに加えて，以下を設定してください。

DBR_VB_V5

注意事項

TPBroker V3と連携して動作する環境で作成したアプリケーションをTPBroker V5と連携して動作する環境で実行する場合，DBR_VB_V5を追加して，再度コンパイルしてください。

5.2.4　ライブラリの指定

ライブラリの指定を，OSごとに説明します。

＜この項の構成＞

(1)　ライブラリの指定（AIXの場合）

(2)　ライブラリの指定（Windowsの場合）

(1)　ライブラリの指定（AIXの場合）

クライアントアプリケーションを作成する際には，次のライブラリを指定してください。

libdsacl.a

libdsxml.a（XML文書管理機能を使用する場合※）

クライアントアプリケーションを作成する場合は，次のリンケージディレクトリを指定してください。

TPBroker V3を使用している場合

/opt/hitachi/common/lib

/opt/HiEDMS/client/lib

/opt/HiEDMS/ACLibrary/lib

/opt/TPBroker/lib

/opt/hirdb_xml/lib（XML文書管理機能を使用する場合※）

/opt/hitachi/xpk/lib（XML文書管理機能を使用する場合※）

TPBroker V5を使用している場合

/opt/hitachi/common/lib

/opt/HiEDMS/client/lib_tp5

/opt/HiEDMS/ACLibrary/lib_tp5

TPBroker V5インストールディレクトリ/lib

/opt/hirdb_xml/lib（XML文書管理機能を使用する場合※）

/opt/hitachi/xpk/lib（XML文書管理機能を使用する場合※）

注※

XML文書管理機能（XMLプロパティマッピング機能・XMLインデクスデータ作成機能）を使用する場合，クライアントアプリケーションの開発環境および実行環境に，HiRDB Adapter for XMLが必要です。また，XMLインデクスデータ作成機能を使用する場合，実行環境にPreprocessing Library for Text Searchが必要です。Preprocessing Library for Text Searchがない場合，CdbrXmlTranslator::GetIndexDataメソッドおよびCdbrXmlTranslator::GetDmaInfoListメソッド（全文検索インデクスデータ出力を有効にしたとき）をコールしたとき，ERR_DMA，DMARC_NOT_SUPPORTEDのエラーになります。

また，次のリンケージオプションを指定してください。

+s

(2)　ライブラリの指定（Windowsの場合）

クライアントアプリケーションを作成する際には，次のライブラリを指定してください。

マルチスレッド対応のクライアントアプリケーションを作成する場合

<インストールディレクトリ>¥lib¥edmdsacl.lib

<インストールディレクトリ>¥lib¥edmdsxml.lib（XML文書管理機能を使用する場合※）

シングルスレッド対応のクライアントアプリケーションを作成する場合

<インストールディレクトリ>¥lib¥edmdsacl_s.lib

<インストールディレクトリ>¥lib¥edmdsxml_s.lib（XML文書管理機能を使用する場合※）

シングルスレッド対応のクライアントアプリケーションを作成する場合，TPBrokerのライブラリをリンクする際には"_r"が付いていないものを指定してください。なお，TPBroker V5と連携して動作する環境では，シングルスレッド対応のクライアントアプリケーションを作成することはできません。

注※

XML文書管理機能（XMLプロパティマッピング機能・XMLインデクスデータ作成機能）を使用する場合，クライアントアプリケーションの作成環境および実行環境に，HiRDB Adapter for XMLが必要です。また，XMLインデクスデータ作成機能を使用する場合，実行環境にPreprocessing Library for Text Searchが必要です。

5.2.5　ほかのプログラムとの併用の際の注意

TPBrokerのヘッダファイル（corba.h）を，DocumentBrokerのヘッダファイルよりも先にインクルードしてください。

5.2.6　クラス識別子，プロパティ識別子の定義

ここでは，クラス識別子およびプロパティ識別子のGUID値の実体を定義するために必要な定義について説明します。

DMAが規定しているクラス識別子およびプロパティ識別子は，次のヘッダファイルに定義されています。

UNIXの場合

/opt/HiEDMS/client/include/dmaids.h
/opt/HiEDMS/client/include/dmaidvar.h
/opt/HiEDMS/client/include/edmids.h
/opt/HiEDMS/client/include/edmidvar.h

Windowsの場合

＜インストールディレクトリ＞¥dmaids.h
＜インストールディレクトリ＞¥dmaidvar.h
＜インストールディレクトリ＞¥edmids.h
＜インストールディレクトリ＞¥edmidvar.h

これらのヘッダファイルは，DBR.hをインクルードすることで間接的にインクルードされるため，明示的にインクルードする必要はありません。ただし，ユーザが作成するアプリケーションプログラムを構成するソースファイルの中の一つに，DMA_INIT_IDおよびEDM_INIT_IDの定義が必要です。

DMA_INIT_IDおよびEDM_INIT_IDの定義は，クラス識別子およびプロパティ識別子のGUID値の実体を定義するために必要な定義です。必ず一つのソースファイルに定義してください。これらを定義しなかったり，二つ以上のソースファイルに定義した場合，リンケージエラーになります。

また，この定義は，必ずDBR.hのインクルードよりも前に定義してください。DBR.hのインクルードよりもあとに定義している場合，DMA_INIT_IDおよびEDM_INIT_IDの定義は無効になります。

定義例を次に示します。

#define DMA_INIT_ID
#define EDM_INIT_ID

#include "DBR.h"
　　　：

なお，Windowsの場合に，stdafx.hやwindows.hをインクルードするときは，まず，これらのヘッダファイルをインクルードしてから，DMA_INIT_IDおよびEDM_INIT_IDを定義してください。この場合も，DBR.hのインクルードは，定義のあとにしてください。

定義例を次に示します。

#include "stdafx.h"

#define DMA_INIT_ID
#define EDM_INIT_ID

#include "DBR.h"
　　：

5.2.7　ユーザ定義のクラス識別子・プロパティ識別子の定義

ここでは，ヘッダファイルを作成してGUID値の実体を定義する方法について説明します。

なお，EDMCreateIdsコマンドでも，GUID値の実体を定義できます。EDMCreateIdsコマンドの詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。また，ソースファイルが一つしかない場合や，ユーザが追加定義したサブクラスやプロパティが少ない場合は，ソースファイル内でdefine文を使用してGUID値を直接定義した方が簡単に定義できることもあります。適切な方法で定義してください。

この例では，次の条件でヘッダファイルを作成します。なお，サブクラスおよびプロパティの追加方法については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

条件

追加したサブクラスのクラス識別子は，usrClass_Documentである。

追加したプロパティのプロパティ識別子は，usrProp_NameおよびusrProp_Authorである。

追加したサブクラス，プロパティのGUID値は，次のとおりである。

表5-5　追加したサブクラス，プロパティのGUID値

クラス識別子またはプロパティ識別子 | GUID値
usrClass_Document（サブクラス） | F5D8E3A2-284C-11d2-9177-0000E2130367​
usrProp_Name（プロパティ） | F5D8E3A4-284C-11d4-9177-0000E2130367​
usrProp_Author（プロパティ） | 76fa162c-0406-11d2-b29a-0060b0ea4840

作成する定義ファイルの名称は，usrids.hおよびusrvar.hとする。
なお，作成する定義ファイル名は任意です。

手順を示します。

追加したサブクラスおよびプロパティのGUID値を確認します。
GUID値は，システム管理者に確認します。

システム管理者によるGUID値の確認方法

GUID値は，EDMCrtSimMetaコマンドを実行することによって確認できます。設定したGUID値をシステム管理者が忘れてしまった場合や，システムでGUID値が自動的に割り振られる設定にしてある場合には，システム管理者がEDMCrtSimMetaコマンドを実行してGUID値を確認してください。

この例では，表5-5に示したようにGUID値は設定されていることとします。

usrids.hを作成します。
このヘッダファイルには，GUID値の実体を定義します。
定義例を次に示します。

#define usrClass_DocumentVal¥
{ 0xf5d8e3a2,0x284c,0x11d2,¥
{ 0x91,0x77,0x0,0x0,0xe2,0x13,0x3,0x67 }}

#define usrProp_NameVal¥
{ 0xf5d8e3a4,0x284c,0x11d4,¥
{ 0x91,0x77,0x0,0x0,0xe2,0x13,0x3,0x67 }}

#define usrProp_AuthorVal¥
{ 0x76fa162c,0x0406,0x11d2,¥
{ 0xb2,0x9a,0x0,0x60,0xb0,0xea,0x48,0x40 }}

usridvar.hを作成します。
このヘッダファイルには，USR_INIT_IDを定義してあるソースファイルにGUID値の実体を定義し，それ以外のソースファイルにはexternを宣言することを定義します。
定義例を次に示します。

#include "usrids.h"

#if defined(USR_INIT_ID)
#   define USR_DECL_ID(x_) DMA_EXTERN_C DmaId x_=x_##Val;
#else
#   define USR_DECL_ID(x_) DMA_EXTERN_C DmaId x_;
#endif

USR_DECL_ID(usrClass_Document)
USR_DECL_ID(usrProp_Name)
USR_DECL_ID(usrProp_Author)

ソースファイルに，usidvar.hをインクルードします。
一つのソースファイルだけに，USR_INIT_IDを定義して，usridvar.hをインクルードします。これによって，そのソースファイルにユーザ定義のクラス識別子およびプロパティ識別子のGUID値の実体が定義されます。USR_INIT_IDの定義は，DMA_INIT_IDおよびEDM_INIT_IDを定義したソースファイルと同じファイルにすることをお勧めします。なお，二つ以上のファイルにUSR_INIT_IDを指定しないでください。
定義例を次に示します。

#define DMA_INIT_ID
#define EDM_INIT_ID
#define USR_INIT_ID

#include "DBR.h"
#include "usridvar.h"
　　：

5.3　ファイル転送機能の使用

DocumentBrokerサーバに接続するクライアントが異なるマシン上に存在する場合，サーバとクライアント間のファイル転送には，ファイル転送機能を使用する必要があります。例えば，DocumentBrokerで管理している文書のファイルを異なるクライアントマシンに取得したり，異なるクライアントマシンに存在するファイルをDocumentBrokerの文書として登録したりする場合に，ファイル転送が発生します。

ファイル転送機能は，ファイル転送サービスが提供しています。ファイル転送サービスを使用するための環境設定については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」のファイル転送機能の使用についての説明を参照してください。

6.　エラー処理

この章では，エラー処理について説明します。

＜この章の構成＞

6.1　エラーの種類

6.2　エラー処理の流れ

6.3　詳細メッセージの取得

6.1　エラーの種類

DocumentBrokerで発生するエラーの種類について説明します。

＜この節の構成＞

6.1.1　major_codeによるエラーの分類

6.1.2　詳細な情報が取得できるエラー

6.1.3　エラー確認後の処理

6.1.1　major_codeによるエラーの分類

ここでは，major_codeによってエラーを分類する方法について説明します。エラーは，CdbrCore::GetLastErrorメソッドによって取得できるmajor_codeによって分類できます。

major_codeによって分類できるエラーには，次の2種類があります。

＜この項の構成＞

(1)　データベースで発生したエラー（major_codeがERR_DBの場合）

(2)　データベース以外で発生したエラー（major_codeがERR_DB以外の場合）

(1)　データベースで発生したエラー（major_codeがERR_DBの場合）

データベースでエラーが発生した場合，major_codeに「ERR_DB」が設定されます。

この場合は，CdbrCore::GetDBErrorメソッドをコールして，より詳細なエラー情報を取得してください。

(2)　データベース以外で発生したエラー（major_codeがERR_DB以外の場合）

エラーが，データベース以外で発生した場合は，major_codeに「ERR_DBR」，「ERR_DMA」または「ERR_CORBA」が設定されます。

この場合は，CdbrCore::GetLastErrorメソッドによって取得したmajor_codeおよびminor_codeを基に，エラーの原因に対処してください。また，「ERR_CORBA」の場合は，ppErrorStringに出力された情報を参照してください。

6.1.2　詳細な情報が取得できるエラー

DocumentBrokerで発生するエラーには，さらに詳細な情報について示す詳細メッセージを取得できるものがあります。詳細メッセージの取得方法については，「6.3　詳細メッセージの取得」を参照してください。取得した詳細メッセージに対する対処については，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。

6.1.3　エラー確認後の処理

エラーの種類と情報の内容を確認したら，明示的に，CdbrSession::Rollbackメソッドをコールして，ロールバックを実行してください。

6.2　エラー処理の流れ

ここでは，エラーが発生した場合の処理の流れについて説明します。次の図に，エラーが発生した場合の処理の流れを示します。

図6-1　エラーが発生した場合の処理

エラーが発生した場合の処理手順について，図6-1の流れに沿って説明します。

エラーが発生したら，GetLastErrorメソッドによって，エラーの種類を判断します。
major_codeが「ERR_DB」の場合はデータベースでエラーが発生していますので，操作2以降に従って，対処します。
それ以外の場合は，major_codeおよびminor_codeの内容に従って，エラーに対処します。
詳細なメッセージを取得する場合は，CdbrSession::GetLastDetailErrorメソッドをコールして取得してください。

データベースのエラーの場合（major_codeが「ERR_DB」の場合）は，トランザクションをロールバックして終了させます。
minor_codeによって，操作3または操作4に進みます。

minor_codeが「ERR_DB_LOCKED（ロックエラー）」または「ERR_DB_DEADLOCK_OCCURED（デッドロックエラー）」の場合は，リトライします。
minor_codeが「ERR_DB_LOCKED（ロックエラー）」または「ERR_DB_DEADLOCK_OCCURED（デッドロックエラー）」の場合は，ロックエラーまたはデッドロックエラーが発生しています。このエラーの場合は，リトライできます。トランザクション内にユーザプログラムで実行した処理を元に戻してから，リトライします。

minor_codeが「ERR_DB_FAILED」の場合は，CdbrCore::GetDBErrorメソッドをコールします。
データベースが起動していない場合などに，このエラーは発生します。
出力されたSQLCODEおよびSQLSTATEを参照して，原因を確認，対処します。
また，GetDBErrorメソッドで取得する詳細なエラー情報は，システムのメッセージとしても出力されます。必要に応じて参照してください。
なお，DocumentBrokerのデフォルトの動作として，ロックを取得時にほかのトランザクションでロックが取得されている場合，そのロックが解放されるのをウエイトします。この場合は，タイムアウトしたときにだけ，ロックエラーが出力されますので，必要に応じてリトライしてください。
なお，ロック取得時のウエイトは，CdbrDMA::ConnectObjectメソッドの引数の設定によって，ウエイトしないように選択することもできます。

6.3　詳細メッセージの取得

アプリケーション開発でのデバッグ時および実行時のエラーに具体的に対処できるように，DocumentBrokerでは，詳細なエラー情報（詳細メッセージ）を提供しています。

この節では，詳細メッセージの出力先およびアクセス制御機能でエラーになったときに詳細メッセージが取得できる戻り値について説明します。

なお，詳細メッセージの内容については，マニュアル「DocumentBroker Version 3　メッセージ」を参照してください。

＜この節の構成＞

6.3.1　詳細メッセージの出力先

6.3.2　アクセス制御機能でエラーが発生した場合に詳細メッセージが取得できる戻り値

6.3.1　詳細メッセージの出力先

ここでは，詳細メッセージの出力先について説明します。

詳細メッセージは，詳細エラーログファイルまたはCdbrSession::GetLastDetailErrorメソッドの引数に出力されます。

＜この項の構成＞

(1)　詳細エラーログファイル

(2)　CdbrSession::GetLastDetailErrorメソッドの引数

(1)　詳細エラーログファイル

クライアント環境変数DBR_DETAIL_ERRORLOGがONのとき， DBR_DETAIL_ERRORLOG_DIRで指定されたディレクトリの下に「EDMErrTraceCLXXXXX_1.log」として出力されます。XXXXはプロセスIDを示します。詳細エラーログファイルには，エラーが発生しない場合もログが出力されますので，必要に応じて詳細エラーログファイルを削除するようにしてください。

クライアント環境変数については，「5.1.3　実行環境の設定」を参照してください。

なお，文書空間で使用する文字コード種別がUTF-8の場合，メッセージテキストの%nにUTF-8の文字列が出力されることがあります。UTF-8の文字列の内容を確認するには，UTF-8に対応したエディタなどで参照してください。

(2)　CdbrSession::GetLastDetailErrorメソッドの引数

詳細メッセージは，それを取得するためのメソッドであるCdbrSession::GetLastDetailErrorメソッドをコールした場合に，引数の値として出力されます。

このメソッドは，クラスライブラリのメソッドのコール時にエラーが発生した場合に，CdbrCore::GetLastErrorメソッドでmajor_code，minor_codeを取得したあとで必要に応じてコールします。メソッドの詳細については，「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」のCdbrSession::GetLastDetailErrorメソッドを参照してください。

また，詳細メッセージを取得するためのコーディング例については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

6.3.2　アクセス制御機能でエラーが発生した場合に詳細メッセージが取得できる戻り値

ここでは，アクセス制御機能で発生するエラーのうち，詳細メッセージが取得できるエラーを表す戻り値について説明します。

次の戻り値が出力された場合は，詳細メッセージが取得できます。

表6-1　詳細メッセージが取得できるアクセス制御機能の戻り値

major_code | minor_code
ERR_DBR | ERR_ACCESS_NOT_PERMITTED
ERR_DBR | ERR_BAD_PERMISSION
ERR_DBR | ERR_INVALID_PUBLICACL_COUNT
ERR_DBR | ERR_INVALID_ACE_COUNT
ERR_DBR | ERR_NONEXIST_PUBLICACL
ERR_DBR | ERR_PUBLICACL_NOT_BOUND

付録

＜この付録の構成＞

付録A　DMAオブジェクトの概要

付録B　edmSQLの構文解析エラー情報

付録C　HiRDBのシステム共通定義のオペランドpd_max_access_tablesの見積もり方法

付録D　用語解説

付録A　DMAオブジェクトの概要

クラスライブラリのオブジェクトは，DMAが提唱するオブジェクトモデルを基に作成されたDMAオブジェクトを構成要素として作成されています。

ここでは，DMAオブジェクトモデルの概要として，次の項目について説明します。

DMAオブジェクトの操作に使用する概念

DocumentBrokerで使用するDMAのクラス

DMAオブジェクトで表す文書

文書のバージョン管理

コンテインメントを利用した文書管理

バージョン付き構成管理コンテナを利用した構成管理

なお，これらの説明内のオブジェクトは，すべてDMAオブジェクトです。

＜この節の構成＞

付録A.1　DMAオブジェクトの操作に使用する概念

付録A.2　DocumentBrokerで使用するDMAクラス

付録A.3　DMAオブジェクトで表す文書

付録A.4　文書のバージョン管理

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

付録A.6　バージョン付き構成管理コンテナを利用した構成管理

付録A.1　DMAオブジェクトの操作に使用する概念

ここでは，オブジェクトを操作するために使用する次の概念について説明します。

クラス

プロパティ

メソッド

GUIDとOIID

＜この項の構成＞

(1)　クラス

(2)　プロパティ

(3)　メソッド

(4)　GUIDとOIID

(1)　クラス

クラスとは，オブジェクトの型を定義したひな形です。すべてのDMAオブジェクトは，DMAクラスの一つを基にして作成します。あるクラスを基にして作成されたオブジェクトは，そのクラスのインスタンスです。したがって，同じクラスを基に作成されたオブジェクトは，すべて同じ型を持っています。

DocumentBrokerでは，用途に応じたDMAクラスを用意しています。クライアントアプリケーションは，これらから必要に応じたDMAクラスを選択してオブジェクトを作成する必要があります。

例えば，文書を表現するには，dmaClass_DocVersionクラスというDMAクラスを使用します。dmaClass_DocVersionクラスに基づいて作成する（インスタンス）オブジェクトは，DocVersionオブジェクトです。

(2)　プロパティ

クラスには，プロパティが定義されています。プロパティとは，オブジェクトの状態を表す属性です。

同じクラスから作成されたオブジェクトは，同じプロパティを持っています。DocumentBrokerでは，プロパティの値を取得したり，プロパティに値を設定したりすることによって，文書を検索したり更新したりします。

(3)　メソッド

メソッドとは，クライアントアプリケーションが使用するコマンドで，オブジェクトの状態を参照したり更新したりするための手段として使用します。つまりメソッドは，プロパティに値を設定したり，プロパティから値を取得したりするために使用します。

(4)　GUIDとOIID

GUIDは，クラスおよび検索に使用するオペレータ（問い合わせ演算子）を識別するために付けられる識別子です。メソッドで使用するデータ型であるDmaIdは，GUIDです。

また，すべてのDMAオブジェクトには，プロパティとしてOIIDが付けられています。OIIDは，SystemオブジェクトのGUID，DocSpaceオブジェクトのGUID，文書空間特有のオブジェクトの識別子から構成され，URLの形式で定義されています。このOIIDを基に，DMAオブジェクトを探索できます。

OIIDに使用するURLの文法については，マニュアル「DocumentBroker Version 3　クラスライブラリ　C++　リファレンス　基本機能編」を参照してください。

付録A.2　DocumentBrokerで使用するDMAクラス

ここでは，DMAクラスおよびプロパティについて説明します。

＜この項の構成＞

(1)　クラス

(2)　プロパティ

(1)　クラス

ここでは，DMAクラスについて説明します。

(a)　クラスの識別子

DMAクラスは，次の識別子を付与して管理しています。

初期識別子
DocumentBrokerによって割り当てられるGUID。

追加識別子
GUIDの別名の識別子。追加識別子は，クライアントアプリケーションから任意のGUIDの値で設定できます。ただし，クラスとプロパティに同じGUIDは設定できません。また，クラスと検索に使用するオペレータに同じGUIDを設定できません。さらに，DocumentBrokerがすでに使用しているGUIDは重複して使用できません。

(b)　クラスの継承関係

クラスは，その直上にあるクラスが持つプロパティを選択して継承します。

DMAクラスは，dmaClass_DMAクラスというクラスを基にしたツリー構造をしています。主なDMAクラスのツリー構造を，次の図に示します。

図A-1　DMAクラスの階層構造

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オブジェクトの例

図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オブジェクトの例

図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オブジェクトがあります。ここでは，要素０のPropertyDescriptionStringオブジェクトが，dmaProp_OIIDプロパティの詳細情報を記述していることを示しています。同様に，要素２のPropertyDescriptionStringオブジェクトが，usrProp_Authorプロパティの詳細情報を記述していることを示しています。

付録A.3　DMAオブジェクトで表す文書

ここでは，DMAオブジェクトで表す文書の概念について説明します。

＜この項の構成＞

(1)　DocumentBrokerでの文書とは

(2)　文書を表現するために使用するDMAクラス

(1)　DocumentBrokerでの文書とは

DocumentBrokerでは，文書をDMAオブジェクトを使って表現します。例えば，「report.doc」という.docファイルで作成された「研究論文」という文書を仮定します。文書「研究論文」は，DMAオブジェクトを使うと次のように表現されます。

文書「研究論文」に相当するDMAオブジェクトであるDocVersionオブジェクト
DocVersionオブジェクトは次のプロパティを保持し，文書の属性情報を管理します。

dmaProp_Parentプロパティ
この文書が格納されているフォルダを指し示すプロパティです。DocVersionオブジェクトで表現する文書は，0個または1個のフォルダに格納できます。

dmaProp_Containersプロパティ
この文書に対してはり付けられている0個または複数個のインデクスが列挙されているプロパティです。

dmaProp_VersionDescriptionsプロパティ
この文書がバージョン管理される場合，この文書が属している一連のバージョンを指し示すDMAオブジェクトが0個または複数個列挙されているプロパティです。

dmaProp_Renditionsプロパティ
この文書が，どのような表現形式の文書なのか管理するDMAオブジェクトを指し示すプロパティです。

文書の種類である「Word文書」を示すDMAオブジェクトであるRenditionオブジェクト

文書を構成するコンテント「report.doc」を格納するためのContentTransferオブジェクト

なお，DocumentBrokerでは，用途に応じて次に示すdmaClass_DocVersionクラスのサブクラスのオブジェクトを，文書を表すDMAオブジェクトとしてDocVersionオブジェクトの代わりに使用できます。

VersionTracedDocVersionオブジェクト

ComponentDocVersionオブジェクト

VersionTracedComponentDocVersionオブジェクト

これらのDMAオブジェクトを使用すると，文書をバージョン管理したり，特定の一つのフォルダに格納して管理したり，文書に複数のインデクスをはり付けて管理したりするだけでなく，常に最新の文書を管理したり，バージョンを確定して文書を管理することができます。

ここでは，これらのDMAオブジェクトの基本となるDocVersionオブジェクトを「文書」として説明します。VersionTracedDocVersionオブジェクトについては「付録A.5　コンテインメントを利用した文書管理」を参照してください。

文書「研究論文」を表現するDMAオブジェクトの関連を，次の図に示します。なお，dmaClass_DocVersionクラスのサブクラスとして，usrClass_Documentクラスを作成していることを前提とします。

図A-4　文書を表現するDMAオブジェクトの関連（例）

次に，文書を表現するための各DMAオブジェクトについて説明します。

(a)　DocVersionオブジェクト

文書を表現するDMAオブジェクトです。文書をバージョン管理する場合は，文書の特定のバージョンを表現するために使用します。文書のバージョン管理については，「付録A.4　文書のバージョン管理」を参照してください。

文書の実体（コンテントデータ）は，DocVersionオブジェクトの下位にあるRenditionオブジェクトおよびその下位にあるContentTransferオブジェクトを経由して参照および更新できます。

(b)　Renditionオブジェクト

文書を構成する文書の種類を管理するDMAオブジェクトです。Renditionオブジェクトは，ContentTransferオブジェクト一つを保持できます。

Renditionオブジェクトは，DocVersionオブジェクトにバインドして永続化する従属オブジェクトです。

(c)　ContentTransferオブジェクト

文書の実体であるコンテントデータを管理するためのDMAオブジェクトです。一つのコンテントデータに対して，一つのContentTransferオブジェクトが存在します。ContentTransferオブジェクトは，コンテントデータをデータベースに格納する場合に使用するオブジェクトです。

ContentTransferオブジェクトはRenditionオブジェクトにバインドして永続化する従属オブジェクトです。

(2)　文書を表現するために使用するDMAクラス

文書を表現するために使用するDMAクラスを，継承関係に基づいて次の図に示します。

図A-5　文書を表現するために使用するクラスの継承関係

付録A.4　文書のバージョン管理

ここでは，文書のバージョン管理について説明します。

＜この項の構成＞

(1)　バージョンを利用した文書管理

(2)　バージョンの管理方法

(3)　文書のバージョン管理で使用するDMAクラス

(4)　バージョン管理でのオブジェクトの操作

(1)　バージョンを利用した文書管理

DocumentBrokerでは，文書に「第１版」「第２版」などの連続する版（バージョン）を付けて管理できます。文書にバージョンを付けて管理することによって，過去のある時点での文書を取り出したり，その文書を基にして新たな文書を作成することなどができます。

(2)　バージョンの管理方法

バージョンは，文書を新規に作成して保存した時点から付けられます。保存されている文書を更新して，次に保存する時点で，バージョンを上げるかどうかを選択できます。また，文書に複数のバージョンが付けられている場合は，最新のバージョンを編集して，新しいバージョンとして保存できます。

文書のバージョン管理の概念を，次の図に示します。

図A-6　文書のバージョン管理の概念

なお，最後のバージョン番号が最新のバージョン（カレントバージョン）になります。

図A-6を，DMAオブジェクトの概念に置き換えて次の図に示します。

図A-7　文書のバージョンを表現するDMAオブジェクトの関連（例）

文書をバージョン管理する場合のDMAオブジェクトの参照関係を次の図に示します。

図A-8　バージョン管理でのDMAオブジェクトの関係の例

次に，図A-8の説明を兼ねて文書のバージョン管理に使用するDMAオブジェクトについて説明します。

(a)　ConfigurationHistoryオブジェクト

文書の一連のバージョンを統括するDMAオブジェクトです。バージョン管理される文書の最上位に位置します。したがって，文書がバージョン管理されている場合，ConfigurationHistoryオブジェクトが文書として表現されます。つまり，文書Aに第１版から第3版までのバージョンがある場合，ConfigurationHistoryオブジェクトによって，第１版から第3版までの一連のバージョンが，まとめて文書Aとして表現されます。

ConfigurationHistoryオブジェクトは，図A-8に示したとおり，dmaProp_PrimaryVersionSeriesプロパティにVersionSeriesオブジェクトへのリファレンスを保持します。

(b)　VersionSeriesオブジェクト

バージョンの構成を管理するオブジェクトです。例えば，ある文書に対してバージョンが幾つあるか，最新のバージョンはどれか，などの情報を管理しています。VersionSeriesオブジェクトは，ConfigurationHistoryオブジェクトの直下に一つだけ存在します。

VersionSeriesオブジェクトは，図A-8で示したとおり，dmaProp_VersionDescriptionsプロパティにVersionDescriptionsオブジェクトを要素に持つEnumerationOfObjectオブジェクトへのリファレンスを保持します。また，dmaProp_CurrentVersionDescriptionプロパティには，最新のバージョンのVersionDescriptionオブジェクトへのリファレンスが格納されています。このプロパティによってEnumerationOfObjectオブジェクトを介さずに最新のバージョンの文書を探索できます。

(c)　VersionDescriptionオブジェクト

図A-8で示したとおり，VersionDescriptionオブジェクトは，dmaProp_VersionSeriesプロパティにVersionSeriesオブジェクトへのリファレンスを保持し，dmaProp_VersionプロパティにDocVersionオブジェクトへのリファレンスを保持しています。このように，VersionDescriptionオブジェクトは，VersionSeriesオブジェクトにDocVersionオブジェクトを結び付けて，VersionSeriesオブジェクトで管理するバージョンに対応する文書（DocVersionオブジェクト）が何であるかを管理します。

(d)　DocVersionオブジェクト

文書の特定のバージョンに相当するDMAオブジェクトです。バージョン管理されているDocVersionオブジェクトは図A-8のように，dmaProp_VersionDescriptionsプロパティに，VersionDescriptionオブジェクトを要素に持つEnumerationOfObjectオブジェクトへのリファレンスを保持します。

DocVersionオブジェクトの詳細については，「付録A.3　DMAオブジェクトで表す文書」を参照してください。

(e)　Reservationオブジェクト

新しいバージョンを作成する権利をVersionSeriesオブジェクトに予約する場合に使用するDMAオブジェクトです。新しいバージョンのチェックインが完了すると削除されます。チェックインについては，「付録A.4(4)　バージョン管理でのオブジェクトの操作」を参照してください。

(3)　文書のバージョン管理で使用するDMAクラス

文書のバージョン管理に使用するDMAクラスを，継承関係に基づいて次の図に示します。

図A-9　文書のバージョン管理に使用するDMAクラスの継承関係

(4)　バージョン管理でのオブジェクトの操作

文書に新しいバージョンを作成するための操作の概要について説明します。

(a)　新しいバージョンを作成するための権利の予約

文書に新しいバージョンを作成するには，VersionSeriesオブジェクトに新しいバージョンを追加するための権利を予約する必要があります。

(b)　DocVersionオブジェクトのチェックイン

最新のバージョンとするDocVersionオブジェクトを，VersionSeriesオブジェクトに登録します。さらに，VersionSeriesオブジェクトに対して接続するVersionDescriptionオブジェクトが通知されます。これをチェックインといいます。

(c)　予約のキャンセル

(a)での操作をキャンセルすると，作成されたReservationオブジェクトは削除されます。

(d)　バージョン管理でのオブジェクトの操作例

バージョン管理でのDMAオブジェクトの操作例を，次の図に示します。

図A-10　バージョン管理でのDMAオブジェクトの操作例

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

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

＜この項の構成＞

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

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

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

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

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

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

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

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

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

直接型
関連オブジェクトとしてDirectContainmentRelationshipオブジェクトを使用して，包含するオブジェクトと包含されるオブジェクトを結び付けます。

参照型
関連オブジェクトとしてReferentialContainmentRelationshipオブジェクトを使用して，包含するオブジェクトと包含されるオブジェクトを結び付けます。

構成管理型
関連オブジェクトとしてVersionTraceableContainmentRelationshipオブジェクトを使用して，包含するオブジェクトと包含されるオブジェクトを結び付けます。

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

(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の関係は１：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が共にV１からV２にバージョンアップしたときに構成管理モードによって構成管理コンテナ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クラスの継承関係

付録A.6　バージョン付き構成管理コンテナを利用した構成管理

ここでは，関連づけて管理している文書の集合全体としてのバージョンを管理したり，要素ごとにバージョンを指定して集合全体の構成を管理したりする方法について説明します。

＜この項の構成＞

(1)　バージョン付き構成管理コンテナを利用した構成管理で使用するDMAクラス

(2)　バージョン付き構成管理コンテナの機能

(3)　バージョン付き構成管理コンテナのバージョンの追加

(4)　バージョン付き構成管理コンテナのバージョンの追加と構成管理

(5)　バージョン付き構成管理コンテナに格納されたオブジェクトの管理例

(1)　バージョン付き構成管理コンテナを利用した構成管理で使用するDMAクラス

バージョン付き構成管理コンテナを利用した構成管理では，edmClass_ContainerVersionクラス，関連オブジェクトのDMAクラスおよびバージョン管理のDMAクラスを使用します。edmClass_ContainerVersionクラスを基に作成するContainerVersionオブジェクトは，コンテナにバージョンを付けて包含するオブジェクトを構成管理できるコンテナです。ContainerVersionオブジェクトのことを特にバージョン付き構成管理コンテナと呼びます。

バージョン付き構成管理コンテナを利用した構成管理で使用するDMAクラスを継承関係に基づいて次の図に示します。

図A-18　バージョン付き構成管理コンテナを利用した構成管理で使用するDMAクラス

(2)　バージョン付き構成管理コンテナの機能

バージョン付き構成管理コンテナ（ContainerVersionオブジェクト）には，次に示す機能があります。

包含するオブジェクトとしての機能

直接型または参照型で包含するコンテナの機能

構成管理型で包含する構成管理コンテナの機能

バージョン管理されるオブジェクトとしての機能

包含されるオブジェクトとしての機能

直接型，参照型または構成管理型で包含されることができます。

(a)　包含するオブジェクトとしての機能

バージョン付き構成管理コンテナが保持するコンテナ機能のプロパティ
edmClass_ContainerVersionクラスは，次に示すコンテナの機能を果たすためのプロパティを保持します。

コンテナの機能のためのプロパティ

dmaProp_Childrenプロパティ
直接型のコンテインメントで格納されるオブジェクトとの関連を表すDirectContainmentRelationshipオブジェクトを要素とするEnumerationOfObjectオブジェクトへのリファレンスが格納されます。

dmaProp_Containeesプロパティ
参照型で格納されるオブジェクトとの関連を表すReferentialContainmentRelationshipオブジェクトを要素とするEnumerationOfObjectオブジェクトへのリファレンスが格納されます。

したがって，ContainerVersionオブジェクトは，直接型または参照型でほかのオブジェクトを包含するコンテナの機能を持ちます。

また，ContainerVersionオブジェクトは，次に示す構成管理コンテナ機能を果たすためのプロパティを保持します。

構成管理コンテナ機能のためのプロパティ

edmProp_VTContaineesプロパティ
構成管理されて格納される構成要素との関連を表すVersionTraceableContainmentRelationshipオブジェクトを要素とするEnumerationOfObjectオブジェクトへのリファレンスが格納されます。

したがって，ContainerVersionオブジェクトは，構成管理型でほかのオブジェクトを包含する構成管理コンテナの機能を持ちます。

バージョン付き構成管理コンテナに包含されるオブジェクト
バージョン付き構成管理コンテナは，dmaProp_Parentプロパティ，dmaProp_ContainersプロパティおよびedmProp_VTContainersプロパティを保持して直接型で包含されるオブジェクト，参照型で包含されるオブジェクトおよび構成管理型で包含されるオブジェクトを包含できます。バージョン付き構成管理コンテナに包含できるDMAオブジェクトを示します。

DocVersionオブジェクト
直接型および参照型で包含される文書です。

VersionTracedDocVersionオブジェクト
直接型，参照型および構成管理型で包含される文書です。

ConfigurationHistoryオブジェクト
直接型および参照型で包含されるバージョン管理されている文書の一連のバージョンです。

Containerオブジェクト
直接型および参照型で包含されるコンテナです。

VersionTraceableContainerオブジェクト
直接型および参照型で包含される構成管理コンテナです。

ContainerVersionオブジェクト
直接型，参照型および構成管理型で包含されるバージョン付き構成管理コンテナです。

(b)　バージョン管理されるオブジェクトとしての機能

edmClass_ContainerVersionクラスは，dmaClass_Versionableクラスを継承します。したがって，文書をバージョン管理するのと同様にConfigurationHistoryオブジェクト，VersionSeriesオブジェクトおよびVersionDescriptionオブジェクトを使用してバージョン管理できます。バージョン管理の方法の詳細については，「付録A.4(2)　バージョンの管理方法」を参照してください。

(c)　包含されるオブジェクトとしての機能

edmClass_ContainerVersionクラスは，dmaClass_Containableクラスからオブジェクトに「包含されるオブジェクト」となれるプロパティ（dmaProp_ParentプロパティおよびdmaProp_Containersプロパティ）を継承しています。また，構成管理型で包含される構成要素となれるプロパティ（edmProp_VTContainersプロパティ）も保持します。したがって，バージョン付き構成管理コンテナは，すべての種類のコンテナ（ContainerオブジェクトおよびContainerVersionオブジェクト）に包含されることができます。

(3)　バージョン付き構成管理コンテナのバージョンの追加

バージョン付き構成管理コンテナは，文書のバージョンの追加と同じ方法でバージョンアップできます。

(a)　チェックアウト時にコピーされるDMAオブジェクト

バージョン付き構成管理コンテナのバージョンをチェックアウトすると，次に示すDMAオブジェクトがコピーされてReservationオブジェクトに接続されます。

最新のContainerVersionオブジェクト

ReferentialContainmentRelationshipオブジェクトおよびVersionTraceableContainmentRelationshipオブジェクト

コピーされたReferentialContainmentRelationshipオブジェクトおよびVersionTraceableContainmentRelationshipオブジェクトは，ContainerVersionオブジェクトが永続化されるときに一緒に永続化されます。バージョン付き構成管理コンテナのバージョンのチェックアウト時のDMAオブジェクトの関係を次の図に示します。なお，バージョン付き構成管理コンテナが文書を包含している場合を例にしています。

図A-19　バージョン付き構成管理コンテナのバージョンのチェックアウト時のDMAオブジェクトの関係

ReferentialContainmentRelationshipオブジェクトまたはVersionTraceableContainmentRelationshipオブジェクトを介して包含されるオブジェクトは，複数のコンテナに同時に包含されることができます。しかし，DirectContainmentRelationshipオブジェクトを介して包含されるオブジェクトは，複数のコンテナに直接型で同時に包含されることはありません。そのため，DirectContainmentRelationshipオブジェクトは，チェックアウト時にコピーされません。

(4)　バージョン付き構成管理コンテナのバージョンの追加と構成管理

バージョン付き構成管理コンテナのバージョン管理機能と構成管理コンテナ機能を併用すると，バージョン付き構成管理コンテナを一つの概念文書のように扱って，コンテナの内の構成管理および構成要素集合のバージョン管理ができます。

バージョン付き構成管理コンテナに新規バージョンが追加されたあと，構成要素のバージョンが追加されると，構成管理モードがFIXモードかFLOATINGモードかによって，次の図のようにバージョン付き構成管理コンテナに包含されるオブジェクトが決まります。

図A-20　バージョン付き構成管理コンテナの構成要素のバージョンの追加の例

図A-20は，バージョン付き構成管理コンテナが構成管理型で文書（VersionTracedDocVersion）を包含しており，構成要素がV1からV3までバージョンアップしている例です。ContainerVersionオブジェクトのV1は，文書Aと文書BのV1をFIXモードで包含しています。ContainerVersionオブジェクトのV2は，文書Aと文書BのV2をFIXモードで包含しています。ContainerVersionのV3は，文書Aと文書BをFLOATINGモードで包含しており，現在V3が最新バージョンなので，V3の文書を包含しています。このように，複数の文書を構成管理型でバージョン付き構成管理コンテナに格納すると，コンテナごとに構成要素のバージョンを確定し，コンテナをバージョンアップすることによって，構成要素集合のバージョンを管理できます。

別のバージョン付き構成管理コンテナ（ContainerVersionオブジェクト）も同様にバージョン付き構成管理コンテナで構成管理できます。

(5)　バージョン付き構成管理コンテナに格納されたオブジェクトの管理例

バージョン付き構成管理コンテナには，複数の異なる関連オブジェクトを使用して文書を格納できます。関連オブジェクトをどのように使い分けて文書を管理するか，例を次の図に示します。

図A-21　バージョン付き構成管理コンテナに格納された文書の管理例

文書Aと文書BはVersionTraceableContainmentRelationshipオブジェクトを介してバージョン付き構成管理コンテナのすべてのバージョンに渡って包含され，構成管理される文書です。文書CはReferentialContainmentRelationshipオブジェクトを介してすべてのバージョン付き構成管理コンテナのバージョンに渡って包含される文書です。文書Dと文書EはDirectContainmentRelationshipオブジェクトを介して特定のバージョンのバージョン付き構成管理コンテナにだけ包含される文書です。

ある研究論文をバージョン付き構成管理コンテナで管理する例を図A-21に当てはめて説明します。次のような三つのバージョン付き構成管理コンテナのバージョンがあるとします。

ContainerVersionオブジェクトV1
セミナーで発表するまでのバージョンの文書を格納します。

ContainerVersionオブジェクトV2
研究論文として完成したバージョンを格納します。

ContainerVersionオブジェクトV3
学会での発表のためにさらに修正したバージョンを格納します。

そして，研究論文が次のような複数の文書で構成されているとします。

本論.doc
研究論文の本論。

結論.doc
研究論文の結論部分。

テーマ.doc
研究論文のテーマについての概要説明。

発表.doc
セミナー，学会での発表用のレジュメ。

「本論.doc」および「結論.doc」は，すべてのバージョンに渡って包含される内容の文書であり，セミナー発表と論文完成および学会発表のタイミングでバージョンを確定して管理する文書です。したがって，図A-21の文書オブジェクトAとBのようにVersionTraceableContainmentRelationshipオブジェクトを介して格納します。

「テーマ.doc」は研究論文の概要説明です。すべてのバージョンのバージョン付き構成管理コンテナに渡って包含される内容の文書で，一度作成してしまえば更新する必要のない文書です。したがって，図A-21の文書オブジェクトCのようにReferentialContainmentRelationshipオブジェクトを介して格納します。

「発表.doc」は，セミナーと学会があるときだけに臨時に作成した文書で，V1とV3のバージョン付き構成管理コンテナにだけ必要な文書です。したがって，図A-21の文書DとEのようにDirectContainmentRelationshipオブジェクトを介してそれぞれのバージョン付き構成管理コンテナに格納します。

付録B　edmSQLの構文解析エラー情報

ここでは，edmSQLを使用した検索で構文解析エラーになった場合に出力される，構文解析エラーの内容について説明します。

edmSQLの文法については，「4.5　edmSQLの文法」を参照してください。

なお，edmSQLの構文解析でエラーが発生した場合，メソッドの戻り値は次の値になります。

major_code：ERR_DBR
minor_code：ERR_EQL_BAD_STATEMENT

＜この節の構成＞

付録B.1　記述形式

付録B.2　構文解析エラー

付録B.3　字句解析エラー

付録B.4　意味解析エラー

付録B.5　そのほかのエラー

付録B.1　記述形式

このマニュアルでの構文解析エラーの記述形式について説明します。

＜メッセージタイプ＞＜メッセージID＞

メッセージテキスト

パラメタの内容

埋め込みパラメタがある場合の，パラメタの説明です。埋め込みパラメタは，%で表記します。

説明

エラーの内容と対処方法についての説明です。

付録B.2　構文解析エラー

Error 1001

トークン"%1"(%2バイト目)で構文エラーを検出しました。
A syntax error was detected in the token "%1" (byte number %2).

パラメタの内容

%1：構文解析エラーを検出したトークンの文字列

%2：%1のトークンが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

入力したedmSQL文で，表示されたトークンまたはそれよりも前に出現するトークンが，構文規則に合っていません。

正しい構文でトークンを指定してください。

付録B.3　字句解析エラー

Error 2001

ID文字列"%1"(%2バイト目)は，長さ，文字又はハイフン位置のどれかが不正です。
The ID character string "%1" (byte number %2) includes an invalid length, character, or hyphen position.

パラメタの内容

%1：指定したID文字列の先頭からの内容（64バイトまで出力）

%2：%1のID文字列が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

ID文字列に次の不正のどれかを検出しました。

ID文字列では使用できない文字が指定されています。

ID文字列の形式よりも長い文字列が指定されています。

ハイフンの位置が正しくありません。

内容を確認して，ID文字列の形式に従って修正してください。

Error 2002

数値で始まる文字列"%1"(%2バイト目)は，数値定数の形式に対して不正です。
The character string "%1" (byte number %2) beginning with a numeric has an invalid format for a numeric constant.

パラメタの内容

%1：指定した数値定数の先頭からの内容（64バイトまで出力）

%2：%1の数値定数が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

数値として指定できない文字を指定しています。例えば，次のような指定をしています。

識別子を数字で開始しています。

数値定数と識別子を区切らずに並べて指定しています。

内容を確認して，次の方法で対処してください。

整数定数の形式に従って修正してください。

数字で始まる識別子は，先頭をアルファベットにするか，区切られた識別子の形式に修正してください。

区切り文字を入れて，数値定数と分離して指定してください。

Error 2003

記号"%1" (%2バイト目)は未サポートです。
Symbol "%1" (byte number %2) is not supported.

パラメタの内容

%1：記号文字列

%2：%1の記号が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定した記号は，使用できません。この記号は，edmSQLの文法の演算子などとして予約されている記号ですが，構文では使用できません。

Error 2004

アンダースコア"_" (%1バイト目)は，識別子の先頭や演算子などの記号としては使用できません。
An underscore (byte number %1) cannot be used at the beginning of an ID or as a symbol of an operator etc.

パラメタの内容

%1：アンダースコアが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

アンダースコアは，識別子の先頭や演算子の記号としては使用できません。

Error 2005

文字列定数の終端を検知する前に文が終了しました。指定内容 "%1" (%2バイト目)
The statement ended before the end of a character string constant was detected. Specification "%1" (byte number %2).

パラメタの内容

%1：指定した文字列定数（64バイトまで出力）

%2：%1の文字列定数が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

文字列定数の終端記号である「'」が検知される前に，edmSQL文が終了しました。

文字列定数の終端に「'」を挿入してください。

Error 2006

区切られた識別子の終端を検知する前に文が終了しました。指定内容 "%1" (%2バイト目)
The statement ended before the end of a delimited ID was detected. Specification "%1" (byte number %2).

パラメタの内容

%1：区切られた識別子（64バイトまで出力）

%2：%1の区切られた識別子が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

区切られた識別子の終端記号である「"」が検知される前に，edmSQL文が終了しました。

区切られた識別子の終端に，「"」を挿入してください。

Error 2007

文字"%1" (%2バイト目)は，文字列定数以外では使用できません。
Character "%1" (byte number %2) can be used in character string constants only.

パラメタの内容

%1：指定した文字

%2：%1で指定した文字が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定した文字は，edmSQL文で使用できる文字ではありません。

付録B.4　意味解析エラー

＜この項の構成＞

(1)　プロパティ表現に関するエラー

(2)　VariableArray型プロパティの要素参照，フィールド参照に関するエラー

(3)　関数（ルーチン起動，数値関数，集合関数）に関するエラー

(4)　値式（四則演算，符号，文字列連結），論理演算子に関するエラー

(5)　集合指定子（DISTINCT）に関するエラー

(6)　クラス（クラス表現，相関名）に関するエラー

(7)　結合種別に関するエラー

(8)　述語（比較述語，論理述語，In述語，Like述語（LikeおよびXlike），Null述語，Exist述語）に関するエラー

(9)　データ操作（ソート，ソート種別）に関するエラー

(10)　グループ操作に関するエラー

(11)　副問い合わせに関するエラー

(1)　プロパティ表現に関するエラー

Error 3001

プロパティ"%1"(%2バイト目)は，永続プロパティでないため，edmSQL文に指定できません。
The property "%1" (byte number %2) cannot be specified for the edmSQL statement because it is not a persistent property.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

検索対象となるプロパティは，永続プロパティ（データベース上に存在するプロパティ）である必要があります。

指定したプロパティが永続プロパティであるかどうか確認してください。

Error 3002

プロパティ"%1"(%2バイト目)は，選択可能(Selectable)でないため，選択項目に指定できません。
The property "%1" (byte number %2) cannot be specified as a selection item because it is not selectable.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

DMAの検索モデルに基づき，選択可能（Selectable）でないプロパティは選択項目（SELECT句）には指定できません。

選択可能なプロパティだけを選択項目に指定してください。必要に応じてメタ情報を修正してください。

Error 3003

プロパティ"%1"(%2バイト目)は，検索可能(Searchable)でないため，検索条件に指定できません。
The property "%1" (byte number %2) cannot be specified as a search condition because it is not searchable.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

DMAの検索モデルに基づき，検索可能(Searchable)でないプロパティは条件式(WHERE句やON条件)には指定できません。

検索可能なプロパティだけを条件式に指定してください。必要に応じてメタ情報を修正してください。

Error 3004

プロパティ"%1"(%2バイト目)は，基本単位がVariableArray型でないObject型のプロパティであるため，選択項目に指定できません。
The property "%1" (byte number %2) cannot be specified as a selection item because the basic unit is an Object-type property that is not a Variable array property.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

VariableArray型プロパティ以外のObject型のプロパティ（オブジェクトリファレンス）を直接選択項目に指定することはできません。

VariableArray型プロパティ以外のObject型のプロパティは，oiidstr関数の引数として選択項目に指定してください。これによってObject型のプロパティをOIID文字列に変換した値が取得できます。

Error 3005

プロパティ"%1"(%2バイト目)は，特殊なプロパティであるため，文法で規定した位置以外には指定できません。
The property "%1" (byte number %2) is a special property, so it can be specified at a syntax-defined position only.

パラメタの内容

% 1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

全文検索インデクス用プロパティなどの特殊な意味を持つプロパティは，edmSQLの文法で規定された位置以外には使用できません。

文法で規定されている位置を確認して，正しい位置に指定してください。

Error 3006

プロパティ"%1"(%2バイト目)の修飾子に対応するクラス名又は相関名が見付かりません。
A class or correlation name is missing for the qualifier of the property "%1" (byte number %2).

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

プロパティの修飾子として指定したクラス名または相関名が，該当するプロパティが存在するシンボル空間に見つかりません。FROM句に指定したクラス名や相関名と異なっている可能性があります。

指定したプロパティを修飾するために参照できるFROM句を確認して，修飾子として指定したクラス名や相関名を修正してください。または，FROM句に指定したクラス名や相関名を修正してください。

Error 3007

プロパティの修飾子"%1"(%2バイト目)に対応するクラス名又は相関名が見付かりません。
A class or correlation name is missing for the qualifier "%1" (byte number %2) of the property.

パラメタの内容

%1：クラス名または相関名

%2：%1のクラス名または相関名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

プロパティの修飾子（クラス名または相関名）に対応するクラス名または相関名が，FROM句の指定から見つかりません。

FROM句に指定したクラス名もしくは相関名，または指定したプロパティ修飾子を確認して，修正してください。

Error 3008

プロパティ"%1"(%2バイト目)は，修飾子"%3"に対応したクラスにありません。
The property "%1" (byte number %2) does not exist in the class for the qualifier "%3".

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：クラス名または相関名

説明

プロパティの修飾子として指定したクラス名または相関名に対応するクラスに，該当するプロパティが定義されていません。

プロパティ名または指定したクラスが不正な可能性があります。

メッセージに修飾子（%3）として空文字列が出力された場合は，入力edmSQL文で修飾子を省略している場合です。この場合は，FROM句に指定したただ一つのクラスに，指定したプロパティが存在しないことになります。

メタ情報を確認して，正しいプロパティ名または正しいクラスを指定してください。必要に応じてプロパティを定義してください。

Error 3009

プロパティの修飾子"%1"(%2バイト目) の指定があいまいです。
The specification of the qualifier "%1" (byte number %2) of the property is ambiguous.

パラメタの内容

%1：クラス名または相関名

%2：%1のクラス名または相関名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

プロパティのクラスを明示するための修飾子（クラス名または相関名）があいまいで，FROM句に指定されたクラスを特定できません。

FROM句に指定したクラス，またはプロパティに指定した修飾子を確認して，修正してください。

(2)　VariableArray型プロパティの要素参照，フィールド参照に関するエラー

Error 3101

VariableArray型プロパティ"%1"(%2バイト目)の要素に，プロパティ"%3"はありません。
The property "%3" is not an element of a Variable array property "%1" (byte number %2).

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：フィールド参照を指定したVariableArray型プロパティの要素のプロパティ名

説明

VariableArray型プロパティの要素に対してフィールド参照を指定した場合に，その要素を定義するクラスにフィールド参照で指定したプロパティが存在しません。

フィールド参照をしたプロパティ名を確認して，正しく修正してください。必要に応じてメタ情報を修正してください。

Error 3102

VariableArray型プロパティ"%1"(%2バイト目)の要素のプロパティ"%3"は，永続プロパティでないため，edmSQL文に指定できません。
The property "%3" that is an element of the Variable array property "%1" (byte number %2) cannot be specified for the edmSQL statement because it is not a persistent property.

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：フィールド参照を指定したVariableArray型プロパティの要素のプロパティ名

説明

検索の対象となる VariableArray型プロパティの要素のプロパティは，永続プロパティ（データベース上に存在するプロパティ）である必要があります。

指定した VariableArray型プロパティの要素のプロパティが，永続プロパティかどうかを確認してください。

Error 3103

VariableArray型プロパティ"%1"(%2バイト目)の要素のプロパティ"%3"は，検索可能(Searchable)でないため，検索条件に指定できません。
The property "%3" that is an element of the Variable array property "%1" (byte number %2) cannot be specified as a search condition because it is not searchable.

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：フィールド参照を指定したVariableArray型プロパティの要素のプロパティ名

説明

VariableArray型プロパティの要素に対してフィールド参照したプロパティが，検索可能（Searchable）ではありません。このため，検索条件には指定できません。

必要に応じてメタ情報を修正してください。

Error 3104

プロパティ"%1" (%2バイト目)は，VariableArray型プロパティでないため，要素参照に指定できません。
The property "%1" (byte number %2) cannot be specified for element reference because it is not a Variable array property.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

フィールド参照を指定したプロパティが，VariableArray型プロパティではありません。フィールド参照はVariableArray型プロパティだけに指定できます。

プロパティ名を確認して，修正してください。

Error 3105

プロパティ"%1" (%2バイト目)は，VariableArray型プロパティであるため，副問い合わせの選択項目に指定できません。
The property "%1" (byte number %2) cannot be specified as a selection item of a sub-query because it is a Variable array property.

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

副問い合わせの選択項目に，VariableArray型プロパティは指定できません。

Error 3106

プロパティ"%1"(%2バイト目)は，VariableArray型プロパティであるため，検索対象の結合条件に指定できません。
The property "%1" (byte number %2) cannot be specified as a join condition for searching because it is a Variable array property.

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

ON条件にVariableArray型プロパティを指定することはできません。

(3)　関数（ルーチン起動，数値関数，集合関数）に関するエラー

Error 3201

%1関数(%2バイト目)は，使用可能な関数として定義していないため，edmSQL文に指定できません。
The function %1 (byte number %2) is not defined as a usable function so it cannot be specified for the edmSQL statement.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

edmSQLの文法で規定されていない関数名を指定しました。

指定した関数の関数名を確認して，修正してください。

Error 3202

%1関数(%2バイト目)は，文法で規定した位置以外には指定できません。
The function %1 (byte number %2) can be specified in a syntax-defined position only.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

関数を規定された位置以外に指定しました。

指定した関数の属性（選択可能または検索可能）を確認して，選択可能であれば選択項目に指定してください。検索可能であれば検索条件に指定してください。

Error 3203

%1関数 (%2バイト目) の引数の数が不正です。
The number of arguments of the function %1 (byte number %2) is invalid.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

関数に指定した引数の個数が不正です。

関数に指定できる引数の個数を確認して，修正してください。

Error 3204

%1関数 (%2バイト目) の第%3引数のデータ型が不正です。
The data type of argument %3 of the function %1 (byte number %2) is invalid.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

関数で，該当する引数に指定したデータ型が不正です。

関数の引数に指定できるデータ型確認して，修正してください。

Error 3205

%1関数の第%2引数には，文法で規定した特殊なプロパティだけが指定できます。
Only a syntax-defined special property can be specified for argument %2 of the function %1.

パラメタの内容

%1：関数名

%2：引数の出現番号（1以上）

説明

全文検索や概念検索などの関数の，edmSQLの文法で規定した特殊なプロパティだけが指定できる引数に，そのプロパティ以外を指定しています。

引数に指定した内容を確認して，修正してください。

Error 3206

%1関数(%2バイト目)の第%3引数には，文法で規定した特殊なプロパティだけが指定できます。
Only a syntax-defined special property can be specified for argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

全文検索や概念検索などの関数の，edmSQLの文法で規定した特殊なプロパティだけが指定できる引数に，そのプロパティ以外を指定しています。

引数に指定した内容を確認して，修正してください。

Error 3207

%1関数(%2バイト目)の第%3引数には，文字列定数又は?パラメタだけが指定できます。
Only character string constant or the ? parameter can be specified for argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

値または？パラメタだけが指定できる関数の引数に，値または？パラメタ以外を指定しています。

引数に指定した内容を確認して，修正してください。

Error 3208

%1関数(%2バイト目)の第%3引数には，?パラメタだけが指定できます。
Only the ? parameter can be specified for argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

？パラメタだけが指定できる関数の引数に，？パラメタ以外を指定しています。

引数に指定した内容を確認して，修正してください。

Error 3209

%1関数の第%2引数には，VariableArray型プロパティ"%3"(%4バイト目)を指定できません。
The Variable array property "%3" (byte number %4) cannot be specified for argument %2 of the function %1.

パラメタの内容

%1：関数名

%2：引数の出現番号（1以上）

%3：VariableArray型プロパティのプロパティ名

%4：%3のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

関数で，該当する引数には指定できないVariableArray型プロパティを指定しています。

関数の引数に指定できる内容を確認して，修正してください。

Error 3210

%1関数(%2バイト目)の第%3引数には，VariableArray型プロパティの要素を指定できません。
An element of a Variable array property cannot be specified for argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

関数呼び出しで，該当する引数には指定できないVariableArray型プロパティの要素のプロパティを指定しています。

関数の引数に指定できる内容を確認して，修正してください。

Error 3211

oiidstr関数の第%1引数には，基本単位がVariableArray型でないObject型のプロパティだけが指定できます。
Only the Object-type property whose basic unit is not Variable array property can be specified for argument %1 of the oiidstr function.

パラメタの内容

%1：引数の出現番号（1以上）

説明

oiidstr関数の引数には，VariableArray型プロパティ以外のObject型のプロパティだけが指定できます。

指定した引数の内容を確認して，修正してください。

Error 3212

%1関数(%2バイト目)の第%3引数には，OIID文字列だけが指定できます。
Only the OIID character string can be specified for argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

関数で，OIID文字列だけが指定できる引数に，OIID文字列以外を指定しています。

引数に指定した内容を確認して，修正してください。

Error 3213

%1関数 (%2バイト目) の第%3引数のOIID文字列の長さが不正です。
The length of the OIID character string of argument %3 of the function %1 (byte number %2) is invalid.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

関数で，OIID文字列を指定する引数に，不正な長さのOIID文字列を指定しています。

引数に指定したOIID文字列を確認して，修正してください。

Error 3214

%1関数(%2バイト目)の第%3引数の?パラメタに，AS<データ型指定>がありません。
The AS <data-type-specification> is missing in the ? parameter of argument %3 of the function %1 (byte number %2).

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

%3：引数の出現番号（1以上）

説明

ルーチンの起動に指定する関数の引数に?パラメタを指定する場合は，必ずAS<データ型指定>を指定して，?パラメタのデータ型を明確にしてください。

指定した引数のデータ型を確認して，?パラメタに対応するAS<データ型指定>を指定してください。

Error 3215

関数の引数の?パラメタ以外に，AS<データ型指定>(%1バイト目)があります。
The AS <data-type-specification> (byte number %1) exists in a position other than the ? parameter of the function arguments.

パラメタの内容

%1：AS<データ型指定>が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

関数の引数の?パラメタ以外に，AS<データ型指定>を指定しています。AS<データ型指定>は，関数の引数の?パラメタに対してだけ指定できます。

AS<データ型指定>を削除してください。

Error 3216

COUNT関数(%1バイト目)は，アクセス制御が有効であるため，主問い合わせの選択項目に指定できません。
The COUNT function (byte number %1) cannot be specified as a selection item of a main query because of the effect of access control.

パラメタの内容

%1：関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

アクセス制御が有効な場合，COUNT関数は指定できません。

COUNT関数を指定する場合は，アクセス制御を無効にしてください。

Error 3217

%1関数(%2バイト目)は，副問い合わせの選択項目に指定できません。
The function %1 (byte number %2) cannot be specified as a selection item of a sub-query.

パラメタの内容

%1：関数名

%2：%1の関数名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

副問い合わせ中に指定できない関数を，副問い合わせ中に指定しています。

指定した関数の仕様を確認して，修正してください。

(4)　値式（四則演算，符号，文字列連結），論理演算子に関するエラー

Error 3301

演算子"%1"(%2バイト目)は，検索対象の結合条件に指定できません。
The operator "%1" (byte number %2) cannot be specified as a join condition of search targets.

パラメタの内容

%1：演算子

%2：%1の演算子が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定した演算子は，ON条件には指定できません。演算子にはON条件に指定できないものがあります。

指定した演算子の制限事項を確認して，修正してください。

Error 3302

演算子"%1"(%2バイト目)の被演算子のデータ型が不正です。
The operand data type of the operator "%1" (byte number %2) is invalid.

パラメタの内容

%1：演算子

%2：%1の演算子が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

被演算子同士，または被演算子と演算子が要求するデータ型が一致しません。

例えば，文字列と数値の比較を指定した場合などに発生するエラーです。

演算子が要求するデータ型と被演算子のデータ型を確認して，修正してください。

(5)　集合指定子（DISTINCT）に関するエラー

Error 3401

重複排除"DISTINCT"(%1バイト目)は，アクセス制御が有効であるため，主問い合わせのSELECT句に指定できません。
The duplicate exclusion DISTINCT (byte number %1) cannot be specified for main-query SELECT because of the effect of access control.

パラメタの内容

%1："DISTINCT"が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

アクセス制御が有効な場合の検索は，暗黙にオブジェクトが識別される検索になるため，重複排除は実行できません。

重複排除"DISTINCT"指定を削除してください。または，アクセス制御を無効にして，重複排除を指定してください。

Error 3402

VariableArray型プロパティ"%1"(%2バイト目)は，重複排除"DISTINCT"をSELECT句に指定しているため，選択項目に指定できません。
The Variable array property "%1" (byte number %2) cannot be specified as a selection item because the duplicate exclusion DISTINCT is specified for the SELECT clause.

パラメタの内容

%1：VariableArray型プロパティのプロパティ名

%2：%1のプロパティ名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

VariableArray型プロパティが選択項目に指定されている場合，SELECT句の集合指定子に重複排除"DISTINCT"は指定できません。

重複排除"DISTINCT"は指定しないでください。または，VariableArray型プロパティを選択項目から削除してください。

Error 3403

extracts関数(%1バイト目)は，重複排除"DISTINCT"をSELECT句に指定しているため，選択項目に指定できません。
The extracts function (byte number %1) cannot be specified as a selection item because the duplicate exclusion DISTINCT is specified for the SELECT clause.

パラメタの内容

%1：extracts関数が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

extracts関数は，重複排除できないデータ型の値を返却するため，この返却値に対する重複排除は実行できません。

重複排除"DISTINCT"の指定を削除してください。

(6)　クラス（クラス表現，相関名）に関するエラー

Error 3501

クラス"%1"(%2バイト目)は，文書空間にないため，検索対象に指定できません。
The class "%1" (byte number %2) cannot be specified to be searched because it is not in the document space.

パラメタの内容

%1：クラス名

%2：%1のクラス名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

検索対象として指定したクラスが文書空間に存在しません。クラス名が不正な可能性があります。

文書空間に定義しているクラス名を確認して，正しいクラスを指定してください。

Error 3502

クラス"%1"(%2バイト目)は，文書空間に検索可能(Searchable)なクラスとして定義していないため，検索対象に指定できません。
The class "%1" (byte number %2) cannot be specified to be searched because it is not defined as a searchable class in the document space.

パラメタの内容

%1：クラス名

%2：%1のクラス名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定したクラスは，文書空間には定義されていますが，検索可能なクラスとして文書空間のスコープに登録されていません。

メタ情報定義を確認して，必要であれば検索可能なクラスとして登録してください。

Error 3503

クラス名又は相関名"%1"(%2バイト目)が重複しています。
The class or correlation name "%1" (byte number %2) is duplicated.

パラメタの内容

%1：重複しているクラス名または相関名

%2：%1のクラス名または相関名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

FROM句の指定で，クラス名と相関名，または相関名同士を同じ名前で指定しています。または，同一のクラスを結合する場合に，相関名で明確に区別していません。

それぞれの検索対象が明確に区別できるように，相関名を付けてください。

Error 3504

クラス"%1"(%2バイト目)に指定した相関名が重複しています。
The correlation name specified for the class "%1" (byte number %2) is duplicated.

パラメタの内容

%1：クラス名

%2：%1のクラス名が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

プロパティのクラスを明示するための修飾子（クラス名または相関名）が，FROM句の指定から見つかりません。

FROM句のクラスの指定またはプロパティに指定したプロパティ修飾子を確認して，修正してください。

(7)　結合種別に関するエラー

Error 3601

一つのFROM句には，二種類以上の結合種別は指定できないため，結合種別"%1"(%2バイト目)は指定できません。
The join type "%1" (byte number %2) cannot be specified because two or more join types cannot be specified for one FROM clause.

パラメタの内容

%1：結合種別

%2：%1の結合種別が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

LEFT OUTER結合とINNER結合は，同一のFROM句に混在することはできません。結合種別は統一してください。

(8)　述語（比較述語，論理述語，In述語，Like述語（LikeおよびXlike），Null述語，Exist述語）に関するエラー

Error 3701

論理述語"%1"(%2バイト目)は，検索対象の結合条件に指定できません。
The logical predicate "%1" (byte number %2) cannot be specified as a join condition of a search target.

パラメタの内容

%1：論理述語

%2：%1の論理述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定した論理述語は，ON条件には指定できません。論理述語にはON条件に指定できないものがあります。

論理述語の制限事項を確認して，修正してください。

Error 3702

述語"%1"(%2バイト目)は，検索対象の結合条件に指定できません。
The predicate "%1" (byte number %2) cannot be specified as a join condition of a search target.

パラメタの内容

%1：述語

%2：%1の述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定した述語は，ON条件には指定できません。述語にはON条件に指定できないものがあります。

述語の制限事項を確認して，修正してください。

Error 3703

比較述語"%1"(%2バイト目)の被演算子のデータ型が不正です。
The data type of an operand of the comparison predicate "%1" (byte number %2) is invalid.

パラメタの内容

%1：比較述語

%2：%1の比較述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

被演算子同士，または被演算子と述語が要求するデータ型が一致しません。

述語が要求するデータ型と被演算子のデータ型を確認して，修正してください。

Error 3704

論理述語"%1"(%2バイト目)の被演算子のデータ型が不正です。
The data type of an operand of the logical predicate "%1" (byte number %2) is invalid.

パラメタの内容

%1：論理述語

%2：%1の論理述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

被演算子同士，または被演算子と述語が要求するデータ型が一致しません。

述語が要求するデータ型と被演算子のデータ型を確認して，修正してください。

Error 3705

述語"%1"(%2バイト目)の被演算子のデータ型が不正です。
The data type of an operand of the predicate "%1" (byte number %2) is invalid.

パラメタの内容

%1：述語

%2：%1の述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

被演算子同士，または被演算子と述語が要求するデータ型が一致しません。

述語が要求するデータ型と被演算子のデータ型を確認して，修正してください。

Error 3706

一つのIn述語には，同じデータ型の値しか指定できないため，%1番目の値(%2バイト目)は指定できません。
The number %1 value (byte number %2) cannot be specified for one In predicate because only a value of the same data type can be specified.

パラメタの内容

%1：In述語の列挙された項目の出現番号

%2：%1の項目が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

In述語で列挙する項目として，異なるデータ型の項目を指定しています。

In述語では，同じデータ型の項目だけを列挙して指定できます。

指定した項目のデータ型を確認して，修正してください。

Error 3707

Null述語(%1バイト目)の値式には，プロパティだけが指定できます。
Only properties can be specified for the expression of a Null predicate (byte number %1).

パラメタの内容

%1：Null述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

Null述語にプロパティ以外の値式を指定しています。Null述語の値式には，プロパティだけが指定できます。

Null述語の内容を確認して，修正してください。

Error 3708

比較述語"%1"(%2バイト目)の両辺の被演算子には，VariableArray型プロパティの要素を同時に指定できません。
Elements of a Variable array property cannot be simultaneously specified for the operands on both sides of the comparison predicate "%1" (byte number %2).

パラメタの内容

%1：比較述語

%2：%1の比較述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

VariableArray型プロパティのフィールド参照同士を，比較述語で比較することはできません。

Error 3709

論理述語"%1"(%2バイト目)の値式には，論理型を戻り値とする関数だけが指定できます。
Only a function whose return value is a logical type can be specified for the expression of the logical predicate "%1" (byte number %2).

パラメタの内容

%1：論理述語

%2：%1の論理述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

論理述語の値式には，論理型を戻り値とする関数以外は指定できません。

Error 3710

アスタリスク（*）(%1バイト目)は，Exists述語の副問い合わせ以外の選択項目に指定できません。
An asterisk (byte number %1) can be specified only for a selection item of the sub-query of the Exists predicate.

パラメタの内容

%1： *が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

選択項目に「*」（アスタリスク）を指定できるのは，Exists述語の副問い合わせの選択項目だけです。

(9)　データ操作（ソート，ソート種別）に関するエラー

Error 3801

ソートキー"%1"(%2バイト目)に対応する選択項目が見付かりません。
A selection item is missing for the sort key "%1" (byte number %2).

パラメタの内容

%1：ソートキー（プロパティ名または数値）

%2：%1のソートキーが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

指定したソートキーに対応する選択項目がありません。

選択項目を確認して修正してください。

Error 3802

ソートキー"%1"(%2バイト目)に対応した選択項目は，ソート可能(Orderable)でないため，ソートできません。
A selection item for the sort key "%1" (byte number %2) cannot be sorted because it is not orderable.

パラメタの内容

%1：ソートキー（プロパティ名または数値）

%2：%1のソートキーが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

ソートキーとして指定した選択項目はソートに使用できません。ソートに使用できる選択項目のデータ型は，Integer32型およびString型だけです。

選択項目のデータ型を確認して，修正してください。必要に応じてメタ情報を修正してください。

(10)　グループ操作に関するエラー

Error 3901

アクセス制御が有効であるため，GROUP BY句(%1バイト目)は指定できません。
The GROUP BY clause (byte number %1) cannot be specified because of the effect of access control.

パラメタの内容

%1：GROUP BY句が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

アクセス制御が有効な場合，GROUP BY句は指定できません。

GROUP BY句を指定する場合は，アクセス制御を無効にしてください。

Error 3902

GROUP BY句で指定したプロパティでないため，選択項目"%1"(%2バイト目)は指定できません。
The selection item "%1"(byte number %2) cannot be specified. Because the property isn't specified in GROUP BY clause.

パラメタの内容

%1：選択項目

%2：%1の選択項目が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

GROUP BY句を用いた問い合わせ時には，選択項目はGROUP BY句で指定したプロパティに限定されます。

GROUP BY句で指定したプロパティを，選択項目に指定してください。

Error 3903

プロパティ"%1"(%2バイト目)はGROUP BY句では指定できません。
The property "%1" (byte number %2) cannot be specified in GROUP BY clause.

パラメタの内容

%1：値式

%2：%1の値式が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

GROUP BY句ではオブジェクト型，バイナリ型のプロパティ，特殊なプロパティ，関数を指定できません。

オブジェクト型，バイナリ型のプロパティ，特殊なプロパティ，関数を値式から削除してください。

Error 3904

プロパティ"%1"(%2バイト目)が重複しています。
The value expression "%1" (byte number %2) is duplicated.

パラメタの内容

%1：プロパティ

%2：%1のプロパティが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

同一のプロパティをGROUP BY句に指定することはできません。

GROUP BY句から重複しているプロパティを削除してください。

Error 3906

述語"%1"(%2バイト目)はHAVING句に直接指定できません。
The predicate "%1" (byte number %2) cannot be specified in HAVING clause.

パラメタの内容

%1：述語

%2：%1の述語が出現する入力edmSQL文の先頭からの位置（バイト数）

説明

NULL述語およびLIKE述語はHAVING句に直接指定できません。

HAVING句の探索条件から，直接指定しているNULL述語およびLIKE述語を削除してください。

Error 3907

プロパティ"%1"(%2バイト目)は，HAVING句に指定できません。
The property "%1" (byte number %2) cannot be specified in HAVING clause.

パラメタの内容

%1：プロパティ名

%2：%1のプロパティが出現する入力edmSQL文の先頭からの位置（バイト数）

説明

HAVING句に指定可能なプロパティは，GROUP BY句で指定したプロパティ，外側の問い合わせのFROM句に指定したクラスのプロパティまたは集合関数の引数に指定したプロパティだけです。

GROUP BY句で指定したプロパティ，外側の問い合わせのFROM句に指定したクラスのプロパティ，または集合関数の引数に指定したプロパティをHAVING句に指定してください。

(11)　副問い合わせに関するエラー

Error 4001

副問い合わせでは複数の選択項目を指定できないため，選択項目"%1"(%2バイト目)は指定できません。
The selection item "%1" (byte number %2) cannot be specified. Because multi selection items cannot be specified in the sub-query.

パラメタの内容

%1：選択項目

%2：2番目の選択項目のedmSQL文の先頭からの位置（バイト数）

説明

副問い合わせには複数の選択項目を指定できません。副問い合わせに複数の選択項目を指定していないか，見直してください。

付録B.5　そのほかのエラー

Error 9001

構文解析用のスタックがオーバーフローしました。
The stack for syntax analysis has overflowed.

説明

構文解析用の作業領域が制限値に達しました。

または，制限値に達してはいませんが，データベースの制限値を超えました。

edmSQL文が複雑過ぎるため，構文が解析できません。単純な構文に変更してください。

構文が複雑になる要素としては，次のようなものが考えられます。

副問い合わせのネストが深い

演算子の入れ子指定が多い

演算順序を指定する括弧の数が多い

複雑な構文のedmSQL文を指定すると，検索処理性能も低下する可能性があります。

単純な構文にするためには，次のような点を考慮してください。

演算順序を考慮して，式をまとめる括弧を外す

処理が再帰しないようにする

次に，複雑なedmSQL文を単純にする例を示します。

複雑なedmSQL文の例

SELECT  myProp_Foo
FROM    myClass
WHERE   (((myProp_Foo1 = 1)
           AND (myProp_Foo2 = 2))
                AND (myProp_Foo3 = 3))

単純なedmSQL文に置き換えた例

SELECT  myProp_Foo
FROM    myClass
WHERE   myProp_Foo1 = 1
         AND  myProp_Foo2 = 2
              AND  myProp_Foo3 = 3

このように，不要な括弧を外して構文を単純にすることで，スタックの消費量は少なくできます。

付録C　HiRDBのシステム共通定義のオペランドpd_max_access_tablesの見積もり方法

ここでは，HiRDBのシステム共通定義のオペランドである，pd_max_access_tablesの見積もり方法について説明します。

なお，HiRDBのシステム共通定義の詳細については，マニュアル「HiRDB　システム定義」を参照してください。

pd_max_access_tablesに指定する値は，次に示す式で求めた値を目安としてください。

＜目安の値＞＝50×N＋M1×L

次に，N，M1およびLに代入する値について説明します。

N：

１トランザクションの間にコールするメソッドの個数です。ただし，次のメソッドおよび関数は除きます。

各クラスのコンストラクタメソッドおよびデストラクタメソッド

CdbrCompoundクラスのメソッド

CdbrCoreクラスのメソッド

CdbrDMAクラスの次に示すメソッド
GetOIID，GetType，ReleaseObject，SetOIID

CdbrEqlStatementクラスのメソッド

CdbrSession::GetClassTypeメソッド以外のCdbrSessionクラスのメソッド

CdbrVariableArrayクラスのメソッド

dbrDelete関数

M1：

検索をCdbrEqlStatementクラスの機能によって実現している場合，この値を使用します。

CdbrEqlStatement::Executeメソッドをコールすることによって発行されるSQLが参照するHiRDBの表数です。

CdbrEqlStatement::Executeメソッドに指定するedmSQL文ごとに，次の式で値を求め，その中でいちばん大きな値をM1としてください。

M1＝主問い合せのクラス結合数＋副問い合せのクラス結合数
  ＋SELECT句に指定しているextracts関数の数
  ＋SELECT句に指定した別表のVariableArray型プロパティの数＋10

L：

1トランザクションの間にコールするCdbrEqlStatement::Executeメソッドの数です。

付録D　用語解説

DocumentBrokerで使用する用語について説明します。

（英字）

ACE

Access Control Elementの略です。アクセス制御エレメントのことです。

ACFlag

Access Control Flagの略です。アクセス制御フラグのことです。

ACL

Access Control Listの略です。アクセス制御リストのことです。

AND-NOT検索

検索オペレータに「AND-NOT」を使用する検索方法です。二つの検索条件をAND-NOTでつないで，左側のオペランドに指定した検索条件は成立するが，右側のオペランドに指定した検索条件は成立しない文書を検索します。例えば，「著者が『日立太郎』であるが，所属は『日立製作所』ではない文書を検索する」というような場合に使用できます。

AND検索

検索オペレータに「AND」を使用して，検索条件同士の論理積を求める検索方法です。例えば，「著者が『日立太郎』で，文書中に『コンピュータ』という文字列を含む文書を検索する」というような場合に使用できます。

API（Application Programming Interface）

アプリケーションプログラムとのインターフェースを指します。

CdbrCompoundオブジェクト

複合データを表すオブジェクトです。複合データとは，複数の異なる型によって表されるデータです。主に，VariableArray型のプロパティとして設定されているObject型の要素の値を参照，設定するときに使用します。

CdbrConfiguratedReferentialContainerオブジェクト

バージョン付き構成管理コンテナに相当するオブジェクトです。CdbrConfiguratedReferentialContainerクラスを基に作成します。

CdbrDocumentオブジェクト

（バージョンなし）文書に相当するオブジェクトです。CdbrDocumentクラスを基に作成します。CdbrVersionableDocumentオブジェクトの個々のバージョンとしても操作できます。

CdbrEqlStatementオブジェクト

SQLに基づいた文法で検索条件が記述できるedmSQL検索を実行するためのオブジェクトです。CdbrEqlStatementクラスを基に作成します。

CdbrIndependentPersistenceオブジェクト

クラスライブラリで提供するクラスの階層構造に属さない，独立データを表すオブジェクトです。CdbrIndependentPersistenceクラスを基に作成します。

CdbrPublicACLオブジェクト

パブリックACLを表すオブジェクトです。CdbrPublicACLクラスを基に作成します。

CdbrReferentialContainerオブジェクト

フォルダや分類（インデクス）を使用した文書管理を実現する，（バージョンなし）コンテナに相当するオブジェクトです。CdbrReferentialContainerクラスを基に作成します。

CdbrSessionオブジェクト

文書空間とクライアント環境のセッションを確立するオブジェクトです。CdbrSessionクラスを基に作成します。

CdbrVariableArrayオブジェクト

可変長配列を表すオブジェクトです。主に，VariableArray型のプロパティの値を参照，設定するときに使用します。

CdbrVersionableDocumentオブジェクト

DocumentBrokerで扱うバージョン付き文書に相当するオブジェクトです。このオブジェクトによって表される文書は，バージョン管理ができます。CdbrVersionableDocumentクラスを基に作成します。

CdbrVersionTraceableContainerオブジェクト

バージョンなし構成管理コンテナに相当するオブジェクトです。CdbrVersionTraceableContainerクラスを基に作成します。CdbrConfiguratedReferentialContainerオブジェクトの個々のバージョンとしても操作できます。

CdbrXmlTranslatorFactoryオブジェクト

XMLプロパティマッピング機能やXMLインデクスデータ作成機能を実行するための操作環境を管理するオブジェクトです。

また，CdbrXmlTranslatorオブジェクトを作成します。

CdbrXmlTranslatorオブジェクト

XMLプロパティマッピング機能およびXMLインデクスデータ作成機能を実行するオブジェクトです。

Child

直接型のコンテインメント（DirectContainment）の場合，オブジェクト（Parent）に包含されるオブジェクトを指します。

ConfigurationHistoryオブジェクト

バージョン管理に使用する最上位のDMAオブジェクトです。文書のバージョンを管理するVersionSeriesオブジェクトを管理します。

Containableオブジェクト

コンテナの包含要素になるオブジェクトです。CdbrContainableクラスのサブクラスを基に作成されたオブジェクトを指します。

Containee

参照型のコンテインメント（ReferentialContainment）の場合，オブジェクト（Container）に包含されるオブジェクトを指します。

Container

参照型のコンテインメントの場合，オブジェクト（Containee）を包含するオブジェクトを指します。

ContainerVersionオブジェクト

包含しているオブジェクト全体を一つの概念的なオブジェクトとして管理するDMAオブジェクトです。また，構成管理型のコンテインメントではオブジェクトを包含するオブジェクトとして利用できます。ContainerVersionオブジェクトは，バージョンを保持できるオブジェクトです。したがって，ContainerVersionオブジェクトのバージョンを上げることで，ある時点でのオブジェクトのまとまりを管理できます。

Containerオブジェクト

コンテインメントを利用してオブジェクトを管理する場合に，オブジェクトを包含するDMAオブジェクトの一つです。dmaClass_Containerクラスおよびユーザが定義したdmaClass_Containerクラスのサブクラスを基に作成します。

ContentElement（dmaClass_ContentElementクラス）

文書のコンテントにアクセスするために使われるDMAオブジェクトの抽象クラスです。ContentElementの四つのサブクラス（edmClass_ContentFileLinkクラス，dmaClass_ContentTransferクラス，edmClass_ContentTransfersクラス，およびdmaClass_ContentReferenceクラス）は，コンテントの格納とアクセス機能を提供します。

ContentFileLinkオブジェクト

文書のコンテントを管理するために使用するDMAオブジェクトです。File Link連携機能を使用する場合に使用します。dmaClass_ContentElementクラスのサブクラスであるedmClass_ContentFileLinkクラスを基に作成します。

ContentReferenceオブジェクト

文書のコンテントを管理するために使用するDMAオブジェクトです。コンテントをデータベースに格納しないで，位置情報を永続化して管理する場合に使用します。dmaClass_ContentElementクラスのサブクラスであるdmaClass_ContentReferenceクラスを基に作成します。

ContentTransfersオブジェクト

文書のコンテントを管理するために使用するDMAオブジェクトです。一つの文書のコンテントとして複数のファイルをデータベースに格納（永続化）して管理する場合に使用します。dmaClass_ContentElementクラスのサブクラスであるedmClass_ ContentTransfersクラスを基に作成します。

ContentTransferオブジェクト

文書のコンテントを管理するために使用するDMAオブジェクトです。コンテントをデータベースに格納（永続化）して管理する場合に使用します。dmaClass_ContentElementクラスのサブクラスであるdmaClass_ContentTransferクラスを基に作成します。

CORBA（Common Object Request Broker Architecture）

OMG（Object Management Group）が提唱するオブジェクト間の通信メカニズムを提供するORB（Object Request Broker）の標準アーキテクチャです。

DCD（Document Content Description）

W3Cで定義している，タグセットを記述するためのタグセットです。マッピング元XMLタグ定義はこのDCDの形式で記述します。DTDと同じようにXML文書の構造を記述しますが，DTDと異なり，DCD自体がXMLのタグセットとして定義されています。また，タグおよびその属性について，データの型を指定できるといった特長を持ちます。

DMA（Document Management Alliance）

文書管理インターフェースの標準化を図る団体AIIM（Association for Information and Image Management International）によって定義される共通インターフェースです。

DMA URL

DMAオブジェクトのOIID（Object Instance Identifier）を定義するURLです。

DMAオブジェクト

DMAが規定するオブジェクトモデルに基づいたオブジェクトです。DMAで規定されたクラス（クラス名がdmaClass_で始まるクラス），DocumentBrokerで拡張したクラス（クラス名がedmClass_で始まるクラス），およびこれらのクラスからユーザが定義したサブクラスを基に作成されます。

DocumentSpace構成定義ファイル（docspace.ini）

文書空間の構成を定義するために使用するファイルです。

DocVersionオブジェクト

DocumentBrokerで扱う文書に相当するDMAオブジェクトです。dmaClass_DocVersionクラスおよびユーザが定義したdmaClass_DocVersionクラスのサブクラスを基に作成します。

edmClass_Relationshipクラス

文書間リレーションを表すDMAクラスです。単独では作成できない，文書に従属するRelationshipオブジェクトの基となるクラスです。

edmSQL

DocumentBrokerのオブジェクトを検索するための検索条件式を表現するための文法です。SQLの文法に基づいています。

edmSQL検索

検索条件に，SQLライクの文法で記述できるedmSQL文を指定して実行する検索のことです。

FAM（File Access Module）

HiRDB File Linkで使用するファイルサーバ上で，コンテントを管理するためのプログラムです。

File Link文書

HiRDB File Linkで管理しているファイルサーバに格納されている一つのファイル，または一つのディレクトリおよびそのサブディレクトリ下のすべてのファイルをコンテントとして持つ文書のことです。データベースでは，コンテントへのリンク情報を管理しています。CdbrDocumentクラスまたはCdbrVersionableDocumentクラスを使用して操作します。

File Link連携機能

HiRDB File Linkと連携してコンテントを管理する機能です。

GUID

Globally Unique Identifierの略です。DMAのクラス，プロパティ，検索オペレータなどに与えるユニークな識別子です。GUIDは，「X」を0～9およびa～f（小文字）で表される16進数とした「XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX（8けた-4けた-4けた-4けた-12けた）」の形式で表されます。

IDファイル

オブジェクト操作ツールを使用して複数のオブジェクトを一括して操作する場合，操作対象となるオブジェクトのOIIDなどを記述するファイルです。

LDAP

Lightweight Directory Access Protocolの略です。TCP/IP上で動作する解放型DAPを提供し，X.500のデータモデルを保持しています。

NOT条件

指定したキーワードとの不一致を求める検索条件です。例えば，「作成者が『日立』ではない文書を検索する」というような場合に使用できます。

OIID

Object Instance Identifierの略です。文書空間での永続オブジェクトの存在や格納位置などを明確にするために使用する識別子です。OIIDはDMA URLとして定義されます。

OR検索

検索オペレータに「OR」を使用して，検索条件同士の論理和を求める検索方法です。例えば，「作成者が『日立太郎』であるオブジェクトか，作成者の所属が『日立製作所』であるオブジェクトを検索する」というような場合に使用できます。

Parent

直接型のコンテインメントの場合，オブジェクト（Child）を包含するオブジェクトを指します。

QueryResultRowオブジェクト（検索結果行オブジェクト）

QueryResultSetオブジェクトを構成する要素の一つ（行）として生成されるDMAオブジェクトです。dmaProp_Selectionsプロパティで指定されたプロパティを含みます。

QueryResultSetオブジェクト（検索結果集合オブジェクト）

検索結果の集合として生成されるDMAオブジェクトです。QueryResultSetオブジェクトは検索条件を満たす0または1以上のQueryResultRowオブジェクトによって構成されます。

Queryオブジェクト（問い合わせ）

検索に使用する問い合わせを表現するオブジェクトツリーの最上位のDMAオブジェクトを指します。

RDエリア

データの格納単位の一つで，1～16個のHiRDBファイルから構成されます。RDエリアには，システム用RDエリア，ユーザ用RDエリア，データディクショナリLOB用RDエリア，およびユーザLOB用RDエリアがあります。

システム用RDエリアとは，マスタディレクトリ用RDエリア，データディクショナリ用RDエリア，およびデータディレクトリ用RDエリアの総称です。また，ユーザ用RDエリアとは，表とインデクスを格納するためのRDエリアで，公用RDエリアと私用RDエリアがあります。データディクショナリLOB用RDエリアとは，ストアドプロシジャ，ストアドファンクションを使用する場合に，ストアドプロシジャ，ストアドファンクションの定義ソース，およびオブジェクトを格納するためのRDエリアです。ユーザLOB用RDエリアとは，ユーザが作成した文書，画像，音声などの長大なデータを格納するためのRDエリアで，公用RDエリアと私用RDエリアがあります。

Renditionオブジェクト

文書の表現形式（HTML，PDFなど）を管理するDMAオブジェクトです。

Reservationオブジェクト

新しいバージョンを作成する権利をVersionSeriesオブジェクトに予約するDMAオブジェクトです。

Scalar型

プロパティの基本単位の一つです。基本単位がScalar型であるプロパティは，データ型に従った値を一つだけ持ちます。

SystemManagerオブジェクト

Systemオブジェクトを管理するDMAオブジェクトです。

Systemオブジェクト

サーバ内の文書空間を管理するDMAオブジェクトです。

UOC（User Own Coding）

ユーザによって作成されたプログラムのことです。DocumentBrokerでは，ユーザ認証や，アクセス制御機能のためのユーザ情報取得にUOCを使用できます。

VariableArray型

プロパティの基本単位の一つです。基本単位がVariableArray型であるプロパティは，データ型に従った複数の値を可変長な一次元配列として持ちます。また配列の要素は，構造体で管理できます。

Versionableオブジェクト

バージョン管理の対象になるオブジェクトです。CdbrVersionableクラスのサブクラスを基に作成されたオブジェクトを指します。

VersionDescriptionオブジェクト

文書のバージョン（更新履歴）を管理するために使用するDMAオブジェクトです。VersionSeriesオブジェクトとVersionableオブジェクトを接続するために使用します。

VersionSeriesオブジェクト

文書のバージョン（更新履歴）を管理するために使用するDMAオブジェクトです。連続的な履歴を持つバージョンの構成を保持するオブジェクトです。

VersionTracedComponentDocVersionオブジェクト

直接型，参照型および構成管理型のコンテインメントでコンテナに包含される対象となるためのプロパティを持つDMAオブジェクトです。dmaClass_DocVersionクラスのサブクラスのedmClass_VersionTracedComponentDocVersionクラスを基に作成します。

VersionTracedDocVersionオブジェクト

直接型，参照型および構成管理型のコンテインメントで，コンテナに包含される対象となるためのプロパティを持つDMAオブジェクトです。dmaClass_DocVersionクラスのサブクラスのedmClass_VersionTracedDocVersionクラスを基に作成します。

VTContainee

構成管理型のコンテインメントの場合，オブジェクト（VTContainer）に包含されるオブジェクトを指します。

VTContainer

構成管理型のコンテインメントの場合，オブジェクト（VTContainee）を包含するオブジェクトを指します。

W3C（World Wide Web Consortium）

HTMLやXMLなど，WWWに関する技術の標準化を推進する非営利団体です。

XMLインデクスデータ作成機能

XML文書の文書ファイルからプレーンテキスト形式または構造指定検索用の全文検索インデクスデータを作成する機能です。XML形式のファイルの構文解析もあわせて実行します。

XMLプロパティマッピング機能

XML形式のファイルを構文解析して，DocumentBrokerサーバのプロパティマッピング定義に従ってXML形式のファイル内に記述されているタグ間の文字列または属性値を，XML文書のプロパティに割り当てて設定する機能です。

（ア行）

アクセス権

オブジェクトを作成したり，すでに作成されているオブジェクトにアクセスしたりする権利です。

アクセス制御エレメント（ACE：Access Control Element）

アクセス制御リスト（ACL）の要素です。一つのサブジェクトと一つのパーミッションの組で構成され，指定されたサブジェクトに対して指定されたパーミッションの範囲のアクセス権を与えることを示す情報です。

アクセス制御機能

DocumentBrokerの文書空間でのオブジェクトの作成や，管理されている文書やコンテナなどのオブジェクトに対する操作を，ユーザやグループごとに許可または制限する機能です。

アクセス制御機能付き検索

アクセス制御機能を利用した文書空間で検索を実行した場合に，ユーザにアクセス権がないオブジェクトは検索結果として取得しない検索です。

アクセス制御情報

アクセス制御されている文書空間で，ユーザがメソッドを発行する際に，アクセス権の判定に使用される情報です。

アクセス制御情報変更権

オブジェクトに設定されているアクセス制御情報（ACFlagおよびACL）を変更する権利です。また，パブリックACLをアクセス制御対象オブジェクトにバインドすることを許可する権利も含みます。なお，パブリックACLのアクセス情報変更権には，パブリックACLのユーザ定義プロパティを変更する権利を含みます。

アクセス制御フラグ（ACFlag：Access Control Flag）

オブジェクトの所有者，プライマリグループおよび全ユーザという区分でパーミッションを設定できるアクセス制御情報の一つです。

アクセス制御モデル

アクセス制御機能を利用して運用されている文書管理モデルです。

アクセス制御リスト（ACL：Access Control List）

任意のユーザまたはグループにパーミッションを設定できるアクセス制御情報の一つです。アクセス制御エレメント（ACE）のリストで構成されます。

アドレス呼び出し

文書空間内に構成されている独立した永続オブジェクトに付けられたID（OIID）を利用して，そのオブジェクトを探索することです。

異表記展開検索

全文検索条件として指定する検索タームまたは検索タームの異表記を含む文書を検索する方法です。例えば，検索タームとして「バイオリン」を指定した場合に，「ヴァイオリン」という検索タームの異表記を含む文書も検索できます。

インデクス情報ファイル

ユーザが追加するプロパティにインデクスを定義する場合に，定義するインデクスの情報を記述するファイルです。

永続オブジェクト

データベースに格納されたオブジェクトを指します。

永続プロパティ

データベースに存在するプロパティを指します。

オブジェクト作成権

オブジェクト作成権限で，文書空間にオブジェクトを作成する権利を与えるパーミッションです。ユーザ権限定義ファイルで使用します。

オブジェクト作成権限

文書空間にオブジェクトを作成する権限で，ユーザ権限の一つです。ユーザ権限定義ファイルで定義します。オブジェクト作成権限を与えられたユーザおよびグループに属するユーザは，オブジェクトを作成するメソッド（CreateObject）を実行できます。

オブジェクト操作権限

文書空間内のすべてのオブジェクトを，与えられた権限の範囲で操作する権利で，ユーザ権限の一つです。ユーザ権限定義ファイルで定義します。例えば，オブジェクト操作権限としてプロパティ参照権を与えられたユーザおよびグループに属するユーザは，文書空間内のすべてのオブジェクトのプロパティを参照できます。

オブジェクト操作ツール

DocumentBrokerが提供するクラスライブラリを使用したクライアントアプリケーションです。クラスライブラリを使用してユーザがクライアントアプリケーションを開発する場合に，必要であると思われる機能をコマンド群として提供します。

オブジェクトリファレンス

DMAオブジェクトへのリファレンスを示すObject型プロパティの値です。例えば，dmaProp_ParentContainerプロパティの値がこれに当たります。

（カ行）

概念検索

ユーザが任意に指定した文章や文字列を手がかりにして，その条件と似た概念を持つ文書を検索する方法です。全文検索の一種です。概念検索で指定する条件のことを種文章といいます。

仮のバージョン識別子

チェックアウト中の仮のバージョンを識別するための識別子です。

チェックアウト中のオブジェクトを参照・更新する時に使用します。この識別子はチェックアウト時にDocumentBrokerによって設定される識別子であり，仮のバージョンに該当するオブジェクトのOIIDとは異なります。

関連オブジェクト

コンテインメントの型（直接型，間接型および構成管理型）を定義するためのDMAオブジェクトです。

直接型のコンテインメントの場合，オブジェクトを包含するオブジェクト（Parent）とオブジェクトに包含されるオブジェクト（Child）をDirectContainmentRelationshipオブジェクトを使用して関連づけます。参照型のコンテインメントの場合，オブジェクトを包含するオブジェクト（Container）とオブジェクトに包含されるオブジェクト（Containee）をReferentialContainmentRelationshipオブジェクトを使用して関連づけます。

構成管理型のコンテインメントの場合，オブジェクトを包含するオブジェクト（VTContainer）とオブジェクトに包含されるオブジェクト（VTContainee）をVersionTraceableContainmentRelationshipオブジェクトを使用して関連づけます。

基本コンテント更新権

基本パーミッションの一つで，オブジェクトのコンテントを更新する権利を与えるパーミッションです。基本プロパティ参照権を含みます。文書に対して設定する場合は，全文検索インデクスを作成，削除する権利を含みます。

基本コンテント参照権

基本パーミッションの一つで，オブジェクトのコンテントを参照する権利を与えるパーミッションです。基本プロパティ参照権を含みます。文書に対して設定する場合は，全文検索を実行する権利を含みます。

基本削除権

基本パーミッションの一つで，オブジェクトを削除する権利を与えるパーミッションです。基本プロパティ参照権を含みます。

基本単位

DMAで規定されているプロパティは，データ型に従った値を1個持つか複数個持つかが決められています。これを基本単位といいます。

基本バージョン管理権

基本パーミッションの一つで，バージョン管理されているオブジェクトのバージョンを追加，削除する権利を与えるパーミッションです。基本プロパティ参照権を含みます。

基本パーミッション

ユーザおよびグループがオブジェクトに対して実行できる操作の範囲を定めるパーミッションの基本単位です。オブジェクト操作権限，アクセス制御フラグおよびアクセス制御エレメントで，ユーザおよびグループに許可する操作の範囲を定めるときに使用します。例えば，あるユーザに対して，文書の更新と削除を許可する場合は，更新と削除を許可するために，基本コンテント更新権と基本削除権という二つのパーミッションを設定します（一つのパーミッションで一つの権利を与える）。基本パーミッションには，基本プロパティ参照権，基本プロパティ更新権，基本コンテント参照権，基本コンテント更新権，基本リンク権，基本バージョン管理権および基本削除権があります。

基本プロパティ更新権

基本パーミッションの一つで，オブジェクトのプロパティを更新する権利を与えるパーミッションです。基本プロパティ参照権を含みます。

基本プロパティ参照権

基本パーミッションの一つで，オブジェクトのプロパティを参照する権利を与えるパーミッションです。そのほかのすべての基本パーミッションに含まれます。コンテナに対して設定する場合は，関連オブジェクトのユーザ定義プロパティの参照と管理されている要素を参照する権利を含みます。

基本リンク権

基本パーミッションの一つで，コンテインメントの設定，変更および関連オブジェクトのユーザ定義プロパティを変更する権利を与えるパーミッションです。基本プロパティ参照権を含みます。

近傍条件検索

検索オペレータに「Prox」を使用する拡張検索（全文検索）です。指定する検索タームが同時に存在する場合に，その検索ターム間の距離を条件として検索します。例えば，「『文書管理』という検索タームと『ドキュメント』という検索タームを含み，これらの検索タームがこのとおりの順序で出現し，かつ検索ターム間に入る文字が5文字以内である文書を検索する」というような場合に使用できます。

組み合わせパーミッション

基本パーミッションを複数組み合わせた権利を与えるパーミッションの単位です。アクセス制御フラグおよびアクセス制御エレメントでユーザおよびグループに許可する操作の範囲を定めるときに使用します。組み合わせパーミッションには，プロパティ参照権，参照権，プロパティ更新権，参照更新権，削除権，リンク権，バージョン管理権およびフルコントロールがあります。例えば，あるユーザに対して，ある文書の参照更新権という組み合わせパーミッションを設定すると，そのユーザは基本プロパティ参照権，基本プロパティ更新権，基本コンテント参照権および基本コンテント更新権が設定されたのと同じ範囲の操作を，その文書に対して実行できます。

クラス定義情報ファイル

DocumentBrokerサーバで定義されているDMAオブジェクトのクラスまたはそのサブクラスのクラス名またはプロパティ名からGUID，データ型，プロパティの基本単位などの情報を取得するために使用するファイルです。EDMCrtSimMetaコマンドでも作成できます。オブジェクト操作ツールを使用する場合に必要です。

継承（Inheritance）

既存のクラスを利用して新しいクラスを定義するオブジェクト指向の技術です。

検索結果構造体

検索結果が格納される構造体です。DMAオブジェクトのQueryResultRowオブジェクトの列挙によって構成されています。

構成管理型のコンテインメント（VersionTraceableContainment）

コンテナを利用した文書管理の方法です。構成管理型のコンテインメントで使われるコンテナは，バージョンを作成できるオブジェクトの構成を管理します。

構成管理コンテナ

構成管理型のコンテインメントで使われるコンテナです。

包含されるオブジェクトのバージョンを固定して管理したり，常に最新のバージョンを追跡して管理したりすることで，包含されるオブジェクト全体の構成を管理するために使用するコンテナです。CdbrVersionTraceableContainerに相当します。DMAオブジェクトでは，ContainerVersionオブジェクトに相当します。

構造指定検索

XML文書を管理している場合に，文書の論理構造（エレメント）やエレメントの属性をキーとして検索する方法です。例えば，「タイトルに『コンピュータ』という単語が含まれ，章に『XML』という単語が含まれる文書を検索する」というような場合に使用します。また，「『document』というエレメントに設定されている属性『status』の属性値が『public』である文書を検索する」というような場合にも使用できます。

コンテインメント（包含）

コンテナを使用したオブジェクトの包含関係を示します。コンテインメントには直接型（DirectContainment），参照型（ReferentialContainment）および構成管理型（VersionTraceableContainment）の3種類があります。

コンテナ

コンテインメントで，オブジェクトを包含できるオブジェクトの総称です。CdbrReferentialContainerオブジェクト，CdbrConfiguratedReferentialContainerオブジェクトおよびCdbrVersionTraceableContainerオブジェクトがこれに当たります。また，DMAオブジェクトとしては，Containerオブジェクト，VersionTraceableContainerオブジェクトおよびContainerVersionオブジェクトがあります。

コンテント

一般的には，属性に対する文書のデータ部分を指します。DMAでは，ある文書に関連づけられていて，DMAで規定されているContentモデルに従ってアクセスされるオブジェクトの集合を指します。また，アクセスされるオブジェクトの実体（例えば，report.doc，document.htmなど）をコンテントデータといいます。

コンテント格納先パス

リファレンスファイル管理機能を使用する場合に，コンテント格納先ベースパスを基点とする相対パスのことです。

コンテント格納先ベースパス

リファレンスファイル管理機能を使用する場合に，コンテント格納先の基点となるディレクトリパスのことです。

コンテント種別

レンディションのコンテントが，シングルファイル文書のコンテントか，マルチファイル文書のコンテントか，リファレンスファイル文書のコンテントか，またはFile Link文書のコンテントかを示します。

コンテントロケーション

リファレンスファイル管理機能を使用する場合に，コンテントの格納先を示す情報のことです。

（サ行）

削除権

組み合わせパーミッションの一つです。基本削除権と同じ操作を許可するパーミッションです。

サブクラス

あるクラスから派生するクラスのことです。または，それ自身がサブクラスとして参照されているクラスのことです。

サブジェクト（Subject）

アクセス権を与えるユーザまたはグループです。

サブジェクト種別（SubjectType）

アクセス権を与えるサブジェクトが，ユーザなのか，グループなのかまたはシステムなのかを識別するための情報です。

サブレンディション

マルチレンディション文書に，追加登録されたレンディションのことです。マスタレンディション以外のレンディションを指します。なお，サブレンディションは，登録後にマスタレンディションに変更できます。

参照型のコンテインメント（ReferentialContainment）

コンテナを利用した文書管理の方法です。参照型のコンテインメントで使われるコンテナは，文書にはり付けるインデクスの働きをします。

参照権

組み合わせパーミッションの一つです。基本コンテント参照権と同じ操作を許可するパーミッションです。

参照更新権

組み合わせパーミッションの一つです。基本プロパティ参照権，基本プロパティ更新権，基本コンテント参照権および基本コンテント更新権を組み合わせたパーミッションです。すなわち，参照更新権を設定することで，プロパティを参照，更新する権利とコンテントを参照，更新する権利を設定できます。

システム管理者

DocumentBrokerの運用管理者です。

実行環境制御ファイル

オブジェクト操作ツールの実行環境を定義するファイルです。

状態フラグ

マルチレンディション文書の，マスタレンディションに対するサブレンディションのコンテントの状態を表すフラグです。マスタレンディションとサブレンディションのコンテントの状態が一致している，マスタレンディションのコンテントが更新されたのに対してサブレンディションのコンテントが更新されていない，またはサブレンディションのコンテントが存在しない，という3種類の状態が表されます。dbrProp_RenditionStatusプロパティの下位2バイトに設定されます。

所有者（Owner）

オブジェクトの所有者として設定されているユーザです。アクセス制御フラグでパーミッションを与えられます。所有者に設定されているユーザは，そのオブジェクトのアクセス制御フラグで所有者に与えられたパーミッションの範囲の操作をそのオブジェクトに対して実行できます。また，そのオブジェクトの所有者およびセキュリティACLの値を変更できます。

シングルファイル文書

データベースに登録されている一つのファイルをコンテントとして持つ文書のことです。CdbrDocumentクラスまたはCdbrVersionableDocumentクラスを使用して操作します。

スーパークラス

あるクラスのクラス定義に使われたクラスを，派生したクラスのスーパークラスといいます。

セキュリティACL

オブジェクトに設定されたアクセス制御情報へのアクセスを制御するためのアクセス制御リストです。任意のユーザまたはグループにアクセス制御情報変更権を設定できます。

セキュリティ運用者

DocumentBrokerのアクセス制御の運用情報の管理者です。セキュリティ定義ファイルを保守します。

セキュリティ管理者

アクセス制御機能を利用した文書空間で，アクセス判定を受けることなく，すべてのオブジェクトに自由にアクセスする特権を持ち，文書空間のすべてのオブジェクトを保守するユーザです。セキュリティ定義ファイルに定義します。

セキュリティ定義ファイル

アクセス制御の運用情報を定義するファイルです。セキュリティ管理者，ユーザ権限定義ファイル名およびオブジェクト作成時に，アクセス制御フラグにデフォルトで設定されるパーミッションを定義します。

全文検索

文書中に含まれるキーワードを条件（全文検索条件）として，キーワードを含む文書を検索する方法です。

全文検索インデクス

全文検索の対象になるテキストデータに対応するプロパティです。edmProp_TextIndexプロパティ，edmProp_StIndexプロパティ，edmProp_ConceptTextIndexプロパティ，edmProp_ConceptStIndexプロパティおよびedmProp_Contentプロパティに相当します。

全文検索機能付き文書クラス

全文検索の対象となる文書を作成するためのdmaClass_DocVersionクラスのサブクラスです。メタ情報ファイルを新規に作成したり，既存のメタ情報ファイルを編集したりして，全文検索のためのプロパティを追加したユーザ定義のクラスです。

（タ行）

チェックアウト（check-out）

文書またはコンテナにバージョンを追加するために，次バージョンの追加を予約して，最新バージョンのコピーを要求することです。

DMAオブジェクトでは，VersionSeriesオブジェクトに新規DocVersionオブジェクト（文書）を作成するための権利を予約して，新規DocVersionオブジェクトの追加対象となるVersionSeriesオブジェクトで管理している最新のDocVersionオブジェクトのコピーを要求することです。

チェックイン（check-in）

文書またはコンテナのバージョンの追加を確定することです。

DMAオブジェクトでは，VersionSeriesオブジェクトに，新規DocVersionオブジェクト（文書）を追加することです。クライアントは特定のVersionSeriesオブジェクトに対して，Reservationオブジェクトを保持しておく必要があります。

直接型のコンテインメント（DirectContainment）

コンテナを利用した文書管理の方法です。直接型のコンテインメントで使われるコンテナは，文書を格納するフォルダの働きをします。

定義情報ファイル

サブクラスおよびプロパティを追加するときに，追加するオブジェクトの定義情報を記述するファイルです。

ディレクトリサービス

ネットワーク上にあるユーザや組織の情報などの資源とその属性を記憶し，検索できるようにしたシステムです。

DocumentBrokerでは，Active DirectoryやSun Java System Directory Serverなどの製品を使用したLDAP対応のディレクトリサービスと連携できます。

LDAP対応のディレクトリサービスとして使用できる製品の詳細については，マニュアル「DocumentBroker Version 3　システム導入・運用ガイド」を参照してください。

同義語展開検索

全文検索条件として指定する検索タームまたは検索タームの同義語を含む文書を検索する方法です。例えば，検索タームとして「パソコン」を指定した場合に，「電子計算機」，「パーソナルコンピュータ」，「PC」など，検索タームと同じ意味を持つ単語を含む文書も検索できます。

動作環境メタ情報ファイル

DocumentBrokerを起動するときに参照するメタ情報です。実行環境ディレクトリ/etc/meta_filesに格納されます。

独立データ

CdbrIndependentPersistenceオブジェクトに相当します。ほかのオブジェクトに依存しない，独立したオブジェクトです。

特権

アクセス制御機能を利用した文書空間で，アクセス判定を受けることなく，すべてのオブジェクトに自由にアクセスする権利です。セキュリティ定義ファイルにセキュリティ管理者として定義されたユーザに与えられます。特権の有無は，ログイン時にセキュリティ定義ファイルが参照され，ログインユーザごとに作成されるユーザ情報に保持されます。

トップオブジェクト

クラスライブラリのオブジェクトを構成する複数のDMAオブジェクトのうち，最上位に位置するオブジェクトです。例えば，CdbrDocumentオブジェクトの場合は，DMAオブジェクトのDocVersionオブジェクトがトップオブジェクトです。

（ナ行）

ナビゲーション

ある独立した永続オブジェクトから，別の関連する独立した永続オブジェクトに対する横断的な参照関係を指します。

（ハ行）

バージョン管理権

組み合わせパーミッションの一つです。基本プロパティ参照権，基本プロパティ更新権，基本コンテント参照権，基本コンテント更新権および基本バージョン管理権を組み合わせたパーミッションです。

バージョン付き構成管理コンテナ

バージョンを保持できる構成管理コンテナです。CdbrConfiguratedReferentialContainerオブジェクトに相当します。DMAオブジェクトでは，ConfigurationHistoryオブジェクトに相当します。

バージョンなし構成管理コンテナ

バージョンを保持しない構成管理コンテナです。CdbrVersionTraceableContainerオブジェクトに相当します。DMAオブジェクトでは，ContainerVersionオブジェクトに相当します。

パーミッション

オブジェクトの作成，オブジェクトのプロパティ参照，オブジェクトのコンテント更新などの実行可能な操作の範囲を表す値です。オブジェクト作成権限を与えるパーミッション，オブジェクトの操作の範囲を定めるパーミッションがあります。オブジェクトの操作の範囲を定めるパーミッションには，基本パーミッションと組み合わせパーミッションがあります。

パブリックACL

文書空間にオブジェクトとして存在するアクセス制御リスト（ACL）です。複数のオブジェクトが共有できます。

ファイルサーバ

HiRDB File Linkで構築したファイルサーバを指します。

フィルタリング定義ファイル（TFD）

Preprocessing Library for Text Searchの正規化機能によって構造指定検索用データ（ESIS-Bデータ）から不要なタグを除去したり，不要なタグ間のテキストをタグごと除去したりする場合に必要な定義ファイルです。

プライマリグループ

アクセス制御フラグ（ACFlag）でパーミッションを与えるグループです。

フルコントロール

組み合わせパーミッションの一つです。すべての基本パーミッションを組み合わせたパーミッションです。オブジェクトに対するすべての操作を許可します。

プロパティ更新権

組み合わせパーミッションの一つです。基本プロパティ更新権と同じ操作を許可するパーミッションです。

プロパティ参照権

組み合わせパーミッションの一つです。基本プロパティ参照権と同じ操作を許可するパーミッションです。

プロパティマッピング定義ファイル（DPM）

XML文書中のタグ名とその内容をマッピングするクラス名，およびプロパティ名の対応関係の定義（プロパティマッピング定義）を記述したファイルです。この定義ファイルを基に，XML定義ファイルの追加／更新／削除コマンド（EDMXmlMap）によってマッピング定義ファイルを生成します。

プロパティマッピング定義は，登録時にマッピング定義名を付けて登録します。プロパティマッピングの実行時には，このマッピング定義名を指定して使用するプロパティマッピング定義を選択します。

文書

CdbrVersionableDocumentオブジェクトおよびCdbrDocumentオブジェクトに相当します。CdbrVersionableDocumentオブジェクトを，「バージョン付き文書」と呼びます。CdbrDocumentオブジェクトを，「バージョンなし文書」と呼びます。

DMAオブジェクトでは，dmaClass_DocVersionクラスおよびそのサブクラスを基に作成するオブジェクトのことです。

文書空間

DMAオブジェクトモデルを実装するリポジトリです。

変換フラグ

マルチレンディション文書の，サブレンディションのコンテントを，レンディション変換の対象にするかどうかを表すフラグです。DocumentBroker Rendering Optionを使用してレンディション変換を実行する場合に使用します。また，DocumentBroker Rendering Optionによるレンディション変換でエラーが発生した場合には，エラーを示すフラグとしても使われます。dbrProp_RenditionStatusプロパティの上位2バイトに設定されます。

（マ行）

マスタレンディション

マルチレンディション文書に，最初に登録されたレンディションのことです。マルチレンディション文書を参照・更新するときには，レンディション形式を指定しますが，レンディション形式を指定しない場合は，マスタレンディションが対象になります。なお，マスタレンディションとして扱うレンディションは，登録後に変更できます。

マッピングセット定義ファイル（XMS）

HiRDB Adapter for XMLが使用する，登録されたマッピング定義の一覧を管理するファイルです。

マッピング定義ファイル（XMP）

HiRDB Adapter for XMLが使用できる文法に変換したマッピング定義が記述されているファイルです。ユーザ作成のプロパティマッピング定義ファイル（DPM）とマッピング元XMLタグ定義ファイル（DCD）から生成します。

マッピング元XMLタグ定義ファイル（DCD）

登録するXML文書の構造をDCDの形式で記述したファイルです。

マルチファイル管理機能

一つの文書に，複数のファイルを登録して管理する機能です。

マルチファイル文書

データベースに登録されている複数のファイルをコンテントとして持つ文書のことです。CdbrDocumentクラスまたはCdbrVersionableDocumentクラスを使用して操作します。

マルチレンディション機能

一つの文書に，同一内容の複数の異なる形式のコンテントを登録する機能です。

マルチレンディション文書

複数のレンディションを登録している文書のことです。一つの同じ内容を表す複数の形式のコンテントを保持する文書です。CdbrDocumentクラスまたはCdbrVersionableDocumentクラスを使用して操作します。

メタ情報ファイル

DocumentBrokerが利用するDMAのクラス，プロパティ，検索オペレータなどの詳細情報を定義したファイルです。クラスおよびプロパティを追加，変更する場合に使用できます。

メタデータ（metadata）

クラス，プロパティおよびオペレータに関する詳細情報を定義するデータです。

メタデータ空間

単一の継承関係を形成するクラスの集合のことです。

（ヤ行）

ユーザ権限

文書空間にオブジェクトを作成する権利（オブジェクト作成権限）と，文書空間内のすべてのオブジェクトに対する操作の範囲（オブジェクト操作権限）をユーザまたはグループ単位で定めるアクセス制御情報の一つです。ユーザ権限定義ファイルに定義します。ユーザ権限の内容は，ログイン時にユーザ権限定義ファイルが参照され，ログインユーザごとに作成されるユーザ情報に保持されます。

ユーザ権限定義ファイル

ユーザ権限（オブジェクト作成権限およびオブジェクト操作権限）を定義するためのファイルです。

ユーザ情報

ログインユーザのユーザ識別子，所属グループ，特権およびユーザ権限を表す情報です。ログイン時にユーザごとに生成され，アクセス権の判定に使用されます。

（ラ行）

ランキング検索

全文検索条件に対する適応度をスコアとして算出して，スコアを基に検索結果集合の要素（文書）をソートして出力する検索です。

リファレンスファイル管理機能

DocumentBrokerサーバが存在するマシンから接続可能なファイルシステムの任意のディレクトリで文書のコンテントを管理し，文書のプロパティおよびコンテントの格納先の情報をデータベースで管理する機能です。

リファレンスファイル文書

DocumentBrokerサーバが存在するマシンから接続可能なファイルシステムの任意のディレクトリに格納されているファイルをコンテントとして持つ文書のことです。データベースでは，文書のプロパティおよびコンテントの格納先の情報を管理しています。CdbrDocumentクラスまたはCdbrVersionableDocumentクラスを使用して操作します。

リレーション

DMAオブジェクトのRelationshipオブジェクトに相当します。文書と文書の間の参照関係を表すオブジェクトです。

リレーション先文書

文書間リレーションを設定される，参照先になる文書です。

リレーション識別子

文書間に設定されたリレーションを識別するための識別子です。

リレーションを削除したり，リレーションのプロパティを更新したりする時に使用します。この識別子は，リレーションを設定した時にDocumentBrokerによって設定される識別子です。同じ文書から同じ文書に対して二つのリレーションを設定した場合は，それぞれ異なるリレーション識別子が設定されます。

リレーション元文書

文書間リレーションを設定する元になる文書です。

リンク

DMAオブジェクトのDirectContainmentRelationshipオブジェクト，ReferentialContainmentRelationshipオブジェクトまたはVersionTraceableContainmentRelationshipオブジェクトによって表される，文書とコンテナの関連づけです。

リンク権

組み合わせパーミッションの一つです。基本リンク権と同じ操作を許可するパーミッションです。

リンク識別子

コンテナオブジェクトへのリンク（関連づけ）を識別するための識別子です。

リンクを解除したり，リンクのプロパティの参照または更新したり，構成管理モードを変更したりする時に使用します。

この識別子は関連づけをした時にDocumentBrokerによって設定される識別子です。同じコンテナオブジェクトに，同じ要素を2度関連づけした場合は，それぞれ異なるリンク識別子が設定されます。

レンディション

文書のコンテントの形式およびそのコンテントをあわせてレンディションと呼びます。DMAオブジェクトのRenditionオブジェクトおよびContentTransferオブジェクトに相当します。

レンディションタイプ

Wordなどのアプリケーションで編集したファイル，HTML形式のファイル，GIFなどの画像データのファイルのように，登録した文書のコンテントのファイルの形式を表す文字列です。レンディションごとに設定できます。DocumentBrokerでは，レンディションタイプとして，MIME名を指定することを推奨しています。

レンディションのコンテント種別変換機能

レンディションのコンテントの格納先を，最適な格納先へ変換することができる機能です。

レンディション変換

マルチレンディション文書の，マスタレンディションのコンテントの文書形式を変換して，サブレンディションのコンテントを作成，登録することです。

ローカルACL

オブジェクトごとに設定できるアクセス制御リスト（ACL）です。VariableArray型のプロパティとして設定されます。

ロケール（Locale）

言語や使用する文字コードの種別，特定の国や地域で特別な意味を持つ属性などの定義のことです。ロケールは地域化した形でアプリケーションの拡張性を提供するために使われます。

索引

[記号]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｈ][Ｉ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｑ][Ｒ][Ｓ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

?パラメタ

?パラメタ

(英字)

(Ａ)

ACE

ACFlag

ACFlag

ACFlagで設定するサブジェクトとパーミッションの組み合わせ

ACFlagの設定

ACL

ACL

ACLで設定するサブジェクトとパーミッションの組み合わせ

AND-NOT検索

AND検索

API

(Ｂ)

Between述語

Binary型

Boolean型

(Ｃ)

CdbrCompoundオブジェクト

CdbrCompoundクラス

CdbrConfiguratedReferentialContainerオブジェクト

CdbrContainableクラス

CdbrCoreクラス

CdbrDMAクラス

CdbrDocumentオブジェクト

CdbrDocumentオブジェクトのOIIDを基にCdbrVersionableDocumentオブジェクトに接続する手順

CdbrDocumentクラスの概要

CdbrEqlStatementオブジェクト

CdbrIndependentPersistenceオブジェクト

CdbrIndependentPersistenceクラスの概要

CdbrPublicACLオブジェクト

CdbrReferentialContainerオブジェクト

CdbrReferentialContainerクラスの概要

CdbrSessionオブジェクト

CdbrSessionクラスの概要

CdbrVariableArrayオブジェクト

CdbrVariableArrayクラス

CdbrVersionableDocumentオブジェクト

CdbrVersionableDocumentオブジェクトとCdbrDocumentオブジェクトの関係

CdbrVersionableDocumentクラスの概要

CdbrVersionableクラスの概要

CdbrVersionTraceableContainerオブジェクト

CdbrXmlTranslatorFactoryオブジェクト

CdbrXmlTranslatorオブジェクト

Child

Child

concept_with_score関数

ConfigurationHistoryオブジェクト

ConfigurationHistoryオブジェクト

ConnectObjectメソッドによる明示的なロックの設定

ConnectObjectメソッドを使用したオブジェクトへの接続

Containableオブジェクト

Containee

Containee

Container

Container

ContainerVersionオブジェクト

Containerオブジェクト

contains_with_score関数

contains関数

ContentElement

ContentFileLinkオブジェクト

ContentReferenceオブジェクト

ContentTransfersオブジェクト

ContentTransferオブジェクト

ContentTransferオブジェクト

CORBA

COUNT

COUNT

(Ｄ)

DBMS関数

DBMS関数

DBR_QUERY_WITH_ACL

DBR_QUERY_WITHOUT_ACL

DBR_RLT_FOR_UPDATE

DBR_RLT_FOR_UPDATE

DCD

DMA

DMA

DMA_LOCK_READ

DMA_LOCK_WRITE

dmaProp_OIID取得インタフェース

DMA URL

DMAオブジェクト

DMAオブジェクト

DMAオブジェクト

DMAオブジェクトで表す文書

DMAが規定したプロパティ

DMAクラス

DocSpaceオブジェクトのメタデータ空間

DocumentBrokerでの文書

DocumentBrokerでの文書管理の概要

DocumentBrokerによる暗黙のロックの設定

DocumentSpace構成定義ファイル

DocVersionオブジェクト

DocVersionオブジェクト

DocVersionオブジェクト

DocVersionオブジェクト

(Ｅ)

edmClass_Relationshipクラス

edmSQL

edmSQL

edmSQL関数

edmSQL関数

edmSQL検索

edmSQL検索

edmSQL構文解析情報ファイル

edmSQLで使用できるデータ型

edmSQLプログラム

edmSQL文

edmSQL文

Exists述語

extracts関数

(Ｆ)

FAM

File Link文書

File Link文書

File Link文書

File Link文書

File Link連携機能

File Link連携機能

File Link連携機能

File Link連携機能を使用した文書管理

FIXモード

FIXモード

FLOATINGモード

FLOATINGモード

FROM句

(Ｇ)

GROUP BY句

GUID

GUID

GUID値の実体を定義する

GUID値の実体を定義する

(Ｈ)

HAVING句

HiRDB File Link

(Ｉ)

IDファイル

ID文字列

Integer32型

In述語

(Ｌ)

LDAP

Like述語

(Ｍ)

major_codeによるエラーの分類

(Ｎ)

NOT条件

NOWAITモード

Null述語

(Ｏ)

Object型

objref関数

OIID

OIID

OIID

oiidstr関数

oiid関数

OIID変換インタフェース

ORDER BY句

OR検索

(Ｐ)

Parent

Parent

(Ｑ)

QueryResultRowオブジェクト

QueryResultSetオブジェクト

Queryオブジェクト

(Ｒ)

RDエリア

readロック

Renditionオブジェクト

Renditionオブジェクト

Reservationオブジェクト

Reservationオブジェクト

(Ｓ)

Scalar型

Scalar型

Scalar型

Scopeオブジェクトのメタデータ空間

score_concept関数

score関数

Security-ACL

SetOIIDメソッドを使用したオブジェクトへの接続

String型

SystemManagerオブジェクト

Systemオブジェクト

Systemオブジェクトのメタデータ空間

(Ｕ)

UOC

(Ｖ)

VariableArray型

VariableArray型

VariableArray型

VariableArray型プロパティ

VariableArray型プロパティ

VariableArray型プロパティの操作

VariableArray型プロパティを操作するクラス

Versionableオブジェクト

VersionDescriptionオブジェクト

VersionDescriptionオブジェクト

VersionSeriesオブジェクト

VersionSeriesオブジェクト

VersionTracedComponentDocVersionオブジェクト

VersionTracedDocVersionオブジェクト

VTContainee

VTContainee

VTContainer

VTContainer

(Ｗ)

W3C

WAITモード

WHERE句

writeロック

(Ｘ)

XMLインデクスデータ作成機能

XMLインデクスデータ作成機能

XMLインデクスデータ作成機能

XMLファイル

XMLファイルの形式

XMLプロパティマッピング機能

XMLプロパティマッピング機能

XMLプロパティマッピング機能

XML文書

XML文書管理機能

XML文書の管理

(ア行)

(あ)

アクセス権

アクセス権

アクセス権判定時に設定されるロック

アクセス制御

アクセス制御エレメント

アクセス制御機能

アクセス制御機能

アクセス制御機能付き検索

アクセス制御機能付き検索

アクセス制御機能付き検索

アクセス制御機能付き検索モード

アクセス制御機能とは

アクセス制御機能なし検索

アクセス制御機能なし検索モード

アクセス制御機能を使用する場合に定義されるクラスライブラリ固有のプロパティ

アクセス制御情報

アクセス制御情報

アクセス制御情報

アクセス制御情報の特徴

アクセス制御情報変更権

アクセス制御情報変更権

アクセス制御情報変更権

アクセス制御情報変更権

アクセス制御情報を操作するためのパーミッション

アクセス制御と排他制御の関係

アクセス制御フラグ

アクセス制御フラグ

アクセス制御モード

アクセス制御モデル

アクセス制御リスト

アクセス制御リスト

値式

アドレス呼び出し

アンバインド

(い)

異表記展開

異表記展開検索

インストール後の環境設定

インデクス情報ファイル

インデクスデータ出力ファイル

(え)

永続オブジェクト

永続プロパティ

永続プロパティ

エラー処理

エラー処理の流れ

エラーの種類

(お)

オブジェクト

オブジェクト

オブジェクト作成権

オブジェクト作成権限

オブジェクト作成権限

オブジェクト操作権限

オブジェクト操作権限

オブジェクト操作ツール

オブジェクトとの接続

オブジェクトの作成

オブジェクトの操作の確定と取り消し

オブジェクトリファレンス

オブジェクトリファレンス

重み

重み指定

(カ行)

(か)

階層構造をたどったコンテナの取得

概念検索

概念検索

概念検索関数

概念検索機能付き文書クラス

概念検索のスコアオプション

開発環境クライアント

各クラスが参照，設定できるプロパティの定義元

各メソッドの実行に必要なパーミッション

仮のバージョン識別子

カレントディレクトリ

カレントバージョン

環境設定

環境変数

環境変数

関数指定

関連オブジェクト

関連オブジェクト

関連づけの種類

(き)

キーワード

起動ユーザとユーザ認証

基本オブジェクト削除権

基本コンテント更新権

基本コンテント更新権

基本コンテント参照権

基本コンテント参照権

基本削除権

基本単位

基本バージョン管理権

基本バージョン管理権

基本パーミッション

基本パーミッション

基本パーミッション

基本プロパティ更新権

基本プロパティ更新権

基本プロパティ参照権

基本プロパティ参照権

基本リンク権

基本リンク権

近傍条件

近傍条件検索

(く)

区切り文字

組み合わせパーミッション

組み合わせパーミッション

組み合わせパーミッション

クラス

クラス

クラス

クラス

クラス識別子

クラス識別子

クラス識別子，プロパティ識別子の定義

クラス定義情報ファイル

クラスの一覧

クラスの継承関係

クラスの継承関係

クラスの識別子

クラスの種類

クラスのメタデータ

クラスライブラリ固有のプロパティ

クラスライブラリ固有のプロパティ

クラスライブラリで扱う文書

クラスライブラリで使用するプロパティのデータ型

クラスライブラリで定義したプロパティ

クラスライブラリで提供するクラス一覧

クラスライブラリのクラス

クラスライブラリのクラスとDMAのクラスの対応

クラスライブラリの特長

(け)

継承

検索

検索結果構造体

検索条件

検索ターム

検索対象式

検索用特徴ターム

(こ)

更新

更新系メソッド

構成管理型

構成管理型のコンテインメント

構成管理型のコンテインメント

構成管理機能

構成管理機能

構成管理コンテナ

構成管理コンテナ

構成管理コンテナ

構成管理コンテナおよびコンテインメントのプロパティを使用した検索

構成管理コンテナで構成管理しているオブジェクトの削除

構成管理コンテナと文書の関連づけ

構成管理コンテナの構成要素のバージョンの確定

構成管理コンテナの削除

構成管理コンテナの作成

構成管理コンテナを表すクラスの概要

構成管理コンテナを使用した文書の構成管理

構成管理モード

構成管理モード

構成管理モードの種類

構成要素

構成要素のバージョンの確定

構造指定検索

構造指定検索

構造指定検索

構造に付けられた属性の値を指定した検索

コンテインメント

コンテインメント

コンテインメント

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

コンテインメントの種類

コンテインメントを利用した文書管理

コンテナ

コンテナ

コンテナ

コンテナと文書の関連づけ

コンテナと文書の関連づけの解除

コンテナの削除

コンテナの作成

コンテナを使用した文書管理

コンテント

コンテント格納先パス

コンテント格納先パス

コンテント格納先ベースパス

コンテント格納先ベースパス

コンテント格納先ベースパス

コンテント種別

コンテント種別

コンテントロケーション

コンテントロケーション

コンパイルオプション

(サ行)

(さ)

削除権

削除権

サブクラス

サブクラス

サブジェクト

サブジェクト

サブジェクト種別

サブジェクト種別

サブレンディション

サブレンディション

差分インデクス作成機能

参照型

参照型のコンテインメント

参照型のコンテインメント

参照系メソッド

参照権

参照権

参照更新権

参照更新権

(し)

識別子

字句規則

システム管理者

システムサブジェクト

実行環境

実行環境クライアント

実行環境制御ファイル

集合関数

述語

述語

取得

詳細エラーログファイル

詳細な情報が取得できるエラー

状態フラグ

状態フラグ

状態フラグ

使用できる文字

初期識別子

初期値の設定

所有者

所有者

処理と同時にロックを設定するメソッド（～AndLockメソッド）による明示的なロックの設定

シングルファイル文書

シングルファイル文書

(す)

数値関数

スーパークラス

スーパークラス

スカラー式

(せ)

セキュリティACL

セキュリティACL

セキュリティACL

セキュリティACLの設定

セキュリティ運用者

セキュリティ管理者

セキュリティ管理者

セキュリティ定義ファイル

セッション

セッションの確立

セッションの確立

セッションの終了

接続の解除

絶対値関数

全文検索

全文検索インデクス

全文検索インデクス

全文検索インデクス

全文検索インデクスの作成時点

全文検索インデクスの遅延一括作成

全文検索関数

全文検索機能付き文書クラス

全文検索機能付き文書クラス

全文検索機能付き文書クラスの作成

全文検索機能付き文字列型プロパティに対応しているクラス

全文検索機能付き文字列型プロパティに対応しているメソッド

全文検索機能付き文字列型プロパティを使用した全文検索

全文検索文書として登録されるレンディションタイプと検索形式

全ユーザ

(そ)

属性値指定

(タ行)

(た)

種文章

(ち)

チェックアウト

チェックアウト

チェックアウトによってコピーされたオブジェクトのパーミッション

チェックイン

チェックイン

チェックイン

抽象クラス

重複排除

直接型

直接型でのDMAオブジェクトの関係

直接型のコンテインメント

直接型のコンテインメント

(つ)

追加識別子

(て)

定義情報ファイル

ディレクトリサービス

データ型の種類

データ操作の構文規則

データベース以外で発生したエラー

データベースで発生したエラー

(と)

問い合わせ

問い合わせ結果のメタデータ空間

問い合わせ式

問い合わせ指定

問い合わせ文

同一トランザクション内でのロックの遷移

同義語展開

同義語展開検索

動作環境メタ情報ファイル

トークン

特殊なプロパティ

特定構造検索

独立データ

独立データの管理

独立データの検索

独立データの作成

独立データの設定と取得

特権

特権

トップオブジェクト

トップオブジェクト

トランザクション

(ナ行)

(な)

ナビゲーション

名前

(ハ行)

(は)

バージョン

バージョン管理機能

バージョン管理機能

バージョン管理権

バージョン管理する文書またはコンテナの作成

バージョン権

バージョン付き構成管理コンテナ

バージョン付き構成管理コンテナ

バージョン付き構成管理コンテナ

バージョン付き構成管理コンテナに格納されたオブジェクトの管理例

バージョン付き構成管理コンテナの機能

バージョン付き構成管理コンテナのバージョンアップ

バージョン付き構成管理コンテナのバージョンアップ

バージョン付き構成管理コンテナのバージョンの追加

バージョン付き構成管理コンテナのバージョンの追加と構成管理

バージョン付き構成管理コンテナを利用した構成管理

バージョン付き構成管理コンテナを利用した構成管理で使用するDMAクラス

バージョンなし構成管理コンテナ

バージョンなし構成管理コンテナ

バージョンの指定方法

バージョンの順序性

バージョンの追加

パーミッション

パーミッション

パーミッションの種別

排他制御

バインド

パブリックACL

パブリックACL

パブリックACLに対するアクセス権

パブリックACLの設定

パブリックACLのプロパティ

(ひ)

比較述語

否定演算

(ふ)

ファイルサーバ

ファイル転送機能の使用

フィールド参照

フィルタリング定義ファイル（TFD）

複数のクライアント間でのロックの関係

副問い合わせ

プライマリグループ

プライマリグループ

フルコントロール

フルコントロール

プレーンテキスト

プログラミング時の注意と設定

プロパティ

プロパティ

プロパティ

プロパティ更新権

プロパティ更新権

プロパティ構造体

プロパティ参照権

プロパティ参照権

プロパティ識別子

プロパティ識別子

プロパティ指定

プロパティの型

プロパティの基本単位

プロパティの基本単位

プロパティの継承関係

プロパティの識別子

プロパティの種類と操作

プロパティのデータ型

プロパティのメタデータ

プロパティの用途

プロパティマッピング定義ファイル（DPM）

プロパティリスト構造体

文書

文書

文書間リレーション

文書間リレーション

文書間リレーションを設定した文書管理

文書空間

文書空間

文書空間との接続

文書検索関数

文書の更新

文書の削除

文書の作成

文書の参照

文書のバージョン管理

文書のバージョン管理

文書のバージョン管理で使用するDMAクラス

文書のバージョンの削除

文書のマルチファイル管理

文書のマルチレンディション管理

文書のリファレンスファイル管理

文書を表現するために使用するDMAクラス

文法

(へ)

ヘッダファイル

変換関数

変換関数

変換フラグ

変換フラグ

変換フラグ

(ほ)

ほかのプログラムとの併用の際の注意

(マ行)

(ま)

マスタレンディション

マスタレンディション

マスタレンディションの変更

マッピングセット定義ファイル（XMS）

マッピング定義ファイル（XMP）

マッピング元XMLタグ定義ファイル（DCD）

マルチファイル管理機能

マルチファイル管理機能

マルチファイル管理機能

マルチファイル文書

マルチファイル文書

マルチファイル文書

マルチレンディション管理を使用した文書管理

マルチレンディション機能

マルチレンディション機能

マルチレンディション機能

マルチレンディション文書

マルチレンディション文書

(め)

メタ情報ファイル

メタデータ

メタデータオブジェクト

メタデータ空間

メタデータ空間

(も)

文字コード種別とプログラミング

(ヤ行)

(ゆ)

ユーザ権限

ユーザ権限

ユーザ権限定義ファイル

ユーザ権限定義ファイル

ユーザ権限定義ファイルの指定によるユーザ権限の設定

ユーザ情報

ユーザ定義のクラス識別子・プロパティ識別子の定義

(よ)

要素参照

要素の個数および持ち方によるプロパティの分類

(ラ行)

(ら)

ライブラリの指定

ランキング検索

(り)

リテラル

リファレンスファイル管理機能

リファレンスファイル管理機能

リファレンスファイル文書

リファレンスファイル文書

リファレンスファイル文書

リレーション

リレーション

リレーション先文書

リレーション先文書

リレーション識別子

リレーション元文書

リレーション元文書

リンク

リンク権

リンク権

リンク識別子

リンク識別子

(る)

ルーチンの起動

(れ)

レンディション

レンディション

レンディション一覧の取得

レンディションタイプ

レンディションタイプ

レンディションタイプについての注意事項

レンディションタイプについての注意事項

レンディションのコンテント種別変換機能

レンディションのコンテント種別変換機能

レンディションのコンテント種別変換機能を使用した文書管理

レンディションの削除

レンディションの追加

レンディションのプロパティ設定

レンディション変換

レンディション変換

(ろ)

ローカルACL

ローカルACLの設定

ログイン

ロケール

ロック

ロックの概要

ロックの種類

ロックの設定方法

ロックの遷移

ロックの範囲

ロックの有効期間

論理演算子

論理述語

論理積演算

論理和演算

■ 商標類

Active Directoryは，米国Microsoft Corporationの，米国およびその他の国における登録商標または商標です。
AIXは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
CORBAは，Object Management Groupが提唱する分散処理環境アーキテクチャの名称です。
GIFは，米国CompuServe Inc.が開発したフォーマットの名称です。
Microsoft Office Wordは，米国Microsoft Corporationの商品名称です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。Microsoft Wordは，米国Microsoft Corporationの商品名称です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
OLEは，米国Microsoft Corporationが開発したソフトウェア名称です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
TIFFは，米国Aldus Corp.が開発したフォーマットの名称です。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
VisualAgeは，米国およびその他の国におけるInternational Business Machines Corporationの商標です。
Visual C++は，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Serverは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Windows Vistaは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
活文，PDFstaffは，株式会社日立ソリューションズの登録商標です。
その他記載の会社名，製品名は，それぞれの会社の商標もしくは登録商標です。