(デモページはこちらです)
デモページは ajax で実装しています。また、ウェブサービス API としても利用できます。
サーバ側の Perl/CGI とは、 POX over HTTPで通信します。
このページでは、HTTP POST メソッドで Perl/CGI を呼び出して、 結果を JavaScript で画面上に表示しています。
ウェブサーバ内で、ローマ字への変換処理を行い、 ルビ表示用の XML ファイルを生成します。
変換処理は、概ねパスポートの表記と同じ ヘボン式 となっています。
ただし、長音(訓令式の^記号)は処理しません。
かな→ローマ字変換は、自前のルーチン(Kana.pm内)で処理しています。
漢字→ローマ字変換は、 SKK 用の辞書ファイルを使用しています。 具体的には、SKK-JISYO.L SKK-JISYO.jinmei SKK-JISYO.geo SKK-JISYO.station
SKK-JISYO.propernoun を使用しています。 (詳細)
大学時代には Mule で SKK を使っていたので、それ以来です。w
辞書データファイルは、DB_File (Berkeley DB) 形式でサーバ上に保存しています。
453,936キーワード(単語)が登録されています。
NDBM_File はほぼ全ての Perl 実行環境で利用できますが、 exists 関数が使えないため、使用できませんでした。
SDBM_File は全ての Perl 実行環境で利用できますが、 サイズがDB_Fileの倍近くと大きく、動作も遅いため、使用できませんでした。
ちなみに 中国語バージョンでは 辞書データ格納に Storable モジュールを使用していましたが、 日本語では辞書が大きいためデータ全体の読み込み処理に数秒かかるため、 使用できませんでした。
韓国語バージョンは、辞書ファイルは使用していません。 (Unicode の文字コード番号で判定)
サーバ側 CGI の URL は
http://www.kawa.net/works/ajax/romanize/romanize.cgi
です。POST メソッドで以下の引数を指定してアクセスします。
mode=japanese&ie=文字コード&q=クエリ
日本語モードでは、mode=japanese または mode=kana です。 (省略不可)
入力する文字コードは、ie=UTF-8 のように指定できます。(省略時は UTF-8 とみなす)
クエリは、日本語文字列を URL エンコードした文字列を指定します。
サーバからのレスポンスは、POX (Plain Old XML/オレオレ言語) です。
<?xml version="1.0" encoding="UTF-8" ?> <ul> <li> <span title="ni">に</span> <span title="ho">ほ</span> <span title="n">ん</span> </li> </ul>
<ul> 要素がドキュメントルートです。
クエリ1行ごとに <li> 要素が登場します。
ひらがな・カタカナ1文字〜数文字ごとに <span> 要素が登場します。
その <span title="〜"> 属性として、ローマ字が入ります。
ひらがな・カタカナ以外の文字列については、 title 属性ナシの <span> 要素にそのまま入ります。
HTML 準拠の <ul> <li> <span> 要素のみを使用しているので、 そのコードのままブラウザで表示させようと思えば、表示できます。