[76] [DFN[PRECIS]] は、[[文字列]]の[[比較]]等の[[演算]]に関する
[[IETF]] の[[仕様]]です。

* 仕様書

[REFS[
- [3] '''[CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564>'''
-- [5] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-1>
-- [17] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-3>
-- [13] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-4>
-- [31] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-5>
-- [46] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-6>
-- [51] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-7>
-- [53] [CITE@en[RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]] ([TIME[2015-12-21 04:49:41 +09:00]] 版) <https://tools.ietf.org/html/rfc7564#section-11>
- [55] [CITE[RFC Errata Report » RFC Editor]] ([TIME[2016-01-03 15:25:30 +09:00]] 版) <https://www.rfc-editor.org/errata_search.php?rfc=7564>
- [54] [CITE[Preparation and Comparison of Internationalized Strings (PRECIS) Parameters]] ([TIME[2015-12-18 04:08:22 +09:00]] 版) <https://www.iana.org/assignments/precis-parameters/precis-parameters.xhtml>
- [60] [CITE@en[RFC 7613 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords]] ([TIME[2015-10-23 06:11:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7613#section-3.2>
- [62] [CITE@en[RFC 7613 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords]] ([TIME[2015-10-23 06:11:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7613#section-3.3>
- [63] [CITE@en[RFC 7613 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords]] ([TIME[2015-10-23 06:11:01 +09:00]] 版) <https://tools.ietf.org/html/rfc7613#section-4.2>
- [66] [CITE@en[RFC 7700 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Nicknames]] ([TIME[2016-01-01 00:50:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7700>
- [67] [CITE[RFC Errata Report » RFC Editor]] ([TIME[2016-01-04 22:45:26 +09:00]] 版) <https://www.rfc-editor.org/errata_search.php?rfc=7700>
]REFS]

* 演算

[6] 「PRECIS」は、「''pr''eparation, ''e''nforcement, and
''c''omparison of ''i''nternationalized ''s''trings」の意味です [SRC[>>5]]。

[10] [[PRECIS]] は[[文字列]]に対する次のような演算を扱います。

[FIG(list)[
:[18] [DFN[[RUBYB[執行]@en[enforcement]]]]:
ある[[文字列]]に対して、
その[[文字列]]が特定の文脈で使うことができるかどうかを決定するため、
特定の[[文字列クラス]]や[[プロファイル]]に関する規則をすべて適用することをいいます 
[SRC[>>17]]。
:[19] [DFN[[RUBYB[比較]@en[comparison]]]]:
2つの[[文字列]]に対して、
両者が[RUBYB[[[等価]]]@en[equivalent]]かどうかを決定するため、
特定の[[文字列クラス]]や[[プロファイル]]に関する規則をすべて適用することをいいます 
[SRC[>>17]]。
:[20] [DFN[[RUBYB[準備]@en[preparation]]]]:
ある[[文字列]]に対して、
特定の[[文字列クラス]]や[[プロファイル]]に関する規則の一部を適用、
あるいは何も適用しないことをいいます
[SRC[>>17, >>54]]。
]FIG]

[47] [[準備]]、[[執行]]、[[比較]]について、
どの[[実体]] [WEAK[([[サーバー]]や[[クライアント]]など)]] が責任を持つか、
具体的にいつ行うかは、
[[応用]]が規定する必要があります [SRC[>>46]]。

;; [21] ほとんどの場合、[[サーバー]]のような決定権を持つ側は[[執行]]する責任があり、
その他の[[クライアント]]などの側は[[準備]]だけすれば十分です。
これは次のような理由からとされています。 [SRC[>>17]]
[FIG(list)[
- [22] [[クライアント]]は[[メモリー]]や処理能力が劣っているかもしれませんが、
[[サーバー]]は十分な能力を持つのが普通です。
- [23] [[クライアント]]側はそもそも[[利用者]]に入力させる[[文字]]を制限するのが簡単です。
- [24] [[番地]]や[[識別子]]で使える[[文字]]について決定権を持つのは[[サーバー]]です。
- [25] [[クライアント]]が適切に文字列を生成することは (特に[[セキュリティー]]に関わる場面では)
信用できません。
]FIG]

[8] [[PRECIS]] では、[[文字列]]に対する操作の単位を[RUBYB[規則]@en[rule]]と呼んでいます。
最低限の規則を[[文字列クラス]]と呼び、
それに更に規則を組み合わせたものを[[プロファイル]]と呼んでいます。

[49] [[応用]]は、
どの[[プロトコル要素]]に対して[[プロファイル]]を使うかを規定する必要があります
[SRC[>>46]]。

* 規則の適用

[52] [[文字列クラス]]や[[プロファイル]]の規則は、
次の順序で適用しなければ[['''なりません''']] [SRC[>>51]]。

[FIG(steps)[
= 幅写像規則
= 追加写像規則
= 大文字・小文字写像規則
= 正規化規則
= 方向性規則
= 挙動的規則
]FIG]

;; [59] [[執行]]や[[比較]]はこれをすべて適用する必要がありますが、
[[準備]]は ([[応用]]の規定に従い) 一部のみ適用すれば足ります。

[61] 実際の各[[プロファイル]]は、[[執行]]や[[比較]]は[[準備]]の後に実行すると規定しています
[SRC[>>60, >>62, >>63, >>66]]。 これは >>52 の規定と矛盾しています。

;; [69] しかも[[準備]]の時点で
[[UTF-8]] に[[符号化]]することになっていて [SRC[>>60, >>62, >>63, >>66]]、
その後の処理は[[バイト列]]に対して行うことになってしまいます。

[50] [[応用]]は、[[文字列クラス]]や[[プロファイル]]から更に除外する[[符号位置]]を
([[符号位置]]や[[符号位置]]の[[特性]]を使って) 規定できます [SRC[>>46]]。

;; [48] [[プロファイル]]の追加制限 (>>57) やこの[[応用]]の制限 (>>50)
は挙動的規則の適用後に更に検査するものと思われます。

[15] なお、 [[PRECIS]] の規則を適用する操作は、基本的には不可逆です [SRC[>>5]]。

[EG[
[16] 例えば[[大文字]]を[[小文字]]に変換したり、[[正規化]]したりすると、
元の状態には復元できないのが普通です。
]EG]

* 文字列クラス

[29] [DFN[[RUBYB[[[文字列クラス]]]@en[string class]]]] [SRC[>>13]]
は、[[挙動的規則]]を定めています。
その他の規則は、[[文字列クラス]]の[[プロファイル]] (>>32) で定めることになります。

** 挙動的規則

[56] [DFN[[[[RUBYB[挙動的規則]@en[behavioral rule]]]]]]は、
次の4つを定めるものです [SRC[>>13]]。

[FIG(list)[
:[RUBYB[[[妥当]]]@en[valid]]:
[[文字列]]において[[妥当]]として扱われる[[符号位置]]。
:[RUBYB[[[文脈的規則必須]]]@en[contextual rule required]]:
[[文脈的規則]] ([CODE[[[CONTEXTJ]]]] / [CODE[[[CONTEXTO]]]])
が満たされる時だけ認められると扱われる[[符号位置]]。
:[RUBYB[[[禁止]]]@en[disallowed]]:
[[文字列]]から除外される必要がある[[符号位置]]。
:[RUBYB[[[未割当]]]@en[unassigned]]:
[[応用]]が使う [[Unicode]] の版で未知の[[符号位置]]が現れた時の[[応用]]の挙動。
]FIG]

** 文字列クラスの一覧

[14] 次の2つの[[文字列クラス]]があります。

[FIG(table col)[

:name: 名前
:cp: 割当済み[[符号位置]]の挙動
:unassigned: 未割当の扱い
:desc: 説明
:context: 利用される場面

:name: [DFN[[CODE[IdentifierClass]]]]
:desc:
[[利用者]]の[[アカウント]]、 [[venue]] ([[チャット室]]など)、
情報源 (データフィードなど)、データの[[集成]] ([[ファイル]]など)
といった[[ネットワーク]]上の[[実体]]を[[識別]]したり、[[番地付け]]したりするための、
[[letter]] や[[数字]]や一部の[[記号]]の列です。
いろいろな[[アプリケーションプロトコル]]での[[利用者]]の混乱を最小化させ、
表現力よりも安全性を優先させることを意図したものです。 [SRC[>>13]]
:cp:
[[PRECIS]] の[[導出特性値]]によります
([CODE[[[ID_DIS]]]] は「禁止」として扱います)。
:unassigned: 「禁止」として扱います。 [SRC[>>13]]
:context: [[利用者名 (PRECIS)]]

:name: [DFN[[CODE[FreeformClass]]]]
:desc:
[[合言葉]]や、
[[装置]]や[[チャット室]]の参加者の[[人間]]向けの[[ニックネーム]]のような表示要素など、
自由形の文字列に使う、
[[letter]] や[[数字]]や[[記号]]や[[間隔]]やその他の[[文字]]の列です。
ほとんどどんな [[Unicode文字]]も使うことができ、
安全性よりも表現力を優先させることを意図したものです。 [SRC[>>13]]
:cp:
[[PRECIS]] の[[導出特性値]]によります
([CODE[[[FREE_PVAL]]]] は「妥当」として扱います)。
:unassigned: 「禁止」として扱います。 [SRC[>>13]]
:context: [[合言葉 (PRECIS)]]
]FIG]

[27] [[RFC 7564]] は、 [[IETF]] の議論の結果としてこの2つの[[文字列クラス]]を規定していますが、
将来これ以外の[[文字列クラス]]を定義する可能性も排除はしていません [SRC[>>13]]。

[26] [[IANA登録簿]] [SRC[>>54]] も用意されています [SRC[>>53]]。

[144] 各[[特性値]]を持つ[[符号位置]]の一覧が >>141、>>140 にあります。
[[JSON]] 形式のデータファイルが >>142 (説明が >>143) にあります。

[REFS[
- [141] [[IDNA2008]] - [CITE@en[Character sets]] ([TIME[2016-01-03 22:21:31 +09:00]] 版) <https://chars.suikawiki.org/set#sets-rfc5892>
- [140] [[PRECIS]] - [CITE@en[Character sets]] ([TIME[2016-01-03 22:21:54 +09:00]] 版) <https://chars.suikawiki.org/set#sets-rfc7564>
- [142] ([TIME[2016-01-03 22:17:56 +09:00]] 版) <https://raw.githubusercontent.com/manakai/data-chars/master/data/sets.json>
- [143] [CITE@en[data-chars/sets.txt at master · manakai/data-chars]] ([TIME[2016-01-03 22:18:25 +09:00]] 版) <https://github.com/manakai/data-chars/blob/master/doc/sets.txt>
]REFS]

* プロファイル

[32] [[PRECIS文字列クラス]]の[DFN[[RUBYB[プロファイル]@en[profile]]]]は、
[[文字列クラス]]に更に規則を追加するものです。

[28] [[プロファイル]]は、[[幅写像規則]]、
[[追加写像規則]] (あれば)、
[[大文字・小文字写像規則]]、
[[正規化規則]]、
[[方向性規則]]を定義しなければ[['''なりません''']] [SRC[>>31]]。

[57] [[プロファイル]]は、認められる[[文字]]を更に制限することができます [SRC[>>31]]。 

[58] しかし、[[文字列クラス]]で禁止されている[[符号位置]]を認めては[['''なりません''']]
[SRC[>>31]]。

** 写像規則

[34] [DFN[[RUBYB[幅写像規則]@en[width mapping rule]]]]は、
[[文字列]]に対して[DFN[幅写像]]を適用するかどうかと、
どのように[[写像]]するかとを規定するものです。
普通は、 [[Decomposition Type]] が [[Wide]] や [[Narrow]] の[[符号位置]]を、
[[分解写像]]へと[[写像]]するものです。 [SRC[>>31]]

[35] [[NFKC]] や [[NFKD]] の場合は[[互換分解]]の一部として[[幅写像]]が行われるので、
[[プロファイル]]で規定する必要はありません。 [SRC[>>31]]

[36] [[NFC]] を使う場合、普通は幅写像を使う[['''べきです''']] [SRC[>>31]]。

;; [80] 関連: [[文字幅]]

[37] [DFN[[RUBYB[追加写像規則]@en[additional mapping rule]]]]は、
[[文字列]]中の区切り文字 ([CODE[[[@]]]], [CODE[[[:]]]], [CODE[[[/]]]], [CODE[[[+]]]],
[CODE[[[-]]]] など) や特殊文字 ([[非ASCII]]の[[間隔]] → [CODE(char)[[[U+0020]]]]
や[[制御文字]] → なしなど)
について追加の[[写像]]を行うかどうかを規定するものです [SRC[>>31]]。

[38] [DFN[[RUBYB[大文字・小文字写像規則]@en[case mapping rule]]]]は、
[[文字列]]に大文字・小文字の[[写像]]を適用するかどうかやどう[[写像]]するかを規定するものです。
[SRC[>>31]]

[39] [[写像]]する場合には、 [[Unicode]] の [[Default Case Folding]]
を使う[['''べきです''']] [SRC[>>31]]。

[40] [CODE[[[FreeformClass]]]] やその[[プロファイル]]を[[合言葉]]に使う場合は、
[[大文字]]や [[titlecase]] を[[小文字]]に変換する[['''べきではなく''']]、
元の[[大文字]]・[[小文字]]の区別を保存する[['''べきです''']] [SRC[>>31]]。

** 正規化規則

[41] [DFN[[RUBYB[正規化規則]@en[normalization rule]]]]は、
適用する[[正規化]]を [[NFC]]、[[NFD]]、[[NFKC]]、[[NFKD]] 
から指定するものです [SRC[>>31]]。

[42] [[NFC]] を使う[SHOULD[べき]]です [SRC[>>31]]。

[43] [[正規化]]しないという選択肢はなさそうです。
[[正規化]]は、一部(だけ)の[[漢字]]の[[旧字体]]が[[新字体]]に置換されるなどの破壊的操作です。
[[人間可読]]の[[文字列]]に適用するのは好ましくないと考えられています。
[SEE[ [[正規化]] ]]
つまり [[PRECIS]] は一般的な[[文字列]]には適用できません。


** 方向性規則

[44] [DFN[[RUBYB[方向性規則]@en[directionality rule]]]]は、
[[RTL]] 文字を含む[[文字列]]をどう扱うかを規定するものです [SRC[>>31]]。

[45] [[PRECIS]] は、 [[Unicode]] の [[bidi]] アルゴリズムの他には広く受け入れられ実装されている安全な表示の方法はないとして、
具体的な方向性の規則は定義していません。 [[IDNA2008]] ([[RFC 5893]])
は[[ドメイン名]]用の [[Bidi Rule]]を定義しており、
必要ならば (新たに定義するのではなく) それを使うことを[RUBYB[強く提案]@en[strongly suggest]]しています。
[[応用]]によって新たな規則が必要だと思われるとしても、問題が複雑なので誤った判断であることが多いとして、
再考を促しています。 [SRC[>>31]]

** プロファイルの一覧

[72] 次の[[プロファイル]]が定義されています。

[FIG(table col)[
:name: プロファイル名
:width: 幅写像規則
:addmap: 追加写像規則
:case: 大文字・小文字写像規則
:norm: 正規化規則
:dir: 方向性規則
:behavior: 挙動的規則
:context: 利用される場面
:note: 備考

:name: [DFN[[CODE[[[UsernameCaseMapped]]]]]] [SRC[>>60]]
:width: ([[準備]]、[[執行]]、[[比較]]) [[全角文字]]・[[半角文字]]に [[UAX #11]] [[分解写像]]適用
:addmap: なし
:case: ([[執行]]、[[比較]])
[[Default Case Folding]]
:norm: ([[執行]]、[[比較]])
[[NFC]]
:dir: ([[執行]]、[[比較]])
[[RFC 5893]] [[Bidi Rule]]
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[IdentifierClass]]]]
:context: [[利用者名 (PRECIS)]]、
[[JID]] [CODE[[[localpart]]]]
:note: >>61

:name: [DFN[[CODE[[[UsernameCasePreserved]]]]]] [SRC[>>62]]
:width: ([[準備]]、[[執行]]、[[比較]]) [[全角文字]]・[[半角文字]]に [[UAX #11]] [[分解写像]]適用
:addmap: なし
:case: なし
:norm: ([[執行]]、[[比較]])
[[NFC]]
:dir: ([[執行]]、[[比較]])
[[RFC 5893]] [[Bidi Rule]]
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[IdentifierClass]]]]
:context: [[利用者名 (PRECIS)]]、
[[基本認証]] [[UTF-8]]、
[[ダイジェスト認証]] [[UTF-8]]
:note: >>61

:name: [DFN[[CODE[[[OpaqueString]]]]]] [SRC[>>63]]
:width: なし
:addmap: ([[執行]]、[[比較]]) [[非ASCII間隔]] → [[ASCII間隔]] (>>70)
:case: なし
:norm: ([[執行]]、[[比較]]) [[NFC]]
:dir: なし
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[FreeformClass]]]]
:context: [[合言葉 (PRECIS)]]、
[[基本認証]] [[UTF-8]]、
[[ダイジェスト認証]] [[UTF-8]]、
[[JID]] [CODE[[[resourcepart]]]]
:note: >>61

:name: [DFN[[CODE[[[Nickname]]]]]] [SRC[>>66, >>67]]
:width: なし
:addmap: ([[執行]]、[[比較]]) [[非ASCII間隔]] → [[ASCII間隔]] (>>71)、
先頭と末尾の[[ASCII間隔]]除去、
連続した[[ASCII間隔]]を[[ASCII間隔]]1つに
:case: ([[比較]]) [[Default Case Folding]]
:norm: ([[執行]]、[[比較]]) [[NFKC]]
:dir: なし
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[FreeformClass]]]]
]FIG]

[REFS[
- [70] [CITE@en[Character mapping "rfc7613:non-ASCII-space"]] ([TIME[2016-01-04 23:28:24 +09:00]] 版) <https://chars.suikawiki.org/map/rfc7613%3Anon-ASCII-space>
- [71] [CITE@en[Character mapping "rfc7700:non-ASCII-space"]] ([TIME[2016-01-04 23:29:00 +09:00]] 版) <https://chars.suikawiki.org/map/rfc7700%3Anon-ASCII-space>
]REFS]

[33] [[プロファイル]]には、 [[IANA登録簿]] [SRC[>>54]] があります [SRC[>>31, >>53]]。

* 関連

[74] [[RFC 4790]] と若干用途がかぶっているようですが、関係は特に規定されていません。

* 歴史

** Stringprep から PRECIS へ

[1] [[IDNA2003]] や、その他の[[識別子]]等を扱う [[IETF]]
の各種[[プロトコル]]は、 [[RFC 3454]] [[Stringprep]] によって
[[Unicode]] [[文字列]]の[[正規化]]を行っていました。

;; [[Stringprep]] も参照。

[2] しかし [[Stringprep]] は [[Unicode 3.2]] に固定されその後改版できずに放置されているなど、
色々な問題を抱えていました。 [[IDNA2008]] は [[Stringprep]] を放棄して独自路線に進みました。
(もっともその路線は市場には支持されず、 [[Stringprep]] を別の形で拡張した
[[UTS #46]] が使われているわけですが...)

[145] [[RFC 6885]] は [[Stringprep]] の[[プロファイル]]とその問題点をまとめたものです。 [[Stringprep]]
は [[Unicode 3.2]] に固定されているなど問題があり [[IDNA2008]] は [[Stringprep]] を使わなくなりましたが、
新しいプロトコルは改版可能であるなど [[DNS]] とは事情が異なるとして、それとは別の方法で [[Stringprep]]
を改良する必要があると指摘し、[[プロファイル]]の用法を分析しています。

[REFS[
- [144] [CITE@en[RFC 6885 - Stringprep Revision and Problem Statement for the Preparation and Comparison of Internationalized Strings (PRECIS)]] ([TIME[2013-07-29 10:54:24 +09:00]] 版) <http://tools.ietf.org/html/rfc6885>
]REFS]

[146] これを踏まえて [[IETF]] では「Preparation and Comparison of Internationalized Strings」を略して「[[PRECIS]]」
と称し、 [[Stringprep]] を改訂するべく [DFN[[[PRECIS WG]]]] を設置しました。

** PRECIS の開発

[141] [CITE@en[draft-ietf-precis-problem-statement-02 - Stringprep Revision Problem Statement]]
( ([TIME[2011-04-01 08:20:57 +09:00]] 版))
<http://tools.ietf.org/search/draft-ietf-precis-problem-statement-02>

[112] [CITE@en[draft-ietf-precis-mappings-08 - Mapping characters for PRECIS classes]]
([TIME[2014-12-30 20:53:58 +09:00]] 版)
<https://tools.ietf.org/html/draft-ietf-precis-mappings-08>

[147] [CITE@en[draft-ietf-precis-nickname-16 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Nicknames]]
([TIME[2015-03-03 17:06:31 +09:00]] 版)
<https://tools.ietf.org/html/draft-ietf-precis-nickname-16>

[148] [CITE@en[draft-ietf-precis-saslprepbis-14 - Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords]]
([TIME[2015-03-03 17:19:07 +09:00]] 版)
<https://tools.ietf.org/html/draft-ietf-precis-saslprepbis-14>

[149] [CITE@en[draft-ietf-precis-framework-23 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols]]
([TIME[2015-02-24 08:26:08 +09:00]] 版)
<https://tools.ietf.org/html/draft-ietf-precis-framework-23>

[150] [CITE@ja[JPRSの米谷嘉朗がIETF PRECISワーキンググループの共同議長に就任 / 株式会社日本レジストリサービス(JPRS)]]
([TIME[2015-03-22 21:12:25 +09:00]] 版)
<http://jprs.co.jp/press/2010/100615.html>

[151] [CITE@en[stpeter/precis-framework]]
([TIME[2015-03-22 21:14:12 +09:00]] 版)
<https://github.com/stpeter/precis-framework>

** RFC 7564

[4] 2015年に [[PRECIS]] 全体を規定する [DFN[[[RFC 7564]]]]
が出版され、 [[RFC 3454]] は[[廃止]]されました。
引き続き同年中に各種[[プロファイル]]が出版されています。

[11] 前身の [[Stringprep]] はいくつかの[[文字集合]]や[[写像]]を定義した上で、
[[応用]]ごとにどれを利用するか決定し、「[[プロファイル]]」
とする形を採っていました。

[12] それに対して [[PRECIS]] は、[[文字列クラス]]を少数定義しており、
[[応用]]は必要に応じてそれに規則を追加して[[プロファイル]]とすることも認められてはいるものの、
[[応用]]ごとに[[プロファイル]]をどんどん増やしていくのは[[驚き最小の原則]]違反であるから[RUBYB[非推奨]@en[discouraged]]であり[RUBYB[禁止]@en[must not]]する
[SRC[>>5, >>31, >>46]] としています。原則として[[文字列クラス]]を共用とすることで、
[[ライブラリー]]のような形で[[応用]]間で[[符号位置]]の表を共用できる [SRC[>>5]]
とされています。[[利用者]]もいろいろな文脈でどの[[文字]]が使えるか正確に予測できる
[SRC[>>5]] ともされています。

[7] [[PRECIS]] は[[文字集合]]や[[写像]]を直接規定するのではなく、
[[符号位置]]の[[特性]]によって定義する形を採っており、
[[Unicode]] の改版に追随できる [SRC[>>5]] とされています。

;; [[Stringprep]] では [[Unicode 3.2]] 固定とされていました。

;; [9] 決定方法が[[規定]]とされている一方で、最新の [[Unicode]]
に適用した結果が [[IANA登録簿]]に登録される [SRC[>>5]] こととされています。
[[導出特性値]]を参照。

[30] [CITE@en[stpeter/PrecisMaker]]
([TIME[2016-01-02 23:12:57 +09:00]] 版)
<https://github.com/stpeter/PrecisMaker>

[64] [DFN[[[RFC 7613]]]] は[[利用者名 (PRECIS)]] として
[CODE[[[UsernameCasePreserved]]]] と [CODE[[[UsernameCaseMapped]]]]、
[[合言葉 (PRECIS)]] として [CODE[[[OpaqueString]]]]
の3つの[[プロファイル]]を定義しました。

;; [65] これらは [[SASLprep]] を[[廃止]]しその代替として定義されたものですが、
[[SASLprep]] とこれらの[[プロファイル]]には互換性はありません。

[68] [DFN[[[RFC 7700]]]] は[[ニックネーム]]用の[[プロファイル]]として
[CODE[[[Nickname]]]] を定義しました。

[73] [CITE@ja[施行 - Wikipedia]]
([TIME[2016-01-09 19:28:05 +09:00]] 版)
<https://ja.wikipedia.org/wiki/%E6%96%BD%E8%A1%8C>

[75] [CITE@en[RFC 7790 - Mapping Characters for Classes of the Preparation, Enforcement, and Comparison of Internationalized Strings (PRECIS)]]
([TIME[2016-03-31 03:20:06 +09:00]] 版)
<https://tools.ietf.org/html/rfc7790>

[77] [CITE@en[Add document for rfc7700 casemapping by DanielOaks · Pull Request #272 · ircv3/ircv3-specifications]]
( ([TIME[2016-12-13 22:50:56 +09:00]]))
<https://github.com/ircv3/ircv3-specifications/pull/272>

[78] [CITE@en[RFC 8146 - Adding Support for Salted Password Databases to EAP-pwd]]
([TIME[2017-04-22 11:18:27 +09:00]])
<https://tools.ietf.org/html/rfc8146>

[79] [CITE@en[RFC 8120 - Mutual Authentication Protocol for HTTP]]
([TIME[2017-04-20 12:04:06 +09:00]])
<https://tools.ietf.org/html/rfc8120#section-9>