tanenbaum_seti_all.pages (525408), страница 193
Текст из файла (страница 193)
Он похож на переключатель предыдущего типа, так как тоже может находиться в одном из двух состояний (установлен/ сброшен), но не объединяется в группы и включается и выключается щелчком мыши на нем независимо от других элементов управления того же типа. Например, заказывая пиццу на веб-странице компании Е)есггор1гаа, пользователь может выбрать и сардины, и лук, и ананас (если у него крепкий желудок), но ему не удастся одновременно выбрать маленькую, среднюю и большую пиццу. Выбор приправы к пицце будет представлен в виде трех отдельных элементов управления типа свес~Ьох, тогда как выбор размера пиццы будет реализован с помощью набора переключателей. Если список, из которого предстоит сделать выбор пользователю, очень длинный, то использование переключателей несколько неудобно.
В этом случае можно использовать теги <зе1есг> и <!зе1есг> для определения списка альтернатив. При этом семантика переключателей сохраняется, если только не используется параметр вв1г1р1е, превращающий список альтернатив в набор независимо устанавливаемых и сбрасываемых флажков. Некоторые браузеры отображают пункты списка между тегами <зе1есс> и <Гзе1есГ> как всплывающее меню. Итак, мы рассмотрели два встроенных типа тега <1 прет>: гао1о и свес1Ьох.
На самом деле, мы уже познакомились и с третьим типом этого тета, то есть с типом техг. Мы не заметили этого, потому что этот тип является типом по умолчанию, 722 Глава 7. Прикладной уровень поэтому параметр гуре = техт можно не указывать. еще два возможных значения параметра гуре: раззноге и Гехгагеа.
Окно рэззногв аналогично окну Гехц с той разницей, что при вводе текста в окне раззиого символы не отображаются на экране. Окно Гехгзгеа отличается от окна ЬехГ тем, что может содержать несколы . строк текста. Возвращаясь к примеру на рис, 7.14, мы, наконец, добираемся до последнего использованного в этом примере элемента управления — кнопки звЬа10 (подтверждение). Когда пользователь щелкает мышью на этой кнопке, заполненный им бланк отсылается обратно на компьютер, на котором размещена эта веб-страница. Как и все остальные рассмотренные типы, зпЬа1 г является зарезервированным словом, интерпретируемым браузером, Строка параметра ча1ве (значение) в данном случае содержит надпись на кнопке. В принципе, все элементы управления, образуемые с помощью тега <1 прот>, могут иметь параметр чз1ое.
В окнах ввода текста содержимое параметра ча1че отображается в окне редактирования, и пользователь может редактировать или удалить его. Элементы управления свескЬох и гз01о также могут быть инициализированы с помощью специального служебного слова слесхеб («выбрано«, Дело в том, что чз1пе просто отображает текст, но не отображает предпочитаемый выбор.). Когда пользователь нажимает кнопку зоэа10, браузер упаковывает всю собранную информацию в одну большую строку и отправляет ее на сервер для обработки. Поля с данными разделяются амперсандами (5), а вместо пробелов ставятся знаки +.
В нашем примере такая строка, отсылаемая на сервер, может выглядеть так, как показано ниже (вы видите две строки, а не одну, только из-за недостаточной ширины бумажного листа): сизгоаег-допп+0ое$абсгезз-100+Ма1п+51.$с1су-МП11е+Р1«1пз$зтаГе-МЧзсоиптгу 05Азсагепо.1 234567890$ехр1гез-б/905сс-аазтегсаг05ргоэисг свеарзехргезз-оп Это сообщение отправляется на сервер в виде одной текстовой строки. Если флажок элемента управления спесхЬох сброшен, соответствующая ему переменная опускается.
Сервер сам решает, что ему делать с полученной строкой. Мы обсудим это позднее. ХМ1. и ХЗ~. Язык НТМЬ вЂ” с формами или без оных — никак не определяет структуру вебстраниц. Он смешивает содержимое страницы и описание средств ее форматирования. По мере роста популярности электронной коммерции и других приложений появлялась все более очевидная необходимость в структурировании веб-страниц и отделении содержимого от форматирования. Например, поисковая программа, обещающая найти в Мировой паутине книгу или компакт-диск по самой выгодной цене, должна проанализировать множество страниц, находя нужное наименование и цену.
Если страница написана на обычном НТМЬ, такой программе будет очень тяжело определить, где указано название товара, а где — его цена. По этой причине консорциум 5АгЖЖ (%3С) предложил расширение НТМ1., позволяющее структурировать страницы для облегчения их автоматической обработки. Для целей было создано два языка. Первый, ХМЬ (еХгепэ(Ые Мзг)гцр Всемирная паутина (1ММД/) 723 ) апяцаяе — Расширяемый язык разметки веб-страниц), описывает структурированное содержимое страниц, а второй, ХЯ. (еХтепз?Ые Бту?е ?.апяиаяе — расширяемый язык стилей), описывает форматирование независимо от содержимого.
И о том, и о другом можно говорить очень долго, поэтому нам приходится ограничиться лишь поверхностным описанием идей, лежащих в основе этих языков, Рассмотрим документ ХМ1., представленный в листинге 7.7. В нем определяется структура Ьоод 11зс, представляющая собой список книг. Под каждую книгу отведено три поля: название, автор и год издания.
Эти структуры чрезвычайно просты. Разрешается иметь структуры с повторяющимися полями (например, несколько полей с именами авторов), необязательными полями (например, название прилагающегося компакт-диска), а также альтернативные поля (например,?Ж1. магазина, если книга еше есть в продаже, и УРс?. аукциона, если весь тираж уже распродан). В приведенном примере каждое поле является неделимой сущностью, однако разрешается разделять поля на подполя.
Например, поле, содержащее имя автора, может быть — для улучшения возможностей поиска и форматирования — организовано следующим образом: <ацтпог> <Ттгзт паса> Эндрю </ттгвг пдюэ> <1авс йаюе> таненбаун </1азс папе> </ацсйог> Итак, любое поле может иметь подполя неограниченной вложенности. Код, представленный в листинге 7.7, делает лишь одно: определяет список из трех книг. Ничего не говорится о том, как должна выглядеть веб-страница на экране. информация о форматировании страницы берется из другого файла, ьоох 11ат.ха1, содержащего определения ХБЕ.
Реально данный файл представляет собой таблицу стилей, в которой оговаривается внд страницы. (Существуют и альтернативы таблицам стилей, позволяющие, например, преобразовывать ХМ1. в НТМ1., однако обсуждение этой темы выходит за рамки этой книги.) Листинг 7.7. Простой пример на ХМС <?хю1 тегвтоп-"1.0" ?> <?хю1-зсу1евдеет суре-"Сена/хз1" Ьге?-"Ьоох 11зт,ха1"?> <Ьоох 115С> <Ьоох> <СЮе> Коипьютерные сети, 4 изд. </Ьтг1е> <аиФог> Эндрю С. Таненбауи </ацтдог> <уеаг> 2003 </уеаг> «/Ьооа> <Ьооа> <ст'с1е> современные операционные систеиы, 2 изд. </Ьтс1е> <аыспог> Эндрю С. Таненбауи </ацгиаг> <уеаг> 2001 </уеаг> </Ьоод> <Ьоод> 724 Глава 7.
Прикладной уровень <с1с1е> Архитектура коко>стерв, 4 нзд. «/стс1е> <аисьог> Эндрю С. Таненбаун </аосьог> <уеаг> 1999 </уеаг> «/Ьооа> </Ьоох 1твт> Пример ХИТ -файла для форматирования страницы из листинга 7.7 приведен в листинге 7.8.
За некоторыми необходимыми объявлениями, включающими, например, БКз. используемого стандарта ХЯЕ, следуют теги, первыми из которых являются <Ьсв?> и <Ьосу>. С этого начинается любая обычная веб-страница. Затем следует определение таблицы, включающее заголовки трех столбцов. Обратите внимание на то, что в дополнение к тегам <со> поставлены закрывающие теги </СЬ>. Раньше нам было все равно, есть они или нет.
Однако спецификации ХМТ. и ХИТ. куда строже, чем НТМЕ. Оговаривается, что страницы с синтаксическими ошибками должны отвергаться браузерами в любом случае, даже если они в состоянии понять, что имел в виду разработчик страницы. Браузер, отображающий синтаксически некорректный код ХМЕ или ХБЕ, будет сам по себе признан некорректным при первом же тестировании на совместимость со стандартами. Однако браузерам разрешается выявлять ошибочные места.
Такие драконовские меры нужны для борьбы с несметным числом небрежно написанных страниц, которые появились в Сети за последние годы. Листинг 7.8. Таблица стилей иа ХЗЬ <?хв1 чегзтоп-"1.0" ?> <хв1:зву1езюеев хв?пв:хз1-ЬССр://хин.нЭ.огд/1999/Х5с/Тгапвтогар чегвтоп-"1.0"> <хз1:Левр1ате юатсп-"/"> <ЬСю1> <Ьосу> <Сао?е Ьогсег- 2"> <сг> «СП>названне</СЬ> <СЬ>Автор</СЬ> <СЬ>год</СЬ> </сг> <хв1:Тог-еасЬ ве1есС-"Ьоох ттвт/Ьоох"> <сг> <сб <хв1:ча1ое-от ве1есс-тдтс1е"/> </со> <Ы хв1:ча1ие-о/ зе1ест-"аигоог"/> </СО> «СО><хв1:чатие-от ве?ест-"уеаг /> </Ы> </сг> </хз1:тог-еаск> </Саоте> </Ьосу> </Ьтвт> </хз1:сеюр1аье> </хз1;вту1евпеет> Всемирная паутина (111%6Ф) 726 Выражение <хз1:Гог-васи зе1ест-"Ьоои 11зС/Ьоои"> аналогично подобному выражению на языке С.
С его помощью запускается цикл (ограниченный тегами <хз1: Гог-еасЬ>). На каждую книгу приходится одна итерация этого цикла. И каждая итерация выдает пять строк: <сг>, название, автор, год и тег </сг>. По окончании цикла выводятся закрывающие теги </ьооу> и </ьсв\>, Результат интерпретации браузером этой таблицы стилей такой же, как если бы это была обычная страница, содержащая таблицу. Однако благодаря такому формату анализирующая программа сможет по ХМ).-файлу легко найти, например, книги, изданные после 2000 года.