-
Notifications
You must be signed in to change notification settings - Fork 4
/
418.txt
800 lines (655 loc) · 30.1 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
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
[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>
--- [75] <https://www.unicode.org/reports/tr44/#Default_Values_Table>
--- [76] <https://www.unicode.org/reports/tr44/#Complex_Default_Values>
-- [82] <https://www.unicode.org/reports/tr44/#File_List>
-- [84] <https://www.unicode.org/reports/tr44/#About_Property_Table>
-- [118] [CITE@en-us[UAX #44: Unicode Character Database]], [TIME[2022-09-02T19:25:20.000Z]], [TIME[2022-11-13T06:02:22.216Z]] <https://www.unicode.org/reports/tr44/#Property_Values_As_Sets>
-- [98] <https://www.unicode.org/reports/tr44/#Property_And_Value_Aliases>
-- [73] <https://www.unicode.org/reports/tr44/#Matching_Rules>
-- [100] <https://www.unicode.org/reports/tr44/#Property_Invariants>
-[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/>
-- [1] ([TIME[2015-02-19 03:10:35 +09:00]] 版) <http://www.unicode.org/Public/UCD/latest/ucd/PropertyAliases.txt>
-- [105]
[TIME[2022-08-06T00:13:22.000Z]], [TIME[2022-11-12T07:27:34.688Z]] <https://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt>
]REFS]
* 特性
[11] [[Unicode Standard]] および [[Unicode Character Database]] では、[[文字]]に関するデータを[[文字]] ([[符号位置]])
の[DFN[[RUBYB[[RUBYB[[RUBY[特][とく]][RUBY[性][せい]]][プロパティー]]]@en[property]]]]と呼んでいます。
[21]
[[特性]]にはそれぞれ [CODE@en[[[General_Category]]]]
や [CODE@en[Age][Age (Unicode)]] のような名前がついています。
[[特性]]の名前は最低1つありますが、
別名が定義されているものもあります [SRC[>>98]]。
[SEE[ >>121 ]]
[EG[
[2] 例えば [CODE[Bidi_Mirroring_Glyph]] には
[CODE[bmg]] という略称があり、
関連する文書で使われることがある他、
別名リストにも掲載されています [SRC[>>1]]。
]EG]
[FIG(short list)[ [19] [[UCD]] の[[特性]]
- [CODE[Age][Age (Unicode)]]
- [CODE[Bidi_Class]]
- [CODE[Bidi_Mirrored]]
- [CODE[Canonical_Combining_Class]]
- [CODE[General_Category]]
- [CODE[Deprecated]]
- [CODE[Script][Script (UCD)]]
- [CODE[Script_Extensions]]
- [CODE[Soft_Dotted]]
- [CODE[Quick_Check]]
- [CODE[Decomposition_Type]]
- [CODE[Grapheme_Base]]
- [CODE[Grapheme_Extend]]
- [CODE[Joining_Type]]
]FIG]
;; [104] [[Unihan]] も参照。
[85]
[[特性]]は[[規定]]
([DFN[N]], [DFN[Normative]]),
[[参考]]
([DFN[I]], [DFN[Informative]]),
[DFN[Contributory]]
([DFN[C]]),
予備的
([DFN[P]], [DFN[Provisional]])
に分類されています
[SRC[>>84]]。
もっとも実用上はこの違いは然程重要ではありません。
[12] [[文字]]と[[特性]]のデータは >>9 の各ファイルに含まれています。どのように記述されているかはそれぞれの[[特性]]により異なり、
[[UAX #44]]
[SRC[>>4]]
などに説明があります。
[37]
[[特性]]とその利用法については、
[CITE[Unicode Standard]] 本体、
[[UCD]] の [[UAX #44]]、
[[UCD]] の各ファイル、
参照している各 [[UAX]]/[[UTS]]
に分散して記述されています。
あちこちに情報が少しずつあって、
しかも相互の[[リンク]]が不十分なので、
苦労することも多いです。
-*-*-
[86]
[[特性]]は[[単純特性]]と[[派生特性]]に分けられます。
-[23]
[DFN[[RUBYB[単純特性][simple property]]]]は、
他の[[特性]]から計算できない[[特性]]です [SRC[>>22]]。
-
[24]
[DFN[[RUBYB[派生特性][derived property]]]]は、
他の[[特性]]から一定の規則で導出される[[特性]]です [SRC[>>22]]。
[26]
[[単純特性]]と[[派生特性]]の違いは、
その[[特性]]が[[規定]]であるか[[参考]]であるかとは無関係です。
[[特性]]の重要度とも関係しません。
[25]
[DFN[contributory properties]]
は、
[[単純特性]]のうち、
[[派生特性]]の規則の記述を簡潔にしたり一般化したりするために敢えて設けられたものです。
例外リストの記述の便法として使ったり、
重要な[[派生特性]]の安定性の保証に関係して使ったりされます。
[SRC[>>22]]
[28]
[[派生特性]]の導出方法は、
[[UCD]]
の各ファイルに注釈として説明がありますが、
改訂されることがあります [SRC[>>22]]。
注釈の説明は[[参考]]です [SRC[>>40]]。
導出方法と示された特性値が矛盾する場合、
示された特性値の方が[[規定]]と解釈される[RUBYB[べき][should]]です [SRC[>>22]]。
実装は、誤りを防ぐため、[[単純特性]]から[[派生特性]]を導出するのではなく、
直接[[派生特性]]を使う[RUBYB[べき][should]]です [SRC[>>22]]。
;; [27] つまり[[単純特性]]と[[派生特性]]の違いは、
仕様 ([[Unicode]] 自体や、それを使う[[プロトコル]])
を検討する人達には意味があっても、
[[Unicode]]
を実装する人達や、
[[Unicode]]
を実装した[[プログラム]]や
[[Unicode]]
を使った[[プロトコル]]を使う人達には重要ではありません。
[115]
[[Unicode符号点]]はただでさえ
[ [CODE[U+0000]], [CODE[U+10FFFF]] ]
という大きな[[集合]]なので、
[[特性値]]を他の[[特性値]]の組み合わせで記述できるなら、
それで保存データ量を削減したいと思ってしまいます。
しかし実際[[派生特性]]の計算はかなり複雑だったりしますから、
素直に公式データをそのまま使った方が安全です。
[HISTORY[
[29]
[[Unicode 10.0]] から
[[Unicode 12.1]]
まで、
[[segmentation]]
関係の特性が外部
([[UCD]] 以外)
の仕様の特定の版に依存する形で定義されていました。
[[UAX #14]], [[UAX #29]], [[UTS #51]]
で説明されていました。
[[Unicode 13.0]]
から
[[UCD]]
だけで完結するように改められました。
[SRC[>>22]]
]HISTORY]
* 特性値
[87]
[[特性]]は値により次のように分類されています。
[SRC[>>84]]
- [88] [DFN[[RUBYB[カタログ][Catalog]]]] ([DFN[C]]) 特性は、
列挙値のいずれかを取る特性です。
列挙値は
[[Unicode]]
の改訂で順次追加されていくことが予期されています。
[SRC[>>84]]
-- [69] ファイルで省略されていたときの[[既定値]]は、
ファイルの[[コメント]]で説明されます。
[SRC[>>45]]
- [89] [DFN[[RUBYB[列挙][Enumeration]]]] ([DFN[E]]) 特性は、
列挙値のいずれかを取る特性です。
通常は新しい値が追加されることはありません。
[SRC[>>84]]
-- [96] ファイルで省略されていたときの[[既定値]]は、
ファイルの[[コメント]]で説明されます。
[SRC[>>45]]
--
[35]
列挙特性の特性値の中には、どの[[符号位置]]でも使用されていないものが含まれる場合もあります。
過去の版で使用されていたものが、
使用されなくなったことがあります。
[SRC[>>30]]
- [90] [DFN[[RUBYB[バイナリー][Binary]]]] ([DFN[B]]) 特性は、
[[真]] ([DFN[Y]], [DFN[Yes]], [DFN[True]]) と[[偽]] ([DFN[N]], [DFN[No]], [DFN[False]])
の2値の特殊な[[列挙]]特性です。
[SRC[>>84]]
-- [71]
ファイルでは[[真]]を表すために[[特性]]名を書きます [SRC[>>45]]。
-- [95]
ファイルで省略されていたときの[[既定値]]は、[[偽]]です。
ファイルでは[[偽]]を記述せず、必ず省略します。
(ただし [CODE[Extended_Pictographic]] は例外です。) [SRC[>>45]]
- [91] [DFN[[RUBYB[文字列][String]]]] ([DFN[S]]) 特性は、
通常は
[[Unicode]] [[符号位置]]から他の[[符号位置]]またはその[[列][文字列]]への[[写像]]です。
[SRC[>>84]]
-- [94] ファイルで省略されていたときの[[既定値]]は、
その[[符号位置]]自身です [SRC[>>45]]。
- [92] [DFN[[RUBYB[数値][Numeric]]]] ([DFN[N]]) 特性は、
[[数字]]関連の[[文字]]に[[数値]]を指定する特性です。
[SRC[>>84]]
-- [99] 値の[[一致]]は[[数値]]として行われます (>>141)。
- [93] [DFN[[RUBYB[その他][Miscellaneous]]]] ([DFN[M]]) 特性は、
他の種類に収まらない特性です。 [SRC[>>84]]
-- [119] 複数の異なる値の[[順序]]のない[[集合]]のことがあります. [SRC[>>118]]
--- [109] 例えば [CODE[Script_Extensions]] の値は[[集合]]です。
-- [120] 複数の値の[[順序]]のある[[並び]]のことがあります. [SRC[>>118]]
--
[72] [RUBYB[その他][miscellaneous]]特性で値が[[文字列]]となるものでは、
ファイルで省略されていたときの[[既定値]]は
[[null]] [[文字列]]です。
[SRC[>>45]]
-*-*-
[116]
ほとんどの[[特性]]には[[既定値]]が決められていて、
[[ファイル]]で省略されているときはその[[既定値]]が[[特性値]]となります。
[[既定値]]は [[UCD]] の[[ファイル]]の解釈に使うためのもので、
[[特性]]を使う処理の性質とは必ずしも関係ありません。
[74] [[既定値]]は[[ファイル]]の[[コメント]]の
[CODE[@missing]]
行に[[機械可読]]に書かれることがあります。 [SRC[>>45]]
いくつかの[[特性]]の[[既定値]]は例外的なものや複雑な方法で決定されるもので、
個別に説明があります
[SRC[>>75, >>76]]。
[77]
[[既定値]]を表す
[DFN[[CODE[@missing]]]]
は、
[PRE(code)[
# @missing: 0000..10FFFF; <none>
]PRE]
... のように、 [CODE[# [[@missing]]:]]
の後に[[欄]]が続きます。
第0欄が適用対象の[[符号位置]] (の範囲)、
第1欄が特性値を表します。
[SRC[>>45]]
[78]
ただし、一部のファイルには複数の[[特性]]が書かれているため、
第1欄が[[特性]]名、
第2欄が特性値を表します。
[SRC[>>45]]
[79]
値には、
special tag
が使われることがあります。
[DFN[[CODE[<node>]]]]
は[[空文字列]]、
[DFN[[CODE[<code point>]]]]
は[[符号位置]]の値の[[文字列]]表現、
[DFN[[CODE[<script>]]]]
は[[符号位置]]の
[CODE[Script]]
特性値を表します。
[SRC[>>45]]
-*-*-
[97]
値には、
別名が定義されていることもあります [SRC[>>98]]。
各仕様書などで使われることがあります。
(>>122)
* 私用文字
[102]
[[私用文字]]の[[特性値]]については、
一部の例外を除き、
[[私的な同意]]に基づく変更が認められます。
[SEE[ [[私用文字]] ]]
* 別名
[123]
[[UCD]] の[[特性]]やその値には、大量の[DFN[[RUBYB[[RUBY[別][べつ]][RUBY[名][めい]]][alias]]]]があります。
- [121]
[DFN[[CODE[PropertyAliases.txt]]]] には、
[[特性]]の別名が収録されています [SRC[>>1, >>98]]。
-- [135]
第1欄が[RUBYB[省略された記号名][abbreviated symbolic name]]、
第2欄が[RUBYB[長い記号名][long symbolic name]] (公式な名前) で、
その2つが[RUBYB[好ましい別名][preferred alias]]とされます。
第3欄以後はその他の[[別名]]です。
[SRC[>>98]]
-
[122]
[DFN[[CODE[PropertyValueAliases.txt]]]] には、
[[特性値]]の別名が収録されています [SRC[>>105]]。
-- [136]
第2欄が[RUBYB[省略された記号名][abbreviated symbolic name]]、
第3欄が[RUBYB[長い記号名][long symbolic name]] (公式な名前) で、
その2つが[RUBYB[好ましい別名][preferred alias]]とされます。
第4欄以後はその他の[[別名]]です。
[SRC[>>98]]
--- [137] [CODE[Canonical_Combining_Class]] は例外で、
省略名の前に数値名が入ります。
[SRC[>>98]]
-- [139] 古い [[UCD]] では
[CODE[Age]],
[CODE[Block]],
[CODE[Joining_Group]]
に該当なしを表す特殊値
[DFN[[CODE[n/a]]]]
がありました。現在は使われていません。
[SRC[>>98]]
- [140]
省略名と長い名前が同じこともあります。 [SRC[>>98]]
[126] [[別名]]には次のような構文上の要件があります。 [SRC[>>98]]
オリジナルの[[特性]]や[[特性値]]については明言されていませんが、
それらも等しく“[[別名]]”であるとして同じ規則が適用されるものと思われます。
- [128] [[ASCII英数字]]、[CODE[_]] のみを使います。 [SRC[>>98]]
- [127] [[別名]]の[[比較]]では[[大文字と小文字]]の違いは重要ではありません。 [SRC[>>98]]
-- [129] つまり[[大文字と小文字]]の違いだけをもって異なる意味が割り当てられることがないということです。
[125]
[[特性]]や[[特性値]]の[[一致]]には、
[[別名]]も考慮する[RUBYB[べき][should]]です
[SRC[>>98]]。
[138]
[[特性]]の[[別名]]は、それが1つの[[名前空間]]となります。
[[特性値]]の[[別名]]は、各[[特性]]が1つの[[名前空間]]となります。
[SRC[>>98]]
[106]
[[別名]]の[[比較]]では、
[[大文字と小文字]]の違いは重要ではありません。
[SRC[>>98]]
;; [130] [[UCD]] データファイルでは長い[[別名]]は [[titlecase]]
が[RUBYB[好ましい][preferred form]]とされています。 [SRC[>>98]]
[[引用]]等では [[UCD]] データファイル中の表記を踏襲するのが望ましいと思われます。
[107]
別名は他の値と互いに等価です。
[[UCD]] の各ファイルにはオリジナルの値が使われていることもあれば、
別名が使われていることもあります。
[[UCD]] を読み取る実装はすべての値に対応する必要があります。
[[UCD]] の[[特性]]を使う実装も、普通はすべての値に対応する必要があります。
[EG[
[108] [[正規表現]]の [CODE[\p]] で[[UCD]]の[[特性名]]や[[特性値]]に[[別名]]も区別なく使えます。
]EG]
;; [117] 具体的には各[[特性]]の項を参照。
[131]
[[プラットフォーム]]に応じて[[別名]]を変換したり、
他の[[別名]]を追加したりしても構いません。
しかしながら、
[[データ形式]]等では[[相互運用性]]のため
[[UCD]] の[[別名]]を使うことが推奨されます。
[SRC[>>98]]
;; [132] [[プラットフォーム]]の慣習に応じて [CODE[_]] を [CODE[-]]
に置き換えたり、 [[CamelCase]] にしたり、
といった変形があっても差し支えないようです。
** 別名の比較
[124]
[[特性]]や[[特性値]]の[[別名]] ([RUBYB[記号値][symbolic value]])
の[[一致]] ([[等価性]]) は、
次によります。
[SRC[>>73 UAX44-LM3]]
- [146] [[大文字と小文字]]の違いは無視します。 [SRC[>>73]]
- [147] [[空白]]、[[下線]] [CODE[_]]、[[ハイフン]]は無視します。 [SRC[>>73]]
- [148] 先頭の [CODE[is]] は無視します。 [SRC[>>73]]
** 別名の安定性
[134]
通常の[[別名]]は[[安定性]]が保証されています。 [SRC[>>98]]
改訂によって変更・削除されることがありません。
[133]
ただし、
[[予備的特性]]や予備的データファイルについても[[別名]]は設定されることがありますが、
[[安定性]]は保証されません。
[SRC[>>98]]
* 数値の比較
[141]
[[数値特性]]の[[特性値]]の[[一致]]は、
[RUBYB[[[数値]]としての等価性][numeric equivalence]]によります。
[SRC[>>73 UAX44-LM1]]。
[EG[
[142]
"01.00" と "1" は等価です。
[SRC[>>73]]
]EG]
[EG[
[143]
[[UCD]] の "1.666667" は[[循環小数]]を表し、
"10/6" や "5/3"
と等価です。
[SRC[>>73]]
]EG]
;; [144] 例示だけで具体的な[[比較]]の方法は定められていません。
* 文字の名前の比較
[145] [[文字の名前]]を表す [CODE[Name]] の[[一致]]は、
特にその方法が規定されています。
[SRC[>>73 UAX44-LM2]]
[SEE[ [[文字の名前]] ]]
* 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]]
[[UAX #44]]
で変更しないと定められているものもあります [SRC[>>100]]。
一度決めた値が変更されることはない[[特性]]もあれば、
変更される可能性があるものもあります。
[EG[
[34]
[CODE[U+200B]]
[CODE(charname)@en[ZERO WIDTH SPACE]]
の
[CODE[General_Category]]
は、
[CODE[Zs]]
から
[CODE[Cf]]
に改正されました。
[SRC[>>30]]
]EG]
;; [114] 具体的には各[[特性]]の項を参照。
[36]
[[特性]]は、
[RUBYB[[[廃止]]][obsolete]]されることがあります [SRC[>>30]]。
廃止特性は、
重ねて[RUBYB[[[非推奨]]][deprecated]]や[RUBYB[[[安定化]]][stabilized]]されることがあります
[SRC[>>30]]。
状況の変化によって不要となったものが指定されるようです。
ただし[[特性]]自体は削除されることはない [SRC[>>30]]
とされ、恒久的に残されるようです。
[39]
[[非推奨]]の[[特性]]は、
使うべきではありません [SRC[>>30]]。
;; [101] [CODE[Deprecated]] という名前の特性もありますが、また別です。
[38]
[[安定化]]された[[特性]]は、
値が凍結されて以後メンテナンスされません [SRC[>>30]]。
[43]
[[UCD]]
に含まれる説明の [CODE[.html]]
ファイルは、
廃止されることがあります
[SRC[>>41]]。
廃止されると新しい版の
[[UCD]]
にはファイル自体が含まれなくなるようです。
* UCD のライセンス
[17] [[UCD]] のデータは [[EXHIBIT 1 UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE]]
の対象となっています。示された条件に従う限り、[[ソフトウェア]]への組み込みなど自由に利用できるようです。
* ファイル
[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[Jamo.txt]]
- [CODE[DerivedAge.txt]]
- [CODE[DerivedCombiningClass.txt]]
- [CODE[DerivedDecompositionType.txt]]
- [CODE[ArabicShaping.txt]]
- [CODE[DerivedJoiningGroup.txt]]
- [CODE[DerivedJoiningType.txt]]
- [CODE[Blocks.txt]]
- [CODE[PropertyValueAliases.txt]]
- [CODE[ScriptExtensions.txt]]
- [CODE[Scripts.txt]]
[HISTORY[
- [CODE[StandardizedVariants.html]]
]HISTORY]
]FIG]
[FIG(short list)[ [103] [[UCD]] 外の同様のファイル
- [CODE[emoji-variation-sequences.txt]]
- [CODE[IVD_Collections.txt]]
- [CODE[IVD_Sequences.txt]]
]FIG]
[83]
これらの[[ファイル]]の多くは[[文字]]の[[特性]]を記述したものですが、
それ以外のものもあります。
[[特性]]以外の各[[ファイル]]は[[規定]]
([DFN[N]], [DFN[Normative]]),
[[参考]]
([DFN[I]], [DFN[Informative]]),
予備的
([DFN[P]], [DFN[Provisional]])
に分類されています
[SRC[>>82]]。
[[特性]]にもそれぞれの状態が定められています (>>85)。
もっともこの分類は[[仕様書]]としての形式的なもので、
実用上気にする場面はありません。
[46]
比較的古いファイルは独特の形式で、
比較的新しいファイルはできるだけ共通の形式を採用しているようです。
[[ファイル]]と[[特性]]の関係に規則性はなく、
個別に調べていくしかありません。
1つの[[ファイル]]で複数の[[特性]]が定義されていることがあります。
[47]
多くのファイルは次のような構造をしています。
[SRC[>>45]]
- [48] [[UTF-8]] です。
- [49] [CODE(charname)@en[LF]] 区切りの[[行]]指向のファイルです。
- [50] [CODE[#]] から行末までは[[コメント]]です。
[[構文解析]]時にまず除去します。
- [51] 各[[行]]は、 [CODE[;]] で区切られた[RUBYB[欄][field]]で構成されます。
[[0起算]]で数えます。
- [54] 欄の先頭と末尾の[[空白]]は、意味を持ちません。除去して解釈します。
(ただし、古めのファイルには例外あり。)
- [67] 欄の値は、
複数の値の[[間隔]]区切りのリストとなっていることがあります。
値の順序に意味があることも、ないこともあります。
- [81] 欄の値が空になることがあります。
意味はファイルにより異なります。
- [52] 第0欄は[[符号位置]]またはその範囲を表します。
- [53] 第1欄は第0欄の[[符号位置]]についての情報を表します。
- [70] 特性値が[RUBYB[[[既定値]]][default value]]と同じとき、その[[符号位置]]の記述は省略できます。
[65] [[コメント]]には、
行頭に [CODE[#]] があって[[欄]]がないものもあります。
ファイルの先頭にはファイル情報が書かれています。
[[派生特性]]はその導出方法が書かれています (>>28)。
[[既定値]]についての説明が書かれていることもあります
(>>74)。
[CODE[@missing]]
は[[構文解析]]して使えることになっています。
[66]
[[欄]]の後に[[コメント]]が続くこともあります。
一定の書式で参考になる情報が書かれている場合もあります [SRC[>>45]]。
しかしあくまで参考であって、
変更されることもあり得るので、
[[構文解析]]して使う[RUBYB[べき][should]]ではありません [SRC[>>45]]。
-*-*-
[68] 第0欄には[[符号位置]]またはその範囲が指定されます。
また特性の値に[[符号位置]]が指定されることがあります。
次のように記述されます [SRC[>>45]]。
- [55] [[符号位置]]は、4桁から6桁の[[16進数]]列で表します。
([CODE[U+]] はつけません。)
- [56] [[符号位置]]の[[列][文字列]]は、
[[符号位置]]の[[間隔]]区切りで表します。
- [57] [[符号位置]]の範囲は、先頭と末尾の[[符号位置]]を
[CODE[..]] で連結して表します。
** [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]]
[80] 欄が[[空文字列]]のとき、
既定値であることを表します。
[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]]
* 文脈
[110]
[[UCD]] やその他の[[Unicode符号点]] [WEAK[(や[[Unicode符号点]]の[[列][文字列]])]]
の[[特性]]の情報は、
[[文字のレンダリング]]をはじめ[[文字]]の各種の処理で参照されます。
具体的には各[[特性]]の項を参照。
[111]
[[Unicode正規表現]]は [[UCD]] やその他の[[特性]]の多くにアクセスできる機能
[CODE[\p]]
を提供しています。
多くの[[プログラミング言語]]等の[[正規表現]]に組み込まれています。
[113]
多くの[[データ形式]]や[[プロトコル]]が、[[識別子]]や[[データ]]の構文の定義のために
[[UCD]] やその他の[[特性]]を直接または間接的に参照しています。
[112]
そうした機能の実装のために、多くの[[プラットフォーム]]や各種の[[プログラム]]が
[[UCD]] の一部または全部を組み込んで使っています。
* メモ
[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>