Copyright (C) 1999 Nihon Unisys,Ltd. for Japanese Translation.
SGMLとXMLとの比較
この文書は,W3CがNOTEとして発行したNOTE-sgml-xml-971215を基準に日本語解説を作成したもので,原文は次を参照されたい。
http://www.w3.org/TR/NOTE-sgml-xml-971215 by James Clark
この解説は,読者の知識として,SGMLの国際規格(ISO 8879-1986)及び日本工業規格(JIS X 4151-1992)を前提としている。したがって,ここでの技術用語は,SGML規格の用語の定義に従っている。それらの用語に馴染みがない場合,日本工業規格JIS X 4151を並行して参照されたい。
小目次
- XMLとSGMLとの相違
- SGMLからXMLへの変換
- XMLのためのSGML宣言
XMLは,ここでのSGML宣言を適用した文書だけを許す。この宣言では,次のSGMLの機構使用をすべて"NO"とする。
具象構文は,次のとおり相違することに留意されたい。
- 短縮参照区切り子は,宣言しない。
つまり,XML中では,SHORTREF及びUSEMAPは,出現できない。
- 処理命令の終了タグPICは,”?>”とする。
- 量集合及び容量は,効果的に,無制限とする。
- 名前は,大文字と小文字とを区別する(命名方法のNAMECASE GENERALは,"NO"とする。) 。
- 下線及びコロンを名前の中で使用してもよい。
- 名前の符号は,Unicodeが使用でき,ASCIIに限定されない。
次の構造体は,"SHORTTAG"が"YES"の場合SGMLでは使用可能であったが,XMLでは許さない。
net区切り子は,空要素を閉じる場合だけに利用できる。Web SGMLの付加の付属文書を適用しないSGMLでは,net区切り子は,"/>"として宣言する。この方法によれば,XMLでは,空終了タグを許さなくて,終了タグがない要素にだけnet可能開始タグを許す。
Web SGML付加の付属書を適用したSGMLでは,分離したNESTC(net-enabling start tag close,net可能開始タグ終了)の区切り子がある。
これが,net可能開始タグ<e/と空終了タグ>との組み合わせからなるXML構文<e/>を可能にする。この方法によって,XMLでは,空終了タグの直前の場合だけ,net可能開始タグを許す。
XMLは,SGMLにはない次の制約を課した。
- 実体参照
- 実体参照は,REFC区切り子で終了しなければならない。
- 内容中の外部データ実体への参照は,許さない。
- 内容中の一般実体参照は,同期していなければならない。
- 属性値中での外部実体参照は,許さない。
- 引数実体参照は,宣言の分離子中の内部の部分集合中だけに許す(すなわち,マーク宣言が出現する箇所) 。
- 文字参照
- 実体宣言
- #DEFAULT実体は,宣言できない。
- 外部SDATA実体は,許さない。
- 外部CDATA実体は,許さない。
- 内部SDATA宣言は,許さない。
- 内部CDATA実体は,許さない。
- 処理命令PI実体は,許さない。
- くくられた文実体は,許さない。
- 外部識別子は, システム識別子を含まなければならない。
- 実体に対して属性は,指定できない。(許す構文解析系があるので,調査中)
- 一般文実体及び外部引数実体の置換文は,整形式XMLでなければならない。
- 引数表記中のアンパーサンドは,
構文的に正当な実体参照又は
文字番号による文字参照が後続しなければ
ならない。
- 属性定義並び宣言
- 属性定義並び宣言中の結合要素型は,名前群にすることはできない。
- 記法に対する属性は,指定できない。
- 属性CURRENTは,許さない。
- 内容参照属性は,許さない。
- 値を宣言したゐUTOKEN(S)は,許さない。
- 値を宣言したNUMBER(S)は,許さない。
- 値を宣言したNAME(S)は,許さない。
- 名前字句群は,接続子orを用いなければならない
- 属性定義並び宣言
中の省略値として指定された属
性値は,文字データで
なければならない(SGMLで許されるSHORTTAG YESの場合と等しくない。)
- 要素型宣言
- 要素宣言中の関連要素型は,名前群にできない。
- 要素宣言中での,共通識別子は,
付番核
及び付番
として指定できない(SGMLで許されているRANK機構NOの場合と等しい)。
- 要素宣言中のタグ省略最小化は,許さない。
- 宣言内容のRCDATAは,許さない。
- 宣言内容のCDATAは,許さない。
- 内容モデル群は,接続子andを使えない。
- 混合内容のモデル群は,限定した様式をもつ。
- 添加要素は,許さない。
- 排除要素は,許さない。
- 注釈
- 処理命令
- 処理命令は,名前(PIの目的)によって始まらなければならない。
- PIの目的がXMLである処理命令は,外部実体の初めにだけ出現でき,その文書中に出現するならばXML宣言でなければならない。そうでない場合,文宣言でなければならない。
- PIの目的は,XMLでないかぎり,[Xx],[Mm]及び[Ll]と一致してはならない。
- マーク区間
- マーク区間宣言中に,TEMP状態見出し語は許さない。
- RCDATAマーク区間は,許さない。
- 添付要素及び排除要素のマーク区間は,文書実体中には,
許さない。
- マーク区間宣言中には,
状態見出し語のない状態見出し語指定は侘許さない。
- マーク区間宣言中には,一つの状態見出し語指定は,
一つより多い状態見出し語を含まない。
- マーク区間は,内部部分集合中には,許さない。
- 引数分離子は,文書実現値中の状態見出し語指定中に許さない。特に,引数実体参照は,許さない。
- その他
- [Xx],[Mm]及び[Ll]で開始する名前は,予約されている。
- SGML宣言は,明示的とし,文書実体中に暗黙的に存在してはならない。
- 記号<及び&がデータとして出現する場合,<
及び&として入力しなければならない。
- 正式な構文によって要求される引数分離子は,いつも存在
しなければならず, 区切り子に近接する場合,省略できない。
XMLは,属性のxml:space及びxml:langの意味を事前に定義している。
更に,XMLは,すべての属性,要素型,並びに[Xx],[Mm]及び[Ll]によって
始まる記法名を予約している。
XMLは,次のとおりに振る舞う実体管理系を適用したSGML構文解析系を要求している。
- 行は,ニューライン符号(Unicode符号の#X000A)によって終端させる
こと
これは,典型的なSGML実体管理系(処理系)では,RS(#X000A)及びRE(#X000D)
によって終端している。
- システム識別子は,URLとして取り扱われる。
- 実体管理系は,Unicode符号のUTF-16及びUTF-8によって符号化された
実体を支持しなければならない。かつ,バイト順の印の存在に基盤をおく
実体の符号化を自動的に検出できなければならない。
- 実体管理系は,XML宣言中で符号宣言及び処理命令PIの符号化
を認識でき,実体の符号化を決定するのに利用することが望ましい。
XMLは,ある応用系に対して構文解析系が可能とならねばならないと
いう(情報についての)要件を課している。
XMLは,"Web SGML適用の付属書"によって,なされた次の変更によっている。
- HCRO区切り子(Hex numeric Character Referencesに由来)XML
では,&#x。
- EMPTYを宣言した要素に終了タグを許すEMPTYNRM機構。
- NESTC区切り子。
- 重複した数え上げ属性は許す。
- 群の中での引き数実体参照についての規則の緩和。
- 単一な要素型に対する複数のATTLIST宣言。
- 属性を宣言しないATTLIST宣言。
- RS及びREを無視するためのSGMLの規則を落とすというKEEPRSRE機構。
- フルタグ付けされたSGML文書。フルタグ付けされているが妥当な
XML文書でない文書は,SGML文書に適合している。この文書は,整形式で
あるが妥当なXML文書でないものを含めて,すべてのXML文書を適合餡GM
L文書とする。
- SGML宣言中の事前宣言されたデータ文字実体(lt,ampなど)。
- 無制限な容量及び量集合。
"Web SGML適用の付属書"は,更に,SGML中に強制するXML制約を可能と
させている。
- SHORTTAGは,分離された。これによって,他のSHORTTAG構成子に
許すことなしに,SGML宣言で属性に省略時値及び簡略終了タグ矢ETを
可能とした。
- SGML宣言は文書が統合的に格納されていると想定することが
できる。これによって,文書中で不適切に入れ子になった実体参照を
許さなくできる。
SGMLを超越するXMLの多くの制約に対して,SGML文書をその制約に合わせ
かつ同じ処理系(ESIS)をもつという感触で等価である文書に自動的に
転換できる。
- 外部SDATA実体及び外部CDATA実体
これらは,NDATA実体に転換できるかもしれない。
- 部分文書実体
これらは,SGML又はXMLであるという標識を付けてNDATA実体に転換できるかも知れない。
- 内容中の外部データ実体への参照
値が空であるという宣言をもつ属性付き空実体に転換できるかもしれない。
- データ属性
外部データ実体が要素中の実体又は実体群属性中で利用されるだけだという理由から,これらは,その要素の他の属性に転換できるかも知れない。 - 内部SDATA実体
その参照は,適切なUnicode符号化文字へ参照された数字による文字参照 に転換できるかも知れない。それが実体又は実体群の中で利用されてい
る場合,その実体は,外部実体であるはずのものである。
- 内部CDATA実体
実体又は実体群に利用される場合,その実体は,外部にしなければならないものである(CDATA実体への参照は,ESISの一部ではない。)。
- 処理命令(PI)実体
処理命令終了?>を含む場合,XML PIには転換できない。それは,実体参照がPI中で置換されるという応用規定によることができる。更に,名前から始まっていない場合,整形式XML PIには,転換できない。
- 名前群
SGML文書は,名前群中の文字を許す具象構文があるが,XMLでは名前群に許さない。
3.1 拡張名前規則の適用例
次のSGML宣言は,ISO 8879(JIS X 4151)に対する拡張名前規則の技術
補正書の利点を使った。ただし,Web SGML
の適用の附属書は利用していない。
<!SGML -- SGML Declaration for XML --
"ISO 8879:1986 (ENR)"
CHARSET
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
CAPACITY SGMLREF
-- Capacities are not restricted in XML --
TOTALCAP 99999999
ENTCAP 99999999
ENTCHCAP 99999999
ELEMCAP 99999999
GRPCAP 99999999
EXGRPCAP 99999999
EXNMCAP 99999999
ATTCAP 99999999
ATTCHCAP 99999999
AVGRPCAP 99999999
NOTCAP 99999999
NOTCHCAP 99999999
IDCAP 99999999
IDREFCAP 99999999
MAPCAP 99999999
LKSETCAP 99999999
LKNMCAP 99999999
SCOPE DOCUMENT
SYNTAX
SHUNCHAR NONE
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
FUNCTION
RE 13
RS 10
SPACE 32
TAB SEPCHAR 9
NAMING
LCNMSTRT ""
UCNMSTRT ""
NAMESTRT
58 95 192-214 216-246 248-305 308-318 321-328
(中略)
12449-12538 12549-12588 19968-40869 44032-55203
LCNMCHAR ""
UCNMCHAR ""
NAMECHAR
45-46 183 720-721 768-837 864-865 903 1155-1158
(中略)
12337-12341 12441-12442 12445-12446 12540-12542
NAMECASE
GENERAL NO
ENTITY NO
DELIM
GENERAL SGMLREF
NET "/>"
PIC "?>"
SHORTREF NONE
NAMES
SGMLREF
QUANTITY SGMLREF
-- Quantities are not restricted in XML --
ATTCNT 99999999
ATTSPLEN 99999999
-- BSEQLEN not used --
-- DTAGLEN not used --
-- DTEMPLEN not used --
ENTLVL 99999999
GRPCNT 99999999
GRPGTCNT 99999999
GRPLVL 99999999
LITLEN 99999999
NAMELEN 99999999
-- no needed to change NORMSEP --
PILEN 99999999
TAGLEN 99999999
TAGLVL 99999999
FEATURES
MINIMIZE
DATATAG NO
OMITTAG NO
RANK NO
SHORTTAG YES -- SHORTTAG is needed for NET --
LINK
SIMPLE NO
IMPLICIT NO
EXPLICIT NO
OTHER
CONCUR NO
SUBDOC NO
FORMAL NO
APPINFO NONE
>
3.2 WEB SGML適用例
次のSGML宣言は,ISO 8879に対する"Web SGML適用の附属書"の利点を活
かした。
<!SGML -- SGML Declaration for XML --
"ISO 8879:1986 (WWW)"
CHARSET
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
CAPACITY NONE
SCOPE DOCUMENT
SYNTAX
SHUNCHAR NONE
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
FUNCTION
RE 13
RS 10
SPACE 32
TAB SEPCHAR 9
NAMING
LCNMSTRT ""
UCNMSTRT ""
NAMESTRT
58 95 192-214 216-246 248-305 308-318 321-328
(中略)
12449-12538 12549-12588 19968-40869 44032-55203
LCNMCHAR ""
UCNMCHAR ""
NAMECHAR
45-46 183 720-721 768-837 864-865 903 1155-1158
(中略)
12337-12341 12441-12442 12445-12446 12540-12542
NAMECASE
GENERAL NO
ENTITY NO
DELIM
GENERAL SGMLREF
HCRO "&#x" -- 38 is the number for ampersand --
NESTC "/"
NET ">"
PIC "?>"
SHORTREF NONE
NAMES
SGMLREF
QUANTITY NONE
ENTITIES
"amp" 38
"lt" 60
"gt" 62
"quot" 34
"apos" 39
FEATURES
MINIMIZE
DATATAG NO
OMITTAG NO
RANK NO
SHORTTAG
STARTTAG
EMPTY NO
UNCLOSED NO
NETENABL IMMEDNET
ENDTAG
EMPTY NO
UNCLOSED NO
ATTRIB
DEFAULT YES
OMITNSME NO
VALUE NO
EMPTYNRM YES
IMPLYDEF
ATTLIST YES
DOCTYPE YES
ELEMENT YES
ENTITY YES
NOTATION YES
LINK
SIMPLE NO
IMPLICIT NO
EXPLICIT NO
OTHER
CONCUR NO
SUBDOC NO
FORMAL NO
URN NO
KEEPRSRE YES
VALIDITY TAG
ENTITIES
REF YES
INTEGRAL YES
APPINFO NONE
SEEALSO "ISO 8879//NOTATION Application Requirements for XML//EN"
>