Char

XML における文字

[17] XML生成規則 Char は、XML で用いられる文字を表しています。 本項では Char やより一般に XML における文字の扱いについて扱います。

仕様書

定義

[23] 文字 (character) は、テキスト原子 (アトミック) な単位であり、 ISO/IEC 10646 によって規定されるものです。 >>18

[24] XMLISO/IEC 10646文字の定義としていますが、 Unicode にも言及していて、 両者を同じものとみなしているようです。
[25] 非文字文字に含まれるのか定かではありませんが、後述の通り XML で使えるものもあれば、使えないものもあります。サロゲートは使えません。

適合性

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] XMLNote は、著者に対し、 Unicode 2.3節に従い「compatibility characters」を避けることを勧めて (encourage) います。 >>18

[31] RFC 2119 助動詞は用いていないのですが、 「Note」が規定の一部かどうかは明記されておらず、 本項がどのような意義を持つのかはよくわかりません。

[33] この条項は、日本の専門家と名乗る人々からの半角カナ排除の陳情 >>32 により追加されたようです。

Unicoder によるところの XML における文字の好ましい扱い

[1] 『Unicode in XML and other Markup Languages』 という W3C Note <http://www.w3.org/TR/unicode-xml/> / UTR #20 <http://www.unicode.org/reports/tr20/> は、マーク付け言語で使うべきではない文字などを解説しています。 マーク付け言語としては主として XML、 ある程度は HTML を対象としています。

マーク付け言語で不適切な文字

[2] 次の文字はマーク付け言語と一緒に使用するのは不適当です。 行分離子 LS, 段落分離子 PS, バイト順印 BOM を除いては、 UA は無視するのもよし。 適当なマークに変換するのは著述工具の責任だそうです。

符号位置名前HTML での代替メモ
U+2028LINE SEPARATORbr>>4
U+2029PARAGRAPH SEPARATORp>.4
U+202ALEFT-TO-RIGHT EMBEDDINGdir=ltr>>3
U+202BRIGHT-TO-LEFT EMBEDDINGdir=rtl>>3
U+202CPOP DIRECTIONAL FORMATTING</bdo>>>3
U+202DLEFT-TO-RIGHT OVERRIDE<bdo dir=ltr>>>3
U+202ERIGHT-TO-LEFT-OVERRIDE<bdo dir=rtl>>>3
U+206AINHIBIT SYMMETRIC SWAPPINGUnicode で非推奨 >>5
U+206BACTIVATE SYMMETRIC SWAPPINGUnicode で非推奨 >>5
U+206CINHIBIT ARABIC FORM SHAPINGUnicode で非推奨 >>5
U+206DACTIVATE ARABIC FORM SHAPINGUnicode で非推奨 >>5
U+206ENATIONAL DIGIT SHAPESU+0660U+0669Unicode で非推奨 >>5
U+206FNOMINAL DIGIT SHAPESU+0030U+0039Unicode で非推奨 >>5
U+FEFFZERO WIDTH NO-BREAK SPACEU+2060Unicode で非推奨 >>6
U+FFF9INTERLINEAR ANNOTATION ANCHOR<ruby><rb>>>7
U+FFFAINTERLINEAR ANNOTATION SEPARATOR</rb><rt>>>7
U+FFFBINTERLINEAR ANNOTATION TERMINATOR</rt></ruby>>7
U+FFFCOBJECT REPLACEMENT CHARACTERobject など>>8
U+1D173U+1D17Aタイ, スラーなど>>9
U+E0000U+E007FTagsxml:lang, lang>>9

参考: <http://www.w3.org/TR/unicode-xml/#Suitable>

[4] LSPS は、 ブラウザは空白とし、編集時は適当なマークに置き換えるのが適切です。

