#?SuikaWiki/0.9 [1] > [[SGML文書]]の中のすべての[[マーク]]及び[[データ]]に使用される[[文字集合]]。 [INS[Document character set。 ([[JISX4151]]‐1992定義 (239))]] - 備考 文書が[[システム]]間で交換される場合、 文字集合は受信側システムの文字集合に翻訳される。 - [16] SGML 文書で使う文字集合は、[[マーク文字]]と[[最小データ文字]]さえ表現できれば、どんな文字集合でも使えます。 (参考3 7.1 参照。) - [17] [[区切子機能]]をすべて最小データ文字から選んだとすると、素の SGML では76文字、 Web SGML では84文字が最小の文字集合となります。 [[#comment]] * SGML 宣言による文書文字集合の記述 [2] JIS X 4151‐1992 12.1 に定義があります。 SGML の引数の書式と [[ABNF]] を合体させたような擬似マーク宣言断片で構文を表すと : [PRE[ -- 文書文字集合 (172) -- CHARSET 1*( -- 文字集合記述 (173) -- BASESET "Public Identifier" DESCSET 1*( -- 文字記述 (176)-- 先頭文字番号 文字個数 ( 基本文字集合番号 / 最小表記 / UNUSED ) -- SGML 側の -- -- 文字集合側 -- -- 文字番号 -- -- の文字番号 -- ) ) ]PRE] [3] [[公開識別子]]は、基本文字集合を人間が識別するためのものだそうです。 (12.1.1.1) 規格名、 [[ISO-IR]] 登録番号、[[標号]]などの想定読者が理解できるだろうものを識別子に入れることになっています。 [WEAK[(機械処理はするとしても ISO-IR + 実装者が知ってる識別子までが限界でしょう。)]] [4] - 基本文字集合番号が指定してある場合は、 (SGML 側の) 先頭文字番号から文字個数分の文字は、 (真の文字集合側の) 基本文字集合番号から文字個数個分に対応する意味を持ちます。 文字集合側で意味を持たないときには、 対応する SGML 側の文字も意味を持たないことになります。 - 最小表記が指定してある場合は、 その指定された文字の意味を持ちます。 最小表記は[[旧IRV]] なので、それと同じ意味を持つことになります。 最小表記による指定は、基本文字集合番号による指定ができない場合に限ることが推奨されています。 - [CODE(SGML)[UNUSED]] が指定してある場合は、 その文字は意味を持ちません。 意味を持たない文字は、 [[非SGML文字]]として、[[文字種別]] [CODE(SGML)[[[NONSGML]]]] に加えられます。 (ってことは、基本文字集合の「意味を持たない文字」 を処理系は知っていないといけないってことです。 [WEAK[それじゃあ「意味を持たない」とはどういう意味か、その定義はないみたいですが、 [CODE(SGML)[UNUSED]] から類推すれば、文字が割り当てられていない[[符号位置]]のことを言うのでしょう。]]) [[#comment]] ** 使用例 [6] 文書文字集合・[[構文参照文字集合]]の定義の例を。 [[#comment]] *** 単純な一面の文字集合 [13] [[規格参照具象構文]]の構文参照文字集合 (表7) : [PRE[ BASESET "ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0" DESCSET 0 128 0 ]PRE] [14] 文句の付け所がないくらい単純。 - [15] [CODE(char)[[[ESC]] 2/5 4/0]] は任意の128文字の集合を意味します。 ([CODE(WikiPage)[[[公開文指示シーケンス]]]]参照。) [CODE(char)[ESC 2/8 4/0]] でないのは、基本集合が単なる [[ISO-IR]] 002 の94文字の図形文字集合ではなく、旧 IRV の128文字の符号化文字集合全体を意味するためだと思われます。 [[#comment]] *** 旧 IRV と右半分に +α の8ビット文字集合 [7] JIS X 4151‐1992 表8 の例 : [PRE[ CHARSET -- 8ビット文書文字集合 -- -- 最初の128文字は、構文参照文字集合と同じである。 -- BASESET "ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0" DESCSET 0 9 UNUSED 9 2 9 11 2 UNUSED 13 1 13 14 18 UNUSED 32 95 32 127 1 UNUSED BASESET "ISO Registration Number 109//CHARSET ECMA-94 Right Part of Latin Alphabet Nr.3//ESC 2/9 4/3" DESCSET 128 32 UNUSED 160 5 32 165 1 "SGML User's Group logo" 166 88 38 -- NONSGML に対する5個の unused を含む -- 254 1 127 -- 127 の未使用位置に動かす -- 255 1 UNUSED -- 255 は、回避文字とする -- ]PRE] IRV:1983 は、 ,上\下,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,0 ,C0,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,1 ,C0,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,2 ,SP,! , ",#,Cur,% ,& ,' ,( ,) ,* ,+,",",- ,. ,/ ,3 ,0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,: ,; ,< ,= ,> ,? ,4 ,@ ,A ,B ,C ,D ,E ,F ,G ,H ,I ,J ,K ,L ,M ,N ,O ,5 ,P ,Q ,R ,S ,T ,U ,V ,W ,X ,Y ,Z ,[ ,\ ,] ,^ ,_ ,6 ,` ,a ,b ,c ,d ,e ,f ,g ,h ,i ,j ,k ,l ,m ,n ,o ,7 ,p ,q ,r ,s ,t ,u ,v ,w ,x ,y ,z ,{ ,| ,} ,~,DEL [[ISO-IR109]] (指示は [CODE(char)[[[ESC]] 2/13 4/3]] が正しい。) は、 ,上\下,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,0 ,**,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,1 ,**,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,2 ,NBSP,LL,DC,£,Cur,**,LL,§,¨,I,LL,LL,LL,SHY,**,LL ,3 ,°,ll,^2,^3,´,μ,ll,・,",",i,ll,ll,ll,1/2,**,ll ,4 ,A`,A',A^,**,A",LL,LL,LL,LL,LL,LL,LL,LL,LL,LL,LL ,5 ,**,N",O`,O',O^,LL,LL,LL,LL,×,LL,LL,LL,LL,LL,LL ,6 ,a`,a',a^,**,a",ll,ll,ll,ll,ll,ll,ll,ll,ll,ll,ll ,7 ,**,n",o`,o',o^,ll,ll,ll,ll,÷,ll,ll,ll,ll,ll,上点 ([CODE[LL]] は大文字, [CODE[ll]] は小文字。) それが、この文書文字集合では、 ,上\下,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,0 ,×,==,==,==,==,==,==,==,==,[09],[0A],×,==,[0D],×,== ,1 ,×,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,2 ,[20] ,3 , ,4 , ,5 , ,6 , ,7 , , , , , , , , , , , , , , ,[7E],× ,8 ,×,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,9 ,×,==,==,==,==,==,==,==,==,==,==,==,==,==,==,== ,10 ,{20}, , , ,{24},☆,{26},,,,,,,{2D},<2E>,{2F} ,11 ,{30}, , , , , , ,,,,,,,{3D},<3E>,{3F} ,12 ,{40},{41},{42},<43>,{44}, ,13 ,<51>,{52}, ,14 ,{60},{61},{62},<63>,{64}, ,15 ,<70>,{71},==,==,==,==,==,==,==,==,==,==,==,==,{7F},× - [CODE[ [ [VAR[hh]] ] ]] は IRV に対応 - [CODE[{[VAR[hh]]}]] は IR 109 に対応 - [CODE[<[VAR[hh]]>]] は IR 109 に対応するが、文字未割当 - [CODE[☆]]は「SGML User's Group logo」 - [CODE[×]]は未使用 - [8] 注釈に5個の unused を含むとあるけど実際には6個含んでいるし、[CODE[127 の未使用位置に動かす]]という注釈の意図も不明。もしかして規格の著者は今の IR 109 とは違う表を見ていたんだろうか? [WEAK[昔の情報が少ない状態なら、なんかの間違いが起こり得なくもない。]] IR 109 の指示シーケンスも間違ってるし。 -[9] 文字番号の代わりの引数表記、おいおい、複数文字でもいいのかいと突っ込みたくなりますが、確かに駄目とはかかれてません。。。そんな。。。 -- [SAMP(SGML)["A"]] とあったら [CODE(char)[LATIN CAPITAL LETTER A]] です、という意味なのかと思ってたけど (規格本文はそうとしか読めないよ)、 こっちの使い方が正しいんでしょうかね? よくわかんない。。。 [[#comment]] *** EUC 型の8ビット多バイト符号 [10] JIS の表9にある例です。 なお、 「EUC 型」という見出しにしましたが、 7ビット部が新 IRV でないので EUC ではありません。 [11] [PRE[ CHARSET -- 8ビット文書文字集合 -- -- 最初の128文字は、構文参照文字集合と同じである。 -- BASESET "ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0" DESCSET 0 9 UNUSED 9 2 9 11 2 UNUSED 13 1 13 14 18 UNUSED 32 95 32 127 1 UNUSED BASESET "ISO Registration Number 87//CHARSET JIS X 0208//ESC 2/6 4/0 ESC 2/4 2/9 4/2" -- JIS X 0208 の文字を G1 集合に指示し、 列 10‐15 に呼び出す。 -- DESCSET 128 41249 UNUSED 41377 94 8481 -- 2121 -- 41471 162 UNUSED 41633 14 8737 -- 2221 -- 41647 11 UNUSED [INS[(略)]] 62625 6 29371 -- 7421 -- 62631 2905 UNUSED ]PRE] [12] [[ISO/IEC2022]] 的に文字でない範囲や [[JISX0208]]‐1990 で文字が割り当てられていない範囲を [CODE(SGML)[UNUSED]] にするために涙ぐましい努力がなされています。。。 実際には、文字が割り当てられていない位置は実装が知っていれば SGML 宣言に明示する必要はないと思うので、 大雑把にどばっと割り当てておいても間違いではないのではないでしょうか。 [WEAK[もちろん、明示しておいた方が親切ですし、具体的な文字集合についての知識がない処理系でも正しい扱いが期待できるから良いのですが。。。]] [18] 注釈には JIS X 0208 を右に呼び出すみたいなことが書かれていますが、 [[呼び出し]]のシーケンスはどこにも載ってません。。。 [[指示]]しかできません。 [[#comment]] *** 指示・呼出しのあるもの [19] [[多符号基本具象構文]] (参考5図1) より : [PRE[ BASESET "ISO 646-1983//CHARSET International Reference Version (IRV)//ESC 2/5 4/0" DESCSET 0 14 0 14 1 "LS0 in ISO 2022" 15 1 "LS1 in ISO 2022" 16 112 16 128 14 UNUSED 142 1 "SS2 in ISO 2022" 143 1 "SS3 in ISO 2022" 144 112 UNUSED ]PRE] [20] 投げやりな定義ですね。。。 [[SS2]]・[[SS3]] のために [[CR]] を使ってるけど、 [[GR]] は未使用なので適当なものを指示・呼び出しして使えないじゃないですか。 もっとも、そもそも文字集合の指定なのに[[符号拡張]]が混じって、つじつまが合わなくなる (例えば [CODE(char)[0x30]] が [CODE(char)[DIGIT ZERO]] に対応するという記述の意味がない) のに [CODE(SGML)[[[MSOCHAR]]]] とか [CODE(SGML)[[[MSICHAR]]]] とかわけのわからんものを導入して誤魔化そうとしているのがいけないんです。 本来 SGML 処理系を通す前にシステム文字集合にでも統一しておくとか、 あるいは符号拡張を考慮した文字集合記述ができるかじゃないといけないのに、 何も考えてないからこんなことになる。 - [21] よく見ると多符号具象構文では1バイトの呼び出しは使えるけど、指示や2バイト以上使う呼び出しは使えないじゃん。。。 (たまたまうまく使える場合を除いて。) - [22] >>20-21 それをどう誤魔化すかの解説が参考6 3.1 というわけだ。だけどこんなことやってる人ほんとにいるんかな? ISO/IEC 2022 も一応考えました。というポーズにしかみえない。 [[#comment]] *** UCS の第0面〜第16面 [23] Web SGML 附属書 L で XML 用の文書文字集合宣言例として出ているもの : [PRE[ BASESET "ISO Registration Number 176//CHARSET ISO/IEC 10646-1:1993 UCS-4 with implementation level 3//ESC 2/5 2/15 4/6" DESCSET 0 9 UNUSED 9 2 9 11 2 UNUSED 13 1 13 14 18 UNUSED 32 95 32 127 1 UNUSED 128 32 UNUSED 160 55136 160 55296 2048 UNUSED -- surrogates -- 57344 8190 57344 65534 2 UNUSED -- FFFE and FFFF -- 65536 1048576 65536 ]PRE] 同じく、構文参照文字集合として使われているもの : [PRE[ BASESET "ISO Registration Number 176//CHARSET ISO/IEC 10646-1:1993 UCS-4 with implementation level 3//ESC 2/5 2/15 4/6" DESCSET 0 1114112 0 ]PRE] [24] どうも、文書文字集合の範囲が XML 1.0 仕様書 ([CODE(XML)[[[Char]]]] 参照。) とは食い違っている気がしますが・・・気にしないことにしましょう。 [[#comment]] * memo