Hippo2000 (2000/7/28)
HTTP::Negotiateモジュールなのです。
作者はGisle Aasさんです。メールで許可をいただきました。
choose - サービスするドキュメントの変数を選択する(HTTPコンテント・ネゴシエーション)
use HTTP::Negotiate;
# ID QS Content-Type Encoding Char-Set Lang Size $variants = [['var1', 1.000, 'text/html', undef, 'iso-8859-1', 'en', 3000], ['var2', 0.950, 'text/plain', 'gzip', 'us-ascii', 'no', 400], ['var3', 0.3, 'image/gif', undef, undef, undef, 43555], ];
@prefered = choose($variants, $request_headers); $the_one = choose($variants);
このモジュールは draft-ietf-http-v11-spec-00.ps chapter12で指定されたHTTPコンテント・ネゴシエーションの完全な実装を提供します。コンテント・ネゴシエーションはネゴシエートできる変数とさまざまなAccept*ヘッダ・フィールドの値の属性に基づいた、優先された内容表記の選択を許します。
変数は関数choose()の呼び出しにより、優先順序が並べられます。
最初のパラメータは選択される変数の配列へのリファレンスです。この配列の各要素は[$id, $qs, $content_type, $content_encoding, $charset, $content_language, $content_length] という値をもった配列です。その意味については以下で説明します。$content_encodingと$content_languageは1つのスカラ値または複数の値があれば配列へのリファレンスにすることができます。
2番目のオプションのパラメータはHTTP::HeaderまたはHTTP::Requestオブジェクトのどちらで、"Accept*"ヘッダが探されます。このパラメータがなければ、acceptの指定はCGI環境変数 HTTP_ACCEPT, HTTP_ACCEPT_CHARSET, HTTP_ACCEPT_ENCODING 、 HTTP_ACCEPT_LANGUAGE. によって初期化されます。
配列コンテキストでは、choose()は識別子/計算されたクォリティの組の変数のリストを返します。最も高いクオリティを先頭に、値はクオリティによりソートされます。計算されたクォリティが2つの変数で同じであれば、サイズによりソートされます(小さい方が先)。例:
(['var1' => 1], ['var2', 0.3], ['var3' => 0]);
クライアントに決して提供されなくても、ゼロのクオリティ変数が返されるリストに含まれることに注意してください。
スカラ・コンテキストでは最も高いスコアの変数の識別子を返すか、何もクオリティがゼロでなければ、undefを返します。
$HTTP::Negotiate::DEBUG 変数がTRUEに設定されれば、choose()の評価の間、多くのノイズがSTDOUTに生成されます。
変数は以下の値のリストにより説明されます。属性がおかしいか、その変数には当てはまらなければ変わりにundefを使ってください。
Source qualityは、コンテント・プロバイダによって図られ、オリジナルのソースからの劣化の量を表します。例えばJPEG形式の絵はXBM形式に変換されるとより低いqsを持ちます。ASCII-art表現に変換されるとさらに低いqsになります。しかしながらソースの関数であることに注意してください。−それがJPEG形式でキャプチャされたら、元のASCII-artのカケラのほうが品質として劣るかもしれません。qsの値はコンテント・プロバイダにより各変数が設定されなければなりません。qsに値が代入されなければ、デフォルトは一般的に"qs=1"です。
text/html text/html;version=2.0 text/plain image/gif image/jpg
gzip compress
us-ascii iso-8859-1 ... iso-8859-9 iso-2022-jp iso-2022-jp-2 iso-2022-kr unicode-1-1 unicode-1-1-utf-7 unicode-1-1-utf-8
languageタグはRFC-1766で定義されています。例えば:
no Norwegian en International English en-US US English en-cockney
以下のAccept*ヘッダはリクエストの中でコンテント優先順位を記述するために使われます。(この説明はdraft-ietf-http-v11-spec-00.psから取り出し編集したものです)
パラメータqはクオリティ要素を示すために使われます。これはユーザのそのメディア・タイプの範囲のための優先順位を表します。パラメータmbxはレスポンス・コンテントの受信可能な最大サイズを与えます。デフォルトの値はq=1でmbxは無限大です。Acceptがなければ、クライアントはすべてのメディア・タイプをq=1で受取ります。
例:
Accept: audio/*;q=0.2;mbx=200000, audio/basic
これは"私は(すべての大きさの)audio/basicを好みますが、もし利用できる一番よいものから80%クオリティが落ち、2000000バイトよりも小さいければ、すべてのaudioタイプを送信しなさい"という意味です。
Accept-Charset: iso-8859-1, unicode-1-1
例:
Accept-Encoding: compress, gzip
Accept-Language: no, en-gb;q=0.8, de;q=0.55
これは"私はノルウェー語を好みますが、しかし英国英語(British English)を(80%の理解度で)やドイツ語(55%の理解度で)も受取ります"ということを示します。
(原文のまま)
Copyright 1996, Gisle Aas.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
(原文のまま)
Gisle Aas <aas@sn.no>
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。