[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 SPACEBYTE ORDER MARK の二つの機能を一つの符号位置に押し込んで、 あとから都合が悪くなったので ZWNBSP の機能を U+2026 WORD JOINER として分離したという恥ずかしい前歴があります。

従って今では U+FEFFZWNBSP として使用することは Unicode が非推奨としています。

ブラウザは文中の U+FEFFZWNBSP として扱い、編集時は 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> がマーク付け言語で使うのは適切だと言っている文字と、 その説明をどうぞ:

符号位置名前メモ
U+00A0NO-BREAK SPACE
U+00ADSOFT HYPHEN
U+034FCOMBINING GRAPHEME JOINER>>11
U+0600ARABIC NUMBER SIGN
U+0601ARABIC SIGN SANAH
U+0602ARABIC FOOTNOTE MARKER
U+0603ARABIC SIGN SAFHA
U+06DDARABIC END OF AYAH
U+070CSYRIAC HARKLEAN METOBELUS
U+0F0CTIBETAN MARK DELIMITER TSHEG BSTAR
U+180BMONGOLIAN FREE VARIATION SELECTOR ONE
U+180CMONGOLIAN FREE VARIATION SELECTOR TWO
U+180DMONGOLIAN FREE VARIATION SELECTOR THREE
U+180EMONGOLIAN VOWEL SEPARATOR
U+200CZERO WIDTH NON-JOINER
U+200DZERO WIDTH JOINER
U+200ELEFT-TO-RIGHT MARK
U+200FRIGHT-TO-LEFT MARK
U+2011NON-BREAKING HYPHEN
U+202FNARROW NO-BREAK SPACE
U+2044FRACTION SLASH
U+2060WORD JOINER
U+2061FUNCTION APPLICATION
U+2062INVISIBLE TIMES
U+2063INVISIBLE SEPARATOR
U+2FF0U+2FFBIdeographic Description Characters
U+303EIDEOGRAPHIC VARIATION INDICATOR
U+FE00U+FE0F, U+E0100U+E01DFVariation Selectors

[11] <http://www.w3.org/TR/2003/NOTE-unicode-xml-20030613/#Format> では Combining Grapheme JoinerU+0363 になっていますが、 U+0363COMBINING 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 で実現しそうなものもあります。

表現情報付きの文字

[14] <http://www.w3.org/TR/unicode-xml/#Generating> によれば、「斜体の hello」はマークで実現するべきだが、 プランク定数 (斜体の h) は U+210E を使うべきだと言っています。

[15] しかし >>14 のようなやり方には批判的な意見もあります。 文字コードが深い意味まで介入した結果が U+1D400U+1D7FF (Mathematical Alphanumeric Symbols) です。 (数式では普通の a と太字の a と 斜体の a と・・・は意味が違うかもしれないから云々の結果、 数学用と称して太字だの斜体だの sans serif だの、 沢山の a が符号化されています。)

非文字

[16] 非文字符号位置は、応用が内部で使ってもかまいませんが、情報交換に用いるべきではありません。 <http://www.w3.org/TR/unicode-xml/#Noncharacters>

XML1.1 では非文字は除外されていますが、 XML1.0 は制定時期の関係から多くの非文字は除外されていません。

応用

[3]

The use of the word "character" in this document is in the sense of production [2] of [Extensible Markup Language (XML) 1.0 Recommendation (Third Edition)].

[15] XQuery 1.0 and XPath 2.0 Functions and Operators (Second Edition) <http://www.w3.org/TR/2010/REC-xpath-functions-20101214/#string-types>

歴史

[26] 適合するものの非推奨 (discouraged) である符号位置のリストは、 XML 1.0 2e に対する正誤表で2003年3月に追加されました >>27

[28] この時既に U+0085 が除外されています。

関連

[22] XMLにおける文字コードXMLにおける名前の項も参照してください。

[29] RFC 6241 - Network Configuration Protocol (NETCONF) () <https://tools.ietf.org/html/rfc6241#section-2.2>

The

authenticated identity of a client is commonly referred to as the

NETCONF username. The username is a string of characters that match

the "Char" production from Section 2.2 of [W3C.REC-xml-20001006].