[76] PRECIS は、文字列の比較等の演算に関する IETF の仕様です。
[6] 「PRECIS」は、「preparation, enforcement, and comparison of internationalized strings」の意味です >>5。
[10] PRECIS は文字列に対する次のような演算を扱います。
[47] 準備、執行、比較について、 どの実体 (サーバーやクライアントなど) が責任を持つか、 具体的にいつ行うかは、 応用が規定する必要があります >>46。
[8] PRECIS では、文字列に対する操作の単位を規則と呼んでいます。 最低限の規則を文字列クラスと呼び、 それに更に規則を組み合わせたものをプロファイルと呼んでいます。
[52] 文字列クラスやプロファイルの規則は、 次の順序で適用しなければなりません >>51。
[61] 実際の各プロファイルは、執行や比較は準備の後に実行すると規定しています >>60, >>62, >>63, >>66。 これは >>52 の規定と矛盾しています。
[50] 応用は、文字列クラスやプロファイルから更に除外する符号位置を (符号位置や符号位置の特性を使って) 規定できます >>46。
[29] 文字列クラス >>13 は、挙動的規則を定めています。 その他の規則は、文字列クラスのプロファイル (>>32) で定めることになります。
[27] RFC 7564 は、 IETF の議論の結果としてこの2つの文字列クラスを規定していますが、 将来これ以外の文字列クラスを定義する可能性も排除はしていません >>13。
[26] IANA登録簿 >>54 も用意されています >>53。
[144] 各特性値を持つ符号位置の一覧が >>141、>>140 にあります。 JSON 形式のデータファイルが >>142 (説明が >>143) にあります。
[32] PRECIS文字列クラスのプロファイルは、 文字列クラスに更に規則を追加するものです。
[28] プロファイルは、幅写像規則、 追加写像規則 (あれば)、 大文字・小文字写像規則、 正規化規則、 方向性規則を定義しなければなりません >>31。
[57] プロファイルは、認められる文字を更に制限することができます >>31。
[58] しかし、文字列クラスで禁止されている符号位置を認めてはなりません >>31。
[34] 幅写像規則は、 文字列に対して幅写像を適用するかどうかと、 どのように写像するかとを規定するものです。 普通は、 Decomposition Type が Wide や Narrow の符号位置を、 分解写像へと写像するものです。 >>31
[35] NFKC や NFKD の場合は互換分解の一部として幅写像が行われるので、 プロファイルで規定する必要はありません。 >>31
[36] NFC を使う場合、普通は幅写像を使うべきです >>31。
[37] 追加写像規則は、
文字列中の区切り文字 (@
, :
, /
, +
,
-
など) や特殊文字 (非ASCIIの間隔 → U+0020
や制御文字 → なしなど)
について追加の写像を行うかどうかを規定するものです >>31。
[38] 大文字・小文字写像規則は、 文字列に大文字・小文字の写像を適用するかどうかやどう写像するかを規定するものです。 >>31
[39] 写像する場合には、 Unicode の Default Case Folding を使うべきです >>31。
[40] FreeformClass
やそのプロファイルを合言葉に使う場合は、
大文字や titlecase を小文字に変換するべきではなく、
元の大文字・小文字の区別を保存するべきです >>31。
[41] 正規化規則は、 適用する正規化を NFC、NFD、NFKC、NFKD から指定するものです >>31。
[43] 正規化しないという選択肢はなさそうです。
正規化は、一部(だけ)の漢字の旧字体が新字体に置換されるなどの破壊的操作です。
人間可読の文字列に適用するのは好ましくないと考えられています。
[44] 方向性規則は、 RTL 文字を含む文字列をどう扱うかを規定するものです >>31。
[45] PRECIS は、 Unicode の bidi アルゴリズムの他には広く受け入れられ実装されている安全な表示の方法はないとして、 具体的な方向性の規則は定義していません。 IDNA2008 (RFC 5893) はドメイン名用の Bidi Ruleを定義しており、 必要ならば (新たに定義するのではなく) それを使うことを強く提案しています。 応用によって新たな規則が必要だと思われるとしても、問題が複雑なので誤った判断であることが多いとして、 再考を促しています。 >>31
[1] IDNA2003 や、その他の識別子等を扱う IETF の各種プロトコルは、 RFC 3454 Stringprep によって Unicode 文字列の正規化を行っていました。
[2] しかし Stringprep は Unicode 3.2 に固定されその後改版できずに放置されているなど、 色々な問題を抱えていました。 IDNA2008 は Stringprep を放棄して独自路線に進みました。 (もっともその路線は市場には支持されず、 Stringprep を別の形で拡張した UTS #46 が使われているわけですが...)
[145] RFC 6885 は Stringprep のプロファイルとその問題点をまとめたものです。 Stringprep は Unicode 3.2 に固定されているなど問題があり IDNA2008 は Stringprep を使わなくなりましたが、 新しいプロトコルは改版可能であるなど DNS とは事情が異なるとして、それとは別の方法で Stringprep を改良する必要があると指摘し、プロファイルの用法を分析しています。
[146] これを踏まえて IETF では「Preparation and Comparison of Internationalized Strings」を略して「PRECIS」 と称し、 Stringprep を改訂するべく PRECIS WG を設置しました。
[141] draft-ietf-precis-problem-statement-02 - Stringprep Revision Problem Statement ( ( 版)) http://tools.ietf.org/search/draft-ietf-precis-problem-statement-02
[112] draft-ietf-precis-mappings-08 - Mapping characters for PRECIS classes ( 版) https://tools.ietf.org/html/draft-ietf-precis-mappings-08
[147] draft-ietf-precis-nickname-16 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Nicknames ( 版) https://tools.ietf.org/html/draft-ietf-precis-nickname-16
[148] draft-ietf-precis-saslprepbis-14 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords ( 版) https://tools.ietf.org/html/draft-ietf-precis-saslprepbis-14
[149] draft-ietf-precis-framework-23 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols ( 版) https://tools.ietf.org/html/draft-ietf-precis-framework-23
[150] JPRSの米谷嘉朗がIETF PRECISワーキンググループの共同議長に就任 / 株式会社日本レジストリサービス(JPRS) ( 版) http://jprs.co.jp/press/2010/100615.html
[151] stpeter/precis-framework ( 版) https://github.com/stpeter/precis-framework
[4] 2015年に PRECIS 全体を規定する RFC 7564 が出版され、 RFC 3454 は廃止されました。 引き続き同年中に各種プロファイルが出版されています。
[11] 前身の Stringprep はいくつかの文字集合や写像を定義した上で、 応用ごとにどれを利用するか決定し、「プロファイル」 とする形を採っていました。
[12] それに対して PRECIS は、文字列クラスを少数定義しており、 応用は必要に応じてそれに規則を追加してプロファイルとすることも認められてはいるものの、 応用ごとにプロファイルをどんどん増やしていくのは驚き最小の原則違反であるから非推奨であり禁止する >>5, >>31, >>46 としています。原則として文字列クラスを共用とすることで、 ライブラリーのような形で応用間で符号位置の表を共用できる >>5 とされています。利用者もいろいろな文脈でどの文字が使えるか正確に予測できる >>5 ともされています。
[7] PRECIS は文字集合や写像を直接規定するのではなく、 符号位置の特性によって定義する形を採っており、 Unicode の改版に追随できる >>5 とされています。
[30] stpeter/PrecisMaker ( 版) https://github.com/stpeter/PrecisMaker
[64] RFC 7613 は利用者名 (PRECIS) として
UsernameCasePreserved
と UsernameCaseMapped
、
合言葉 (PRECIS) として OpaqueString
の3つのプロファイルを定義しました。
[68] RFC 7700 はニックネーム用のプロファイルとして
Nickname
を定義しました。
[73] 施行 - Wikipedia ( 版) https://ja.wikipedia.org/wiki/%E6%96%BD%E8%A1%8C
[75] RFC 7790 - Mapping Characters for Classes of the Preparation, Enforcement, and Comparison of Internationalized Strings (PRECIS) ( 版) https://tools.ietf.org/html/rfc7790
[77] Add document for rfc7700 casemapping by DanielOaks · Pull Request #272 · ircv3/ircv3-specifications ( ()) https://github.com/ircv3/ircv3-specifications/pull/272
[78] RFC 8146 - Adding Support for Salted Password Databases to EAP-pwd () https://tools.ietf.org/html/rfc8146
[79] RFC 8120 - Mutual Authentication Protocol for HTTP () https://tools.ietf.org/html/rfc8120#section-9