# インフォメーション・マネージャの統合

CDEユーザは、`dtinfo`機能を使用して、グラフィックやハイパーテキスト・リンクを含む、大量のSGML形式のオンライン・マニュアルを検索したり、ブラウズできます。 それらをインフォメーション・ライブラリといいます。 インフォメーション・ライブラリは、ブック・ケースの集まりであり、各ブック・ケースは、ブックの集まりです。

インフォメーション・マネージャは、複数の場所から、CDEデスクトップ上で使用できます。 ユーザの初期セッションの一部として、セッション・マネージャが `dtinfo`を自動的に開始します。 インフォメーション・ライブラリは、DtInfoLibオブジェクトとして、ファイル・マネージャからデスクトップ上で使用できます。 `dtinfo`アプリケーションはフロントパネルから直接実行できます。また、`アプリケーション・マネージャ`にある `デスクトップアプリケーション`アプリケーション・グループの `インフォメーション・マネージャ`アクションからも実行できます。

CDEアプリケーションは、`dtinfo`ブラウザを統合し、インフォメーション・ライブラリをアクセス可能にするために、小型のAPIを呼び出します。 もし`dtinfo`があなたのアプリケーション環境に適応しなければ、 dtinfoデータベース・エンジンAPIを使用して、それを拡張するか、あなた自信のブラウザと置き換えることができます。 次は、dtinfo機能の一般的な論議です。 なお、この章では、`dtinfo`APIと `dtinfo`データベース・エンジンAPIを説明します。

## サーバ・アーキテクチャの構造

CDEでのインフォメーション管理は、サーバ・アーキテクチャに基づきます。 つまり、CDEデスクトップ・セッション中はいつでも、`dtinfo`のメイン・ブック・リスト・ウインドウのインスタンスが一つだけ正常に表示できます。 ユーザまたはアプリケーションがセッション中に、新しいドキュメント・ライブラリとの接続を要求したときは、インスタンスによって、オンライン・マニュアルの編成や検索に力をつぎ込み、システムのレスポンス・タイムは最小限にするように取り扱われます。

ただし、`dtinfo`インスタンスが現在動作中で、そのホストからはアクセスできないinfolibに対して、ユーザまたはアプリケーションがアクセスを要求したときは、例外が起きます。 このような場合、デスクトップ・メカニズムは、要求されたインフォメーション・ライブラリとのアクセスを持つホスト上に、`dtinfo`の新しいインスタンスを自動的に起動します。 また、現在実行中の`dtinfo`プロセスが使用しているロケールとは異なるロケール中のinfolibに対して、ユーザまたはアプリケーションがアクセスを要求したときも、同様なことが起きます。 この場合、デスクトップ・メカニズムは、同じホスト上に異なるロケールで `dtinfo`の新しいインスタンスを起動します。 二つの条件が重なると、要求されたロケールのインフォメーション・ライブラリとのアクセスを持つホスト上に新しい`dtinfo`のインスタンスを起動します。

コマンド行で`dtinfo`を起動すると、複数のインスタンスが、指定されたホスト上に指定されたロケールで作成できます。 通常、ToolTalk メカニズムは、一つのインスタンスだけがデスクトップ上を実行中であると保証しますが、この場合、`dtinfo`は保証を期待できません。

## 検索パス

環境変数`DTINFOLIBSEARCHPATH`と `DTINFOLIBDEFAULT`は、組み込み時に、 `dtsearchpath`によって定義されます。 infolib検索パスは、あなたのシステムに登録されているはずのインフォメーション・ライブラリを、指定された位置で、デスクトップに検索させます。

### デフォルトのInfolib検索パス

デフォルトのinfolib検索パスは、システム共通の位置および組み込みの位置を持っています。

- システム共通の位置 - `/etc/dt/infolib/%L/%I.dti`

- 組み込みの位置 - `/usr/dt/infolib/%L/%I.dti`

デフォルトの言語は、Cです。 `DTINFOLIBDEFAULT`の値は、%Iに置き換えられます。 `DTINFOLIBDEFAULT`の初期値は、 `cde`です。

### アプリケーション検索パスが、Infolib検索パスに、どう影響するか

