/
418.txt
409 lines (332 loc) · 16 KB
/
418.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
[7] [DFN[[[Unicode Character Database]]]] は、 [[Unicode]] の[[文字]]に関するデータを集めた[[データベース]]です。
[[Unicode]] の仕様の一部を構成する[[規定]]のデータと、それ以外の[[参考]]のデータが共に含まれています。
[[UCD]] は [[Unicode Consortium]] により管理、配布されていて、 [[Unicode]] 本体と連動して改訂されています。
[8] 現代の[[言語]]や[[プロトコル]]の多くは、利用可能な[[文字]]の定義や[[正規化]]・[[照合順序]]などの[[アルゴリズム]]で利用するデータとして、
直接的または間接的に [[UCD]] のデータを参照しています。最近の多くの [[OS]] や[[プログラミング言語]]の実行環境には
[[UCD]] やそこから派生したデータが含まれています。
* 仕様書
[REFS[
-[4] [CITE@en-us[UAX #44: Unicode Character Database]]
( ([TIME[2013-09-27 22:15:15 +09:00]] 版))
<https://www.unicode.org/reports/tr44/>
-- [22] <https://www.unicode.org/reports/tr44/#Simple_Derived>
-- [30] <https://www.unicode.org/reports/tr44/#Release_Stability>
-- [40] <https://www.unicode.org/reports/tr44/#Data_File_Comments>
-- [41] <https://www.unicode.org/reports/tr44/#Obsolete>
-- [44] <https://www.unicode.org/reports/tr44/#UCD_Files>
--- [45] <https://www.unicode.org/reports/tr44/#Format_Conventions>
-[5] [CITE@en-us[Unicode Character Database]]
( ([TIME[2013-06-04 18:08:12 +09:00]] 版))
<http://www.unicode.org/ucd/>
-[6] [CITE[Index of /Public/UCD/latest/ucd]]
( ([TIME[2013-10-30 14:15:11 +09:00]] 版))
<http://www.unicode.org/Public/UCD/latest/ucd/>
]REFS]
* ファイル
[9] [[UCD]] のデータは[[テキストファイル]]として提供されています。その書式はファイルにより異なり、
[[UAX #44]]
[SRC[>>4]]
で説明されています。
[FIG(list middle)[
[FIGCAPTION[
[10] [[UCD]] の主なファイル
]FIGCAPTION]
- [[UnicodeData.txt]]
- [CODE[NamesList.txt]]
- [CODE[NamesList.html]]
- [[CaseFolding.txt]]
- [[PropList.txt]]
- [CODE[PropertyAliases.txt]]
- [CODE[CompositionExclusions.txt]]
- [CODE[DerivedBinaryProperties.txt]]
- [CODE[BidiMirroring.txt]]
- [CODE[BidiBrackets.txt]]
- [CODE[StandardizedVariants.txt]]
- [CODE[StandardizedVariants.html]]
]FIG]
[46]
比較的古いファイルは独特の形式で、
比較的新しいファイルはできるだけ共通の形式を採用しているようです。
[[ファイル]]と[[特性]]の関係に規則性はなく、
個別に調べていくしかありません。
1つの[[ファイル]]で複数の[[特性]]が定義されていることがあります。
[47]
多くのファイルは次のような構造をしています。
[SRC[>>45]]
- [48] [[UTF-8]] です。
- [49] [[行]]指向のファイルです。
- [50] [CODE[#]] から行末までは[[コメント]]です。
[[構文解析]]時にまず除去します。
- [51] 各[[行]]は、 [CODE[;]] で区切られた[RUBYB[欄][field]]で構成されます。
[[0起算]]で数えます。
- [54] 欄の先頭と末尾の[[空白]]は、意味を持ちません。除去して解釈します。
(ただし、古めのファイルには例外あり。)
- [67] 欄の値は、
複数の値の[[間隔]]区切りのリストとなっていることがあります。
値の順序に意味があることも、ないこともあります。
- [52] 第0欄は[[符号位置]]またはその範囲を表します。
- [53] 第1欄は第0欄の[[符号位置]]についての情報を表します。
[65] [[コメント]]には、
行頭に [CODE[#]] があって[[欄]]がないものもあります。
ファイルの先頭にはファイル情報が書かれています。
[[派生特性]]はその導出方法が書かれています (>>28)。
[66]
[[欄]]の後に[[コメント]]が続くこともあります。
一定の書式で参考になる情報が書かれている場合もあります [SRC[>>45]]。
しかしあくまで参考であって、
変更されることもあり得るので、
[[構文解析]]して使う[RUBYB[べき][should]]ではありません [SRC[>>45]]。
* 特性
[11] [[Unicode Standard]] および [[Unicode Character Database]] では、[[文字]]に関するデータを[[文字]] ([[符号位置]])
の[DFN[[RUBYB[[[特性]]]@en[property]]]]と呼んでいます。
[21]
[[特性]]にはそれぞれ [CODE@en[[[General_Category]]]]
や [CODE@en[Age][Age (Unicode)]] のような名前がついています。
[[特性]]の名前は最低1つありますが、
別名が定義されているものもあります。
[DFN[[CODE[PropertyAliases.txt]]]] には、
[[特性]]の別名に関する情報が収録されています [SRC[>>1]]。
[EG[
[2] 例えば [CODE[Bidi_Mirroring_Glyph]] には
[CODE[bmg]] という略称があり、
関連する文書で使われることがある他、
別名リストにも掲載されています [SRC[>>1]]。
]EG]
[12] [[文字]]と[[特性]]のデータは >>9 の各ファイルに含まれています。どのように記述されているかはそれぞれの[[特性]]により異なり、
[[UAX #44]]
[SRC[>>4]]
などに説明があります。
[FIG(short list)[ [19] [[UCD]] の[[特性]]
- [CODE[Age][Age (Unicode)]]
- [CODE[Bidi_Class]]
- [CODE[Bidi_Mirrored]]
- [CODE[General_Category]]
]FIG]
[23]
[DFN[[RUBYB[単純特性][simple property]]]]は、
他の[[特性]]から計算できない[[特性]]です [SRC[>>22]]。
[24]
[DFN[[RUBYB[派生特性][derived property]]]]は、
他の[[特性]]から一定の規則で導出される[[特性]]です [SRC[>>22]]。
[25]
[DFN[contributory properties]]
は、
[[単純特性]]のうち、
[[派生特性]]の規則の記述を簡潔にしたり一般化したりするために敢えて設けられたものです。
例外リストの記述の便法として使ったり、
重要な[[派生特性]]の安定性の保証に関係して使ったりされます。
[SRC[>>22]]
[26]
[[単純特性]]と[[派生特性]]の違いは、
その[[特性]]が[[規定]]であるか[[参考]]であるかとは無関係です。
[[特性]]の重要度とも関係しません。
[28]
[[派生特性]]の導出方法は、
[[UCD]]
の各ファイルに注釈として説明がありますが、
改訂されることがあります [SRC[>>22]]。
注釈の説明は[[参考]]です [SRC[>>40]]。
導出方法と示された特性値が矛盾する場合、
示された特性値の方が[[規定]]と解釈される[RUBYB[べき][should]]です [SRC[>>22]]。
実装は、誤りを防ぐため、[[単純特性]]から[[派生特性]]を導出するのではなく、
直接[[派生特性]]を使う[RUBYB[べき][should]]です [SRC[>>22]]。
;; [27] つまり[[単純特性]]と[[派生特性]]の違いは、
仕様 ([[Unicode]] 自体や、それを使う[[プロトコル]])
を検討する人達には意味があっても、
[[Unicode]]
を実装する人達や、
[[Unicode]]
を実装した[[プログラム]]や
[[Unicode]]
を使った[[プロトコル]]を使う人達には重要ではありません。
[HISTORY[
[29]
[[Unicode 10.0]] から
[[Unicode 12.1]]
まで、
[[segmentation]]
関係の特性が外部
([[UCD]] 以外)
の仕様の特定の版に依存する形で定義されていました。
[[UAX #14]], [[UAX #29]], [[UTS #51]]
で説明されていました。
[[Unicode 13.0]]
から
[[UCD]]
だけで完結するように改められました。
[SRC[>>22]]
]HISTORY]
[37]
[[特性]]とその利用法については、
[CITE[Unicode Standard]] 本体、
[[UCD]] の [[UAX #44]]、
[[UCD]] の各ファイル、
参照している各 [[UAX]]/[[UTS]]
に分散して記述されています。
あちこちに情報が少しずつあって、
しかも相互の[[リンク]]が不十分なので、
苦労することも多いです。
[REFS[
- [1] ([TIME[2015-02-19 03:10:35 +09:00]] 版) <http://www.unicode.org/Public/UCD/latest/ucd/PropertyAliases.txt>
]REFS]
* 特性値
[68] 第0欄には[[符号位置]]またはその範囲が指定されます。
また特性の値に[[符号位置]]が指定されることがあります。
次のように記述されます [SRC[>>45]]。
- [55] [[符号位置]]は、4桁から6桁の[[16進数]]列で表します。
([CODE[U+]] はつけません。)
- [56] [[符号位置]]の[[列][文字列]]は、
[[符号位置]]の[[間隔]]区切りで表します。
- [57] [[符号位置]]の範囲は、先頭と末尾の[[符号位置]]を
[CODE[..]] で連結して表します。
[69] [RUBYB[[[バイナリー]]][binary]]特性は、
[[真]] ([DFN[[CODE[True]]]]、[DFN[[CODE[Y]]]])
を表すためにファイルでは[[特性]]名を変わりに書きます。
[SRC[>>45]]
* Unicode の版
[13] [[UCD]] は [[Unicode]] が改版される度に併せて改訂されています。特に小改訂は [[UCD]]
の更新が主目的であることもあります。
[14] [[Unicode]] の版によって値が変化する(可能性のある)[[特性]]もあれば、
不変であることが保証されている[[特性]]もあります。[[特性]]自体も改版により増えたり、減ったりしています。
[15] >>8 の通り、多くの言語やプロトコルには何らかの形で [[UCD]] のデータや [[Unicode]]
の[[演算]]の実装が含まれています。それぞれが対応している [[Unicode]] の版に違いがあると、
正しくない結果が得られる可能性もあります。
[31]
[[UCD]]
のある特定の版は、
[RUBYB[[[安定]]][stable]]であって、出版後変更されることがありません [SRC[>>30]]。
誤りは Errata で公表され、必要に応じて次の版で修正されます [SRC[>>30]]。
しかしその特定の版のファイル自体は変更されません。
[32]
[[UCD]]
は、
[[Unicode]]
の
[[Webサイト]]で版ごとに公開されています。
この [[URL]]
は[[安定]]で、
恒久的に提供されるとされています。 [SRC[>>30]]
[[UCD]]
の各ファイルは
[[Webサイト]]から誰でも無償で入手可能です。
[42]
版が指定されない、最新版の
[[UCD]]
にアクセスできる
[[URL]]
もあります
[SRC[>>6]]。
[[UCD]]
を使った[[プログラム]]のための元データとして取得するときは、
この
[[URL]]
を使うのが便利です。
[33]
(版をまたいだ) [[特性]]の[[安定性]]は、
[CITE[Unicode Consortium Stability Policies]]
にまとめられています。 [SRC[>>30]]
一度決めた値が変更されることはない[[特性]]もあれば、
変更される可能性があるものもあります。
[EG[
[34]
[CODE[U+200B]]
[CODE(charname)@en[ZERO WIDTH SPACE]]
の
[CODE[General_Category]]
は、
[CODE[Zs]]
から
[CODE[Cf]]
に改正されました。
[SRC[>>30]]
]EG]
[36]
[[特性]]は、
[RUBYB[[[廃止]]][obsolete]]されることがあります [SRC[>>30]]。
廃止特性は、
重ねて[RUBYB[[[非推奨]]][deprecated]]や[RUBYB[[[安定化]]][stabilized]]されることがあります
[SRC[>>30]]。
状況の変化によって不要となったものが指定されるようです。
ただし[[特性]]自体は削除されることはない [SRC[>>30]]
とされ、恒久的に残されるようです。
[39]
[[非推奨]]の[[特性]]は、
使うべきではありません [SRC[>>30]]。
[38]
[[安定化]]された[[特性]]は、
値が凍結されて以後メンテナンスされません [SRC[>>30]]。
[43]
[[UCD]]
に含まれる説明の [CODE[.html]]
ファイルは、
廃止されることがあります
[SRC[>>41]]。
廃止されると新しい版の
[[UCD]]
にはファイル自体が含まれなくなるようです。
[35]
列挙特性の特性値の中には、どの[[符号位置]]でも使用されていないものが含まれる場合もあります。
過去の版で使用されていたものが、
使用されなくなったことがあります。
[SRC[>>30]]
* UCD のライセンス
[17] [[UCD]] のデータは [[EXHIBIT 1 UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE]]
の対象となっています。示された条件に従う限り、[[ソフトウェア]]への組み込みなど自由に利用できるようです。
* [CODE[UnicodeData.txt]]
[58] [DFN[[CODE[UnicodeData.txt]]]]
は、
[[UCD]]
のファイルの1つです。
古くからある基礎的な[[特性][特性 (UCD)]]が記述されています。
[REFS[
- [59] <http://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt>
]REFS]
[60] [CODE[UnicodeData.txt]] のデータは他のファイルにも含まれていて、
そちらの方が使いやすいかもしれません。
,*欄#,*値 ,*他のファイル
,0,[[符号位置]]
,1,[[Name]] ([[文字名称]]) ,[[NamesList.txt]]
,2,[[General_Category]] ,[[DerivedGeneralCategory.txt]]
,3,[[Canonical_Combining_Class]] ,[[DerivedCombiningClass.txt]]
,4,[[Bidi_Class]] ,[[DerivedBidiClass.txt]]
,5,"[[Decomposition_Type]], [[Decomposition_Mapping]]" ,[[DerivedDecompositionType.txt]]
,6-8,"[[Numeric_Type]], [[Numeric_Value]]" ,"[[DerivedNumericType.txt]], [[DerivedNumericValues.txt]]"
,9 ,[[Bidi_Mirrored]] ,[[DerivedBinaryProperties.txt]]
,10,[[Unicode_1_Name]] (廃止)
,11,[[ISO_Comment]] (廃止)
,12,[[Simple_Uppercase_Mapping]] ,"[[CaseFolding.txt]], [[DerivedCoreProperties.txt]]"
,13,[[Simple_Lowercase_Mapping]] ,"[[CaseFolding.txt]], [[DerivedCoreProperties.txt]]"
,14,[[Simple_Titlecase_Mapping]] ,"[[CaseFolding.txt]], [[DerivedCoreProperties.txt]]"
[62]
このファイルの形式は、
[[UCD]]
の新しいファイルの形式 (>>46)
と少し違うところもあります。
[63] 欄の先頭と末尾に[[間隔]]は挿入できません。 [SRC[>>45]]
[61] [[CJK統合漢字]]や[[ハングル音節]]や[[私用域]]などは各[[符号位置]]ではなく範囲として記述されているので注意が必要です。
また、未割当の[[符号位置]]や[[非文字]]は含まれていません。
[64] この範囲の記述形式は、
新しいファイルのような [CODE[..]] を使う形式ではなく、
範囲の先頭の[[符号位置]]と、最後の[[符号位置]]の[[行]]を別々に記述する形式となっています。例えば、
[PRE(code)[
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
]PRE]
... のように [CODE[<[VAR[...]], First>]],
[CODE[<[VAR[...]], Last>]]
と書かれた2つの[[行]]で範囲であることが示されます。[SRC[>>45]]
* メモ
[16] [[符号化文字集合]]の実装のためには、[[仕様書]]本文だけでなく、含まれている各[[文字]]の詳細な情報が必要になります。
旧来の[[符号化文字集合]]は比較的小規模で性質の似た[[文字]]のみを含んでいたこともあり、
そのような情報をほとんど提供してきませんでした。 [[UCD]]
のような形で[[機械可読]]な実装用の情報を提供する[[符号化文字集合]]は他に無く、
これが [[Unicode]] の成功の要因の1つと言えるかもしれません。
([[ISO/IEC 10646]] も単独では十分な実装が困難でしょう。)
[20] → [[ISO/IEC 10646]] も単独を諦めて、今では多くの項目が
[[Unicode]] を参照する形になっています。
[3] [CITE@en-us[UTR #23: The Unicode Character Property Model]]
([TIME[2015-05-28 05:51:30 +09:00]] 版)
<http://unicode.org/reports/tr23/>
[18] [CITE@en[Remove Unicode database version requirement · whatwg/javascript@4f1a517]]
([TIME[2016-02-19 22:53:52 +09:00]] 版)
<https://github.com/whatwg/javascript/commit/4f1a517f02bc15e934aafae0ec2b47c80786ab7f>