[7] Unicode Character Database は、 Unicode の文字に関するデータを集めたデータベースです。 Unicode の仕様の一部を構成する規定のデータと、それ以外の参考のデータが共に含まれています。 UCD は Unicode Consortium により管理、配布されていて、 Unicode 本体と連動して改訂されています。
[8] 現代の言語やプロトコルの多くは、利用可能な文字の定義や正規化・照合順序などのアルゴリズムで利用するデータとして、 直接的または間接的に UCD のデータを参照しています。最近の多くの OS やプログラミング言語の実行環境には UCD やそこから派生したデータが含まれています。
[11] Unicode Standard および Unicode Character Database では、文字に関するデータを文字 (符号位置) の特性と呼んでいます。
[21]
特性にはそれぞれ General_Category
や Age
のような名前がついています。
特性の名前は最低1つありますが、
別名が定義されているものもあります >>98。
[2] 例えば Bidi_Mirroring_Glyph
には
bmg
という略称があり、
関連する文書で使われることがある他、
別名リストにも掲載されています >>1。
[85] 特性は規定 (N, Normative), 参考 (I, Informative), Contributory (C), 予備的 (P, Provisional) に分類されています >>84。 もっとも実用上はこの違いは然程重要ではありません。
[12] 文字と特性のデータは >>9 の各ファイルに含まれています。どのように記述されているかはそれぞれの特性により異なり、 UAX #44 >>4 などに説明があります。
[37] 特性とその利用法については、 Unicode Standard 本体、 UCD の UAX #44、 UCD の各ファイル、 参照している各 UAX/UTS に分散して記述されています。 あちこちに情報が少しずつあって、 しかも相互のリンクが不十分なので、 苦労することも多いです。
[26] 単純特性と派生特性の違いは、 その特性が規定であるか参考であるかとは無関係です。 特性の重要度とも関係しません。
[25] contributory properties は、 単純特性のうち、 派生特性の規則の記述を簡潔にしたり一般化したりするために敢えて設けられたものです。 例外リストの記述の便法として使ったり、 重要な派生特性の安定性の保証に関係して使ったりされます。 >>22
[28] 派生特性の導出方法は、 UCD の各ファイルに注釈として説明がありますが、 改訂されることがあります >>22。 注釈の説明は参考です >>40。 導出方法と示された特性値が矛盾する場合、 示された特性値の方が規定と解釈されるべきです >>22。 実装は、誤りを防ぐため、単純特性から派生特性を導出するのではなく、 直接派生特性を使うべきです >>22。
[115]
Unicode符号点はただでさえ
[ U+0000
, U+10FFFF
]
という大きな集合なので、
特性値を他の特性値の組み合わせで記述できるなら、
それで保存データ量を削減したいと思ってしまいます。
しかし実際派生特性の計算はかなり複雑だったりしますから、
素直に公式データをそのまま使った方が安全です。
[29] Unicode 10.0 から Unicode 12.1 まで、 segmentation 関係の特性が外部 (UCD 以外) の仕様の特定の版に依存する形で定義されていました。 UAX #14, UAX #29, UTS #51 で説明されていました。 Unicode 13.0 から UCD だけで完結するように改められました。 >>22
[87] 特性は値により次のように分類されています。 >>84
[116] ほとんどの特性には既定値が決められていて、 ファイルで省略されているときはその既定値が特性値となります。 既定値は UCD のファイルの解釈に使うためのもので、 特性を使う処理の性質とは必ずしも関係ありません。
[74] 既定値はファイルのコメントの
@missing
行に機械可読に書かれることがあります。 >>45
いくつかの特性の既定値は例外的なものや複雑な方法で決定されるもので、
個別に説明があります
>>75, >>76。
# @missing: 0000..10FFFF; <none>
... のように、 # @missing:
の後に欄が続きます。
第0欄が適用対象の符号位置 (の範囲)、
第1欄が特性値を表します。
>>45
[78] ただし、一部のファイルには複数の特性が書かれているため、 第1欄が特性名、 第2欄が特性値を表します。 >>45
[79]
値には、
special tag
が使われることがあります。
<node>
は空文字列、
<code point>
は符号位置の値の文字列表現、
<script>
は符号位置の
Script
特性値を表します。
>>45
[97] 値には、 別名が定義されていることもあります >>98。 各仕様書などで使われることがあります。 (>>122)
[123] UCD の特性やその値には、大量の別名があります。
PropertyAliases.txt
には、
特性の別名が収録されています >>1, >>98。PropertyValueAliases.txt
には、
特性値の別名が収録されています >>105。[126] 別名には次のような構文上の要件があります。 >>98 オリジナルの特性や特性値については明言されていませんが、 それらも等しく“別名”であるとして同じ規則が適用されるものと思われます。
[125] 特性や特性値の一致には、 別名も考慮するべきです >>98。
[138] 特性の別名は、それが1つの名前空間となります。 特性値の別名は、各特性が1つの名前空間となります。 >>98
\p
においては、二値特性の名前を記述するべき欄に特例で
General_Category
と
Script
の特性値を記述できます。
\p
においては、
特性の名前として
UCD特性の他にもいくつかの値が指定できます。
また、特別な意味を持つ
identity
という値も指定できることがあります。[106]
先頭の is
の有無 (>>148)
だけの違いで別名の解釈が変わることもありません。
>>73
[107] 別名は他の値と互いに等価です。 UCD の各ファイルにはオリジナルの値が使われていることもあれば、 別名が使われていることもあります。 UCD を読み取る実装はすべての値に対応する必要があります。 UCD の特性を使う実装も、普通はすべての値に対応する必要があります。
[131] プラットフォームに応じて別名を変換したり、 他の別名を追加したりしても構いません。 しかしながら、 データ形式等では相互運用性のため UCD の別名を使うことが推奨されます。 >>98
[156]
Perl の正規表現 \p
における General_Category
では、
UCD の別名に加えて L&
が使えます。
[124] 特性や特性値の別名 (記号値) の一致 (等価性) は、 次によります。 >>73 UAX44-LM3
[149]
なお、 Line_Break
に IS
がありますが、
値全体であって接頭辞ではないこと、
null value (ここでは空文字列のことか)
は有効な値ではないことに注意されています。
>>73
[152]
Unicode正規表現の \p
では、
この一致によることが推奨または要求されます。
ただし、
is
を無視する件は要求されないことがあります。
[153]
\p
では特性値をワイルドカード比較できます。
このとき無視は行われず、元の値と比較されます。
[134] 通常の別名は安定性が保証されています。 >>98 改訂によって変更・削除されることがありません。
[133] ただし、 予備的特性や予備的データファイルについても別名は設定されることがありますが、 安定性は保証されません。 >>98
[145] 文字の名前を表す Name
の一致は、
特にその方法が規定されています。
>>73 UAX44-LM2
[13] UCD は Unicode が改版される度に併せて改訂されています。特に小改訂は UCD の更新が主目的であることもあります。
[14] Unicode の版によって値が変化する(可能性のある)特性もあれば、 不変であることが保証されている特性もあります。特性自体も改版により増えたり、減ったりしています。
[15] >>8 の通り、多くの言語やプロトコルには何らかの形で UCD のデータや Unicode の演算の実装が含まれています。それぞれが対応している Unicode の版に違いがあると、 正しくない結果が得られる可能性もあります。
[31] UCD のある特定の版は、 安定であって、出版後変更されることがありません >>30。 誤りは Errata で公表され、必要に応じて次の版で修正されます >>30。 しかしその特定の版のファイル自体は変更されません。
[32] UCD は、 Unicode の Webサイトで版ごとに公開されています。 この URL は安定で、 恒久的に提供されるとされています。 >>30 UCD の各ファイルは Webサイトから誰でも無償で入手可能です。
[42] 版が指定されない、最新版の UCD にアクセスできる URL もあります >>6。 UCD を使ったプログラムのための元データとして取得するときは、 この URL を使うのが便利です。
[33] (版をまたいだ) 特性の安定性は、 Unicode Consortium Stability Policies にまとめられています。 >>30 UAX #44 で変更しないと定められているものもあります >>100。 一度決めた値が変更されることはない特性もあれば、 変更される可能性があるものもあります。
[34]
U+200B
ZERO WIDTH SPACE
の
General_Category
は、
Zs
から
Cf
に改正されました。
>>30
[36] 特性は、 廃止されることがあります >>30。 廃止特性は、 重ねて非推奨や安定化されることがあります >>30。 状況の変化によって不要となったものが指定されるようです。 ただし特性自体は削除されることはない >>30 とされ、恒久的に残されるようです。
[39] 非推奨の特性は、 使うべきではありません >>30。
Deprecated
という名前の特性もありますが、また別です。[38] 安定化された特性は、 値が凍結されて以後メンテナンスされません >>30。
[43]
UCD
に含まれる説明の .html
ファイルは、
廃止されることがあります
>>41。
廃止されると新しい版の
UCD
にはファイル自体が含まれなくなるようです。
[17] UCD のデータは EXHIBIT 1 UNICODE, INC. LICENSE AGREEMENT - DATA FILES AND SOFTWARE の対象となっています。示された条件に従う限り、ソフトウェアへの組み込みなど自由に利用できるようです。
[9] UCD のデータはテキストファイルとして提供されています。その書式はファイルにより異なり、 UAX #44 >>4 で説明されています。
NamesList.txt
NamesList.html
PropertyAliases.txt
CompositionExclusions.txt
DerivedBinaryProperties.txt
BidiMirroring.txt
BidiBrackets.txt
StandardizedVariants.txt
Jamo.txt
DerivedAge.txt
DerivedCombiningClass.txt
DerivedDecompositionType.txt
ArabicShaping.txt
DerivedJoiningGroup.txt
DerivedJoiningType.txt
Blocks.txt
PropertyValueAliases.txt
ScriptExtensions.txt
Scripts.txt
USourceData.txt
[83] これらのファイルの多くは文字の特性を記述したものですが、 それ以外のものもあります。 特性以外の各ファイルは規定 (N, Normative), 参考 (I, Informative), 予備的 (P, Provisional) に分類されています >>82。 特性にもそれぞれの状態が定められています (>>85)。 もっともこの分類は仕様書としての形式的なもので、 実用上気にする場面はありません。
[46] 比較的古いファイルは独特の形式で、 比較的新しいファイルはできるだけ共通の形式を採用しているようです。 ファイルと特性の関係に規則性はなく、 個別に調べていくしかありません。 1つのファイルで複数の特性が定義されていることがあります。
[47] 多くのファイルは次のような構造をしています。 >>45
LF
区切りの行指向のファイルです。#
から行末まではコメントです。
構文解析時にまず除去します。;
で区切られた欄で構成されます。
0起算で数えます。[65] コメントには、
行頭に #
があって欄がないものもあります。
ファイルの先頭にはファイル情報が書かれています。
派生特性はその導出方法が書かれています (>>28)。
既定値についての説明が書かれていることもあります
(>>74)。
@missing
は構文解析して使えることになっています。
[66] 欄の後にコメントが続くこともあります。 一定の書式で参考になる情報が書かれている場合もあります >>45。 しかしあくまで参考であって、 変更されることもあり得るので、 構文解析して使うべきではありません >>45。
[68] 第0欄には符号位置またはその範囲が指定されます。 また特性の値に符号位置が指定されることがあります。 次のように記述されます >>45。
U+
はつけません。)..
で連結して表します。UnicodeData.txt
[58] UnicodeData.txt
は、
UCD
のファイルの1つです。
古くからある基礎的な特性が記述されています。
[60] UnicodeData.txt
のデータは他のファイルにも含まれていて、
そちらの方が使いやすいかもしれません。
[62] このファイルの形式は、 UCD の新しいファイルの形式 (>>46) と少し違うところもあります。
[80] 欄が空文字列のとき、 既定値であることを表します。 >>45
[61] CJK統合漢字やハングル音節や私用域などは各符号位置ではなく範囲として記述されているので注意が必要です。 また、未割当の符号位置や非文字は含まれていません。
[64] この範囲の記述形式は、
新しいファイルのような ..
を使う形式ではなく、
範囲の先頭の符号位置と、最後の符号位置の行を別々に記述する形式となっています。例えば、
4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;; 9FEF;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
... のように <..., First>
,
<..., Last>
と書かれた2つの行で範囲であることが示されます。>>45
[110] UCD やその他のUnicode符号点 (やUnicode符号点の列) の特性の情報は、 文字のレンダリングをはじめ文字の各種の処理で参照されます。 具体的には各特性の項を参照。
[111]
Unicode正規表現は UCD やその他の特性の多くにアクセスできる機能
\p
を提供しています。
多くのプログラミング言語等の正規表現に組み込まれています。
[113] 多くのデータ形式やプロトコルが、識別子やデータの構文の定義のために UCD やその他の特性を直接または間接的に参照しています。
[112] そうした機能の実装のために、多くのプラットフォームや各種のプログラムが UCD の一部または全部を組み込んで使っています。
[16] 符号化文字集合の実装のためには、仕様書本文だけでなく、含まれている各文字の詳細な情報が必要になります。 旧来の符号化文字集合は比較的小規模で性質の似た文字のみを含んでいたこともあり、 そのような情報をほとんど提供してきませんでした。 UCD のような形で機械可読な実装用の情報を提供する符号化文字集合は他に無く、 これが Unicode の成功の要因の1つと言えるかもしれません。 (ISO/IEC 10646 も単独では十分な実装が困難でしょう。)
[20] → ISO/IEC 10646 も単独を諦めて、今では多くの項目が Unicode を参照する形になっています。
[3] UTR #23: The Unicode Character Property Model ( 版) http://unicode.org/reports/tr23/
[18] Remove Unicode database version requirement · whatwg/javascript@4f1a517 ( 版) https://github.com/whatwg/javascript/commit/4f1a517f02bc15e934aafae0ec2b47c80786ab7f