Расширяемый язык разметки

       

Условная секция




[61] conditionalSect    ::=    | ignoreSect
[62]    includeSect    ::=    '<![' S? 'INCLUDE' S? '[' ']]>' /* */
[63]    ignoreSect    ::=    '<![' S? 'IGNORE' S? '[' * ']]>' /* */
[64]    ignoreSectContents    ::=    ('<![' ']]>' )*
[65]    Ignore    ::=    * - (* ('<![' | ']]>') *)

Ограничение действительности: Правильная вложенность условной секции/PE

Если какая-либо из конструкций условной секции ("<![", "[" или "]]>") находится в тексте замены для ссылки на сущность параметра, то в этом тексте должны находиться и все остальные конструкции.

Подобно внутреннему и внешнему наборам DTD, условная секция тоже может содержать одну или несколько полных деклараций, комментариев, инструкций обработки или же вложенных условных секций, перемежаемых пробельным символом.

Если ключевым словом условной секции является INCLUDE, то содержимое этой секции становится частью DTD. Если же ключевым словом условной секции является IGNORE, то содержимое секции логической частью DTD не становится. Если условная секция с ключевым словом INCLUDE была представлена в составе более крупной условной секции с ключевым словом IGNORE, то игнорируются обе внутренняя и внешняя секции. Содержимое игнорируемой условной секции обрабатывается путем изъятия всех символов, стоящих после скобки "[", следующей за ключевым словом, и до того как будет найден конец условной секции (исключение составляет условная секция, начинающияся с "<![" и заканчивающаяся "]]>"). При этом ссылки на сущности параметров не распознаются.

Если ключевое слово условной секции является ссылкой на сущность параметра, то данную сущность параметра необходимо заменить его содержимым до того, как процессор будет решать, включать или игнорировать данную условную секцию.

Например:

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

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



Содержание раздела