ナビゲーション・ヘッダーをスキップ
Oracle Helpのファイル形式 Table of Contents
目次
Previous topic
前へ
Next topic
次へ

ファイルへのトピックIDの動的マッピング

トピックIDとマップ・ファイル間をマップする簡単な規則をヘルプセットで使用している場合、動的マッピングによって、Oracle Helpのメモリー使用量および起動時刻を大幅に改善できます。

Oracle Helpは、OHJ 4.2.1およびOHW 2.0では、ヘルプセットの<maps>領域にある<mapref>サブ要素の新しいengine属性をサポートします。engine属性を設定することで、カスタム・エンジンを使用したマップ・ファイルの解析、およびトピックIDとファイルの間のマッピングに使用されるオブジェクトの作成ができます。実際、適切なエンジンを使用すれば、マップ・ファイルを完全に排除できます。

engine属性はオプションです。指定しない場合、Oracle Helpはlocation属性が<mapref>に設定されていると判断し、マップ・ファイルはOracle Helpの旧リリースと同じ方法で解析および格納されます。

しかしOracle Helpは、トピックIDとファイルの間を調整する共通規則をサポートする、次の2つのエンジンをサポートしています。

この2つのエンジンを使用しても、必要な動的マッピングが実行できない場合、oracle.help.engine.DataEngineのカスタム実装を記述できます。

oracle.help.engine.XMLMapFixedConventionEngine

多くの場合、myfile.htmlというファイル名に対して対応するトピックIDはmyfile_htmlです。マップ・ファイルが、この形式による明白なトピック・マッピングの不用意に長いリストの場合、<mapref>engine属性をoracle.help.engine.XMLMapFixedConventionEngineに設定します。

OHJ 4.2.1以上またはOHW 2.0以上を使用している場合、engineをこの値に設定することで、以前のマップ・ファイルは消去可能になります。しかし、ヘルプ・コンテンツがOracle Helpの旧リリースを使用して表示されている場合、以前のマップ・ファイルを保存しておく必要があります。そうすることで、Oracle Helpの旧リリースはトピック・マッピングの標準メカニズムを再び使用できます。

ヘルプ・システムのメモリー使用量を削減し、起動時間を短縮する必要がある場合、この新しいエンジンの使用をお薦めします。これにより、マップ・ファイルは読み込まれず、コンテンツがメモリーに格納されません。しかし、このエンジンの使用について注意事項が1つあります。

すべてのヘルプ・コンテンツ(HTMLファイル)は、ヘルプセット・ファイルと同じディレクトリに格納してください。さらに、すべてのサブヘルプセットもマスター・ヘルプセット・ファイルと同じディレクトリに格納してください。コンテンツがマスター・ヘルプセットと同じディレクトリに格納されていないとヘルプシステムによって検出できないため、サブヘルプセット用のサブディレクトリは作成できません。しかし、別のヘルプセットであれば別のディレクトリに格納できます。

oracle.help.engine.XMLMapConventionEngine

<mapref>要素でengineoracle.help.engine.XMLMapConventionEngineに設定している場合、独自のトピック名規則をマップ・ファイルに定義できます。たとえば、ヘルプセットに次の<maps>が定義されている場合について考察します。

<maps>
  <mapref location="map.xml" engine="oracle.help.engine.XMLMapConventionEngine"/>
</maps>

XMLMapConventionEngineは、トピックIDおよびウィンドウ・タイプのマッピングを設定する場合、標準メカニズムをサポートします。しかし、新しい<topicNameConvention>要素もサポートします。

XMLMapConventionEngineを使用する場合、map.xmlは次のものに類似します。

<map version="1.1">
  <topicNameConvention urlbase="http://www.example.org/help">
    <text>beginningText</text>
    <filename/>
    <text>_</text>
    <extension/>
    <text>endingText</text>
  </topicNameConvention>
</map>

<topicNameConvention>の概念は単純です。トピックIDの構造を指定するだけです。urlBase属性を<topicNameConvention>に設定した場合、すべてのヘルプ・コンテンツ・ファイルはそのURLに配置されたと判断されます。すべてのトピックIDがファイル名や拡張子の一部以外の文字列で始まる場合、規則の最初で<text>に値を指定できます。次に、ファイル名または拡張子のどちらがトピック名規則の最初に設定されるかを示すために、<filename/>または<extension/>のどちらかを指定する必要があります。これにより、ファイル名と拡張子を切り離す<text>が指定できます。ファイル名または拡張子のどちらが規則の2番目に設定されるかを示すために<filename/>または<extension/>のどちらかが続きます。最後の<text>は、すべてのトピックIDがファイル名や拡張子の一部以外のテキストで終わる場合に指定できます。

前述のトピック名規則に従った場合、beginningTextmyfile_htmlendingTextのトピックIDは、http://www.example.org/help/myfile.htmlに配置されているファイルに関連付けされます。urlBase属性が指定されていない場合、myfile.htmlはヘルプセット・ファイルと同じディレクトリに格納されていると判断されます。

標準のトピック・マッピングおよびウィンドウ・タイプをマップ・ファイルに設定し、さらにXMLMapFixedConventionEngineで提供されるトピック名規則を使用する場合、マップ・ファイルでtopicNameConventionを次のように定義できます。

<map version="1.1">
  <topicNameConvention>
    <filename/>
    <text>_</text>
    <extension/>
  </topicNameConvention>
  <mapID etc.../>
</map>

前述の規則(およびXMLMapFixedConventionEngine)では、ファイル名と拡張子を切り離すテキストがトピックIDに複数回出現します。たとえば、my_file_htmlというトピックの場合を考察します。このエンジンでは、ファイル名と拡張子を切り離すテキストは、トピックIDに出現する「_」という文字の最後のものであると判断されます。したがって、このトピックはmy_file.htmlに配置されます。

動的マップの最適化

ファイルへのトピックIDの動的マッピングを使用すると、ヘルプ・システムのパフォーマンスが格段に向上します。しかし、ライブラリに多くのヘルプセットがある場合、特定のトピックを状況依存ヘルプで呼び出す際、時間がかかることがあります。

URLに何も指定されていない場合でも規則ベースのマッピング・エンジンはトピックIDにURLを返すというのが、この問題の根本的な理由です。このため、状況依存ヘルプはライブラリの各ヘルプセットを呼び出し、エンジンによって生成されたURLが実際に指定された内容を表示するかどうかをチェックします。

最悪の場合、状況依存ヘルプを1回呼び出しただけで、ヘルプ・システムはライブラリにあるヘルプセットの分のURLに接続しようとします。しかし、Oracle Helpではこの問題を解決する簡単な対応策が用意されています。<mapref>要素でengineを設定している場合、engineParams属性も設定します。

XMLMapConventionEngineまたはXMLMapFixedConventionEngineを設定している場合、ヘルプセットにある全トピックの接頭辞が空白文字で区切られるようにengineParamsを設定します。たとえば、ヘルプセットのすべてのトピックがohまたはhelpのどちらかで始まる場合、maprefは次のようになります。

<mapref engine="XMLMap..." engineParams="oh help">

engineParamsを規則ベースのエンジンのいずれかに設定することで、ヘルプセットは有効な接頭辞で始まるトピックのみ表示します(それにより何も指定されていないURLへの接続を回避できます)。engineParamsを設定しないと、ヘルプ・システムは壊れませんがパフォーマンスは最適になりません。