アプリケーション検索パスに位置が追加された場合、infolib検索パスにinfolibサブディレクトリが自動的に追加されます。 たとえば、アプリケーション・サーバ`hosta:`がアプリケーション検索パスに追加された場合、infolib検索パスには、 `hosta:/etc/dt/infolib/%L`が自動的に追加されます。

### Infolib検索パス環境変数

infolib検索パスは、組み込みの位置と以下の入力変数から組み立てられます。

- `DTSPSYSINFOLIB` - システム共通infolib検索パス入力変数

- `DTSPUSERINFOLIB` - 個人用infolib検索パス入力変数

これらの入力変数を使用して、アプリケーション検索パス以外の位置を指定できます。 組み立てられたデータベース検索パスは、 `DTINFOLIBSEARCHPATH`出力変数で指定できます。

### Infolib検索パス入力変数の構文

`DTSPSYSINFOLIB`変数と `DTSPUSERINFOLIB`変数の構文は、次のとおりです。

VARIABLE `=` 位置 [,位置...]

ここで位置には、 ローカル(セッション・サーバ)システムのディレクトリである `/`パスを指定することもできます。 この構文で、ローカル・ディレクトリを追加して下さい。 別のシステムの位置を指定するには、そのネットワーク・ファイル名、たとえば、 `/nfs/servera/projects/infolib`を使用します。

### Infolib検索パスの組み立て方

infolib 検索パスの値 (`DTINFOLIBSEARCHPATH`)は、以下の位置を組み立てて作成されます(使用頻度が高いものから順に表示してあります)。

- `DTSPUSERINFOLIB`変数で指定された位置

- `DTSPUSERAPPHOSTS`変数から引き出された位置

- デフォルトの位置は、`/etc/dt/infolib/%L/%I.dti`です。

- `DTSPSYSINFOLIB`変数で指定された位置

- `DTSPSYSAPPHOSTS`変数から引き出された位置

- `/usr/dt/infolib/%L/%I.dti`

## ワークスペース管理

接続要求時に、ワークスペース中で実行されていても、ブラウザは、ワークスペース対応に予定の動作を行ないます。 ウインドウは、次のルールにしたがってワークスペースにマップされます。

- 主ウインドウが新しいワークスペースにマップされると、関連するすべての副ウインドウも新しいワークスペースにマップされます。

- 副ウインドウが新しいワークスペースにマップされると、関連する主ウインドウとそれに関連するすべての副ウインドウも新しいワークスペースにマップされます。

- 主ウインドウが新しいワークスペースにマップされると、アプリケーションに関連するその他の主ウインドウは、現在のワークスペースに残ります。

ブラウザ・ウインドウが現在のワークスペースにマップされると、 `DtInfo_LoadInfoLib`と `DtInfo_ShowInfoAtLoc`のメッセージが出力されます。 ユーザは、また、`dtwm`メニューを通じて、新しいワークスペースにアプリケーション・ウインドウをマップすることができます。

## アプリケーション・リンケージ

アプリケーションは、`dtinfo`を起動して、特定のオンライン・マニュアルを表示する手段として用意されています。 `dtinfo` 外部APIは、一つには、情報の表示やナビゲーションを管理したり、自動的に行なうアプリケーションとして使用されます。

(`DtShowInfoAtLoc`アクションの明示的なロケータ値を使用して)アプリケーションから、`dtinfo`に接続すると、すでに未表示の状態になっているブラウザを表示することができます。 このため、次に示す状態は変化します。

- ブラウザが`DtLoadInfoLib`アクションを使用してアクセスするとき、ただ一つのinfolibパスだけを指定できます。 その場合、新しくロードされたinfolibのブックケースを含む、最初の `dtinfo`(ブックリスト)ウインドウだけが表示されます。

- `dtinfo`は、ワークスペース中でアクティブですが、ブック・リスト・ウインドウおよび/またはブラウザは、アイコン化されます。

  - ブック・リスト・ウインドウおよびくくりつけられたブラウザのウインドウは、アイコン化されたままです。 くくりつけられていないブラウザのウインドウがない(アイコン化されている、いないに かかわらず)場合には、新しいブラウザのウインドウが現われ、要求されたトピックが表示されます。

  - アイコン化されたブラウザのウインドウがくくりつけられていないときは、それがマップされ、以前のトピックは要求されたトピックに取って代わられます。

