Unicode版msearchのマニュアルです。動作環境などの仕様、インストール方法、インデックス作成方法、および機能の詳細について説明します。
Unicode版msearchの動作環境その他の仕様は以下の通りとなります。
本家版と同様にUnix系OS(CentOSなどのLinux系OS, FreeBSDなど)のみに対応しています。root権限は不要です。
Apacheのみ動作を確認しています。Windows+IISの環境では、おそらく動作しません。nginxは未確認です。
本家版msearchが動作するPerl(5.004以降)であれば、動作します。 Unicode対応のPerl(5.008等)でも動作します。jperlは動作不可です。
Jcode.pm、Encode::モジュール、nkf等の追加モジュール、追加ソフトウェアは不要です。 Unicode対応を含め必要なソフトウェアはすべて配布スクリプトの中に入っています。 配布スクリプト内にコンパイルを必要とするものはなく、 すべてがスクリプトとして動作しますので、 コンパイル・インストールといった作業そのものが不要です。 Perl5のモジュールの機能(拡張子が.pm)も使っていませんので、 モジュールそのものが使えないプロバイダ(ホスティング業者)のサーバーでも動作します。 (当初使っていたプロバイダ(@Nifty)のホームページスペースで動かせるようにするために、 こういう仕様になりました。というか、モジュールの機能が使えないので Unicode関連の機能をすべて自前で実装するはめになったというのが真相。)
MySQL、PostgreSQLなどのデータベースは不要です。データベースは元々使っていないので。
Apache+mod_perlで動作するかどうかは確認していないため、わかりません。
パソコンに加えて、フィーチャーフォン(ガラケー)、タブレット、スマートフォン(スマホ)に対応しています。 詳しくは、スマートフォン対応で。
インデックス化対象のファイルについて、シフトJIS、JIS、EUC-JP、UTF-8のエンコーディングには当然対応しています。 UTF-8のBOMはあってもなくても、どちらでもOKです。(個人的にはBOM有を推奨。) Webではあまり使われていないものの、UTF-16、UTF-32エンコーディングにも、 両方のバイトオーダー(ビッグエンディアン、リトルエンディアン)共に対応しています。 (UTF-16, UTF-32のBOMは必須です。) これら以外の対応エンコーディングについては、 対応しているエンコーディングをご覧ください。 検索結果画面(ヘルプ画面を含む)の文字コードは、UTF-8N(BOMなし)で固定(変更不可)です。
検索に対応しているファイル、すなわちインデックス化できるファイルは、HTML、PHP、XMLなどの、マークアップされたうえで、 タグなどで文字コードが指定されたファイルのみです。 HTMLなどでマークアップされていない、テキストファイル(プレーンテキスト、TEXT形式)についても、 インデックス化はできるものの、文字コードの判定を誤る可能性があること、 および言語情報を抽出できないために、そのファイル(ページ)が「言語:未確定」として扱われることにご注意ください。 (ISO639-2にて規定されている言語コード"und"をインデックスに記録します。Undeterminedの略です。) この場合「検索対象言語:すべての言語」のみで検索可能です。
CGIなどで動的に生成されるページについては、インデックス化できません。 またPHPファイルについては、HTMLで記述された部分のみインデックス化され、 PHP言語で記述された部分(動的に生成される部分)はインデックス化できません。
なお、Word、PDFなどのバイナリファイル、およびZIP形式(電子書籍で使われるEPUB形式も含む)などで アーカイブされたファイルの中身をインデックス化することはできません。
なお、UTF-16およびUTF-32エンコーディングのファイルは、正確にはバイナリファイルになりますが、 HTML、XMLなどでマークアップされたうえで文字コードが指定されていれば、問題なくインデックス化されます。
Unicode版msearchは、事前に検索用のインデックスファイルを作成した上で、 そのインデックスファイルに対して検索を行います。
インデックスファイルには、検索対象全ファイルの中身(HTMLタグなどは取り除かれている)が そのまま含まれています。 検索時には、そのインデックスファイルに対してGREP検索(パターンマッチ動作)をかけることで 検索を行います。
GREP検索は遅いというイメージがあるものの、インデックスファイルに 対して検索をかけることにより、個々の検索対象ファイルを逐次GREP検索していくタイプの検索エンジンよりも 高速に動作します。
ただし、検索といってもあくまでもGREP検索(パターンマッチ動作)を行うだけであり、 検索キーワードとの関連性、検索キーワードの出現頻度などを 考慮した検索を行うことはできません。 そのため、例えば「京都」で検索すると、「京都府」だけでなく「東京都」にも ヒットしてしまうという弱点もあります。
Unicode版msearchは、インデックスをUTF-8で作っており、 基本多言語面(BMP)を含む全Unicode文字(U+0000からU+10FFFFまで)での 検索および検索結果表示に対応しています。 なので、JIS X 0208(JIS基本漢字)に規定されているJIS第1水準漢字、JIS第2水準漢字、 およびJIS X 0213(JIS拡張漢字、特にJIS X 0213:2004、いわゆるJIS2004)に 規定されているJIS第1水準漢字、JIS第2水準漢字、JIS第3水準漢字、JIS第4水準漢字は、 すべてUnicodeに収録されているので取り扱えます。 JIS X 0212(JIS補助漢字)に規定されている漢字もUnicodeに収録されているので 取り扱えます。 2010年11月30日内閣告示の新常用漢字表、法務省が定めている人名用漢字についても、 すべてUnicodeに収録されているので、取り扱えます。 Unicode版msearchは、UTF-16のサロゲートペア(surrogate pair)、UTF-8の4バイトでのエンコーディングにも 対応していますので、シフトJIS、EUC-JPで扱えないような 文字、例えば、𠮟(U+20B9F, 口へんに七)、剝(U+525D, 剥の旧字)、といった文字も 叱(U+53F1)、剥(U+5265)といった文字と区別して検索、検索結果表示できます。 ただし、IVS(Ideographic Variation Sequence。異体字セレクタ、Variation Selectorともいう)については、 異体字セレクタを含めて検索する、すなわち異体字セレクタの付いた異体字は区別して検索する、という仕様になっています。
Unicode版msearch開発にあたって参照したUnicodeのエディションは、Unicode 4.0です。
Unicode版msearch開発当時は、全Unicode文字を含んだフォントは存在していなかったものの、 「全Unicode文字(U+0000からU+10FFFFまで)での検索・検索結果表示に対応」を謳うために、以下の手順でテストを行っています。
漢字以外の文字、特に世界中の諸言語で扱われている諸文字についても、同様に取り扱えます。 ただし、合成文字には対応していません。 Unicode制御文字については、 U+2028(LINE SEPARATOR), U+2029(PARAGRAPH SEPARATOR)には対応していますが、それ以外の制御文字には対応していません。 本Unicode版msearchは単にUnicodeでインデックスを作成して検索できるだけのものであり、制御文字を解釈する機能は備えていません。
(本稿の記述に際して、 新常用漢字が引き起こす文字コード問題、 常用漢字・人名用漢字とUnicode を参考にさせていただきました。)
右から左に表記する言語(アラビア語、ペルシア語、ヘブライ語など)においては、 書記方向の制御文字などには対応していません。 合成文字を使う言語(インド圏の諸言語など)にも完全には対応していません。 これらの言語においては、検索対象ファイル内の文字を出現するそのままの順序でインデックス化し、検索できるだけであるとお考えください。
以下の説明は、本家版msearchの導入方法について知識があることを前提としています。 本家版msearchと msearch導入記を 読んでおいてください。
msearchを設置する前に確認すべき事項があります。
msearchを設置しようとするサーバーについて、以下の事項を確認してください。
プロバイダ(ホスティング)業者によっては, 業者が用意したCGIの設置しか認めていない場合があります。 また自作CGI(カスタムCGI)の設置を認めている業者であっても, 全文検索CGI(検索系CGI)の設置を認めていない場合があります。 これは, アクセスカウンター, 掲示板などのCGIと比べて, 全文検索CGIはサーバー負荷が高くなる傾向があるためです。 (業者によっては, 全文検索CGIの設置を認めず, その代わりに全文検索機能を提供している場合があります。) 必ず上記事項を事前に確認してください。
msearchをダウンロードして、解凍します。
必ず利用規定に同意してからダウンロードしてください。 ファイルはZIP形式で圧縮されており、 解凍すると以下のファイルが出てきます。
ファイル名 | 内容 |
---|---|
genindex.cgi | サーバーでインデックスを作成するためのCGI |
genindex.pl | ローカル環境でインデックスを作成するためのPerlスクリプト |
indexing.pl | インデックス作成ライブラリ |
msearch.cgi | 検索エンジン本体 |
default.cfg | 設定ファイルの例(パソコン用) |
mobile.cfg | 設定ファイルの例(携帯電話(フィーチャーフォン)用) |
sphone.cfg | 設定ファイルの例(スマートフォン(スマホ)用) |
judgeua.pl | 携帯電話の種類を判定するためのライブラリ |
jcode.pl | 歌代和正氏作の日本語文字コード変換ライブラリ |
allow.pl | インデックスと設定ファイルをmsearch設置ディレクトリ以外に置くための設定ファイル(上級者用) |
utfjp.pl | 日本語文字コードとUnicode間の文字コード変換ライブラリ |
utfjpent.txt | 文字実体参照名とUnicode間のマッピングテーブル |
utfjpmap.txt | 日本語文字コードとUnicode間のマッピングテーブル |
utfjpsupフォルダ内のファイル | 各種文字コードとUnicode間のマッピングテーブル |
msearchの各ファイルを編集します。
設定の変更を行うためには、Unicode(UTF-8)及びEUC漢字コードに対応したテキストエディタが必要です。 各ファイルについて、以下の項目を修正します。
ファイル名 | 修正項目 |
---|---|
genindex.cgi | 先頭行のPerlへのパスをサーバーの設定に合わせて書き換えます。 |
genindex.cgi | 変数$g_passwordの値を書き換えます。インデックス作成時のパスワードです。必ず書き換えます。 |
msearch.cgi | 先頭行のPerlへのパスをサーバーの設定に合わせて書き換えます。 |
default.cfg | 「1.変数の設定」の$homeをあなたのホームページのURLに書き換えます。 |
mobile.cfg | 「1.変数の設定」の$homeをあなたのホームページのURLに書き換えます。 |
sphone.cfg | 「1.変数の設定」の$homeをあなたのホームページのURLに書き換えます。 |
基本的にこれだけ修正すれば事足ります。
いよいよmsearchをサーバーへアップロードして、設置します。
まずサーバー上にmsearch設置用のフォルダを作成します。フォルダは他のCGIスクリプトと共有せず、必ずmsearch専用としてください。 なおCGIの設置条件は事前に確認しておいてください。サーバーによっては特定の条件を満たすフォルダにしかCGIを設置できない場合があります。
作成したこのフォルダのパーミッションを設定します。下記表の「msearch.cgiを置くフォルダ」の設定例を参考にしてください。
FTPソフト等を用いて、このフォルダに各ファイル及びutfjpsupフォルダをアップロードします。 アップロード時、FTPソフトで文字コードの変換は行わないでください。 FTPソフトによっては、アスキーモードをテキストモードと呼称することもありますが、いずれも同じ意味です。
アップロード後、パーミッションを以下のように設定します。 なお以下のパーミッション設定は一例です。サーバー環境によっては異なる値に設定する必要があります。 特にsuEXEC, もしくはCGIWrapという仕組みを導入しているサーバーの場合、下記設定では動かない可能性が高いです。 どのように設定すればよいのかについては、プロバイダー(ホスティング)業者に問い合わせてください。
ファイル名、もしくはフォルダ名 | エディタで編集・保存する時の | FTPソフトの転送モード | パーミッション | |
---|---|---|---|---|
文字コード | 改行コード | |||
msearch.cgiを置くフォルダ | - | - | - | 644 |
genindex.cgi | EUC | LF | アスキー | 755 |
genindex.pl | EUC | LF | 通常アップロードする必要はありません。サーバーのシェル環境でインデックスを作る場合のみアップロードしてください。 | |
indexing.pl | EUC | LF | アスキー | 644 |
msearch.cgi | EUC | LF | アスキー | 755 |
default.cfg | UTF-8 | LF | アスキー | 644 |
mobile.cfg | UTF-8 | LF | アスキー | 644 |
sphone.cfg | UTF-8 | LF | アスキー | 644 |
judgeua.pl | EUC | LF | アスキー | 644 |
jcode.pl | 変更しないでください。 | アスキー | 644 | |
allow.pl | EUC | LF | 必要な場合のみ「アスキー 644」でアップロードしてください。 | |
utfjp.pl | EUC | LF | アスキー | 644 |
utfjpent.txt | EUC | LF | アスキー | 644 |
utfjpmap.txt | EUC | LF | アスキー | 644 |
utfjpsupフォルダ | - | - | - | 644 |
utfjpsupフォルダ内のファイル | EUC | LF | アスキー | 644 |
サーバーに設置したmsearchをさっそく動作させてみます。ブラウザでmsearch.cgiとgenindex.cgiを開いてください。 どちらもエラーが出なければOKです。
インデックスを作成する方法は大別して2種類あります。Webブラウザからgenindex.cgiを用いて作成する方法、 およびバッチファイル(Windows)もしくはシェルスクリプト(Unix)でgenindex.plを用いて作成する方法です。 方法は別項で詳述します。(Webブラウザから作成、(Windows)バッチファイルで作成、 (Unix)シェルスクリプトで作成)
Webブラウザを使ったインデックス作成がサーバーに過負荷をかけずに問題なく行え、 検索対象ページがすべてUnicode化(UTF-8化)されていて、 サーバーでシェルスクリプト、およびcron(クロックデーモン)の利用が 許可されている場合は、(Unix)シェルスクリプトで作成を参考に、 インデックス自動更新の設定を試すことをお薦めします。 Googleカスタム検索並みに手間のかからない運用が可能となります。
Webブラウザを使ったインデックス作成が失敗する場合は、 バッチファイル(Windows)もしくはシェルスクリプト(Unix)を使い、 ローカルでインデックスを作成してサーバーにアップロードするようにしてください。
ブラウザでmsearch.cgiを開いてください。ヘルプ画面が表示されるはずです。 この画面の検索窓に検索したい文字列を入力して検索ボタンを押せば、検索できます。
Unicode版msearchはインデックス型の検索エンジンですので、インデックスを作成した時点での 検索対象、すなわちHTMLファイルなどのファイルの中身で検索されます。 そのため、インデックスを作成した後で検索対象のHTMLファイルなどに変更があっても、 その変更はインデックスに自動では反映されません。 その度毎にインデックスを作り直す(更新する)必要があります。
既存のWEBページからmsearchの検索機能を使えるようにします。
検索フォームはUnicode形式(UTF-8など)のページに設置してください。 以下に例を示します。
<form action="/cgi-bin/msearch.cgi" accept-charset="utf-8"> 検索<br>>> <input type="text" size="40" name="query" value=""> <input type="submit" value="検索"> <a href="/cgi-bin/msearch.cgi">検索オプション</a> <input type="hidden" name="hint" value="ひらがな"> <input type="hidden" name="index" value=""> <input type="hidden" name="config" value=""> </form>
<form>タグのaccept-charsetは必ず"utf-8"にしてください。 msearch.cgiへのパス(色付き文字の箇所)は実際にmsearchをアップロードしたディレクトリを記述してください。 また文字コード判定用のヒント文字列(色付き文字の箇所)は必ず「ひらがなが連続で4文字以上」(清音, 濁音, 半濁音, 拗音, 促音, 撥音のみ。長音は不可。)にしてください。
検索フォームをSJIS,JIS,EUCのページに設置すると、以下の問題が発生することがあるので、検索フォームはUnicode形式(UTF-8など)のページに設置してください。
サイトへの設置が済んだら、自分でテスト検索して試すもよし、 サイト来訪者にアピールして使ってもらうもよし、 どんどん使ってみましょう。
Webブラウザからgenindex.cgiを用いてインデックスを作成する方法を説明します。 サーバー上のディレクトリ構成は以下のようになっているものとします。
【サーバーのディレクトリ構成例】 /usr/home | +-- marbacka | | +-- homepage / index.html | ...(その他のHTMLファイル) | +-- cgi-bin | | +-- msearch / genindex.cgi | indexing.pl | msearch.cgi | default.cfg | mobile.cfg | sphone.cfg | jcode.pl | utfjp.pl | utfjpent.txt | utfjpmap.txt | +------ utfjpsup / armscii8.txt geostd8.txt ibmcp0437.txt ...(その他のTXTファイル)
URLと上記ディレクトリとの関係は以下のようになっているものとします。 なおディレクトリの中にシンボリックリンクを含めないでください。
■HTMLファイル(index.htmlのあるURL, ディレクトリ) 公開サーバーのURL: http://www.foo.com/bar/ ディレクトリ: /usr/home/marbacka/homepage/ ■CGIファイル ローカルのURL: http://hpcgi.foo.com/bar/ ディレクトリ: /usr/home/marbacka/cgi-bin/
以下の項目が正しく設定されていることを確認してから Webブラウザを起動し、 http://hpcgi.foo.com/bar/msearch/genindex.cgi を開いてください。 msearch用インデックス作成フォームが表示されるはずです。
以下のように入力して、インデックス作成を開始します。
インデックス名: default 対象ディレクトリ: ../../homepage 対象ディレクトリのURL: http://www.foo.com/bar/ 対象ファイルの拡張子: .html,.htm,.php 非対象ディレクトリ: 非対象ファイル: 非対象キーワード: ランキング方法: URL昇順 alt文字の追加: 追加する
上記各項目について以下に説明します。
インデックス名とは、msearch.cgiが実際に検索を行うインデックスの名前です。インデックス名に拡張子.idxを付加したものが 実際のファイル名となります。msearch.cgiがデフォルトで検索対象とするインデックス名はdefaultです。msearch.cgiを呼び出す際に インデックス名を指定しなければ、デフォルトのインデックスであるdefaultを対象として検索を行います。インデックス名にdefault以外の 名前を使った場合で、そのインデックスを対象として検索を行うには、msearch.cgiを呼び出す際にインデックス名を指定する必要があります。 例えばインデックス名がswedenである場合は、"msearch.cgi?index=sweden"のように呼び出します。呼び出す際に拡張子.idxをつけないことに 注意してください。
対象ディレクトリとは、インデックスに登録するHTMLファイルのあるディレクトリです。ルートディレクトリからの絶対パス、 もしくはgenindex.cgiのあるディレクトリからの相対パスで指定します。上記例では、相対パスで指定しています。 この場合、genindex.cgiのあるディレクトリから2階層上がったところにあるhomepageという名前のディレクトリなので、 "../../homepage"と指定しています。
対象ディレクトリのURLでは、上記対象ディレクトリが実際にはどのようなURLで示されるのかを指定します。 上記例では、"../../homepage"がhttp://www.foo.com/barで示されることになります。例えば、../../homepage/index.htmlは、 http://www.foo.com/bar/index.htmlで示されることになります。
対象ファイルの拡張子は、インデックス化の対象とするファイルの拡張子を指定します。 デフォルトは".htm"と".html"で、この場合は空欄のままでもかまいません。 もしもこれら以外の拡張子を指定する場合は、デフォルトの".htm"と".html"を含めて、すべての拡張子を 指定する必要があります。上記例では、".htm"と".html"と".php"を指定しています。複数の拡張子を 指定する場合は半角のカンマで区切ります。
非対象ディレクトリには、対象ディレクトリよりも下にあるディレクトリの中で、インデックス化の対象から 外したいディレクトリを指定します。対象ディレクトリからの相対パスで指定します。半角カンマで区切って複数指定することも 可能で、ディレクトリ名の表記には正規表現も使えます。
非対象ファイルには、インデックス化対象のディレクトリ下にあるファイルの中で特定のファイルだけ インデックス化の対象から外す場合に使います。半角カンマで区切って複数指定することも可能で、 ファイル名の表記には正規表現も使えます。なお非対象ディレクトリにあるファイルは指定する必要ありません。
非対象キーワードには、検索対象から外したいキーワードを入れます。半角カンマで区切って複数指定することも可能です。 ここで指定したキーワードは検索結果の一部表示にも出てきません。ただし、タイトルに含まれる場合は表示されます。
ランキング方法では、検索結果の表示順序を指定します。
alt文字の追加では、imgタグ中のalt属性の文字列をインデックス化対象にするかどうかを指定します。 上記例では「追加する」と指定していますので、検索対象に含まれることになります。
入力を終えたら、「インデックス作成」ボタンを押します。問題なければ、以下のような画面が出てくるはずです。
インデックス作成を開始します ■■■既存のインデックスを読み込みます ■■■完了(0ファイル) ■■■インデックス化するファイルを収集しています ■■■完了(128ファイル) ■■■インデックスから削除(0ファイル) ■■■インデックスの更新(0ファイル) ■■■インデックスに追加(128ファイル) ■■■インデックスは最新です インデックス作成は完了しました
問題なければ、上記例であれば、genindex.cgiファイルがあるのと同じディレクトリにdefault.idxというファイルが出来ているはずです。
もしも途中で止まってしまうなど、Webブラウザからのインデックス作成が上手く行えない場合は、 後述する「バッチファイル(Windows)もしくはシェルスクリプト(Unix)を使って インデックスを作成する」方法を用いてインデックスを作成し、 サーバーにアップロードする方法を使ってください。
ローカルのWindowsマシンでコマンドウィンドウ(コマンドプロンプト)から genindex.plを用いてインデックスを作成します。 Perl(Version5以降)がインストールされている必要があります。 インストールされていない場合は、 ActivePerlなどのPerlをダウンロードしてインストールしてください。 その上で、以下のようなディレクトリ構成を想定します。
【Windowsマシンのディレクトリ構成例】 C:\ | +-- MyDocuments | | +-- homepage \ index.html | ...(その他のHTMLファイル) | +-- msearch \ genindex.pl | indexing.pl | jcode.pl | utfjp.pl | utfjpent.txt | utfjpmap.txt | +------ utfjpsup \ armscii8.txt geostd8.txt ibmcp0437.txt ...(その他のTXTファイル)
URLと上記ディレクトリとの関係は以下のようになっているものとします。 なおHTMLファイルとPLファイル(Perlスクリプトファイル)は必ず同じドライブに置いてください。
【URLとディレクトリとの関係】 ■HTMLファイル(index.htmlのあるURL, ディレクトリ) 公開サーバーのURL: http://www.foo.com/bar/ ディレクトリ: C:\MyDocuments\homepage ■CGIファイル ディレクトリ: C:\MyDocuments\msearch
まずコマンドウィンドウ(コマンドプロンプト,MS-DOSプロンプト)を起動します。ある場所は、 Windows95/98/98SE/NT4.0ではスタートボタン -> プログラム、 WindowsMe/2000/XPではスタートボタン -> プログラム -> アクセサリです。 WindowsVista/7/8/10では、エクスプローラでマイドキュメントを開き、Shitキーを押しながら マウスを右クリックして「コマンドウィンドウをここで開く」でコマンドウィンドウを開きます。 そして以下のように入力します。(色付き文字の箇所を入力し、ENTERキーを押します。)
C:\WINNT>cd \ C:\>cd MyDocuments C:\MyDocuments>cd msearch C:\MyDocuments\msearch>perl genindex.pl -s genindex.pl -- index generator for msearch Copyright (c) 2000-2003 Katsushi Matsuda. All Right Reserved. Display kanji code is SJIS インデックスの名前は? > default インデックス対象ディレクトリは?(必須) > ../homepage インデックス対象ディレクトリのURLは?(必須) > http://www.foo.com/bar/ インデックス対象ファイルの拡張子は?(必須) > .html,.htm 非インデックス対象ディレクトリは? > <- 何も入力せずにENTERキーだけを押す。 非インデックス対象ファイルは? > <- 何も入力せずにENTERキーだけを押す。 非インデックス対象キーワードは? > <- 何も入力せずにENTERキーだけを押す。 ランキング方法は? [1] 最終更新日時-降順 [2] 最終更新日時-昇順 [3] タイトル-降順 [4] タイトル-昇順 [5] URL-降順 [6] URL-昇順 [0] なし どれにしますか?[0~6] > 6 alt属性の文字をインデックスに含めますか? [1] 含める [0] 含めない どれにしますか?[0~1] > 0 インデックス作成を開始します ■■■既存のインデックスを読み込みます ■■■完了(0ファイル) ■■■インデックス化するファイルを収集しています ■■■完了(128ファイル) ■■■インデックスから削除(0ファイル) ■■■インデックスの更新(0ファイル) ■■■インデックスに追加(128ファイル) ■■■インデックスを保存しています ■■■完了(128ファイル) インデックス作成は完了しました C:\MyDocuments\msearch>
インデックスファイル(拡張子はidx)は、この場合はC:\MyDocuments\msearch内にできます。
ローカルでインデックスを作成する流れは以上のようになります。 ただインデックス作成時、毎回キー入力(上記画面の色付き文字の箇所)をするのは面倒です。 入力内容は毎回同じでしょう。 そこで、これを省略する方法も解説します。 まずキー入力内容の入ったテキストファイルを(色付き文字の部分のみ)作成します。 (各行頭の"1:"といった行番号は見やすくするために入れているもので、入力不要です。)
1:default
2:../homepage
3:http://www.foo.com/bar/
4:.html,.htm,.php
5:
6:
7:
8:6
9:0
テキストエディタを用いて、上記内容のテキストファイルを作成します。 行頭や行末に余分なスペースは入力しないでください。 ただし、5行目から7行目(空行)は忘れずに入れておいてください。(改行だけを入力しておきます。) 9行目の0の後には忘れずに改行を入力します。 作成したファイルを前述msearchディレクトリに、 keyinput.txtのファイル名で保存します。(文字コードはShift_JIS、改行コードはCR+LF) そして、以下のようにします。
C:\WINNT>cd \ C:\>cd MyDocuments C:\MyDocuments>cd msearch C:\MyDocuments\msearch>perl genindex.pl -s < keyinput.txt genindex.pl -- index generator for msearch Copyright (c) 2000-2003 Katsushi Matsuda. All Right Reserved. Display kanji code is SJIS インデックスの名前は? > インデックス対象ディレクトリは?(必須) > インデックス対象ディレクトリのURLは?(必須) > インデックス対象ファイルの拡張子は?(必須) > 非インデックス対象ディレクトリは? > 非インデックス対象ファイルは? > 非インデックス対象キーワードは? > ランキング方法は? [1] 最終更新日時-降順 [2] 最終更新日時-昇順 [3] タイトル-降順 [4] タイトル-昇順 [5] URL-降順 [6] URL-昇順 [0] なし どれにしますか?[0~6] > alt属性の文字をインデックスに含めますか? [1] 含める [0] 含めない どれにしますか?[0~1] > インデックス作成を開始します ■■■既存のインデックスを読み込みます ■■■完了(0ファイル) ■■■インデックス化するファイルを収集しています ■■■完了(128ファイル) ■■■インデックスから削除(0ファイル) ■■■インデックスの更新(0ファイル) ■■■インデックスに追加(128ファイル) ■■■インデックスを保存しています ■■■完了(128ファイル) インデックス作成は完了しました C:\MyDocuments\msearch>
この方法でも問題なくインデックスが作成されます。 この方法をさらに改良し、作業全体をバッチファイル化することで キー入力を完全に省略することもできます。 これについても解説します。 テキストエディタで以下の内容のファイルを作成し、 genindex.batのファイル名で上述msearchディレクトリに保存します。
@echo off
c:
cd \MyDocuments\msearch
perl genindex.pl -s < keyinput.txt
このバッチファイルをダブルクリックする等して実行すれば、 インデックスが作成されます。 完成したインデックスファイルは、サーバー上のmsearch.cgiがあるディレクトリにアップロードします。 インデックスファイルはUTF-8エンコーディングのテキストファイルなので、 テキストモード(アスキーモード)でアップロードしてください。
Unix系OS(Mac OS X, Linux, CentOS, FreeBSDなど)のマシン上で シェルスクリプトを用いてインデックスを作成します。
最初に、ローカルのマシン上で シェルスクリプトからgenindex.plを用いてインデックスを作成する方法を説明します。
ディレクトリ構成は以下のようになっているものとします。
【Unixマシンのディレクトリ構成例】 /usr/home | +-- marbacka | | +-- homepage / index.html | ...(その他のHTMLファイル) | +-- cgi-bin | | +-- msearch / genindex.pl | indexing.pl | jcode.pl | utfjp.pl | utfjpent.txt | utfjpmap.txt | +------ utfjpsup / armscii8.txt geostd8.txt ibmcp0437.txt ...(その他のTXTファイル)
URLと上記ディレクトリとの関係は以下のようになっているものとします。 なおディレクトリの中にシンボリックリンクを含めないでください。
【URLとディレクトリとの関係】 ■HTMLファイル(index.htmlのあるURL, ディレクトリ) 公開サーバーのURL: http://www.foo.com/~bar/ ディレクトリ: /usr/home/marbacka/homepage/ ■CGIファイル ディレクトリ: /usr/home/marbacka/cgi-bin/
以下の内容のテキストファイルを作成し、/usr/home/marbacka/cgi-bin/msearch内にautogenindex.shのファイル名で保存します。
#!/bin/sh
cd /usr/home/marbacka/cgi-bin/msearch
./genindex.pl <<EOM
default
../../homepage
http://www.foo.com/~bar/
.html,.htm
6
0
EOM
「.html,.htm」の行と「6」の行との間には、空の行(改行だけの行)が3行ありますので、間違えないようにしてください。 (この3行は、「非対象ディレクトリ」、「非対象ファイル」、「非対象キーワード」に対応します。) 以下の項目を確認・修正します。
いよいよ、インデックスを作成します。(色付き文字の箇所を入力します。)
% cd /usr/home/marbacka/cgi-bin/msearch % ./autogenindex.sh genindex.pl -- index generator for msearch Copyright (c) 2000-2003 Katsushi Matsuda. All Right Reserved. Display kanji code is EUC インデックスの名前は? > インデックス対象ディレクトリは?(必須) > インデックス対象ディレクトリのURLは?(必須) > インデックス対象ファイルの拡張子は?(必須) > 非インデックス対象ディレクトリは? > 非インデックス対象ファイルは? > 非インデックス対象キーワードは? > ランキング方法は? [1] 最終更新日時-降順 [2] 最終更新日時-昇順 [3] タイトル-降順 [4] タイトル-昇順 [5] URL-降順 [6] URL-昇順 [0] なし どれにしますか?[0~6] > alt属性の文字をインデックスに含めますか? [1] 含める [0] 含めない どれにしますか?[0~1] > インデックス作成を開始します ■■■既存のインデックスを読み込みます ■■■完了(0ファイル) ■■■インデックス化するファイルを収集しています ■■■完了(128ファイル) ■■■インデックスから削除(0ファイル) ■■■インデックスの更新(0ファイル) ■■■インデックスに追加(128ファイル) ■■■インデックスを保存しています ■■■完了(128ファイル) インデックス作成は完了しました % ls -laF total 670 drwxrwxrwx 3 root marbacka 512 May 5 00:00 ./ drwxr-xr-x 3 marbacka marbacka 512 May 5 00:00 ../ -rwxr-xr-x 1 marbacka marbacka 128 May 5 02:00 autogenindex.sh* -rw-r--r-- 1 marbacka marbacka 37898 Apr 15 00:00 default.cfg -rw-r--r-- 1 marbacka marbacka 135433 May 5 02:00 default.idx <- できている。 -rwxr-xr-x 1 marbacka marbacka 30635 Apr 15 00:00 genindex.cgi* -rwxr-xr-x 1 marbacka marbacka 5421 Apr 15 00:00 genindex.pl* -rw-r--r-- 1 marbacka marbacka 26857 Apr 15 00:00 indexing.pl -rw-r--r-- 1 marbacka marbacka 21093 Apr 15 00:00 jcode.pl -rw-r--r-- 1 marbacka marbacka 20030 Apr 15 00:00 mobile.cfg -rwxr-xr-x 1 marbacka marbacka 52436 Apr 15 00:00 msearch.cgi* -rw-r--r-- 1 marbacka marbacka 74669 Apr 15 00:00 sphone.cfg -rw-r--r-- 1 marbacka marbacka 87454 Apr 15 00:00 utfjp.pl -rw-r--r-- 1 marbacka marbacka 9578 Apr 15 00:00 utfjpent.txt -rw-r--r-- 1 marbacka marbacka 240923 Apr 15 00:00 utfjpmap.txt drwxr-xr-x 2 marbacka marbacka 1536 May 5 00:00 utfjpsup/ %
シェルスクリプトからgenindex.plを用いてインデックスを作成することができました。 完成したインデックスファイルは、サーバー上のmsearch.cgiがあるディレクトリにアップロードします。 インデックスファイルはUTF-8エンコーディングのテキストファイルなので、 テキストモード(アスキーモード)でアップロードしてください。
このスクリプトをcron(クロックデーモン)を用いて サーバー上で定期的(例:1日に1回(毎日朝3時)とか)に自動実行させるように設定すれば、 インデックスを自動更新させることも可能です。
msearch.cgiのオプション機能として、 検索キーワードをログとして取得することができます。 初期設定は「ログを取得しない」になっています。 ログを取得するには、msearch.cgiをテキストエディタで開き、以下のように修正します。
ログ取得のために変更する箇所(msearch.cgi) [変更前(ログを取得しない)] $f_log = 0; [変更後(ログを取得する)] $f_log = 1;
ログを取得する設定にすると、msearch.cgiで検索する度に検索キーワード他の情報が msearch.cgiと同じディレクトリにあるmsearch.logというファイルに保存されていきます。
Unicode版msearchでは、検索オプションで検索対象言語を指定して検索することができます。 この機能を使うためには、検索対象ファイルに言語情報を記述する必要があります。 インデックス対象のHTML, XML(含 XHTML)ファイルについては、下記方法で言語コードを記すようにしてください。(色付き文字箇所) アルファベットの大文字・小文字は区別されません。 なおどの方法で指定する場合でも言語コードはカンマで区切って複数指定してもかまいません。(RFC-3282で規定されています。) 言語コードを複数指定した場合、すべての言語コードを認識します。(検索対象言語がいずれであっても検索対象になります。) 以下の表に掲げる複数の方法で同時に言語が指定された場合の優先順位は、<meta>タグ、<html>タグ、xml:lang属性です。 なお、記すのはRFC-1766("Tags for the Identification of Languages" 現在はRFC-3066)準拠の言語コードです。 言語コードのリストは言語コード表にあります。
指定方法 | 記述例 |
---|---|
<meta>タグ |
HTML, XHTMLで利用可能です。(Content-Languageも含め、必ず"で囲んでください。)
<meta http-equiv="Content-Language" content="ja"> |
<html>タグのlang属性 |
HTML, XHTML1.0で利用可能です。(必ず"で囲んでください。)この属性はXHTML1.1では利用できません。
<html lang="ja,sv"> |
任意のタグのxml:lang属性 |
XML(含 XHTML)で利用可能です。
任意のタグに指定できます。
複数のタグで指定されている場合、最初の指定のみが有効になります。
<文書 xml:lang="ja"> <html xml:lang="ja-JP,sv-SE">XMLで使う場合でDTDでの宣言が必要な場合は、XML 1.0仕様書の"2.12 Language Identification"を参考にしてください。 |
各検索対象ファイルには文字コードを必ず記述するようにしてください。 特に日本語以外のファイル(ISO8859など)では記述されていないと正しく検索できません。 文字コード毎に満たすべき条件を以下に記します。 この条件を満たさないファイルについては、検索結果表示時に文字化けするか、 もしくは検索されない(ヒットするはずなのにヒットしない)可能性があります。
文字コード | 条件 |
---|---|
Shift_JIS |
HTMLの場合:
<meta>タグで文字コードを指定してください。(必ず"で囲んでください。)
<meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="Shift_JIS" ?>間違ってShift-JISとしないように注意してください。ハイフンではなくアンダーバーです。 |
JIS |
HTMLの場合:
<meta>タグで文字コードを指定してください。(必ず"で囲んでください。)
<meta http-equiv="Content-Type" content="text/html;charset=ISO-2022-JP">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="ISO-2022-JP" ?> |
EUC-JP |
HTMLの場合:
<meta>タグで文字コードを指定してください。(必ず"で囲んでください。)
<meta http-equiv="Content-Type" content="text/html;charset=EUC-JP">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="EUC-JP" ?>間違ってEUC_JPとしないように注意してください。アンダーバーではなくハイフンです。 |
UTF-8 |
HTMLの場合:
<meta>タグで文字コードを指定してください。(必ず"で囲んでください。)
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">HTML5の場合: <meta>タグで文字コードを指定してください。(必ず"で囲んでください。) <meta charset="UTF-8">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="UTF-8" ?> |
UTF-16LE Unicode |
BOM付きで保存されていること。 HTMLの場合: <meta>タグで文字コードを指定してください。(必ず"で囲んでください。) <meta http-equiv="Content-Type" content="text/html;charset=UTF-16LE">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="UTF-16LE" ?> |
UTF-16BE Unicode(big endian) |
BOM付きで保存されていること。 HTMLの場合: <meta>タグで文字コードを指定してください。(必ず"で囲んでください。) <meta http-equiv="Content-Type" content="text/html;charset=UTF-16BE">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="UTF-16BE" ?> |
UTF-32LE Unicode |
BOM付きで保存されていること。 HTMLの場合: <meta>タグで文字コードを指定してください。(必ず"で囲んでください。) <meta http-equiv="Content-Type" content="text/html;charset=UTF-32LE">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="UTF-32LE" ?> |
UTF-32BE Unicode(big endian) |
BOM付きで保存されていること。 HTMLの場合: <meta>タグで文字コードを指定してください。(必ず"で囲んでください。) <meta http-equiv="Content-Type" content="text/html;charset=UTF-32BE">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="UTF-32BE" ?> |
上記以外 |
HTMLの場合:
<meta>タグで文字コードを指定してください。(必ず"で囲んでください。)
<meta http-equiv="Content-Type" content="text/html;charset=Windows-1252">XHTML,XMLの場合: XML宣言で文字コードを指定してください。 <?xml version="1.0" encoding="Windows-1252" ?> |
<msearch>タグを使うと、HTML, XHTML文書の特定の領域をインデックス化されないようにすることができます。 サンプルを以下に記します。
<html> <body> <p>インデックス化される文章です。</p> <msearch><p>インデックス化されない文章です。</p></msearch> <p>インデックス化される文章です。</p> </body> </html>
<msearch>タグで囲まれた領域はインデックス化対象から除外されます。上記例では、 「インデックス化されない文章です。」はインデックス化されません。 「インデックス化される文章です。」はインデックス化されます。 <msearch>タグを挿入しても、Webブラウザの表示に影響を及ぼすことはありません。(「インデックス化されない文章です。」も表示されます。) タグの挿入個数に制限はありませんが、タグの入れ子関係を崩さないように挿入してください。
msearch.cgiの引数の一覧を記します。
引数名 | 説明 |
---|---|
query |
検索式(検索窓に入力した文字列)はこの引数に与えます。 query引数に空でない文字列を与えてmsearch.cgiを実行すると検索を行います。 query引数に空の文字列を与える、もしくは引数そのものを与えなかった場合は、検索オプション(ヘルプ)画面を表示します。 query引数に与えられた文字列は検索実行後にフォーマット変数$$query$$に引き継がれるので、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 |
num |
検索結果画面で1ページに表示する検索結果の件数を定めます。 num引数を省略した場合はデフォルト値(10)が使われます。0を与えると全件表示になりますが、これは設定しない方が無難でしょう。(ヒット件数が何百件にもなった時大変なので。) num引数に与えられた値は検索実行後にフォーマット変数$$rpp$$に引き継がれるので($$num$$でないことに注意)、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 |
set | 検索結果画面の何ページ目を表示させるのかを定めます。 先頭ページは1です。 |
index |
どのインデックスファイルで検索を行うのかを定めます。 例えばsweden.idxなるインデックスファイルで検索する場合は、"sweden"を与えます。(拡張子.idxが付かないことに注意) index引数に空の文字列を与える、もしくは引数そのものを与えなかった場合は、デフォルトのインデックスファイル(default.idx)で検索を行います。 index引数に与えられた文字列は検索実行後にフォーマット変数$$index$$に引き継がれるので、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 ファイル名に使える文字は英数字のみです。記号類は使えません。 本引数を使う場合、次節「インデックスと設定ファイルの切替機能を使う」も参照してください。 |
config |
どの設定ファイル(拡張子.cfg)で検索結果画面・検索オプション画面表示を行うのかを定めます。 例えばsweden.cfgなる設定ファイルを使う場合は、"sweden"を与えます。(拡張子.cfgが付かないことに注意) config引数に空の文字列を与える、もしくは引数そのものを与えなかった場合は、デフォルトの設定ファイル(default.cfg)を使います。 config引数に与えられた文字列は検索実行後にフォーマット変数$$config$$に引き継がれるので、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 ファイル名に使える文字は英数字のみです。記号類は使えません。 本引数を使う場合、次節「インデックスと設定ファイルの切替機能を使う」も参照してください。 |
hint |
文字コード判定を間違いなく確実に行うためのヒント文字列を与えます。 検索を行う場合この引数は必ず与えてください。(検索オプション(ヘルプ)画面を表示する場合は省略可能) 与える文字列は必ず「ひらがなが連続で4文字以上」(清音, 濁音, 半濁音, 拗音, 促音, 撥音のみ。長音は不可。)にしてください。 長くしても意味がないので、必要最小限の「ひらがな4文字」でかまいません。 |
lang |
検索対象とする言語の言語コードと検索結果画面に表示する言語名を与えます。 言語名は設定ファイルの検索結果画面のフォーマット変数$$langname$$に入ります。 例えば「日本語のページを対象として検索し、検索結果画面に言語名を『日本語』と表示する」のであれば、 "ja;日本語"を与えます。("ja"と"日本語"を半角セミコロンで区切って並べます。) 複数の言語コードを記述する時は半角カンマで区切ります。(与える言語コードの数に制限はありません) 例えば「日本語とスウェーデン語のページを対象として検索し、検索結果画面に言語名を『日本語とスウェーデン語』と表示する」のであれば、 "ja,sv;日本語とスウェーデン語"を与えます。 lang引数に空の文字列を与える、もしくは引数そのものを与えなかった場合は、 全言語を対象とした検索を行います。この場合の検索結果画面に表示する言語名は設定ファイルのフォーマット変数$alllangに従います。 "all;全言語"を与えた場合も、全言語を対象とした検索を行います。(もちろん言語名は『全言語』以外でも可能) lang引数に与えられた文字列は検索実行後にフォーマット変数$$lang$$に引き継がれるので、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 なお、サフィックスの付いた言語コードと付かない言語コードとは完全に区別されるので、 サフィックスの付いた言語コードのページをサフィックスの付かない言語コードで検索することはできません。 例えばzh-CN(中国)とzh-TW(台湾)をzhで一括検索することはできません。 zh-CNのページはzh-CNでなければ検索できず、zh-TWについても同様です。 なお記すのはRFC-1766("Tags for the Identification of Languages" 現在はRFC-3066)準拠の言語コードです。 言語コードのリストは言語コード表にあります。 |
period |
今日を起点として何日以内に更新されたファイルを検索するのか、及び検索結果画面に表示する検索対象期間名を与えます。 検索対象期間名は設定ファイルの検索結果画面のフォーマット変数$$periodname$$に入ります。 例えば「7日以内に更新されたファイルを対象として検索し、検索結果画面に検索対象期間名を『7日以内に更新された』と表示する」のであれば、 "7;7日以内に更新された"を与えます。("7"と"7日以内に更新された"を半角セミコロンで区切って並べます。) 更新日時に関係なくすべてのファイルを検索するには負数を与えます。例えば"-1;更新日時に関係なく"を与えます。 本日のみを対象とする場合はゼロを与えます。例えば"0;本日更新された"を与えます。 period引数に空の文字列を与える、もしくは引数そのものを与えなかった場合は、 更新日時に関係なく検索を行います。この場合の検索結果画面に表示する検索対象期間名は設定ファイルのフォーマット変数$allperiodに従います。 period引数に与えられた文字列は検索実行後にフォーマット変数$$period$$に引き継がれるので、設定ファイルの検索結果画面HTMLに記述することで次の検索へ引き継ぐことができます。 |
インデックスと設定ファイルを複数使う場合、 msearch.cgiの引数indexでインデックスを指定し、 引数configで設定ファイルを指定するわけですが、 インデックスと設定ファイルはmsearchを設置したディレクトリにしか置くことができません。(Version 1.52(U1)以降のみ。セキュリティ上の理由による。)
msearch設置ディレクトリ以外に置きたい場合は、 以下のようにする必要があります。
1. msearch.cgiをエディタで開き、323行目(Version 1.52(U1)の場合)付近を見る。
### インデックスと設定ファイルを確定する #require './allow.pl'; identifyindex();
こうなっているのを以下のように修正する。(requireが記述された行の行頭の#を削除する。)
### インデックスと設定ファイルを確定する require './allow.pl'; identifyindex();
2. allow.plをエディタで開き、以下のような箇所を探す。
### インデックスと設定ファイルを置くことを許可するディレクトリの一覧 ### 必ず,"/"で終了して下さい. @g_allow = ( "./", # これは必ず残しておいて下さい "testdir/", );
インデックスと設定ファイルを置くディレクトリを msearch.cgi設置ディレクトリからの相対パスで上記箇所に記します。 以下のような場合を考えてみます。
■msearch.cgi設置ディレクトリ /cgi-bin/msearch/engine/msearch.cgi ■インデックス /cgi-bin/msearch/engine/other/other.idx /cgi-bin/msearch/scandinavia/sweden.idx /cgi-bin/msearch/scandinavia/norway.idx ■設定ファイル /cgi-bin/msearch/engine/other/other.cfg /cgi-bin/msearch/scandinavia/sweden.cfg /cgi-bin/msearch/scandinavia/norway.cfg
この場合はallow.plに以下のように記します。
### インデックスと設定ファイルを置くことを許可するディレクトリの一覧 ### 必ず,"/"で終了して下さい. @g_allow = ( "./", # これは必ず残しておいて下さい "other/", "../scandinavia/", );
上記設定でmsearch.cgi?index=swedenという呼び出しを行うと、 最初に"./"ディレクトリ(=msearch.cgi設置ディレクトリ)でsweden.idxを探し、 次に"other/"ディレクトリ(=/cgi-bin/msearch/engine/other/)でsweden.idxを探し、 最後に"../scandinavia/"ディレクトリ(=/cgi-bin/msearch/scandinavia/)でsweden.idxを探します。
設定ファイルの探し方はインデックスの場合と異なります。 msearch.cgi?index=swedenという呼び出しを行った場合、sweden.idxが見つかったディレクトリ内にsweden.cfgがある場合のみ、その設定ファイルを読み込みます。 もしもそのディレクトリ内にsweden.cfgがない場合は、msearch.cgi設置ディレクトリ内にあるdefault.cfgを読み込みます。
msearch.cgi?index=sweden&config=norwayのようにindex引数とconfig引数の両方を指定した場合、 及びmsearch.cgi?config=otherのようにconfig引数のみを指定した場合は、 上記のような動作はせずにallow.plに列挙されたディレクトリへ config引数で指定された設定ファイルを探しに行きます。
3. 修正したmsearch.cgiとallow.plをサーバーにアップロードする。
修正したmsearch.cgiとallow.plをサーバーにアップロードすれば作業は完了です。
インデックス化対象ファイル内の数値文字参照(Numeric Character References(NCRs), 例:" ")、 文字実体参照(Character entity references, 例:")はインデックス作成時に 文字そのものに置換され、検索時には参照している文字そのもので検索できます。 ただしUCNs(Universal Character Names, 例:¥u0022)は置換対象外です。 置換対象になるのは、HTML, XHTML, XMLファイル(文字コードは問いません)内に含まれる 上記文字参照です。ただし、< >は置換されません。 これは、本家版との互換性確保(兼 CrossSiteScripting対策)のためです。 なお16進数表記の場合, &#Xnn; &#xnn;のいずれの形式であっても置換されます。
なお、独自のDTD(Document Type Definition)を使用しており、その中で独自定義の 文字実体参照を使用している場合も、文字そのもので検索可能です。 utfjpent.txtに文字実体参照名とUnicodeコードポイント(文字番号)を記述してください。 ただし、XMLの一般実体(実体名で任意の長さの文字列を参照する記法)には対応していません。