体系実体宣言

体系実体宣言

[1] 体系実体宣言 (architecture entity declaration) は、 体系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 が用意されていますから、良いのでしょう。) (名無しさん)