SGML宣言からみるXMLの特徴


三浦流XML用SGML宣言読解を。SGML宣言を読んで分かるXMLの特徴を書いてみます。
まず、先頭、<!SGMLの後の、

"ISO 8879:1986(ENR)"

は、ENR(Extended Naming Rules) に従う事の宣言ですから、文書要素の名称などに多バイト文字も使えること になります。とはいっても、エスケープシーケンスは使えないでしょうから、 日本語の場合、euc-jpやNCALS研究会のいうG1漢字方式(JIS X 0208 のコードを G1へ呼び出す方法(つまり、ほとんどEUC?))、あるいはshift-jisじゃないとだ めなんでしょうね、おそらく。
まぁ、SGML宣言は実際にはないので、勝手な推測ですし、 エスケープシーケンスがあったっていいんでしょうが、XML-WD(PR)に

XML shall be compatible with SGML.
と書いてありますもんねぇ。とはいっても、ISO-2022-JPもOKなんですよねぇ、、、
# この辺、よく、わかんないなぁ、、、

続いて、

CHARSET
BASESET
"ISO Registration Number 176//CHARSET
ISO/IEC 10646-1:1993 UCS-2 with implementation
level 3//ESC 2/5 2/15/4/5"
は、UNICODEを使う旨の宣言ですね。当然、必要に応じて 変更されるわけですね。
# 存在しないものの「変更」というのも何ですが。

で、今度は、

CAPACITY SGMLREF
TOTALCAP 99999999
ENTCAP 99999999
・ ・
・ ・
LKNMCAP 99999999
前にも書きましたが、規格参照容量集合はすべて、99999999 に宣言されてますから、ほとんどどんなサイズの文書もOKといったところで しょうか。
# 「容量」ってじつはよく分からないんです(^ ^;

次に、SYNTAX

ITAB  SEPCHAR  12288  --ideographic space--
ITABって何でしょうねぇ、私、しりませんけど、まぁ、空白みたいな物でしょう。

次の

NAMING
LCNMSTRT
224-226 248-255 ・・・・・
・・・・・・・・・・・・
UCNMSTRT
192-214 216-222 ・・・・・
・・・・・・・・・・・・
NAMESTRT
58 95 170 ・・・・・・・・
・・・・・・・・・・・・
LCNMCHAR "-."
UCNMCHAR "-."
NAMECHAR
183 720 721・・・・・・・・
・・・・・・・・・・・・
ENRに従うので、こんな感じで文字コードを10進数で指定すれば いいわけです。

つぎがメインでしょう。(SGML の TC2,3 ではチト違う(1999.11.30))

DELIM
GENERAL SGMLREF
NET "/>"
PIC "?>"
SHORTREF NONE
まず、NET方から。NETの宣言は、

簡略終了タグを/>とする

ということです。
XML-WDでは、空要素(Empty Element)のタグを、

EmptyElement ::='<' Name (S Atttibute)* S? '/>'

と定義しています。Empty Elementが何で必要かというと、HTMLでは、

<IMG SRC="http://www.meiji.ac.jp/icons/home.gif">

見たいなものがありますよね。多分、このせいでしょう。で、これには終了タグは無い。
でもXMLでは、後で出てきますけど

OMITTAG  NO

なので、通常、終了タグは省略できないわけです。で、NETを 定義しておくことで、XMLは、

<IMG SRC="http://www.meiji.ac.jp/icons/home.gif"/>

な風に記述することができるわけで。文法的には、 />が終了タグの役割を果たすといえます(よね? 自信ないなぁ)
HTMLに<BR>ってありますけど、これなんかはXMLの場合だと、

<BR/>

としておけば、いいわけですよね。
つぎに来ているのは、PIC、処理命令の終了の定義です。
XMLでは、文書の先頭にXML宣言なるものが必要なようです。 それは、

<?XML version="1.0" ?>

のように記述するようです。
# ちなみに、このXML宣言にencoding="euc-jp"みたいに、文字の エンコード方法を指定できるそうです。
で、<?から、?>までがXMLを処理する アプリケーションに対する指示になるわけですが、何で

PIC  "?>"

なのかは、分かりません。>だと何がまずいのかな、、、
SHORTREFNONEなのは、分かりやすくて好きです。

お次は、QUANTITYいきましょう。
ほとんど99999999で、NORMSEP(よくわからん) のみ、規格参照量集合としての定義のまま。
違いは、

BSEQLEN が not used
DTAGLEN,DTEMPLEN が not used

です(そのように、コメントに書いてる)。何でか? 私なりの解釈ですと、

  1. BSEQLENの定義が無い(not used)なのは、XMLではSHORTREF NONE(短縮参照は使わない)だから。
  2. DTAGLEN,DTEMPLENの定義が無い(not used)なのは、XMLでは、DATATAG NO(後で出てくる)なので。
ということかと。

最後に機構の部分。LINK,OTHERは全部NOAPPINFONONEで、若干特徴があるのは、MINIMIZEの所で、

DATATAG   NO
OMITTAG   NO
RANK     NO
SHORTTAG   YES

ここで、RANK  NOはいいでしょう。だいたい、私はよくわかんない。
DATATAG NOも、いろんな本を見ると、それなりに便利そうですが、 べつに使わないでしょうから問題無いでしょう。
OMITTAG NOなのは、面倒ですね。
SHORTTAG YESなのは、NETを定義するためかな。


SGML宣言を読んで分かるのは、まぁ、こんなもんかと。
以上で、三浦流XML用SGML宣言読解を終わります。
# 御粗末 (_ _)
XML入門へ戻る
miuraj@isc.meiji.ac.jp