この標準情報(TR)は,TR X 0015:1999 "XML日本語プロファイル"の内容に関して, 財団法人日本規格協会の情報技術標準化研究センター(INSTAC)に設立された次世代コンテンツの標準化に関する調査研究委員会の2001年度の調査研究をもとに改正原案を作成し,日本工業標準調査会の審議を経て, タイプUの標準情報TR X 0015:2002 として公表するものである。
この標準情報(TR)は,日本語文字を含むXML文書に関しての明確化を行って, [JIS X 4159]を補足する。
備考 この標準情報(TR)では,[JIS X 0208]及び[JIS X 0212]の図形文字並びに[JIS X 0201]の片仮名用図形文字,円記号及びオーバラインを"日本語文字"と呼ぶ。
日本語文字を含むXML文書の交換性を高めるため,この標準情報(TR)は文字符号化スキームについての規定を行う。情報交換用ファイルで使用する文字符号化スキーム,各種のプロトコル(SMTP, HTTP/1.1など)で使用する文字符号化スキームは, それぞれ別に規定する。文字符号化スキームから[ISO/IEC 10646]及び[Unicode 3.1]への変換に用いられている変換表を列挙し,符号化宣言及びMIMEヘッダで指定する名称を個々の変換表に与える。
備考 この標準情報(TR)では,"符号化文字集合"という語を,[IETF RFC 2130]で定義されている"Coded Character Set"と同じ意味で用い,"文字符号化スキーム"という語を,同じく[IETF RFC 2130]で定義されている"Character Encoding Scheme"と同じ意味で用いる。
参考 交換性が保証されないことを了解した上で,これらの規定を無視するのは利用者の自由である。
この標準情報(TR)にある規定の一部は,IETF RFC及びW3C勧告にある規定を日本語文字に当てはめて分かりやすく言い直したものであって,独自の規定ではない。
参考 例えば,[JIS X 4159]は"[Unicode 3.1]の3.6節のD21節で定義される互換性文字は使用を避けることが望ましい。"と規定している。[JIS X 0201]の片仮名用図形文字は,この互換性文字にあたるため,この標準情報(TR)では[JIS X 0201]の片仮名用図形文字を避けることが望ましいと規定している。
独自の規定ではなく,[JIS X 4159]並びにその他のIETF RFC及びW3C勧告にある規定を日本語文字に当てはめて言い直した規定は,参考又は解説において元の規定を示す。
次に示す規格などは, この標準情報(TR)の文中での引用によって, この標準情報 (TR) の規定の一部となる。JISについては最新版を適用する。RFCが他のRFCによって置き換えられた場合は,新しいRFCを適用する。
参考1 W3C (World Wide Web Consortium), Extensible Markup Language (XML) 1.0 (Second Edition), Recommendation, http://www.w3.org/TR/REC-xml, 2001が,[JIS X 4159]に対応している。
参考2 [JIS X 0221-1]は, [ISO/IEC 10646]-1:2000に相当する。
[JIS X 0208]及び[JIS X 0212]の図形文字並びに[JIS X 0201]の片仮名用図形文字,円記号及びオーバラインを"日本語文字"と呼ぶ。
参考 "日本語文字"という用語は単に便宜上のものである。
符号化文字集合とは,文字の集合から整数の集合への写像とする。
参考1 このこの標準情報(TR)でいう符号化文字集合は,[IETF RFC 2277]及び[IETF RFC 2130]でいうCoded Character Setと等しい。
参考2 [JIS X 0208]でいう符号化文字集合とは,文字とビット組合わせとの対応関係であるので,ここでの定義とは異なることに注意されたい。
文字符号化スキームとは,符号化文字集合(一つ又は複数)から,オクテット列集合への写像とする。
参考1 この標準情報(TR)でいう文字符号化スキームは,[IETF RFC 2277] 及び[IETF RFC 2130]でいうCharacter Encoding Schemeと等しい。
参考2 [JIS X 4159]でいう符号化は,この文字符号化スキームに当たる。
charsetとは,オクテット列を文字列へ変換する方法とする。
参考1 この定義は,[IETF RFC 2130], [IETF RFC 2277]及び[IETF RFC 2278]にある定義と等しい。
参考2 charsetとして登録されたものの一覧は,[IANA Official Names for Character Sets]にある。
XML文書を構成する文書実体,外部解析対象実体,外部DTDサブセット及び外部パラメタ実体をXML文書構成単位と呼ぶ。
参考1 [JIS X 4159]でいう"実体"は,文書実体,内部解析対象実体,外部解析対象実体,外部解析対象外実体,外部DTDサブセット,内部パラメタ実体及び外部パラメタ実体である。これらのうち,内部解析対象実体,内部パラメタ実体及び外部解析対象外実体は,文字符号化スキームを指定する必要がない。この標準情報(TR)では,文字符号化スキームを指定する必要があるものをまとめて XML文書構成単位と呼ぶ。
参考2 XML文書構成単位は,それぞれファイルに格納されるか,何らかのプロトコルによってMIMEエンティティとして配布されることが多い。
[JIS X 0208]:1978(第1版)を使用することはエラーとする。結果は定義されない。
参考 [JIS X 0208]:1978は,[JIS X 4159]の符号化文字集合である[Unicode 3.1]の基になった規格に含まれていない。したがって,[Unicode 3.1]との対応関係は明確ではない。
[JIS X 0208]に規定されている数字・ラテン文字・特殊文字のうち[JIS X 0201]でも規定されているもの,及び[JIS X 0201]の片仮名用図形文字は,その使用を避けることが望ましい。
参考 [JIS X 4159]は,[Unicode 3.1]の互換性文字の使用を避けることを薦めている。
この標準情報(TR)は,UTF-16の利用を推奨する(5.2 UTF-8で説明するとおりUTF-8も推奨する。)。
参考1 UTF-16は,[ISO/IEC 10646]及び[Unicode 3.1]の最初の17面にあるすべての文字を表現できる文字符号化スキームである。 UTF-16は, [ISO/IEC 10646], [Unicode 3.1]及び [IETF RFC 2781]で規定されている。
参考2 [JIS X 4159]では,XMLプロセサにUTF-16(及び5.2 UTF-8で説明するUTF-8)の実装を義務付けている。
UTF-16であることを示すcharset名は,"utf-16"とする。
参考 [JIS X 4159]でいうUTF-16は,charset "utf-16"だけを含み,charset "utf-16le"及び"utf-16be"を含まないことに注意。 "utf-16be"はバイト順マークをもたないビッグエンディアンであり, "utf-16le"はバイト順マークをもたないリトルエンディアンである。これらの三つのcharsetは,[IANA Official Names for Character Sets]に登録されている。
この標準情報(TR)は,UTF-8の利用を推奨する(5.1 UTF-16で説明したようにUTF-16も推奨する。)。
参考1 UTF-8は[ISO/IEC 10646]及び[Unicode 3.1]のすべての面の文字を表現できる文字符号化スキームである。UTF-8は,[Unicode 3.1]で規定されている。
参考2 [JIS X 4159]では,XMLプロセサにUTF-8の実装を義務づけている。
UTF-8であることを示すcharset名は,"utf-8"とする。
参考 charset名"utf-8"は[IANA Official Names for Character Sets]に登録されている。
この標準情報(TR)及び[JIS X 4159]では,日本国内で広く利用されている charsetであるシフトJISを,[ISO/IEC 10646]及び[Unicode 3.1]にある文字の一部(日本語文字と[US-ASCII] の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)では, シフトJISから[Unicode 3.1]への移行を推奨する。
参考1 [JIS X 4159]では,符号化文字集合を[ISO/IEC 10646]及び[Unicode 3.1]に固定している。他の符号化文字集合を表現する文字符号化スキームとしてシフトJISを扱うことはできない。
参考2 この標準情報(TR)でいう日本語文字は,[JIS X 0201]の片仮名用図形文字,円記号,オーバラインを含むことに注意。
この標準情報(TR)では,シフトJISから[Unicode 3.1]への代表的な四つの変換表を取り上げ,これらにx-sjis-unicode-0.9, x-sjis-jisx0221-1995, x-sjis-cp932, x-sjis-jdk1.1.7 という名前を与える。これらの変換表は相互に異なる。
参考 実際に用いられている変換表は他にも存在する。
x-sjis-unicode-0.9は,シフトJISの変換表としてUnicode Consortiumから公開されているもの(バージョンは0.9)とする。x-sjis-jisx0221-1995は,[JIS X 0208]の附属書1にあるシフト符号化表現の規定に従って[JIS X 0221-1]の付属書3にある変換表から生成した変換表とする。x-sjis-cp932 は,Microsoft社のCP932のための変換表としてUnicode Consortiumから公開されているものとする。x-sjis-jdk1.1.7は,JDK 1.1.7がエンコーディング名SJISのための変換表として用いている変換表とする。
参考1 Unicode Consortiumの変換表は, ftp://ftp.unicode.org/Public/MAPPINGS/にある。
参考2 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,シフトJISでは交換性を保証できない。
参考3 [ISO/IEC 646]は,国又は適用業務に応じた版を作成することを認めており,[JIS X 0201]はその一つである。[US-ASCII]と完全に同一でない限り,[ISO/IEC 646]の版はインタネットでは使用しないことを[IETF RFC 2046]は求めている。一般に,シフトJISは[US-ASCII]ではなく[JIS X 0201]を用いていると見なされている(x-sjis-jdk1.1.7を除いて,ここで取り上げた変換表も同様である。)ので,[IETF RFC 2046]に従えば,シフトJISをインタネットで使用すべきではない。
参考4 CP932は[JIS X 0201]を用いると定義されているが,0x5CをU+005C(REVERSE SOLIDUS)に変換している。
参考5 CP932は, 日本語文字以外に, NEC特殊文字, NEC選定IBM拡張文字, IBM 拡張文字, ユーザ外字を含んでいる。
この標準情報(TR)及び[JIS X 4159]では,国内で広く利用されている charsetである日本語EUC(圧縮形式)[UNIXインターナショナル]を, [ISO/IEC 10646]及び[Unicode 3.1]にある文字の一部(日本語文字と[US-ASCII]の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)では, 日本語 EUC(圧縮形式)から[Unicode 3.1]への移行を推奨する。
参考 [JIS X 4159]では,符号化文字集合を[ISO/IEC 10646]及び[Unicode 3.1]に固定している。他の符号化文字集合を表現する文字符号化スキームとして日本語EUC(圧縮形式)を扱うことはできない。
この標準情報(TR)では,日本語EUC(圧縮形式)から[ISO/IEC 10646]及び [Unicode 3.1]への代表的な五つの変換表を取り上げ,これらに x-eucjp-unicode-0.9, x-eucjp-jisx0221-1995, x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-ascii という名前を与える。これらの変換表は相互に異なる。
x-eucjp-unicode-0.9は,[JIS X 0208]から[JIS X 0221-1]及び[Unicode 3.1] への変換表としてUnicode Consortiumが公開しているものから生成した変換表を指す。 x-eucjp-jisx0221-1995は, [JIS X 0221-1]の附属書3にある変換表から生成した変換表を指す。x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-asciiは,オープングループ日本ベンダ協議会が定義した変換表であり,[Unicodeとユーザ定義文字・ベンダ定義文字] の1997年7月15日版の添付資料においてeucJP-ms, eucJP-0201, eucJP-asciiと名付けられた変換表を指す。
参考1 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,日本語EUCでは交換性を保証できない。
参考2 x-eucjp-open-19970715-ms, x-eucjp-open-19970715-0201, x-eucjp-open-19970715-asciiは, 日本語文字以外に, NEC特殊文字, NEC選定 IBM拡張文字, IBM拡張文字, ユーザ外字を含んでいる。
この標準情報(TR)及び[JIS X 4159]では,日本国内での通信に広く利用されているcharsetであるISO-2022-JP[IETF RFC 1468]を,[JIS X 0221-1]及び[Unicode 3.1]にある文字の一部(日本語文字とUS-ASCII[US-ASCII]の文字)を表現する文字符号化スキームとして扱う。この標準情報(TR)では, ISO-2022-JPから[Unicode 3.1]への移行を推奨する。
参考 [JIS X 4159]では,符号化文字集合を[ISO/IEC 10646]及び[Unicode 3.1]に固定している。他の符号化文字集合を表現する文字符号化スキームとして ISO-2022-JPを扱うことはできない。
この標準情報(TR)では,ISO-2022-JPから[ISO/IEC 10646]及び[Unicode 3.1]への変換を,いったんシフトJIS又は日本語EUCを経由した変換によって定義する。すなわち,ISO-2022-JPからシフトJIS又は日本語EUCにいったん変換し,その後に"5.3 シフトJIS"又は"5.4 日本語EUC(圧縮形式)" に示した変換のいずれかを適用する。したがって,シフトJIS又は日本語EUCからの個々の変換表に対して,ISO-2022-JPからの変換表が存在する。
参考1 ISO-2022-JPは,電子メールなどの通信に利用することを目的として規定されたcharsetである。そのため,ISO-2022-JP形式の情報は,シフト JIS又は日本語EUCの情報が,通信のために一時的に変換されたものと見なすことができる。したがって,シフトJIS又は日本語EUCにいったん戻してから変換するのが妥当であると考えられる。
参考2 いったんシフトJIS又は日本語EUCを経由するからといっても,[IETF RFC 1468]が許していない文字が使用できるわけではない。たとえば,x-sjis-cp932は, NEC特殊文字, NEC選定IBM拡張文字, IBM拡張文字, ユーザ外字を表現できるが,x-iso2022jp-cp932がそれらの文字を表現できるわけではない。
等しいものを除くと変換表は全部で五つになる。この標準情報(TR)ではこれらに x-iso2022jp-unicode-0.9, x-iso2022jp-jisx0221-1995, x-iso2022jp-cp932, x-iso2022jp-jdk1.1.7, x-iso2022jp-19970715-asciiという名前を与える。これらの変換表は相互に異なる。
シフトJIS又は日本語EUCからの変換表 | ISO-2022-JPからの変換表 | |
シフトJIS | x-sjis-jdk1.1.7 | x-iso2022jp-jdk1.1.7 |
x-sjis-unicode-0.9 | x-iso2022jp-unicode-0.9 | |
x-sjis-jisx0221-1995 | x-iso2022jp-jisx0221-1995 | |
x-sjis-cp932 | x-iso2022jp-cp932 | |
日本語EUC | x-eucjp-open-19970715-ms | x-iso2022jp-cp932 |
x-eucjp-open-19970715-0201 | x-iso2022jp-jisx0221-1995 | |
x-eucjp-open-19970715-ascii | x-iso2022jp-19970715-ascii |
ISO-2022-JPで表現されたXML文書構成単位において,符号化宣言が終了する以前に,エスケープシーケンスを使用することはエラーとする。結果は定義されない。
参考1 [JIS X 4159]では,XMLプロセサが処理できない文字符号化スキームはエラーとしている。符号化宣言が終了する以前に,エスケープシーケンスが現れた場合は処理できないことが多い。結果を定義しないエラーとしているのは,既存のコード変換ライブラリを使って作成されたXMLプロセサを考慮したことによる。致命的エラーと規定して,通常の処理を中断することを義務付けた場合は,これらのXMLプロセサが適合しなくなる可能性がある。
参考2 ここで取り上げた変換表はいずれも用いられる可能性があり,他の変換表が用いられる可能性もあるので,ISO-2022-JP では交換性を保証できない。
5. 文字符号化スキームに関する規定で説明した変換表は,互いに異なるcharsetとして扱う。それらの一覧を表6.1に示す。
Unicode | utf-16 |
utf-8 | |
シフトJIS | x-sjis-unicode-0.9 |
x-sjis-jisx0221-1995 | |
x-sjis-cp932 | |
x-sjis-jdk1.1.7 | |
日本語EUC(圧縮形式) | x-eucjp-unicode-0.9 |
x-eucjp-jisx0221-1995 | |
x-eucjp-open-19970715-ms | |
x-eucjp-open-19970715-0201 | |
x-eucjp-open-19970715-ascii | |
ISO-2022-JP | x-iso2022jp-unicode-0.9 |
x-iso2022jp-jisx0221-1995 | |
x-iso2022jp-cp932 | |
x-iso2022jp-jdk1.1.7 | |
x-iso2022jp-19970715-ascii |
参考 この標準情報(TR)がこれらのcharset名すべてを推奨しているわけではない。推奨しているのはutf-16及びutf-8だけである。
text/xml, application/xmlなどのメディアタイプのcharsetパラメタ及び符号化宣言でcharsetを指定するときは,これらの名前を使用する。
参考 charsetパラメタは, 値としてcharset名を指定するためのパラメタである。メディアタイプtext/xmlのcharsetパラメタでcharset名utf-8を指定した例を次に示す。charsetパラメタの値がcharset名であり, charsetパラメタそのものはcharset 名ではないことに注意。
Content-Type: text/xml; charset=utf-8
参考 メディアタイプtext/xml又はapplication/xmlのcharsetパラメタの値としてcharset名を指定するという規定は[IETF RFC 3023]にあり,符号化宣言でcharset名を指定するという規定は[JIS X 4159]にある。
charset名では大文字及び小文字のどちらを使用してもかまわない。
参考1 charset名では大文字と小文字とを区別しないという規定は,[IANA Official Names for Character Sets]にある。
参考2 [IANA Official Names for Character Sets]に登録されているcharset名Shift_JIS, EUC-JP, ISO-2022-JPが,この標準情報(TR)で説明したどの変換表に対応するかは不明だが,交換性が保証されないことを了解した上で,これらのcharset名を使用するのは利用者の自由である。
通信路の途中で文字符号化スキームを変換する場合は,変換後の文字符号化スキームを表すcharset名を,text/xml又はapplication/xmlのcharsetパラメタとして指定する。XML文書構成単位の中の符号化宣言を書き直す必要はない。
参考 charsetパラメタがBOM及び符号化宣言より優先することは, [IETF RFC 3023]に明記されている。
Webクライアント,メーラ,ニュースリーダなどが,受信したXML文書構成単位をファイルに格納するときは,符号化宣言で charset名を指定するか,先頭にBOMを付ける。ただし,UTF-8の場合だけは省略できる。格納するときに, 文字符号化スキームの変換を行ってもよい。
参考 この規定は, [IETF RFC 3023]にある。
情報交換用ファイルにXML文書構成単位を格納するときの文字符号化スキームとしては,UTF-16またはのいずれかを使用する。
参考 交換性が保証されないことを了解した上で,シフトJIS又は日本語EUC(圧縮形式)を使用するのは利用者の自由である。
情報交換用ファイルに格納するXML文書構成単位については,BOM又は符号化宣言を付ける。ただし,UTF-8の場合だけはこれらを省略してもよい。
参考1 BOM又は符号化宣言を付けるという規定は,[JIS X 4159]の4.3.3に示されている。
参考2 UTF-16の場合は, BOMによって文字符号化スキームを明示するのでcharset名は必要ない。
文字符号化スキームについての外部情報がない場合, XMLプロセサはBOM及び符号化宣言を見て文字符号化スキームを判定する。この自動検出は,[JIS X 4159]の附属書Fに示されている。
参考 XML文書構成単位を表現するオクテット列がアプリケーションの入出力となる場合も,情報交換用ファイルについての規定を適用することが望ましい。
サーバがXML文書構成単位を配送するときの文字符号化スキームとしては,UTF-16又はUTF-8のいずれかを使用する。
参考 交換性が保証されないことを了解した上で,ISO-2022-JP,日本語EUC(圧縮形式)及びシフトJISを使用するのは利用者の自由である。
HTTP 1.1([IETF RFC 2616])による配送では,text/xml, application/xmlなどのメディアタイプを用い,charsetパラメタを正しく付ける。メディアタイプがtextではなく,XML文書中の BOM又は符号化宣言で文字符号化スキームを明示してあるときだけは,charset パラメタを省略できる。
参考1 [IETF RFC 3023]はcharsetパラメタを強く推奨している。メディアタイプが textの場合は,charsetパラメタとして指定されたcharset名がBOM及び符号化宣言より優先する。省略した場合はUS-ASCIIであると見なされる。
参考2 US-ASCIIで符号化されたXML文書の場合は,メディアタイプが textの場合でもcharsetパラメタを省略できるが,US-ASCIIの文書は日本語文字を含んでいないので,この標準情報(TR)の適用範囲外である。
参考3 サーバの設定によって,XML文書構成単位を格納したファイルと,メディアタイプ(text/xml, application/xmlなど)及び文字符号化スキームを表すcharset名とを関係付けなければならない。
クライアントは,このcharsetパラメタに従って文字符号化スキームを判定する。 text/xmlのcharsetパラメタが省略された場合はUS-ASCIIであると判定する。 application/xmlのcharsetパラメタが省略された場合は情報交換用ファイルと同様に自動検出する。
参考 この規定は[IETF RFC 3023]にある。
XML文書構成単位をメールの本文として送信する場合は,文字符号化スキームとしてUTF-16又はUTF-8のいずれかを使用する。
参考 交換性が保証されないことを了解した上で, ISO-2022-JP,日本語EUC(圧縮形式)又はシフトJISを使用するのは利 用者の自由である。
UTF-16の場合は,メディアタイプapplication/xmlなどを用い,それ以外の場合はメディアタイプをtext/xmlを用いる。どの場合も, charsetパラメタを必ず付ける。
もし必要なら,Base64などのcontent transfer encodingを適用する。
参考 content transfer encodingについては[IETF RFC 2045]に規定されている。
シフトJISで書かれた次のXML文書を考える。
<?xml version="1.0" encoding="shift_jis"?> <doc>{1}{2}{3}{4}{5} {6}{7}{8}{9}{10}</doc>
ここで,{1}から{10}は以下の文字を示す。
変換表の相違のため,この文書は次に示すいくつかの解釈がなされる。
解釈1: x-sjis-unicode-0.9 (三番目の文字はHORIZONTAL BAR。)
解釈2: x-sjis-jisx0221-1995 (三番目の文字はEM DASH。)
解釈3: x-sjis-cp932
解釈4: x-sjis-jdk1.1.7
文字参照を用いることによって,この曖昧さを回避することができる。例えば,解釈2を指定するには,次のように記述する。
<?xml version="1.0" encoding="shift_jis"?> <doc>\~―\〜 ‖−¢£¬</doc>
又,解析対象実体を宣言し,使用することもできる。シフトJISで書かれた次のXML文書は,曖昧さをもたない。
<?xml version="1.0 encoding="shift_jis"?> <!DOCTYPE doc [ <!ENTITY revsol "\"> <!ENTITY tilde "~"> <!ENTITY cent "¢"> <!ENTITY pound "£"> <!ENTITY yen "¥"> <!ENTITY not "¬"> <!ENTITY mdash "—"> <!ENTITY horbar "―"> <!ENTITY dvline "‖"> <!ENTITY fparato "∥"> <!ENTITY wdash "〜"> <!ENTITY fminus "-"> <!ENTITY fbsol "\"> <!ENTITY ftilde "~"> <!ENTITY fcent "¢"> <!ENTITY fpoun "£"> <!ENTITY fnot "¬"> <!ENTITY fmacron " ̄"> <!ENTITY fbrvbar "¦"> <!ENTITY fyen "¥"> ]> <doc>&revsol; ˜ ¢ £ ¥ ¬ — ― &dvline; &fparato; &wdash; &fminus; &fbsol; &ftild; &fcent; &fpoun; &fnot; &fmacron; &fbrvbar; &fyen;</doc>
XML文書(又はその一部)が日本語で書かれていることを示すには,xml:lang属性を用いる。
参考 xml:lang属性は[JIS X 4159]に規定されている。
xml:lang属性の値には, 日本語を表す言語識別コード(例えば ja )を指定する。属性値には,大文字及び小文字のどちらを使用してもよい。
参考 言語識別コードは[IETF RFC 3066]に規定されている。
日本語段落と英語段落を含むXML文書の例を次に示す。
<?xml version="1.0" encoding="utf-8"?> <document> <para xml:lang="ja">これは段落です。</para> <para xml:lang="en">This is a paragraph.</para> </document>