Page 150 - 4785
P. 150
<! ELEMENT (line | line1 | line2) O O (#PCDATA)>
Опис елемента <poem> тепер можна змінити так, щоб включити всі
три варіанти:
<! ELEMENT poem - O (title ?, (stanza + | couplet + | line +))>
Тобто, вірш складається з необов'язкового заголовка, за яким слідує
одна або кілька строф, або одне або кілька двовіршів, або одна чи
кілька рядків. Відзначте різницю між цим визначенням і наступним:
<! ELEMENT poem - O (title ?, (stanza | couplet | line) +)>
Другий варіант, використовуючи позначення включення у групи, а
не у кожного елемента всередині групи, дозволить одному віршу
складатися з суміші строф, двовіршів або білого вірша.
Таким чином можна будувати досить складні моделі,
відображаючи структурну складність різних типів текстів. У
наступному прикладі ми розглянемо строфовий вірш, в якому
з'являється рефрен (refrain). Він може складатися з повторень
елементів-рядків або бути просто текстом, чи не розділеним на
віршовані рядки. Рефрен може з'являтися тільки на початку вірша
або як необов'язкове доповнення після кожної строфи. Це можна
виразити моделлю вмісту кшталт такої:
<!ELEMENT refrain - - (#PCDATA | line+)>
<!ELEMENT poem - O (title?,
( (line+)
| (refrain?, (stanza, refrain?)+ ) )) >
Тобто, вірш складається з необов'язкового заголовка, за яким слідує
або послідовність рядків, або безіменна група, що відкривається
рефреном, за яким йде одна або декілька інших груп, кожен член
якої складається з строфи з необов'язковим рефреном. Цим зразком
відповідає послідовність рефрен - строфа - строфа - рефрен, так
само, як і строфа - рефрен - строфа - рефрен. А послідовність рефрен
- рефрен - строфа - строфа йому не задовольняє, так само, як і
строфа - рефрен - рефрен - строфа. Серед інших умов, що
накладаються цією моделлю, - вимоги, щоб у вірші було хоча б одна
строфа, якщо воно не складається просто з рядків, і щоб при
наявності і заголовка і строфи вони з'являлися саме в цьому порядку.
148