Mozilla の検索機能


技術情報

Robert John Churchill (rjc@netscape.com)

ドキュメント作成日: 2000年4月6日

導入:

このドキュメントは Mozilla の中心的な検索機能を技術的な実装レベルから記 述しています。高レベルな、技術的でない概要は、 導入 を見てください。

概観:

Mozilla の中心的な検索機能は XPCOM コンポー ネントで、そのデータ貯蓄には RDF を、  ネッ トワークサポートに Necko を、  XUL/CSS & JavaScript をユーザー インターフェースに、そしてほんの少しの XPConnect を "glue (糊付け)" サポートに使っています。

LXR を通して Mozilla の中心的な検索コンポーネントの ソースコード を見ることができます。
 

新しい検索エンジンを追加するために JavaScript を使う

Mozilla の M15 リリースを皮切りに、新しい検索エンジンを加える(確認ダイア ログを通したユーザーの同意のもと)ために以下の JavaScript をウェブページ 上で使うことができるようになりました。
例: ここをクリックすることであなた のサイドバーの "Search" パネルに "mozilla.org" の検索エンジンを追加しま す
 
 

この JavaScript 関数をあなたの ウェブページに加えることで、訪れた人々が Mozilla であなたの検索エンジンを使うことを可能にします。
(Mozilla の "Search" サイドバーによる短縮された検索結果を含みます)

(エンジンの URL 、 アイコンの URL 、エンジンの名前、カテゴ リの名前は適切な値を使うようにしてください)
function addEngine()
{
    if ((typeof window.sidebar == "object") && (typeof window.sidebar.addSearchEngine == "function"))
    {
        window.sidebar.addSearchEngine(
            "http://www.mozilla.org/projects/search/mozilla.src",  /* engine URL */
            "http://www.mozilla.org/projects/search/mozilla.gif",  /* icon URL */
            "mozilla.org",                                         /* engine name */
            "Web" );                                               /* category name */
    }
    else
    {
        alert("Mozilla M15 or later is required to add a search engine.");
    }
}
注:
  • 検索エンジンのファイル名の拡張子は ".src" としてください。
  • 検索アイコンのファイル名の拡張子は後に続くもののうちの 1 つとしてください: ".gif", ".jpg",".jpeg", or ".png"
  • window.sidebar.addSearchEngine() 関数を使うとき、エンジンの URL とアイコ ンの URL のベースネーム(この例では "mozilla.src" と "mozilla.gif") は、 拡張子を除いて完全に一致しなければなりません。
  • "engine name" パラメータは確認ダイアログ(ユーザーが同意するためのもの)で 表示に使われるだけです。
  • "category name" が存在しないと、無視されます(注:この振る舞いは変更して、 カテゴリは代わりに作られるようになるかもしれません)

実装 - どのように働くか


あなたは Apple の Sherlock に 関する技術資料 のファイルを良く読んでおくべきです。   Mozilla は現在 "LDAP" のサポートを除く "Sherlock 2" 仕様バージョン 1.3 をサポー トしています。
 
 

Mozilla 拡張部分 - Sherlock 仕様に対する追加仕様

下記は "http://search.netscape.com/" にある Netscape の Netcenter 検索エ ンジンを使う検索ファイルの例です。
 
 
# Netscape Search - Sherlock Plug-in

<SEARCH
    name="Netscape"
    description = "Netscape Search"
    method="GET"
    action="http://search.netscape.com/cgi-bin/search"
    update="http://www.someurl.com/test.src.hqx"
    updateCheckDays="3"
>

<INPUT NAME="search" user>

<INTERPRET
    browserResultType = "category"
    bannerStart="<!--AD_TAG VENDOR=AOL WIDTH=468 HEIGHT=60-->"
    bannerEnd="<!--/AD_TAG-->"
    resultListStart = "Groups of reviewed web sites related to your search term."
    resultListEnd = "Web sites reviewed and categorized by a team of editors."
    resultItemStart = "<LI>"
    >

<INTERPRET
    browserResultType = "result"
    bannerStart="<!--AD_TAG VENDOR=AOL WIDTH=468 HEIGHT=60-->"
    bannerEnd="<!--/AD_TAG-->"
    resultListStart = "Web sites reviewed and categorized by a team of editors."
    resultItemStart = "<LI>"
    >

</SEARCH>
<BROWSER
        alsomatch="http://search.netscape.com/search.tmpl"
        update="http://www.someurl.com/test.src"
        updateIcon="http://www.someurl.com/test.gif"
        updateCheckDays="3"
>

これは Mozilla の Sharlock 仕様に対する拡張( 太字の赤の部分)だけでなく、複数の <INTERPRET> タグ ("Sherlock 2" 仕様で新たに認められた)の使い方を説明するよい例です。

<INTERPRET> セクション毎に、使用される検索結果の"タイプ"を指定する "browserResultType" 属性が追加されています。現在 2 つのタイプが定義され ています: "category" と "result" (指定されなかった場合のデフォルトのタイ プ)です。

"category" タイプは "Search" サイドバーパネルにフォルダアイコンで表示 されるのに対して、 "result" タイプは "Search" サイドバーパネルに検索エン ジンのブランドのアイコン/画像で表示されるでしょう。

