XMLのSGML宣言


XMLにはSGML宣言はありません、、、というと話が終わってしまうので。

SGMLでは文書やDTDを作成する前に、SGML宣言を用意します。 そして、その、任意のSGML宣言に基づいて、DTDを作成したり、文書を作成します。

ここで、任意とは、文字通り任意であり、どういうSGML宣言を使おうと SGMLのルールに従っていればよく、それを処理できるか否かは、文書を処理する アプリケーションに依存する問題です。よって、SGML文書を流通させる場合、 状況によっては、受け取った文書が処理できないということもありえます。
しかし、「処理できない」事はSGMLの責任でもなんでもなく、文書を交換する 双方の責任になります。
では、XMLの場合はどうか?

XMLの場合には、

SGML宣言は無い

んだそうです。XMLの仕様にのっとったSGML宣言を考えてみることはできますが。

「XMLがSGMLのsubsetであり、かつ、SGML宣言が無い」ということは、 (勝手に推測しますと、)「あるXML文書を処理できるアプリケーションならば、 (一応)任意のXML文書を処理できる」という事になるかと思います。

「そんなこと言ったって、SGMLにはオプション機構がいっぱいあるじゃんか」と いう話もあるでしょうが、XMLでは、"subset"という位でSGML宣言で定義(指示?)できる 機構についてはかなり制限を設けてあります。

「百聞は一見にしかず」というわけで、XMLのSGML宣言の例(一部)を以下に書いて みます。出展は、XML: PRINCIPLES, TOOLS, AND TECHNIQUES, World Wide Web Journal: Volume 2, Issue 4のP.52からの SGML宣言で、一部、私が勝手に変更してあります。
#ところどころ日本語でコメントがありますが、その部分は無視して下さい。


<!SGML -- SGML Declaration for XML --
	"ISO 8879:1996(ENR)"
		-- Extended Naming Rules に従う旨の最小表記 --
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ってやつ --
	DESCSET
		・
		・
		・
		128	32	UNUSED
		160	65376	160	-- 2バイト文字を扱うため --
CAPACITY SGMLREF
	TOTALCAP	99999999
	・		・		-- 規格参照容量集合はすべて99999999 --
	・		・
	LKNMCAP		99999999
SCOPE DOCUMENT
SYNTAX
	SHUNCHAR NONE
	BASESET
		"ISO Registration Number 176//CHARSET
		ISO/IEC 10646-1:1993 UCS-2 with implementation
		level 3//ESC 2/5 2/15/4/5"
	DESCSET
		0	65536	0
	FUNCTION
		RE	13
		RS	10
		SPACE	32
		TAB	SEPCHAR	9
		ITAB	SEPCHAR	12288	--ideographic space--
		-- ideographic spcae って何? --
NAMING
	LCNMSTRT
		224-226 248-255 ・・・・・
		・・・・・・・・・・・・
		・・・・・・・・・・・・
		8560-8575 65345-65370
	UCNMSTRT
		192-214 216-222 ・・・・・
		・・・・・・・・・・・・
		・・・・・・・・・・・・
		8544-8559 65313-65338
	NAMESTRT
		58 95 170 ・・・・・・・・
		・・・・・・・・・・・・
		・・・・・・・・・・・・
		65490-65495 65498-65500
	LCNMCHAR "-."
	UCNMCHAR "-."
	NAMECHAR
		183 720 721・・・・・・・・
		・・・・・・・・・・・・
		・・・・・・・・・・・・
		65438 65439
	NAMECASE
		GENERAL	YES
		ENTITY	NO
	DELIM
		GENERAL SGMLREF
		NET	"/>"
		PIC	"?>"
		-- NET と PIC の指定がミソ --
		SHORTREF	NONE
	NAMES
		SGMLREF
	QUANTITY SGMLREF
		・
		・
		NORMSEP		2
		・
		・
		--ほとんど99999999---
		-- BSEQLEN は(SHORTREF が NONE なので)not used だそうで --
		-- DTAGLEN,DTEMPLEN(は DATATAG が NO(後述))なので not used だそうで --
		-- 上記2行の(・・・)は私なりの解釈ですけど、いいですよね ?
			not used てことは、規格参照量集合に従うのかな? --
FEATURES
	MINIMIZE
		DATATAG		NO
		OMITTAG		NO	-- こいつは面倒だね --
		RANK		NO
		SHORTTAG	YES
		-- NET のために必要(らしい) --
	LINK
		--全部 NO--
	OTHER
		--全部 NO--
	APPINFO	NONE
>


つぎに、このSGML宣言の(私なりに解釈した)特徴を。
XML入門へ戻る
miuraj@isc.meiji.ac.jp