- デスクトップと`dtinfo`インスタンスは、 あるホスト(`host1`)上の、 あるロケール(`locale1`)で起動されましたが、 `dtinfo`を使用するアプリケーションは、同一セッション中は、異なるホスト(`host2`)上および/または異なるロケール (`locale1`)で、リモート・シェルから起動されます。

  - アプリケーションからの要求は、現在のセッション中のすべての`dtinfo`プロセスで、処理できるかどうか、検査されます。 たとえば、`dtinfo`プロセスで要求を受け入れることは、それが同じロケールで動作中でなければならず、しかも、指定されたインフォメーション・ライブラリにアクセスできなければならないということです。

  - そのようなプロセスが存在しないときは、ブラウザの独立したコピーは `locale2`の `host2`上で起動されます。 オリジナル・メッセージは、処理のために新しいインスタンスに送られます。

## ToolTalkメッセージ

`dtinfo`コマンドは、次のメッセージを取扱うためToolTalkに登録します。

- `DtInfo_LoadInfoLib` (配信範囲TT_SESSION)

- `DtInfo_ShowInfoAtLoc` (配信範囲TT_SESSION)

`dtinfo`インスタンスは、次のメッセージを監視します。

- `DtInfo_Quit` (配信範囲TT_SESSION)

インフォメーション管理システムは、ToolTalkの要求を取扱うことのできる、現在有効な`dtinfo`プロセスがない場合には、`dtinfo`プロセスを開始するために使用される、ptypeの"DtInfo"も定義します。

## 一般化されたロケータの書式

外部ナビゲーションで参照できる一連のドキュメントとしてinfolibをアドレス付 けする目的で、一般化されたロケータの書式がアプリケーションおよびエンドユーザ用に 定義されています。 このメカニズムは、DtInfoLibレベルで作業するよりも、ずっと正確です。 このメカニズムは、それ自身のオンライン・マニュアルをしっかりと統合したいアプリケーションで、アクション・システム中でまたはコマンド行からの特定のセクションの印刷用に使用されます。

BNFが定義する一般化されたロケータの書式の構文を次に示します。

    <GLF> ::= <MMDB> | <ULV> | <URI>
    <MMDB> ::= mmdb:  <IBL> | <IB> | <IL> | <INFOLIB> | <BL> | <BOOKCASE> |
               <LOCATOR>
    <IBL> ::= <INFOLIB> & <BOOKCASE> & <LOCATOR>
    <IB> ::= <INFOLIB> & <BOOKCASE>
    <IL> ::= <INFOLIB> & <LOCATOR>
    <BL> ::= <BOOKCASE> & <LOCATOR>
    <INFOLIB> ::= INFOLIB= <NAME>
    <BOOKCASE> ::= BOOKCASE= <NAME>
    <LOCATOR> ::= LOCATOR= <ULV> <NAME>
    <ULV> ::= uuid_ | xsm_ | isbn_
    <NAME> ::= <CHAR> { <CHAR>)
    <CHAR> ::= a-z | A-Z | 0-9 | <SPECIAL_CHAR>
    <SPECIAL_CHAR> ::= everything but ":" and "&"
    <URI> ::= Uniform Resource Identifier (as defined by the Web Consortium)

上記のように、`uuid` (DCE-style Universal Unique ID用)、 `xsm` (XSession Manager style Unique ID用)、および `isbn` (ISBN - International Standard Book Number用)などを含む、ロケータの書式を識別するための予約語がいくつかあります。 このうち、`xsm`は直接、実行例でサポートしてあります。

## DtInfo APIの概要

つぎはデスクトップ・インフォメーション・マネージャAPIの概要です。

`DtInfoLib`

- `DtInfoLib`は、インフォメーション・マネージャを介してアクセスできる、ドキュメントの一連のブックケースを表す、デスクトップ・オブジェクトです。 DtInfoLibのデータ基準とデータ属性は、デスクトップ機能で使用するために、識別されます。 それらはCDE組み込みデータ型の一部です。

`DtInfoShowTopic`

- これは、ある特定の位置でユーザがインフォメーションの本文にアクセスできるようにするために、アプリケーションによる呼び出しが可能なC言語のAPIと呼ぶものです。 位置としては、ブックケースの先頭から特定のトピックまで、またはブックケース内のセクションまでのどこにあっても識別することが可能です。 また、セクション内のターゲットも可能です。 これには、データの構築において、外部的に一意なリンクIDが与えられています。

