[1]
[PRE[
:文書文字集合 (document character set):
[[SGML文書]]の中のすべての[[マーク]]及び[[データ]]に使用される[[文字集合]]。 [INS[([[JIS X 4151]]‐1992 3. (239))]]
- 備考 文書が[[システム]]間で交換される場合、
文字集合は受信側システムの文字集合に翻訳される。
]PRE]
[16] SGML 文書で使う文字集合は、
[[マーク文字]]と[[最小データ文字]]さえ表現できれば、
どんな文字集合でも使えます。 (参考3 7.1 参照。)
[17] [[区切子機能]]をすべて最小データ文字から選んだとすると、
素の SGML では76文字、 Web SGML では
84文字が最小の文字集合となります。
[30]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[31]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[32]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[33]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[34]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[35]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[36]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[37]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[38]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[39]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[40]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[41]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[42]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[43]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[44]
79hc63m-6xwagyj-tw6q669a-0 viagra
http://www.kleines-bierhaus.de/mb//267.shtml#1
[url=http://shrinkurl.us/1l0#3]free poker[/url]
[url]http://shrinkurl.us/ap1#4[/url]
([[slots]] [d87s_test506@hotmail.com])
[45]
GLv1Dj wdaexucadrlb, [url=http://dklpmiltqlvd.com/]dklpmiltqlvd[/url], [link=http://tjwlnkzmqkou.com/]tjwlnkzmqkou[/link], http://bfyjulkejssp.com/
([[evyvzqjinao]] [kxladn@uvzjzj.com] [WEAK[2008-06-01 10:16:23 +00:00]])
[46]
GLv1Dj wdaexucadrlb, [url=http://dklpmiltqlvd.com/]dklpmiltqlvd[/url], [link=http://tjwlnkzmqkou.com/]tjwlnkzmqkou[/link], http://bfyjulkejssp.com/
([[evyvzqjinao]] [kxladn@uvzjzj.com] [WEAK[2008-06-01 10:16:37 +00:00]])
[47]
SmEBLE ynbrfuyjzywl, [url=http://eoxkfkvahixx.com/]eoxkfkvahixx[/url], [link=http://gdtfbarsusbt.com/]gdtfbarsusbt[/link], http://mwkznxgglhck.com/
([[shrnyoxq]] [qlchlc@izyotg.com] [WEAK[2008-06-05 07:44:44 +00:00]])
[[#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]
- [25] 文書文字集合記述には、[[重要なSGML文字]]それぞれの固有の[[ビット組合せ]]の[[符号化表現]]を含めておかなければなりません。
(JIS 12.1)
-- [26] 文書に二つの[[具象構文]]を使う場合には、
両方の[[マーク文字]]すべてが重要文字になります。 (JIS 12.1 備考)
[3] [[公開識別子]]は、
基本文字集合を人間が識別するためのものだそうです。 (12.1.1.1)
規格名、 [[ISO-IR]] 登録番号、
[[標号]]などの想定読者が理解できるだろうものを識別子に入れることになっています。
[WEAK[(機械処理はするとしても ISO-IR + ]]
実装者が知ってる識別子までが限界でしょう。)]]
[[公式公開識別子]]を使う時は、[[公開文種別]]は
[CODE(SGML)[[[CHARSET]]]] とします。 (JIS 12.1.1.1)
[4]
- 基本文字集合番号が指定してある場合は、
(SGML 側の) 先頭文字番号から文字個数分の文字は、
(真の文字集合側の) 基本文字集合番号から文字個数個分に対応する意味を持ちます。
文字集合側で意味を持たないときには、
対応する SGML 側の文字も意味を持たないことになります。
- 最小表記が指定してある場合は、
その指定された文字の意味を持ちます。
最小表記は[[旧IRV]] なので、それと同じ意味を持つことになります。
最小表記による指定は、基本文字集合番号による指定ができない場合に限ることが推奨されています。
- [CODE(SGML)[UNUSED]] が指定してある場合は、
その文字は意味を持ちません。
- この[CODE(ABNF)[文字集合区分]]は、
文字集合のすべての文字番号を、重複なく記述していなければなりません。
(JIS 12.1.1)
[29]
意味を持たない文字は、
[[非SGML文字]]として、[[文字種別]]
[CODE(SGML)[[[NONSGML]]]] に加えられます。
(ってことは、基本文字集合の「意味を持たない文字」
を処理系は知っていないといけないってことです。
[WEAK[それじゃあ「意味を持たない」とはどういう意味か、その定義はないみたいですが、 [CODE(SGML)[UNUSED]] から類推すれば、文字が割り当てられていない[[符号位置]]のことを言うのでしょう。]])
なお、重要文字でない[[回避文字]]も非 SGML 文字になります。
[[#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個含んでいるし、[Q[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] 投げやりな定義ですね。。。
[CODE(char)[[[SS2]]]]・[CODE(char)[[[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(ABNF)[[[Char]]]] 参照。)
とは食い違っている気がしますが・・・気にしないことにしましょう。
[[#comment]]
* Boot Strap
[26] [[SGML宣言]]で文書文字集合が規定されていたとしても、
受け取った側のシステムがその文書を読めるとは限りません。
SGML 宣言すらも読めないかもしれません。
JIS 12.1 備考によれば、文書を機械処理にかける前に、
[[システム文字集合]]に変換しておくのは、文書受領者の責任です。
そして、そのための情報交換には二つの方法があるとされています。
- 外部プロトコルによる情報伝達 — 非電子的手段も含む
- SGML 宣言を人間可読形式で渡す
[27] 文書を新しい文字集合に変換する時には、
SGML 宣言の文書文字集合記述引数の文字番号や、
[[文字参照]]の文字番号を変更しなければなりません。
(JIS 12.1) このほかにも、
文書中のすべての文字番号が変更の対象となるはずです。
しかし >>26 の状況でシステム文字集合に変換する時にこの修正は大変そうです。
(似たような文書文字集合ならよいですが、
全然違っていたら、文書中の文字参照を探し回らなければならないのです。
SGML 解析器に通す前ですし、
一括置換だと文字データ区間内などでも書き変えてしまう虞があります。)
理論上はともかく、
実際にはまったく異なる文書文字集合など使わないであろうから、
と思いたいところですが、 [[EBCDIC]] などが使われていたらと考えると。
文字番号専用の文字集合を指定できるようにしてあればこの問題は回避できそうです。
[[#comment]]
* memo