-
Notifications
You must be signed in to change notification settings - Fork 4
/
869.txt
417 lines (329 loc) · 22.7 KB
/
869.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
* 仕様書
[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)[
:name: 名前
:cp: 割当済み[[符号位置]]の挙動
:unassigned: 未割当の扱い
:desc: 説明
:context: 利用される場面
:name: [CODE[[[IdentifierClass]]]]
:desc:
[[利用者]]の[[アカウント]]、 [[venue]] ([[チャット室]]など)、
情報源 (データフィードなど)、データの[[集成]] ([[ファイル]]など)
といった[[ネットワーク]]上の[[実体]]を[[識別]]したり、[[番地付け]]したりするための、
[[letter]] や[[数字]]や一部の[[記号]]の列です。
いろいろな[[アプリケーションプロトコル]]での[[利用者]]の混乱を最小化させ、
表現力よりも安全性を優先させることを意図したものです。 [SRC[>>13]]
:cp:
[[PRECIS]] の[[導出特性値]]によります
([CODE[[[ID_DIS]]]] は「禁止」として扱います)。
:unassigned: 「禁止」として扱います。 [SRC[>>13]]
:context: [[利用者名 (PRECIS)]]
:name: [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]]]]は、
[[文字列]]に対して幅写像を適用するかどうかとどのように[[写像]]するかを規定するものです。
普通は、 [[Decomposition Type]] が [[Wide]] や [[Narrow]] の[[符号位置]]を、
[[分解写像]]へと[[写像]]するものです。 [SRC[>>31]]
[35] [[NFKC]] や [[NFKD]] の場合は[[互換分解]]の一部として幅写像が行われるので、
[[プロファイル]]で規定する必要はありません。 [SRC[>>31]]
[36] [[NFC]] を使う場合、普通は幅写像を使う[['''べきです''']] [SRC[>>31]]。
[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]] を使う[['''べき''']]です [SRC[>>31]]。
;; [43] [[正規化]]しないという選択肢はなさそうです。
** 方向性規則
[44] [DFN[[RUBYB[方向性規則]@en[directionality rule]]]]は、
[[RTL]] 文字を含む[[文字列]]をどう扱うかを規定するものです [SRC[>>31]]。
[45] [[PRECIS]] は、 [[Unicode]] の [[bidi]] アルゴリズムの他には広く受け入れられ実装されている安全な表示の方法はないとして、
具体的な方向性の規則は定義していません。 [[IDNA2008]] ([[RFC 5893]])
は[[ドメイン名]]用の [[Bidi Rule]]を定義しており、
必要ならば (新たに定義するのではなく) それを使うことを[RUBYB[強く提案]@en[strongly suggest]]しています。
[[応用]]によって新たな規則が必要だと思われるとしても、問題が複雑なので誤った判断であることが多いとして、
再考を促しています。 [SRC[>>31]]
** プロファイルの一覧
[33] [[プロファイル]]には、 [[IANA登録簿]] [SRC[>>54]] があります [SRC[>>31, >>53]]。
[FIG(table)[
: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)]]
: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間隔]]
:case: なし
:norm: ([[執行]]、[[比較]]) [[NFC]]
:dir: なし
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[FreeformClass]]]]
:context: [[合言葉 (PRECIS)]]、
[[基本認証]] [[UTF-8]]、
[[ダイジェスト認証]] [[UTF-8]]
:note: >>61
:name: [DFN[[CODE[[[Nickname]]]]]] [SRC[>>66, >>67]]
:width: なし
:addmap: ([[執行]]、[[比較]]) [[非ASCII間隔]] → [[ASCII間隔]]、
先頭と末尾の[[ASCII間隔]]除去、
連続した[[ASCII間隔]]を[[ASCII間隔]]1つに
:case: ([[比較]]) [[Default Case Folding]]
:norm: ([[執行]]、[[比較]]) [[NFKC]]
:dir: なし
:behavior: ([[準備]]、[[執行]]、[[比較]]) [CODE[[[FreeformClass]]]]
]FIG]
* 歴史
** 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]]]] を定義しました。