`DtActionInvoke`

- この機能は、`dtinfo`下の指定されたトピックを、デスクトップ・アプリケーションから使用可能なCDEデスクトップ・アクションAPIを使って、表示します。 `dtinfo`を起動するか、または、`dtinfo`と接続します。 アンカー・ポイントは最上位のブックケースと同じくらい広範囲か、または、特定のトピック(セクション)と同じくらい詳細です。 また、セクション内のターゲットも可能です。 これには、データの構築において、外部的に一意なリンクIDが与えられています。

`Browse`

- infolib用`Browse`は `DtLoadInfoLib`アクションをリマップします。

`Open`

- `Open`アクションは、 関連する`DtInfoLib`オブジェクトのための `DtLoadInfoLib`の起動に使用されます。

`DtShowInfoAtLoc`

- `DtShowInfoAtLoc`アクションは、infolibの特定のポイントに表示するために、ブラウザのToolTalkメッセージを分散させます。 クライアント・アプリケーションは、このアクションを起動して、 `dtinfo`に、特定のデータ・セクションまたはトピックを表示させます。 ブラウザが実行中でなければ、ブラウザを起動させます。 これは、`-sect`オプション指定の `dtinfo`コマンドを、コマンド行から起動するのと対応します。

`DtLoadInfoLib`

- `DtLoadInfoLib`アクションは、特定の、infolibをロードするために、ToolTalkメッセージを分散させます。 クライアント・アプリケーションは、このアクションを起動して、 `dtinfo`に、特定のインフォメーション・ライブラリをロードさせることができます。 ブラウザが実行中でなければ、ブラウザを起動させます。 これは、`-l`オプション指定の `dtinfo`コマンドを、コマンド行から起動するのと対応します。

`DtInfo_LoadInfoLib`

- `DtInfo_LoadInfoLib`ToolTalk操作は、 指定されたinfolibのロードに使用されます。 クライアント・アプリケーションは、この要求を送ることで、 `dtinfo`に、特定のインフォメーション・ライブラリをロードさせることができます。 ブラウザが実行中でなければ、ブラウザを起動させます。 これは、`-l`オプション指定の `dtinfo`コマンドを、コマンド行から起動するのと対応します。

`DtInfo_ShowInfoAtLoc`

- クライアント・アプリケーションは、このプロセス宛てToolTalkメッセージを送ることで、`dtinfo`に、特定のデータ・セクションまたはトピックを表示させます。 ブラウザが実行中でなければ、ToolTalkはブラウザを起動させます。 これは、`-sect`オプション指定の `dtinfo`コマンドを、コマンド行から起動することに対応します。

`DtInfo_Quit`

- これは、`dtinfo`の状態にだけ関心のあるオブザーバーのための、プロセス宛てToolTalkメッセージです。 ブラウザはそれが正常に終了した時、このメッセージを表示します。 セッション単位のデスクトップの終了時には、このメッセージは表示されません。

## DtInfoデータベース・エンジンAPIの概要

本節では、DtInfoデータベース・エンジンのアプリケーション・プログラミング・インタフェースの要約を述べます。 DtInfoデータベース・エンジンは、DtInfo用オンライン・マニュアル・データへのアクセスを格納したり提供したりします。

### 機能

`DtMmdbInit`

- アクセス・サービスを提供するデータベース・エンジンを用意して下さい。

`DtMmdbQuit`

- データベース・エンジンに割り当てられたメモリ・リソースを解放し、サービスの中止をエンジンに要請して下さい。

`DtMmdbOpenInfoLib`

- infolib記述子を獲得します。

`DtMmdbInfoLibGetInfo`

- infolibについての、記述情報を取得します。

`DtMmdbInfoLibFreeInfo`

- infolib構造に配置された空き領域を解放します。

`DtMmdbCloseInfoLib`

- これ以上infolibが必要ないことを表記します。

`DtMmdbGetBookCaseByName`

- 名前で識別されたブックケースの記述子を獲得します。

`DtMmdbGetBookCaseByIndex`

