Unicode用語の憂鬱

| コメント(0) | トラックバック(0)

概要: XMLの仕様書は、文字の規格としてUnicodeを少なからず頼っているので、XML 1.1の仕様書の中にもUnicode用語はしばしば出てきます。Combining CharacterとかCompos...

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は錬金術が目指したもの、って感じかなあ(強引かも)。……ああ、核融合がする事って言った方が正確かな。

参考 : Glossary of Unicode Terms - Decomposable Character

Composing Character

これはUnicode用語に見えて実はXML用語で、www.unicode.orgを"Composing Character"でGoogle検索してもヒットしない。将来的には出てくるかも知れないけど。日本語にすると……「合成文字」? うー、Composite Characterと被る。「XMLにおける合成文字」ってしとくか。あるいは開き直って「コンポージングキャラクタ」で通すか。

これはどちらかと言うとCombining Characterの変種らしい。次の何れかあるいは両方に当てはまるものがComposing Characterであるとされている。

  1. あるPrimary CompositeのCanonical Decomposition Mappingにおいて2番目の文字。
  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が「標準形」と呼ばれるように「標準」?

参考 : Glossary of Unicode Terms - Canonical

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 CompositeUnicode 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 GRAVEHIRAGANA 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。

  1. Canonical Mappingを再帰的に適用して、完全にCanonicalなCharacter Sequenceを作る。
  2. 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 MappingUnicode 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.らしい。

参考 : Glossary of Unicode Terms - Combining Class

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は次の手順を踏むことで得られる(同じ結果が得られればこの通りでなくても良い)。

  1. Unicode Character Databaseの最新版に収められているDecomposition Mappingを用いて、文字列SのCanonical Decompositionを生成する。このDecompositionは(2)の意味っぽいな。
  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の中なんだろうなあ。

参考 : Glossary of Unicode Terms - Kanji

でも、Unicodeの資料って、自分でXMLの仕様書に書いてある事を理解しようと思って色々調べてみても、結局翻訳する時には殆ど現れない事が多いんですよね。だからUnicodeなんて大嫌いだ。でもUnicodeが大好きです。

はあ、XML 1.1 Second Editionの翻訳はそろそろ3 Logical Structureに入ろうかという所。2.13 Normalization CheckingとかいうUnicode用語を臆面も無く使うセクションがあるからだ。

トラックバック(0)

トラックバックURL: http://w4ard.s26.xrea.com/program/mt/mt-tb.cgi/34

コメントする

このブログ記事について

このページは、E+Xが2007年3月24日 10:19に書いたブログ記事です。

ひとつ前のブログ記事は「「整形式」?」です。

次のブログ記事は「WWWWARDの文書は暗号で書かれているのか?」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。