<BROWSER> セクションでは "alsomatch" 属性を指定できます。   <SEARCH> セクションの "action" 属性とともに、この URL はブラウザウィ ンドウのコンテキスト領域に表示されている、現在の HTML ページと対応付けさ れ、その HTML が検索結果用かどうか、そして、サイドバーの "Search" パネル に短縮した検索結果を表示するために使われるかどうかを決定します。

Mozilla M17 で新しくなったこと:

また、 <BROWSER> セクションに "update" 、 "updateIcon" 、 "updateCheckDays" 属性が加わりました。仕様では "update" 属性は <SEARCH> セクションに定義されていますが、あいにくそれは Macintosh 特 有の binhex 化されたファイル(ファイルネームは ".src.hqx" でなければなら ない) でなければなりません。   プラットフォームに依存しないように、 Mozilla はテキストのみで、 binhex 化されていない ".src" 検索ファイルへの URL を代わりに <BROWSER> セクション内の "update" 属性を通して指定でき るようにし、加えて <BROWSER> セクションの "updateIcon" 属性(サポート されている画像フォーマットのどれかでなければなりません)を通して画像への 参照も可能です。ファイルの一貫性のために、 Mozilla は <BROWSER> セク ションの "updateCheckDays" 属性を調べます。これは、検索ファイルの変更を 何日で調べるかを指定します。

これらの属性が <BROWSER> セクションで指定されていなくても、 Mozilla は <SEARCH> セクションの "update" 属性を見て、もしそれが "src.hqx" で終っているなら、 Mozilla は ".hqx" を取り去ってチェックする URL として使うでしょう。それゆえ、例えば、もし <SECTION update=" http://www.someurl.com/test.src.hqx"> が指定されてたら、 Mozilla は URL " http://www.someurl.com/test.src" (.hqx が取 り除かれていることに注目)を調べます。  こうすることで、 Mozilla はウェブサイトが指定するのにテキストのみのファ イル同様 binhex 化されたファイルも使うことを可能とし、それで Mozilla 同 様に Mocintosh でも検索ファイルを使用することができます。  [注:こう するためには、両方のファイルを同期させておくことがウェブサイトの責任とな ります。]
 
 

追跡


サーチエンジンはしばしばそのサービスを介した検索を"追跡"する能力 を必要とします。   これを達成するために、ひとつの手段として <SEARCH> セクションの "action" 属性で指定された URL へのヒット数を記 録するというものがあります。   必要であれば、この URL には HTTP リ ダイレクションページを指すことができ、その時 <BROWSER> セクションの "alsomatch" 属性が"最終的な"目的の URL を含んでいます。[これでもしユーザー が直接"最終的な" URL へ行ったとしても(例えば、直接 URL をタイプしたりそ こへ連れて行くリンクをクリックしたりして)、問題の Sherlock ファイルはそ れでも"対応して"、検索サイドバーパネルはユーザーに便利なよう検索結果の短 縮リストを表示することができます。]

上記の "http://search.netscape.com/" にある Netscape の Netcenter 検 索エンジンを使った検索ファイルの例で、"action" 属性が action="http://search.netscape.com/cgi-bin/search" なことに気付 くでしょう。   もし、 HTTP リダイレクションをページカウントに使いたいなら(同時に直接 URL にヒットした正確なカウントも持っていて)、 "action" 属性は action="http://info.netscape.com/fwd/sidb_ns/http://search.netscape.com/cgi-bin/search" のような HTTP リダイレクションページにすることができ、また "alsomatch" 属性を最終的な目的の URL 、すなわち alsomatch="http://search.netscape.com/cgi-bin/search" に修正しま す。

注: <BROWSER> セクション内の "alsomatch" 属性は、それぞれ 1 つのス ペースで区切られたいくつかの URL を含むことがあります。これで、最終的に 目的の URL に解決される複数の URL を持つ複雑な検索エンジンを便利に使える ようにします。

マルチエンジン構想で、内部的な問題により検索エンジンは他の検索エンジ ンに送信された情報を知ることができません。例えば、もしユーザーが検索エン ジン "A" と "B" を使ったマルチエンジン検索をすることにしたとして、エンジ ン "B" はユーザーが同時に検索エンジン "A" を使ったことが分かりません。し かし、シングルエンジン検索とマルチエンジン検索を区別することはできます。 それはサーバーへの問い合わせで送信される HTTP リクエストが追加の HTTP ヘッ ダーで "MultiSearch: true" を持つからです。
 