- 索引で識別されたブックケースの記述子を獲得します。

`DtMmdbGetBookCaseByLoc`

- 位置で識別されたブックケースの記述子を獲得します。

`DtMmdbGetBookCaseByLocs`

- ブックケース記述子のリストを獲得します。

`DtMmdbBookCaseGetInfo`

- ブックケースについての情報を取得します。

`DtMmdbBookCaseFreeInfo`

- ブックケース情報構造に配置された空き領域を解放します。

`DtMmdbSectionGetLoc`

- セクションのロケータを取得します。

`DtMmdbSectionGetLongTitle`

- セクションの識別子が与えられたとき、セクションの長いタイトルを返します。

`DtMmdbSectionGetShortTitle`

- セクションの短いタイトルを取得します。

`DtMmdbSectionGetData`

- セクションのデータを取得します。

`DtMmdbSectionGetDataSize`

- セクションのデータのバイト数を取得します。

`DtMmdbSectionGetTocLoc`

- セクションの識別子が与えられたとき、そのTOCセクションのロケータを取得します。

`DtMmdbSectionGetBookId`

- セクションの識別子が与えられたとき、このセクションが現われるブックの DtInfoデータベース・オブジェクト識別子を取得します。

`DtMmdbSectionGetStyleSheetId`

- セクションの識別子が与えられたとき、このセクションに適用可能なスタイルシートのDtInfoデータベース・オブジェクト識別子を取得します。

`DtMmdbTocGetParentId`

- このセクションの親であるセクションの、DtInfoデータベース・オブジェクト識別子を取得します。

`DtMmdbTocGetChildIds`

- 子セクションのDtInfoデータベース・オブジェクト識別子のリストを取得します。

`DtMmdbTocGetNumOfChildren`

- 子セクションの数を取得します。

`DtMmdbLocatorGetSectionLoc`

- セクション内の構成要素のロケータが与えられた時、セクションのロケータを取得します。

`DtMmdbLocatorGetSectionObjectId`

- セクション内の構成要素のロケータが与えられた時、セクションのDtInfoデータベース・オブジェクト識別子を取得します。

`DtMmdbGraphicGetData`

- グラフィック・オブジェクトのデータを取得します。

`DtMmdbGraphicGetInfo`

- グラフィック・オブジェクトの情報を取得します。

`DtMmdbStylesheetGetName`

- スタイルシート・オブジェクトの名前を獲得します。

`DtMmdbStylesheetGetData`

- スタイルシート・オブジェクトのデータを獲得します。

`DtMmdbBookGetTocObjectId`

- TOCセクションのロケータを獲得します。

`DtMmdbBookGetShortTitle`

- ブックの短いタイトルを獲得します。

`DtMmdbBookGetLongTitle`

- ブックの長いタイトルを獲得します。

`DtMmdbBookGetSeqNum`

- ブックの一連番号を獲得します。

`DtMmdbBookGetLicense`

- ブックのライセンス項目を獲得します。

`DtMmdbBookGetTabList`

- ブックのタブ設定されたセクションのリストを獲得します。

`DtMmdbDlpGetPrevSectionId`

- このセクションの識別子が与えられた時、前のセクションのDtInfoデータベース・オブジェクト識別子を獲得します。

`DtMmdbDlpGetNextSectionId`

- 次のセクションのDtInfoデータベース・オブジェクト識別子を獲得します。

`DtMmdbFreeHandle`

- DtMmdbHandleで使用されたメモリ・リソースを解放します。

`DtMmdbFreeHandleList`

- DtMmdbHandleによって使用されたメモリ・リソースを、そのハンドラに使用されたメモリ・リソースとともに解放します。

`DtMmdbFreeGraphicInfo`

- DtMmdbGraphicInfo構造で使用されたメモリを解放します。

### データ構造

DtMmdbInfoLib

- インフォメーション・ライブラリ(infolib)に関する情報を含んでいます。

DtMmdbBookCase

- ブックケースに関する情報を含んでいます。

DtMmdbHandle

- DtInfoオブジェクトの識別子に関する情報を含んでいます。

DtMmdbInfoRequest

- DtInfoデータベース・エンジンから情報を取得する要求を記述します。

DtMmdbGraphicInfo

- グラフィック・オブジェクトの各種機能を記述します。