[17] XML の生成規則 Char
は、XML で用いられる文字を表しています。
本項では Char
やより一般に XML における文字の扱いについて扱います。
[23] 文字は、テキストの原子的な単位であり、 ISO/IEC 10646 によって規定されるものです。 >>18
XML 1.0 (文字) | XML 1.0 (文字参照) | XML 1.1 (文字) | XML 1.1 (文字参照) | HTML (文字) | HTML (文字参照) | |
U+0000 (NULL ) | × | × (置換) | ||||
U+0001 -U+0008 | × | ○ (非推奨) | × | |||
U+0009 (タブ) | ○ | |||||
U+000A (LF ) | ○ | |||||
U+000B | × | ○ (非推奨) | × | |||
U+000C (FF ) | × | ○ (非推奨) | ○ | |||
U+000D (CR ) | ○ (正規化) | ○ | ○ (正規化) | ○ | ○ (正規化) | × |
U+000E -U+001F | × | ○ (非推奨) | × | |||
U+007F (DEL ) | ○ (非推奨) | × | ○ (非推奨) | × | ||
U+0080 -U+0084 | ○ (非推奨) | × | ○ (非推奨) | × | × (置換) | |
U+0085 (NEL ) | ○ | ○ (正規化) | ○ | × | × (置換) | |
U+0086 -U+009F | ○ (非推奨) | × | ○ (非推奨) | × | × (置換) | |
U+2028 (LS ) | ○ | ○ (正規化) | ○ | |||
U+D800 -U+DFFF (surrogate) | × | ○ | × (置換) | |||
U+FDD0 -U+FDEF (非文字) | ○ (非推奨) | × | ||||
U+FFFE -U+FFFF (非文字) | × | |||||
U+???FE -U+???FF (非文字) | ○ (非推奨) | × | ||||
U+10FFFE -U+10FFFF (非文字) | ○ (非推奨) | × | ||||
U-00110000 - | × | × (置換) |
RestrictedChar
[19] XML 1.1 では Char
の一部は RestrictedChar
とされ、文字参照として XML で利用することはできるものの、直接含めることはできないとしていました。
[21] この RestrictedChar
には、 XML 1.0 で利用できる文字も利用できない文字も含まれています。
XML 1.1 の実質的な後継である XML 1.0 5e にこの扱いは受け継がれていません。
[30] XML の Note は、著者に対し、 Unicode 2.3節に従い「compatibility characters」を避けることを勧めています。 >>18
[35] 制御文字の多くや非文字も同じような扱いを受けています。 この部分は XML 1.0 と XML 1.1 でやや異なります。
[1] Unicode in XML and other Markup Languages という W3C WG Note http://www.w3.org/TR/unicode-xml/ / UTR #20 http://www.unicode.org/reports/tr20/ は、マーク付け言語で使うべきではない文字などを解説しています。
[37] 平成時代中頃に作られ、 「マーク付け言語」と言っていますが具体的には主に XML 1.0、 ある程度は HTML4 が想定されていました。
[39] Unicode や W3C の国際化の専門家を称する人々によって開発されました。
[38] その後メンテナンスされずに放置され、 平成時代の末に正式に廃棄されました。 この仕様書について、開発の過程については unicode-xml 参照。
[40] 仕様書としての位置付け、対象読者はいまいちよくわからず、 標準技術の開発者にも著者にもあまり参照されることなく、 標準仕様や実装の状況ともあまり関係していません。
[2] 次の文字はマーク付け言語と一緒に使用するのは不適当です。
行分離子 LS
, 段落分離子 PS
, バイト順印 BOM
を除いては、 UA は無視するのもよし。
適当なマークに変換するのは著述工具の責任だそうです。
参考: http://www.w3.org/TR/unicode-xml/#Suitable
[4] LS
と PS
は、
ブラウザは空白とし、編集時は適当なマークに置き換えるのが適切です。
[3] BIDI 系は Strongly discouraged in [HTML 4.0]
などと書かれていますが、 HTML 4 が激しく非推奨しているように読めて紛らわしい。
(IW:HTML4:"struct/dirlang.html#h-8.2.4" にはそんなことは書かれていません。)
http://www.w3.org/TR/unicode-xml/#Bidi で、 HTML 4 は文字コードによる書字方向指定と HTML のマークによる指定のいずれかだけを使うように求めているが、 文字コードによる指定は処理が複雑になってよくないのでマークを使えと言っています。
ブラウザは無視し、編集時はマークに変換するのがいいそうです。
[5] DIS10646 の遺産。ブラウザは無視したらよく、 編集時は警告でもして削除するのがよいですが、 適当に変換してもいいでしょう。ということです。
[6] U+FEFF
は、 ZERO WIDTH NO-BREAK SPACE
と BYTE ORDER MARK
の二つの機能を一つの符号位置に押し込んで、
あとから都合が悪くなったので ZWNBSP
の機能を U+2026
WORD JOINER
として分離したという恥ずかしい前歴があります。
従って今では U+FEFF
を
ZWNBSP
として使用することは Unicode
が非推奨としています。
ブラウザは文中の U+FEFF
は
ZWNBSP
として扱い、編集時は
ZWJ
に置き換えてしまう及び/又は警告を発してよいとされています。
[7] Unicode に通称 ruby tag が入った経緯は http://www.kobysh.com/tlk/digitalculture/1998-ruby.html でも見てください。阿呆らしい。
ブラウザは無視してかまいません。 編集時は次のひとつ以上の動作を取ってかまいません。
(ブラウザも完全に無視したら駄目だと思うのだけどなあ。
rt
部分を削除しないと。)
[8] ブラウザは無視してかまいません。 編集時は適当なマークに置換可能ならそうしてもいいし、 警告を出せるなら出して、削除してしまってかまいません。
[9] ブラウザは無視してかまいません。 編集時には削除しても適当なマークに置換してもかまいません。
[10] http://www.w3.org/TR/unicode-xml/#Format がマーク付け言語で使うのは適切だと言っている文字と、 その説明をどうぞ:
[11] http://www.w3.org/TR/2003/NOTE-unicode-xml-20030613/#Format
では Combining Grapheme Joiner
が U+0363
になっていますが、
U+0363
は COMBINING LATIN SMALL LETTER A
だったりします。
[12] ここに挙がっている文字は、大体は、純粋(謎)な文字としての表現と書式 (極端に言えば飾り) との区別が難しい表現を実現するためのものです。 ハイフン付け関係などは本来マーク + スタイル言語で実現するべきだとは思いますが、 スタイル言語の規格および実装が完成していない現状ではマーク付け言語で使っても仕方がないでしょう。 (といっても文字としても実装されている例はさほどないのだけど。)
ただし、 FRACTION SLASH
などは、
MathML で実現できると書いているくらいですから、
不適当に分類するべきではないですか。
[13] 互換写像を持つ文字を含む文章をマークするときの処遇が http://www.w3.org/TR/unicode-xml/#Compatibility に書かれています。
互換写像を持つ文字には、丸付き文字、片仮名の組み文字、 全角文字、半角文字などが含まれます。 いずれも、本来は組版の機能により実現されるべきものですが、 文字コードの闇歴史で次々と実用化(wされてきました (そして Unicode はそれを貪欲に取込んでいます)。
互換写像を持つ文字は、一般には機械的にマークに置き換えることはできません。 (不思議マーク付けを機械的に Strict 化できないのと同じ理由。) http://www.w3.org/TR/unicode-xml/#Compatibility はどれは機械的に変換できて、どれはとりあえず残すべきかをまとめています。
互換写像を持つ文字は、マーク付けとスタイル指定で置き換えることができます。 ただし、 CSS ですべてを表現できるわけではありません。 たとえば丸付きは CSS では実現できません。 組み文字のように CSS 3 で実現しそうなものもあります。
[36] XML 1.0 / XML 1.1 の附属書には、互換写像があっても常用される文字がいくつかあると書いてあります。 一律で制限するのは危険です。
[14] http://www.w3.org/TR/unicode-xml/#Generating
によれば、「斜体の hello
」はマークで実現するべきだが、
プランク定数 (斜体の h
) は U+210E
を使うべきだと言っています。
[15] しかし >>14 のようなやり方には批判的な意見もあります。
文字コードが深い意味まで介入した結果が
U+1D400
〜U+1D7FF
(Mathematical Alphanumeric Symbols
) です。
(数式では普通の a
と太字の a
と 斜体の
a
と・・・は意味が違うかもしれないから云々の結果、
数学用と称して太字だの斜体だの sans serif だの、
沢山の a
が符号化されています。)
[16] 非文字符号位置は、応用が内部で使ってもかまいませんが、情報交換に用いるべきではありません。 http://www.w3.org/TR/unicode-xml/#Noncharacters
[26] 適合するものの非推奨である符号位置のリストは、 XML 1.0 2e に対する正誤表で2003年3月に追加されました >>27。
[22] XMLにおける文字コード、XMLにおける名前の項も参照してください。