この文書は、Mozilla ヘルプビューアを使用して HTML ヘルプ文書をあなたのアプリケーションに統合する方法について書かれています。ヘルプビューアに含まれた文書へは、任意の XUL アプリケーションや Mozilla に組み込まれたプログラムを使用してアクセスすることができます。
コンテンツパックはヘルプコンテンツが記述されたファイルのパッケージ一式です。コンテンツパックは XHTML で書かれたヘルプドキュメント、RDF で書かれたコンテンツパック記述子ファイル、および (RDFで書かれた) コンテンツの目次、索引、用語集を含みます。コンテンツパックを作成するには既存の Mozilla ヘルプコンテンツパックを受け継いでください。
コンテンツパックは全般の記述子ファイルおよび目次、索引、検索、用語集、ヘルプ文書で構成されています。ヘルプ文書は XHTML で書かれ、残りは RDF で書かれています。コンテンツパック記述子ファイルは、目次や索引、用語集の RDF ファイルを指し示すことによって、コンテンツパックの枠組みを記述するファイルです。目次ファイルと索引ファイルは、RDF で書かれた簡単なツリー構造でできています。用語集ファイルは、RDF で書かれ、対応する用語の定義への URL を含む簡単な一覧でできています。
先述のとおり、コンテンツパック記述子ファイルは RDF を使用して書かれています。もし、あなたが RDF を知らなくても構いません。(我々の目的のために多くを学ぶ必要はありません。)HTML や (できることなら)XML の基本を理解していれば、構文のとても基本的な部分(要素および属性、要素の内容) を理解することができます。小さな構文エラーがファイル全体を正しく読み込めなくなる原因になるため、構文を理解することが重要です。しかしながら、これは短所であるように思えますが実際には長所です。もしエラーを起こしてしまったら、すぐにそれを知ることができ、Firefox で直接読み込むことによって問題の個所を簡単に特定することができます。後で実際に内容を書くときは XHTML を知る必要がありますが、今は構文の知識だけで十分です。
それではまず、あなたのお気に入りのテキストエディタを開いて、content-pack.rdf ファイルを作成してください。そこに次のテキストを挿入してください:
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:nc="http://home.netscape.com/NC-rdf#">
</rdf:RDF>
HTML や XML に馴染みがある方は、これが文書全体のコンテナ要素であることが分かるはずです。これはファイルの内容全体を包むラッパーとして使用され、RDF としてマークアップします。
次に、今作成したファイルの rdf:RDF 要素内に rdf:Description 要素を挿入する必要があります:
<rdf:Description rdf:about="urn:root"
nc:title=""
nc:defaulttopic=""
nc:base="">
</rdf:Description>
属性値を次のように記入してください:
urn:root でなければなりません。それ以外の値にすると動作しません。この属性はファイルに記述された RDF グラフの開始点を示します。ヘルプビューアは、解析されたコンテンツパックのさらに先の (子要素に格納された) 情報について問い合わせるために、この要素を検索します。
rdf:ID を保持します。この属性は、ビューアのホームボタンを押したときに読み込まれるトピックも指定します。この属性値の書き方は後で詳しく説明します。この属性は任意です。属性値が指定されていないときは welcome になります。
chrome://myapp/locale/help/* にある場合、chrome://myapp/locale/help/ をここに記入し、後でファイルを参照する必要があるときは、パスを除いた実際のファイル名のみを使用します。この属性はタイピング量を抑えるのに役立ちますが、そうしたくない場合は必要ありません。
次に、用語集および索引、目次のある場所を記述する必要があります。(私たちはまだ、実際のデータを記述したそれぞれの場所を示していないので、いくつかの記入できるデータを使用します。) 次のコードを、あなたの作成した rdf:Description 要素内に追加してください:
<nc:panellist>
<rdf:Seq>
</rdf:Seq>
</nc:panellist>
rdf:Seq 要素内に関連する情報を追加していきます。
用語集および索引、目次データソースのそれぞれの場所は、次のように、一つの rdf:Description 要素に含まれる、一つの rdf:li 要素に格納されます:
<rdf:Seq>
<rdf:li>
<rdf:Description nc:panelid="glossary"
nc:datasources="chrome://foo/locale/help/glossary.rdf"/>
</rdf:li>
<rdf:li>
<rdf:Description nc:panelid="toc"
nc:datasources="chrome://foo/locale/help/glossary.rdf"/>
</rdf:li>
<rdf:li>
<rdf:Description nc:panelid="index"
nc:datasources="chrome://foo/locale/help/glossary.rdf"/>
</rdf:li>
</rdf:Seq>
ヘルプビューア UI が、各データソースのためのパネルを提供するかもしれません。Firefox 1.0 では、各データソースのパネルがありました。Firefox 1.1 以降および Mozilla 1.8 プラットフォームでは、目次データソースのみが表示されます。用語集と索引データソースは隠れています。これらの情報は、ユーザがヘルプコンテンツの検索をして、その結果が用語集や索引に見つからない限り表示されません。
どの型を定義していても、データソースの記述はほとんど同じで構文は簡単です。各パネルは次の属性を持つ一つの rdf:Description 要素によって指定されます:
glossary または search, toc, index のいずれかのパネル名を記入します。toc に指定されたデータソースは、読み込まれたコンテンツパックを検索して他のデータソースのみが利用可能な間も、常に表示されます。
rdf:ID 属性の特定のノードを参照することもできます。
<!-- Assumptions:
win-toc.rdf contains Windows- and OS/2-specific info,
unix-toc.rdf contains Linux- and Mac-specific info. -->
<rdf:li>
<rdf:Description nc:panelid="toc"
nc:platform="win os2"
nc:datasources="win-toc.rdf"/>
</rdf:li>
<rdf:li>
<rdf:Description nc:panelid="toc"
nc:platform="unix mac"
nc:datasources="unix-toc.rdf"/>
</rdf:li>
コンテンツパック記述子ファイルを完成させるために rdf:Seq 内に追加する最後の要素は、ヘルプビューアの検索機能を記述するための要素です。検索は、目次、索引、用語集内の要素すべてに対して自動的に行われますが、さらにデータソースを追加して検索したいかもしれません。一つの可能性としては、ソースがオンラインであなたのウェブサイト上に格納され、動的に生成されて追加されたコンテンツの一覧です。ヘルプビューアがこれらの追加のデータソースを通して検索するには、もう一つの rdf:li 要素を定義する必要があります:
<rdf:li>
<rdf:Description nc:panelid="search"
nc:datasources=""
nc:emptysearchtext="[No matching items found.]"
nc:emptysearchlink="chrome://foo/locale/bar.html"/>
</rdf:li>
search に設定してください。
chrome://help/locale/welcome.xhtml には、検索時に、ここで使用するのに役立つセクションがあります。
ただし、他のコンテンツパックから内容を継承するときは nc:datasources 属性を使用するように注意してください。この場合の共通の使用例は、ビューアと共に提供された小さな Using the Help Window【訳注: ヘルプウィンドウを使用する】
の記事を継承するときです。例えば次のコードは、記事を目次に含むために、あなたの作成したコンテンツパックの外部にあるデータソースを使用します:
<rdf:li>
<rdf:Description nc:panelid="toc"
nc:datasources="chrome://help/locale/help-toc.rdf chrome://foo/locale/help/glossary.rdf"/>
</rdf:li>
それぞれの異なるデータソースタイプ(toc および index, glossary, search) は何度も使用することができます。(プラットフォーム特有の情報がある場合は、複数回使用する必要があります。)しかしながら、その読み込みにはわずかに長い時間がかかるので、エントリを分ける代わりに、nc:datasources でスペースで区切られた URI の一覧を使用することが推奨されます。
用語集ファイルの書式は、内容の階層が一つしかないので、必要なデータソースの中で一番簡単です。(索引および目次、検索データソースは、ほとんど入れ子状になっており、その書式が複雑です。) 新しい RDF ファイル(今回は glossary.rdf と名付けましょう) を作成し、次の行を追加してください:
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:nc="http://home.netscape.com/NC-rdf#">
<rdf:Description rdf:about="urn:root">
<nc:subheadings>
<rdf:Seq>
</rdf:Seq>
<nc:subheadings>
</rdf:Description>
</rdf:RDF>
これは用語集記述ファイルの外枠です。データを追加するには、上記の用語集の rdf:Seq 内に、次の内容をエントリ毎に一つずつ追加してください:
<rdf:li>
<rdf:Description nc:name=""
nc:link=""/>
</rdf:li>
rdf:li 要素は、単にそれぞれの分かれたエントリを取り扱います。rdf:Description 要素は、用語集のエントリを記述します。これには nc:name および nc:link の二つの属性が必要です。nc:name はエントリの名前(現在、用語集のどのエントリが表示されているかを表すエントリのタイトル) です。nc:link の内容は、エントリにアクセスしたときビューアに表示されるものを参照する URI です。
索引ファイルの重要な注意点は、最上層の文字一式(例えば、A は Accessibility や Automation、B は Book や Border) が自動的に生成されない ことです。ヘルプ文書は任意の言語で書かれるため、このように自動的に仕分けることが好ましくありません。自動的に仕分けたい場合は、あなたがその機能を実装する必要があります。
索引データソースの用語集との構造上の違いは、複数の階層を持っていることです。用語集ファイルと全く同じ方法で単層にしても索引ファイルは完成されますが、複数の階層にすることで、特定の情報へナビゲートしやすくなります。単層の簡単な RDF ファイルの例から始めましょう:
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:nc="http://home.netscape.com/NC-rdf#">
<rdf:Description rdf:about="urn:root">
<nc:subheadings>
<rdf:Seq>
<rdf:li><rdf:Description nc:link="foo.html" nc:title="Foo"/></rdf:li>
<rdf:li><rdf:Description nc:link="baz.html" nc:title="Baz"/></rdf:li>
</rdf:Seq>
<nc:subheadings>
</rdf:Description>
</rdf:RDF>
ここには、単層で "Foo" と "Baz" の二つのエントリしかありません。では、"Foo" のすぐ下に "bar" エントリを追加したいとします。追加するにはどのようにしますか?はじめに、"Foo" エントリに属性を追加する必要があるので、これを正確に参照します。rdf:ID 属性がこの目的に適います。これは、参照先が明らかなことを保証するために、ファイル内とあなたのコンテンツパックのデータソース内でユニークであるべきです。
<rdf:li><rdf:Description rdf:ID="foo" nc:link="foo.html" nc:title="Foo"/></rdf:li>
続いて、次の内容を rdf:Description 要素のすぐ後に追加してください:
<rdf:Description rdf:about="#foo">
<nc:subheadings>
<rdf:Seq>
<rdf:li><rdf:Description rdf:ID="bar" nc:link="bar.html" nc:title="bar"/></rdf:li>
</rdf:Seq>
</nc:subheadings>
</rdf:Description>
rdf:about の値が異なることを除けば、これは最上層のエントリ定義とほぼ同じように見えます。違いは RDF の動作結果にあります。RDF 内のデータはデータを記述します。最上層のエントリは urn:root のようにroot ノードを記述し、入れ子状のエントリは他のエントリを記述します。エントリを参照するには、ユニークな rdf:ID 属性をもつエントリを渡します。そして、エントリを記述するには、rdf:about 属性に参照先のエントリの rdf:ID の値を # プレフィックス付きで設定します。
上記のような入れ子状の記述は、エントリの階層の深さに関係なく、全く同様に動作します。入れ子は、理論上いくつ階層があっても動作しますが、実用的な入れ子の制限はおよそ 20 階層です。もし、この制限に近くなってしまうような場合は、そこまで入れ子状にする必要があるのかよく考えてください。
目次ファイルは、作成するデータソースの中で最も重要です。ヘルプビューアは、ビューアを開いたときに目次を表示します。ビューアのバージョンによっては、データソースの中で直接表示されるものは"これだけ"です。これは、ユーザに提供するヘルプの構造を表示する主な方法です。
目次はまたトピックの一覧を提供し、ビューアのためのホームページをそこから選びます。ホームページは、コンテンツパック記述子ファイル内に含まれた nc:defaulttopic 属性から、既定値である "welcome" が呼び出されます。この属性値は、ビューアが読み込まれたときに表示したいトピックの rdf:ID です。
目次データソースは索引データソースと全く同様なので、もし索引データソースを作成してあれば、それをそのまま変更無しで目次データとして使用することができます。目次を作成する方法については、用語集や索引データソースを作成するときの説明をご覧ください。
あなたのコンテンツパックでヘルプビューアを起動するには、ヘルプビューアを開くUI を提供する XUL ファイルに、chrome://help/content/contextHelp.js を読み込んでおく必要があります:
<script type="application/x-javascript"
src="chrome://help/content/contextHelp.js"/>
これにより、ビューアの機能のすべてにアクセスすることができます。ヘルプビューアを開くには openHelp() 関数を実行してください。これは JavaScript コマンドと全く同じように command 要素内や oncommand 属性、その他の場所に挿入することができます。引数を以下に記述します:
openHelp(aTopic, aContentPackSpec);
rdf:ID です。
これは Firefox がヘルプ文書を開く方法の例です:
openHelp('firefox-help', 'chrome://browser/locale/help/help.rdf');
Page last modified 07:10, 2007年6月9日 by Marsf