XMLの仕様書は、文字の規格としてUnicodeを少なからず頼っているので、XML 1.1の仕様書の中にもUnicode用語はしばしば出てきます。Combining CharacterとかComposing CharacterとかPrecomposed FormとかCanonical Decomposition MappingとかPrimary Compositeとか……。最初はCombining Characterを「複合文字」と訳しましたが、その内Composing Characterが出てきて「あれ? 同じ意味じゃ……」と思って数瞬固まりました。The Unicode Consortiumのサイトの情報を色々漁ってみましたが、何だかよく判らず、結局、日本語に訳された形を探してみると……ありましたありました。ものかの - Unicode正規化 その1に欲しい情報がまとめて書いてありました(ありがたい)。ついでにGlossary of Unicode Termsという文書も発見。ほうほう、こりゃ便利。なんで今まで出会わなかったのだろう。
一応、忘れない為に、自分なりに必要な用語をまとめておこう。
- Combining Character
-
文字通りCombining(結合する)Character(文字)。日本語では、主に「結合文字」と訳されるようだ。
日本語の「結合文字」では明らかでないが、Combining Characterという語は、文字通り「能動的に」結合する文字を指す。Combined Characterではない。具体的には、
accents, diacritics, Hebrew points, Arabic vowel signs, and Indic matras
など。The combining character is said to apply to that base character.
、らしい。日本語にすると、このapplyは自動詞だから「結合文字はその基底文字に当てはまると言う。」って所か。Combining Characterは、場合によってはBase Characterに先行されない事や、Base Characterに結合する事が(恐らくソフトウェアの制約から)できない事がある。何れの場合でも、Combining CharacterはあたかもそれがBase Characterであるかのように描画される……かも知れない。辞書には明確に書かれていないが、combineはcomposeよりも「組み合わさる」という点で意味が弱いようだ。むしろ、「くっつく」程度と言った方がいいかも知れない。UnicodeのCombining Characterは文字としてBase Characterと分離されており、例えば──UTF-16ではこのような表現をしても多分問題無いと思うのだけれども、ものかの - Unicode正規化 その1で例に挙げられているポで言えば、Base Character「ホ」#x30DBにCombining Character「゚」#x309Aが当てはまった#x30DB #x309AというCombining Character Sequenceは、一文字ずつ、つまり2バイトずつに分割する事が矛盾無く行える(勿論日本語としては#x309Aが浮くのは駄目だと思うが、これを切り離してどっかに持って行って別の半濁点を付けられるBase Characterの後に置く事が矛盾無く行える、という事)。
参考 : Unicode 4.0.0 - Chapter 3 Conformance - 3.6 Combination - D14 Combining character
- Base Character
-
先行する文字に結合したりしない文字で、制御文字でも形式文字(フォーマット文字?)でもないもの。殆どのUnicode文字はBase Character。日本語では、主に「基底文字」と訳されるようだ。
参考 : Unicode 4.0.0 - Chapter 3 Conformance - 3.6 Combination - D13 Base character
- Combining Character Sequence
- Composite Character Sequence
-
Combining character sequenceの定義として、
A character sequence consisting of either a base character followed by a sequence of one or more combining characters, or a sequence of one or more combining characters.
とある。また、備考としてA combining character sequence is also referred to as a composite character sequence.
ってのもある。「一つのBase Characterの後に一つ以上のCombining Characterが続いたもの」から成る一連の文字、あるいは一連の(1文字以上の)Combining Character。文字の並びである事を強調する為にStringを使っていないのかな。Combining Character Sequenceは文字通り「結合文字列」と訳していいだろう。でも、ものかの - Unicode正規化 その1でも触れられているけど、この意味でComposite Character Sequenceはおかしい気が。少なくとも、誤解を招きかねない、っていうか招くよ、これじゃ……
参考 : Unicode 4.0.0 - Chapter 3 Conformance - 3.6 Combination - D17 Combining character sequence
- Composite Character
- Precomposed Character
- Decomposable Character
-
A character that is equivalent to a sequence of one or more other characters, according to the decomposition mappings......(後略)
、つまりBase CharacterやCombining Characterの組み合わせで表現できる文字を、一つにまとめてしまった文字。日本語にすれば、それぞれ「合成文字」「合成済み文字」「分解可能文字」って所だろうか。これを見ても、composeはcombineより「組み合わさる」という点で意味が強いようだ。combinationやbondを化学が扱うものとすれば、compositionは錬金術が目指したもの、って感じかなあ(強引かも)。……ああ、核融合がする事って言った方が正確かな。
- Composing Character
-
これはUnicode用語に見えて実はXML用語で、www.unicode.orgを"Composing Character"でGoogle検索してもヒットしない。将来的には出てくるかも知れないけど。日本語にすると……「合成文字」? うー、Composite Characterと被る。「XMLにおける合成文字」ってしとくか。あるいは開き直って「コンポージングキャラクタ」で通すか。
これはどちらかと言うとCombining Characterの変種らしい。次の何れかあるいは両方に当てはまるものがComposing Characterであるとされている。
- あるPrimary CompositeのCanonical Decomposition Mappingにおいて2番目の文字。
- 非ゼロのCanonical Combining Classを持つもの。
意味的には「特殊な結合文字」辺りが的を射ている気がする。
参考 : Extensible Markup Language (XML) 1.1 (Second Edition) - composing character
- Canonical
-
これは形容詞。数学の「極限まで単純化された」辺りの意味からとったものだろう、と思う。Unicodeでは
(1) Conforming to the general rules for encoding—that is, not compressed, compacted, or in any other form specified by a higher protocol.
という語義が第一に挙げられている。つまり、Composite CharacterをDecompositeした後のCombining Character SequenceはCanonicalと形容されるという事だろうか。日本語にするとしたら、「極限」? 「極単」? それとも、数学のCanonical Formが「標準形」と呼ばれるように「標準」? - Primary Composite
-
Glossary of Unicode Termsに拠れば、
A character that has a canonical decomposition mapping in the Unicode Character Database (or is a canonical Hangul decomposition) but which is not in the Composition Exclusion Table.
との事。UAX #15のD3にも同様の説明がある。Composition Exclusion Tableで除外されているもの以外の、Canonical Decomposition Mappingを持つ文字?参考 : Glossary of Unicode Terms - Primary Composite、Unicode Standard Annex #15 UNICODE NORMALIZATION FORMS - D3 primary composite
- Canonical Decomposition Mapping
-
Unicode 5.0.0のUNICODE CHARACTER DATABASEを見ると……う、あ、頭が痛くなってきた。うーん、UnicodeData.txtを引っ張ってきて、正規表現
^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;;[^\n]+$
で表される行を消した後に残る行が、Decomposition Mappingを持つ文字か。なるほど、LATIN CAPITAL LETTER A WITH GRAVE
とか、HIRAGANA LETTER GA
とかは分解できる訳か(UnicodeData.txtには5402文字、Decomposition Mappingを持つ文字があるようだ)。でも、NO-BREAK SPACE
とかもマップされちゃうんだなあ。Character Decomposition Mappingでは、
The tags supplied with certain decomposition mappings generally indicate formatting information. Where no such tag is given, the mapping is canonical.
とも書いてある。続けて、Conversely, the presence of a formatting tag also indicates that the mapping is a compatibility mapping and not a canonical mapping.
ともある。そのthe compatibility formatting tagsは、テーブルでそれらのタグ(例えば<font>、<noBreak>、<initial>など)がリストにまとめられている。ふーん、じゃあ、更に^[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;<[^;]+;[^\n]+$
で表される行を弾いた後の、こういうタグがついていないLATIN CAPITAL LETTER A WITH GRAVE
とかLATIN SMALL LETTER A WITH GRAVE
、HIRAGANA LETTER GA
とかの2043文字はCanonicalがついた方のCanonical Decomposition Mappingを持つ訳ね。Primary Compositeは、正確には
A character that has a canonical decomposition mapping in the Unicode Character Database (or is a canonical Hangul decomposition) but which is not in the Composition Exclusion Table.
だった。だから、UnicodeData.txtの文字について言えば、これらの2043文字の内、CompositionExclusions.txtに載っている1009文字の内、UnicodeData.txtにも載っているものを除いた文字がPrimary Compositeという訳だ。え? Unihan.txt? ……28MBもあるし、インクリメンタルレンダリングが苦手というレベルではないIE7が見事にお逝きになったから、抵抗が……FirefoxとかOperaなら大丈夫かしら。てか、きっとIE7はレンダリングを別のスレッドでやってないか、スレッドの優先順位がおかしいんだね。おっと脇道に逸れた。XML 1.1の仕様書では、Primary CompositeのCanonical Decomposition Mappingの二文字目が、Composing Characterになる一つの条件だった。何でこんな書き方をしているのかと思って調べてみると、UnicodeData.txtに載っていたCanonical Decomposition Mappingを持つ文字(注意、Primary Compositeではない)2043文字の内、二文字のマッピングを持っているものが1013文字で、一文字のマッピングを持っているものが残りの1030文字、つまりUnicodeData.txtには三文字以上にマップされる文字は無かった。これが、
the second character in the canonical decomposition mapping of some primary composite (as defined in D3 of UAX #15 [Unicode])
とい表現を生んだのだろう。なんで"the second character or later...."ってならないのかと思ってたら、こういう訳ね。……え? Unihan.txt? ……。参考 : UNICODE CHARACTER DATABASE - Character Decomposition Mapping
- Decomposition
- Full Decomposition
-
大体の場合、分解。
(1) The process of separating or analyzing a text element into component units. These component units may not have any functional status, but may be simply formal units—that is, abstract shapes.
。Composite CharacterをCombining Character Sequenceにする処理の事だろう。Canonicalな場合はCanonical Decompositionを参照。Compatibilityな場合は省略。(2) A sequence of one or more characters that is equivalent to a decomposable character.
ってのもあるから油断できない。こちらは分解した後のもの、って事で「分解後の文字列」?(1)の意味の分解では、文字によっては元から一文字で、分解できるはずが無いのに、(文字の数が増えるのではなく)別の文字に変わってしまうものもあるらしい。
参考 : Glossary of Unicode Terms - Decomposition、ものかの - Unicode正規化 その3
- Canonical Decomposition
-
次のように遂行される、あるいは次のように遂行されたのと同じ効果を持つDecomposition。
- Canonical Mappingを再帰的に適用して、完全にCanonicalなCharacter Sequenceを作る。
- Canonical Reordering Algorithmを適用する。
Canonical Decomposition MappingはCompositionの時にも使われるから、ここではCanonical Mappingとなっているのだろう。Canonical Reordering Algorithmは、多分UAX #15のD2辺りで説明されている話で、Starter(Combining Classに0を持つ文字)SとCombining CharacterであるCがBにblockされないようにする処理の事だろう。つまり、BがCombining Characterであれば、Combining Classが低い順にSの後ろに並べる(その場合SCB)という事だと思われる。UCDのDecompositions and Normalizationで触れられているように、現在ではこのReorderingは実質的には必要でないらしい。が、必ずしなければならない(MUST)らしい。将来のバージョンで必要になる可能性があるのかしら。
reorderはre+orderだし、3.11 Canonical Ordering Behaviorをもう一回しろって所かも。
参考 : UNICODE CHARACTER DATABASE - Character Decomposition Mapping、Unicode 4.0.0 - Chapter 3 Conformance - 3.11 Canonical Ordering Behavior
- Combining Class
-
A numeric value given to each combining Unicode character that determines with which other combining characters it typographically interacts.
らしい。 - Canonical Combining Class
-
UCDのUCD Proprty FilesのUnicodeData.txtの説明で、Canonical_Combining_Classフィールドの説明には
(3) The classes used for the Canonical Ordering Algorithm in the Unicode Standard. For the property value names associated with different numeric values, see DerivedCombiningClass.txt and Canonical Combining Class Values.
とある。このフィールドはデフォルト値として0を持っているようだけど、省略しているものは無いようなので
^[^;]*;[^;]*;[^;]*;0;[^\n]+$
の行を消すと、UnicodeData.txtには418の非ゼロCombining Character Classを持つ文字がある事が判る。Property Invariantsにも書いてあるけど、現段階ではGeneral CategoryがMn(Mark, Nonspacing)以外の文字は全てこの値に0を持つようだ。将来的にも、Mc(Mark, Spacing Combining)とMe(Mark, Enclosing)に分類される文字が0以外の値を持つ可能性はあるけど、それ以外のカテゴリの文字なら必ず0を持つ事がinvariant(不変)とされてる。参考 : UNICODE CHARACTER DATABASE - Canonical Combining Class Values
- Canonical Equivalent
-
名詞句。
Two character sequences are said to be canonical equivalents if their full canonical decompositions are identical.
だと。「極限一致文字列」? なんか気持ち悪いな。「究極一致文字列」? 「完全一致文字列」?形容詞句Canonically Equivalentってのもあるけど、こっちは定義無しに使われている気がする。
参考 : Unicode 4.0.0 - Chapter 3 Conformance - 3.7 Decomposition - D24 Canonical Equivalent
- Primary Combined
-
A character X can be primary combined with a character Y if and only if there is a primary composite Z that is canonically equivalent to the sequence <X, Y>.
というように使われる。Primarily Combinedじゃないのね。参考 : Unicode Standard Annex #15 UNICODE NORMALIZATION FORMS - D4 primary combined
- Normalization Form C
-
「正規形C」らしいけど、これは固有名詞でいいような気もするなあ。具体的には、文字列SのNormalization Form Cは次の手順を踏むことで得られる(同じ結果が得られればこの通りでなくても良い)。
- Unicode Character Databaseの最新版に収められているDecomposition Mappingを用いて、文字列SのCanonical Decompositionを生成する。このDecompositionは(2)の意味っぽいな。
- 分解後の文字列に含まれる文字Cそれぞれについて、次の処理を繰り返す。もしCが直前のStarterからblockされておらず、なおかつCがLとPrimary Combineできるのであれば、LをPrimary CompositeであるL-Cで置き換えて、Cを削除する。
ははぁ、なるほど。やる事は(Primary Compositeの判定を除けば)実に単純明快だけど、ここまで辿り着くのは中々大変だなあ。
参考 : Unicode Standard Annex #15 UNICODE NORMALIZATION FORMS - R1. Normalization Form C、ものかの - Unicode正規化 その4
- Kanji
-
勿論「漢字」の事。ちょっと不思議に思って調べてみたら、
The Japanese name for Han characters; derived from the Chinese word hànzì. Also romanized as kanzi.
だって。ははぁ、なるほど、それでUnicodeData.txtには漢字が入ってない訳。……って事はやっぱり、Unihan.txtの中なんだろうなあ。
でも、Unicodeの資料って、自分でXMLの仕様書に書いてある事を理解しようと思って色々調べてみても、結局翻訳する時には殆ど現れない事が多いんですよね。だからUnicodeなんて大嫌いだ。でもUnicodeが大好きです。
はあ、XML 1.1 Second Editionの翻訳はそろそろ3 Logical Structureに入ろうかという所。2.13 Normalization CheckingとかいうUnicode用語を臆面も無く使うセクションがあるからだ。