処理指令実体

処理指令実体

[1] 参照時に、処理指令システムデータとして扱われる実体。 Processing instruction entity。 (JISX4151‐1992 定義 (128))

[2] 例えば、 <!ENTITY foo PI "something"> と宣言した上で &foo; と書いたとします。 すると、参照が展開される時に、この参照があった場所に元から <?something?> のように書いてあったのと同じような扱いがなされます。

[3] 処理指令はシステム依存ですから、文書実現値内に直接記述してしまうと可搬性が低下します。 だからこそ処理指令ではなく記述的マークが推奨されるのですが、それでもどうしても必要になることもあります。 できる限りは可搬でありたいときに処理指令実体が有用です。

例えば、強制改頁をさせたいとします。 あるシステムでは <?page break?> と書けば改頁しますが、別のシステムでは <?進む : 次頁先頭?> と書かないといけないとします。処理指令実体が使えないとすると、 両システム間で移動するごとに全改頁を書き換えないといけません。 しかし、処理指令実体の参照 &pbr; としておいて、文書型定義<!ENTITY pbr PI "page break"> 又は <!ENTITY pbr PI "進む : 次頁先頭"> としておけば、システム間移動時にはここ1箇所を書き換えるだけで済みます。

[4] 参考。実際には、システム依存だけど使わないといけない処理指令は複数種類あるでしょう。 そういうときは条件区間と併用すると楽になります。

<!ENTITY % system1 "INCLUDE">
<!ENTITY % system2 "IGNORE">
<![%system1;[
<!ENTITY pbr PI "page break">
<!ENTITY br  PI "line break">
<!ENTITY one PI "one column">
<!ENTITY two PI "two column">
]]>
<![%system2;[
<!ENTITY pbr PI "進む : 次頁先頭">
<!ENTITY br  PI "進む : 次行先頭">
<!ENTITY one PI "COLUMN : 1">
<!ENTITY two PI "COLUMN : 2">
]]>