条件付きセクション

conditional section

 DTDの内部において、特定の部分を、含める機能と、除外する機能がある。これをパラメタ実体と併用することで、便利に利用できる場面がある。

 以下の例は、book要素に関する定義を含め処理の対象とすることを指定している(以下の例は、XML 1.0勧告より引用)。

<![INCLUDE[
<!ELEMENT book (comments*, title, body, supplements?)>
]]>

 それに対して、以下の例は、book要素に関する定義を除外し、処理の対象としないことを指定している。

<![IGNORE[
<!ELEMENT book (comments*, title, body, supplements?)>
]]>

 これだけなら、あまり意味がある機能ではない(除外したければ最初から書かなければよい)。しかし、パラメタ実体と併用することで効果を発揮する。

 たとえば、以下のようにDTDを記述しておく。

<![%draft;[
<!ELEMENT book (comments*, title, body, supplements?)>
]]>

<![%final;[
<!ELEMENT book (title, body, supplements?)>
]]>

 このDTDを処理する際に以下のいずれかのパラメータ実体を定義する。

<!ENTITY % draft 'INCLUDE' >
<!ENTITY % final 'IGNORE' >

<!ENTITY % draft 'IGNORE' >
<!ENTITY % final 'INCLUDE' >

 どちらのパラメータ実体を定義するかによって、book要素に関する異なる定義を切り替えることができる。切り替える内容は多いときには便利なテクニックである。これを条件付きセクションという。

 しかし、条件付きセクションはDTDに強く依存したテクニックであり、DTDへの依存度が低くなりつつあるXML界において、利用される機会は多くない。

関連記事

関連用語

リンク

XML & SOA フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

アイティメディアの提供サービス

キャリアアップ