Однако вернемся к HTML.
Поскольку в случае этого языка одна и та же технология ответственна за оба
аспекта разметки, необходимо придерживаться определенных правил, которые
позволят
45
если
не разделить содержание и оформление, то по крайней мере сделать их хоть
сколько-нибудь независимыми друг от друга.
На
любом сайте, превышающем по размеру страницу и содержащем хотя бы одну серию
повторяющихся или однотипных элементов, форматирующие коды HTML
удобно собирать в унифицированные модули, или блоки, играющие роль
своеобразных «тегов логической разметки», параметры оформления которых хранятся
в них же самих. Внутреннее устройство таких блоков может быть в принципе любым
— в частности, в них можно как угодно смешивать логические и визуальные теги HTML.
Однако, чтобы построенный таким образом логический план разметки действительно
облегчал создание и поддержку сайта, нужно придерживаться нескольких несложных
правил:
•
Экземпляры одного блока должны быть абсолютно идентичны, за исключением
вставок изменяемого содержимого (например, текста заголовка в блоке
заголовка).
•
Общее количество разновидностей блоков должно быть минимальным, и после того
как дизайн сайта устоялся, новые блоки могут вводиться в виде исключения —
только когда на сайте появляется принципиально новое содержимое, не лезущее в
старые «болванки».
•
За пределами блоков не должно оставаться никаких «висячих» тегов, за
исключением самых необходимых средств оформления текста (тег Р и логические
теги типа ЕМ и STRONG).
•
Каждый блок должен быть помечен в HTML-коде стандартным
комментарием, который позволит легко опознать этот блок как при ручном
редактировании, так и при автоматическом поиске.
Работа
с таким модульным сайтом происходит в одном из двух режимов, соответствующих
двум ортогональным аспектам его разметки. В «режиме содержания» можно как
угодно редактировать существующий текст или добавлять новый, копируя при
необходимости нужные блоки, но ни в коем случае не залезая внутрь этих
блоков. Эта повседневная работа по обновлению и расширению сайта не требует
никакой дизайнерской квалификации, и создатель сайта вполне может перепоручить
ее обслуживающему персоналу сайта.
46
Наоборот,
редактирование «плана представления» после того, как сайт создан и запущен, в
идеале должно быть событием исключительным, осуществляющимся только под
контролем дизайнера. (Например, если вдруг выяснилось, что какой-то заголовок
ведет себя неправильно, когда его текст превышает по длине некую заранее
планировавшуюся величину, может понадобиться изменить устройство заголовочного
блока.) Это можно делать только глобальным поиском и заменой во всех
файлах сайта — ведь если вы поправите вручную одну из копий блока, ее уже не
найдет следующий автоматический поиск, и рассинхронизация поползет по сайту,
как раковая опухоль. Программа, которой вы пользуетесь для редактирования HTML-кода,
должна уметь искать и заменять многострочные блоки текста и пользоваться
регулярными
выражениями (regularexpressions) в
тех случаях, когда блок содержит вставки, изменяющиеся от одной копии блока к
другой.
Этот корпоративный сайт по объему и
частоте обновления своего материала близок к контент-сайтам (стр. 182), и
возможность свободно редактировать содержимое, оставляя нетронутым дизайн, для
него особенно важна. Вот, к примеру, как выглядит блок, создающий стандартный
внутритекстовый заголовок:
В начале блока ставится комментарий-идентификатор, а в
предпоследней его строке мы видим единственный фрагмент, изменяющийся от одного
заголовка к другому, — его текст (в данном случае «THECOADMETHOD»). Между собой блоки удобно разделять пустыми строками.
Вся страница, показанная на рис. 1, состоит из следующих блоков (приведены
только строки с комментариями):
<!-- top navigation -->
<!-- solid heading -->
<!-- open text block -->
Peter Coad is perhaps ... Reach him at pc@oi.com.
<!-- close text block -->
<!-- framed heading -->
<!-- open text block -->
The Coad Method focuses on ... frequent, tangible, working
results. <!-- close text block --> <!-- decorated close -->
Модульный
HTML —
не только имитация имеющегося в других языках программирования структурного
подхода и не только единственная реальная возможность приспособить этот язык к
созданию объемных и часто обновляемых сайтов. Это еще и необходимый
промежуточный этап будущей миграции к языку XML (о котором мы будем говорить
чуть ниже): тем же самым глобальным поиском вы в любой момент можете заменить
«псевдотеги» структурных блоков HTML на настоящие структурные
теги XML, разработав для них соответствующие стилевые спецификации. Такая
конверсия гораздо полнее отвечает целям и духу XML, чем приходящий в голову
первым буквальный, «тег в тег» перевод HTML в
формально корректный, но совершенно бессмысленный XML (стр. 51), — ведь
большинству визуально-ориентированных тегов HTML в
структурном языке XML нет и не может быть никаких соответствий.
Как
мы только что видели, модульный подход позволяет достичь в HTML
определенной ортогональности структуры и представления. Конечно, гораздо
удобнее было бы хранить повторяющиеся блоки визуального кода в отдельном, общем
для всего сайта «стилевике», а документы размечать только ссылками на
тот или иной блок — то есть, по сути, тегами логической разметки, говорящими
лишь о том, что стоит в данном месте документа, а не о том, как оно
выглядит.
Именно
такое естественное, а не насильственно насаждаемое разделение аспектов
содержания и представления предлагает язык XML (extensibleMarkupLanguage,
«Расширяемый язык разметки») — компактное упрощенное подмножество языка SGML,
разработанное Консорциумом W3 в расчете на постепенное
вытеснение из Интернета языка HTML. Этот «HTML
будущего», как его нередко называют, уже активно осваивается ведущими
производителями
48
программ,
причем не только броузеров — вероятно, поддержка XML через какое-то время
появится в большинстве текстовых процессоров, баз данных, систем подготовки
документации, а некоторые предрекают встраивание этого языка даже на уровне
операционных систем.
Итак, язык XML впервые открывает перед многомиллионной
интернетовской аудиторией дверь в мир настоящей структурной разметки и
подлинной ортогональности аспектов содержания и представления. В конечном итоге
эта новая технология должна резко увеличить производительность труда авторов,
сняв необходимость утомительного, зачастую ручного перевода информации из
одного визуально-ориентированного формата в другой. Однако не обойтись на этом
пути и без трудностей «перепривыкания» и ломки сложившихся стереотипов. Перейти
с HTML
на XML — это совсем не то же самое, что обновить версию вашего любимого
текстового процессора. Может показаться, что идеология ортогональности языка SGML, прекрасно
работающая для устоявшихся типов документов с годами отлаживавшимися DTD, не справляется со
слишком разнообразным и зачастую нелогичным содержимым современного Интернета.
Вспомним, однако, что только противоречие может быть двигателем прогресса, —
нам предстоит еще увидеть, как развиваются, взаимообогащаясь и изменяясь под
действием друг друга, Интернет и XML...
Внешне
XML-документ очень похож на HTML: те же угловые скобки,
открывающие и закрывающие теги, атрибуты и подстановки. Но если в HTML
все допустимые теги жестко заданы стандартом, то XML-документ
может пользоваться любыми тегами, пусть даже изобретаемыми на
ходу автором документа. Это объясняется разным статусом этих языков: если HTML
есть одно из приложений SGML, его отпрыск и порождение, то XML —
это подмножество
SGML,
его «младший брат», обладающий лишь чуть меньшими возможностями и точно так же
пригодный для создания фиксированных систем разметки документов. Такие системы
на основе XML действительно создаются в последнее время во множестве — от
сложного языка MathML для разметки математических текстов до
простеньких наборов из пары десятков тегов для хранения кулинарных рецептов или
текстов церковных проповедей.