一般的な問題 - 何がうまくいかなくてどうすれば修正できるか

 
Q:  "http://somerandomwebsite.com/" の 検索エンジンを使うと、 Mozilla のサイドバーの "Search" パネルに検索結果 が現れません。
A:  Mozilla がいつ短縮された検索結果を サイドバーの "Search" パネルに表示するかを決定するのは、ブラウザウィンド ウに表示されている現在の URL が、インストールされた全ての Sherlock ファ イル内の <SEARCH> セクションの "action" 属性と対応していることにより ます。   (上記の例だと、"http://search.netscape.com/cgi-bin/search" です)。   基本的に、インストールされた Sherlock ファイルはよく知ら れている検索エンジンのリストとして使います。  うまく動くようにするためには "http://somerandomwebsite.com/" のための Sharlock ファイルを見つけるか作るかする必要があります。 "http://somerandomwebsite.com/" にメールを送って、彼らに Sharlock ファイ ルを作り window.sidebar.AddSearchEngine() の JavaScript 関数(上記 してあります)を使って、彼らのサイトを訪れたユーザーが簡単に Mozilla のサ イドバーの "Search" パネルで検索エンジンを使えるようにしてほしいと頼んで みるのもよいでしょう。
Q:  どこに新しい Sherlock ファイルをイ ンストールしたらいいでしょうか?
A:  (Mozilla M15 ビルドの場合) Mozilla がインストールされたディレクトリ内の、 "res/rdf/datasets/" を見て、そこ に Sharlock ファイル(テキストフォーマットの) を置いてください。   同様にブランドの画像も加えることができます...ファイル名が ".gif" 、 ".jpg" 、 ".jpeg" 、 ".png" といった拡張子を除いて完全に同じであることを 確かめてください。

注:ディレクトリの場所は変更するかもしれません。

Q:  ウェブで Sharlock ファイルを見つけたのですが、それら は Mozilla でうまく動かないようです。
A:  Sherlock ファイルはウェブを通じて 利用可能になる前、しばしば "binhex 化 " されています。   まず これ らのファイルを "binhex を解除"しなければなりません。あなたが Mozilla に インストールする Sherlock ファイルは ".src" で終り、 Mozilla にインストー ルされる前にはテキストのみのファイルでなければなりません。

Macintosh ユーザ:様々な圧縮ユーティリティが "Binhex" ファイルをサ ポートしているため簡単です。
Windows/Unix プラットフォームのユーザ: "Binhex" 化されたファイルを解 釈できるユーティリティを探すかテキストのみのバージョンのファイルを捜し出 す必要があります。

Q:  "http://somerandomwebsite.com/" の ための Sherlock ファイルを追加したのですが、私がそのサイトで検索しても Mozilla は検索結果をサイドバーに表示しません。
A:  Sharlock ファイルを調べて、 <SEARCH> セクションの "action" 属性が検索の際に使われる公式の URL と 確かに対応しているか確認してください。

Sharlock ファイルによっては。あなたがブラウザを通してそのサイトを検索 する場合と異なったフォーマットで検索結果を返すような個人的な URL を使う ものがあります。これらの種類の Sherlock ファイルは Mozilla のサイドバー の "Search" パネルでうまく動きません。

Q:  window.sidebar.AddSearchEngine() の JavaScript 関数を使っているの ですが、 Sherlock ファイルのインストールに失敗するようです。
A:  エンジンとアイコンの URL が正しい か確かめてください。

注: Mozilla は現在 "http:" プロトコルを介したエンジンとアイコンのダウ ンロードのみをサポートしています。

Q:  送信する URL を検索エンジンが変更 したらどうなるのですか; Sherlock ファイルは時代遅れになってしまうのです か?
A:  もし、検索エンジンが送信する HTML のレイアウトやフォーマットを変更したなら、 Sherlock ファイルを更新する必 要があります。  Sherlock ファイルは <SEARCH> セクションの "update" 属性を( "updateCheckDays" に加えて) 指定していて、ファイルの更 新が無いか調べます。

注: Mozilla M15 ビルトはこれら "update" 属性をサポートしていません。 Mozilla M17 リリースでサポートが追加されました。

Q: なぜ <BROWSER> の "update" 、 "updateIcon" 、 "updateCheckDays" が拡張されたのですか?
A: Mozilla はたくさんの他のプラットフォーム をサポートするために、 Macintosh の BinHex フォーマットのサポートを内蔵 していません。binhex を自動的に解除してテキスト部分だけを使うこと は技術的には可能なのですが、それはブランドのアイコンのサポートはできませ ん。

上で述べられているように、 <BROWSER> 属性が全く指定されていなけれ ば、 Mozilla は <SEARCH> セクションの "update" 属性を使って、後ろに付 いている ".bqx" を URL から取り除いてそれを使おうとします。 こうすることで、 Mozilla はウェブサイトにテキストのみの 形式と同様に binhex 化されたファイルを提供することを可能にし、 Mozilla 同様に Macintosh でもその検索ファイルを使うことができます。

[注: これにより、両方のファイルを同期させておく ことはウェブサイト側の責任となります。]

お勧めは <SEARCH> の "update" 属性 (Macintosh の Binhex 化されたファイルを参照する) と <BROWSER> "update" (普通のテキストファイルを参照する) / "updateIcon" / "updateCheckDays" 属性の 両方 を指定しておくことです。そうすれば Macintosh でも他のプラットフォームでもハッピーになれるでしょう。


 

追加の参照:

Apple 開発者技術資料 1141: Sherlock の拡張と制御 -
http://developer.apple.com/technotes/tn/tn1141.html (英語)
http://developer.apple.com/ja/technotes/tn1141.html (日本語)