この記事では、XMLに有効に表示される可能性があるUnicode文字について説明し、分類します。
XML 1.0
XML 1.0文書では、以下の範囲のUnicodeコードポイントが有効です。[1]
- U+0009、U+000A、U+000D: これらはXML 1.0 で受け入れられる唯一のC0制御です。
- U+0020–U+D7FF、U+E000–U+FFFD: これにより、BMP内の一部の(すべてではない)非文字が除外されます(すべてのサロゲート、U+FFFE、および U+FFFF は禁止されています)。
- U+10000~U+10FFFF: これには、非文字を含む補助面のすべてのコード ポイントが含まれます。
上記のコード ポイント範囲には、XML 1.0 ドキュメント内の特定のコンテキストでのみ有効な次のコントロールが含まれており、その使用は制限されており、強く推奨されません。
XML 1.1
以下のコードポイント範囲のUnicodeコードポイントは、XML 1.1文書では常に有効です。[2]
- U+0001–U+D7FF、U+E000–U+FFFD: これにはほとんどの C0 および C1 制御文字が含まれますが、 BMP 内の一部(すべてではありません) の非文字は除外されます (サロゲート、U+FFFE、および U+FFFF は禁止されています)。
- U+10000~U+10FFFF: これには、非文字を含む補助面のすべてのコード ポイントが含まれます。
上記のコード ポイント範囲には、XML 1.1 ドキュメント内の特定のコンテキストでのみ有効な次のコントロールが含まれており、その使用は制限されており、強く推奨されません。
- U+0001–U+0008、U+000B–U+000C、U+000E–U+001F: これにはほとんどの(すべてではない)C0制御文字が含まれます
- U+007F~U+0084、U+0086~U+009F: これには C0 制御文字と、1 つを除くすべての C1 制御文字が含まれます。
使用できる文字数に制限はないが、推奨されない文字数
さらに、以下のコード ポイントは、すべての XML 1.0 および XML 1.1 ドキュメントで有効ですが、Unicode およびISO/IEC 10646では非文字として永続的に割り当てられているため、XML の両方のバージョンで制限されており、非推奨です。一部の XML パーサーでは、文字セット デコーダーでこれらを無効として通知することさえあり、これらを含む XML ドキュメントは、一部の制限されたインターフェイスを通過できなかったり、互換性がなかったりする場合があります。これらの非文字は、標準 UTF ( UTF-8など) でエンコードできます。これらの UTF は、サロゲート非文字に割り当てられたコード ポイントのみを制限するためです。
- U+FDD0~U+FDEF
- U+1FFFE ~ U+1FFFF、U+2FFFE ~ U+2FFFF、U+3FFFE ~ U+3FFFF、U+4FFFE ~ U+4FFFF、U+5FFFE ~ U+5FFFF、U+6FFFE ~ U+6FFFF、U+7FFFE ~ U+7FFFF、U+8FFFE ~ U+8FFFF、U+9FFFE ~ U+9FFFF、 U+AFFFE ~ U+AFFFF、U+BFFFE ~ U+BFFFF、U+CFFFE ~ U+CFFFF、U+DFFFE ~ U+DFFFF、U+EFFFE ~ U+EFFFF、U+FFFFE ~ U+FFFFF、U+10FFFE ~ U+10FFFF。
ヌル制御文字に割り当てられたコード ポイント U+0000 は、Unicode および ISO/IEC 10646 でエンコードされた文字のうち、XML 1.0 および 1.1 ドキュメントでは常に無効となる唯一の文字であることに注意してください。
逆に、コード ポイントU+0085は、Unicode および ISO/IEC 10646、XML 1.0 および XML 1.1 ドキュメント (すべてのコンテキスト) で有効な制御文字であり、その使用は推奨されていません (多くの XML コンテキストでは空白文字として扱われ、一部の XML アプリケーションではフォーマット済みテキストの U+000D や U+000A と同様に改行制御として扱われます)。
制限のない文字
これらの理由から、XMLのすべてのバージョンおよびすべてのコンテキスト(XML構文で許可されている範囲)で使用できる非制限レパートリーには、文字(非文字を除く)に恒久的に割り当てられたコードポイント、またはUnicodeおよびISO/IEC 10646における将来のエンコードのために予約されているコードポイントのみが含まれ、相互運用性を向上させるために制限レパートリーは除外されています。これらのコードポイントは以下のとおりです。
- U+0009、U+000A、U+000D: これらは、XML 1.0 と XML 1.1 の両方で受け入れられる唯一の C0 制御文字です (多くのコンテキストでは空白または改行として扱われます)。
- U+0020~U+007E: これらはすべて基本ラテンブロック(US-ASCII の「グラフィック」サブセット)内の非制御文字であり、最後の C0 制御文字は除きます。
- U+0085: これは、XML 1.0 と XML 1.1 の両方で受け入れられる唯一の C1 制御文字です (多くのコンテキストでは空白または改行として扱われます)。
- U+00A0~U+D7FF、U+E000~U+FDCF、U+FDF0~U+FFFD: これには、BMP 内の他のすべての文字が含まれますが、文字以外の文字 (サロゲートなど) は含まれません。
- U+10000–U+1FFFD、U+20000–U+2FFFD、U+30000–U+3FFFD、U+40000–U+4FFFD、U+50000–U+5FFFD、U+60000–U+6FFFD、U+70000–U+7FFFD、U+80000–U+8FFFD、U+90000–U+9FFFD、U+A0000–U+AFFFD、U+B0000–U+BFFFD、U+C0000–U+CFFFD、U+D0000–U+DFFFD、U+E0000–U+EFFFD、U+F0000–U+FFFFD、U+100000–U+10FFFD:補助面のすべての非文字を除外します。
参照
- XMLおよびHTMLの文字実体参照のリスト
- 数値文字参照
- XML 1.0 の有効な文字と無効な文字の視覚的なリスト
参考文献
- ^ 「拡張マークアップ言語(XML)1.0(第4版)」www.w3.org。
- ^ 「拡張マークアップ言語(XML)1.1(第2版)」www.w3.org。
- C1 問題は 7 つありますか、または XHTML 1.0 では C1 文字は合法ですか?