[1] 体系実体宣言は、 体系DTD を宣言する外部実体宣言です。 (引数実体でも一般実体でも構いません。)
仕様書: ISO/IEC 10744:1997 A.3.4.3 <http://www.y12.doe.gov/sgml/wg8/docs/n1920/html/clause-A.3.4.html#clause-A.3.4.3>
[2] 体系実体宣言は、体系支援宣言の一部です。 体系実体宣言で宣言した実体名は、 体系支援属性 ArcDTD (体系メタDTD実体属性) の値として指定します。
この宣言は、体系を有効化している文書では必須ですが、 文書そのものの構文解析では基本的に使用されません。 体系処理で体系 DTD を使用する場合に参照されます。 (この宣言の参照先も、体系 DTD が使用されない場合には必ずしも参照できる必要はありません。)
[3] 使用例:
<!-- 体系支援属性 --> <!ATTLIST Arc1 -- 中略 -- ArcDTD CDATA "%ArcDTD"> <!-- 体系実体宣言で使用する記法 --> <!NOTATION SGML PUBLIC "ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN"> <!-- 体系実体宣言 --> <!ENTITY % ArcDTD PUBLIC "+//IDN example.org//DTD AFDR Meta-DTD Arc1 Architecture//EN" CDATA SGML>
実体 %ArcDTD
を DTD 内で別途使用するときには、
CDATA SGML
の部分は省略します。
(そうしないと DTD として構文解析できなくなります。)
体系 DTD が ISO/IEC 10744:1997 の拡張を使っているときには、
公開識別子が ISO/IEC 10744:1997//NOTATION AFDR Meta-DTD Notation//EN
の記法を宣言して、体系実体宣言にも指定する必要があります。
(この場合は DTD ないで別途使用することはできなくなります。)
[4] >>3 体系 DTD の拡張は WebSGML
で SGML 本体に取込まれましたけど、
そのときはどう宣言したらよいのでしょう。
公開識別子 ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN
の記法は素の SGML を指していて、 Web SGML
には使えないのかな、やっぱり。
[5]
>>3 に書いてあるとおり、 ArcDTD
属性値表記内の引数実体参照に見える部分は DTD の構文解析の時点では展開されませんから、
体系実体宣言が体系支援宣言の前にある必要はありません。 (ISO/IEC 10744:1997 には明記されていないようですが、 >>3 の例のように体系実体宣言の方が後になっている DTD が用意されていますから、良いのでしょう。)
(名無しさん)