# 4.11 `stringprep` -- インターネットのための文字列調製

(ホスト名のような) インターネット上にある存在に識別名をつける際、 しばしば識別名間の ``等価性'' 比較を行う必要があります。 厳密には、例えば大小文字の区別をするかしないかいったように、 比較をどのように行うかはアプリケーションの領域に依存します。 また、例えば ``印字可能な'' 文字で構成された識別名だけを許可すると いったように、可能な識別名を制限することも必要となるかもしれません。

RFC 3454 では、インターネットプロトコル上で Unicode 文字列を ``調製 (prepare)'' するためのプロシジャを定義しています。文字列は 通信路に載せられる前に調製プロシジャで処理され、その結果ある正規化 された形式になります。RFC ではあるテーブルの集合を定義しており、 それらはプロファイルにまとめられています。各プロファイルでは、どの テーブルを使い、`stringprep` プロシジャのどのオプション部分が プロファイルの一部になっているかを定義しています。 `stringprep` プロファイルの一つの例は `nameprep` で、 国際化されたドメイン名に使われます。

`stringprep` は RFC 3453 のテーブルを公開しているに 過ぎません。これらのテーブルは辞書やリストとして表　現するには バリエーションが大きすぎるので、このモジュールでは Unicode 文字データベースを内部的に利用しています。モジュールソースコード 自体は `mkstringprep.py` ユーティリティを使って生成されました。

その結果、これらのテーブルはデータ構造体ではなく、関数として 公開されています。RFC には 2 種類のテーブル: 集合およびマップ、 が存在します。集合については、`stringprep` は ``特性関数 (characteristic function)'' 、すなわち引数が 集合の一部である場合に真を返す関数を提供します。マップに対しては、 マップ関数: キーが与えられると、それに関連付けられた値を返す関数、 を提供します。以下はこのモジュールで利用可能な全ての関数を列挙した ものです。

`in_table_a1`( | code)

  code がテーブル A.1 (Unicode 3.2 における未割り当てコード点: unassigned code point) かどうか判定します。

`in_table_b1`( | code)

  code がテーブル B.1 (一般には何にも対応付けられていない: commonly mapped to nothing) かどうか判定します。

`map_table_b2`( | code)

  テーブル B.2 (NFKC で用いられる大小文字の対応付け) に従って、 code に対応付けられた値を返します。

`map_table_b3`( | code)

  テーブル B.3 (正規化を伴わない大小文字の対応付け) に従って、 code に対応付けられた値を返します。

`in_table_c11`( | code)

  code がテーブル C.1.1 (ASCII スペース文字) かどうか判定します。

`in_table_c12`( | code)

  code がテーブル C.1.2 (非 ASCII スペース文字) かどうか判定します。

`in_table_c11_c12`( | code)

  code がテーブル C.1 (スペース文字、C.1.1 および C.1.2 の和集合) かどうか判定します。

`in_table_c21`( | code)

  code がテーブル C.2.1 (ASCII 制御文字) かどうか判定します。

`in_table_c22`( | code)

  code がテーブル C.2.2 (非 ASCII 制御文字) かどうか判定します。

`in_table_c21_c22`( | code)

  code がテーブル C.2 (制御文字、C.2.1 および C.2.2 の和集合) かどうか判定します。

`in_table_c3`( | code)

  code がテーブル C.3 (プライベート利用) かどうか判定します。

`in_table_c4`( | code)

  code がテーブル C.4 (非文字コード点: non-character code points) かどうか判定します。

`in_table_c5`( | code)

  code がテーブル C.5 (サロゲーションコード) かどうか判定します。

`in_table_c6`( | code)

  code がテーブル C.6 (平文:plain text として不適切) かどうか 判定します。

`in_table_c7`( | code)

  code がテーブル C.7 (標準表現:canonical representation として不適切) かどうか判定します。

`in_table_c8`( | code)

  code がテーブル C.8 (表示プロパティの変更または撤廃) か どうか判定します。

`in_table_c9`( | code)

  code がテーブル C.9 (タグ文字) かどうか判定します。

`in_table_d1`( | code)

  code がテーブル D.1 (双方向プロパティ ``R'' または ``AL'' を持つ文字) かどうか判定します。

`in_table_d2`( | code)

  code がテーブル D.2 (双方向プロパティ ``L'' を持つ文字) かどうか判定します。