Введение в WML. Часть 1Оригинал статьи был опубликован 10 июля 2000г. на
сайте http://www.bim.f2s.com Цель этой статьи - представить базовые возможности WML (Wireless Markup Language) - языка разметки для работы в Интернет беспроводных устройств (WAP), основанный на XML. Назначение WML - описание контента и пользовательского интерфейса для особого класса узкополосных устройств, типа Palm Pilot, сотовых телефонов и пейджеров. WML специально "заточен" (и продолжает "затачиваться") с ориентацией на ограничения подобных устройств, а именно: малоформатный экран, узкую полосу пропускания канала связи, малую собственную память и ограничения на "вычислительные" способности. По этой причине, и из-за острой нужды в стандартизации, в языке "визуальной разметки" для WAP устройств свое законное место заняла идея хорошо структурированных данных - WML наследует синтаксис XML. Трудно ожидать, что кто-то будет подключать к сотовому телефону мышь, поэтому модель "point-and-click" для WAP не годится (по крайней мере, видимо так считает группа разработчиков языка), и большая роль в WML отводится другим механизмам событий. Доводы здесь те, что у пользователя должен быть шанс на управление голосом, либо еще какие-то варианты, кроме кнопочных. Экраны WAP устройств выглядят достаточно по-разному, встречаются вертикальные и горизонтальные, но объединяет их все то, что они предельно малоформатны.
Сам WML выглядит как "HTML для бедных", но с чуть более жесткими требованиями к парности тегов, использованию регистра и обрамлению атрибутов кавычками. Используемые компоненты синтаксиса в WML - это символьные сущности, элементы, атрибуты, комментарии, переменные и секции CDATA. WML скуп на возможности представления - набор поддерживаемых тегов невелик, и язык основан на нетипичной метафоре колоды карт, хотя сильных аргументов в защиту этого построения из просмотренных источников у меня не сложилось. Нельзя сказать, что особым успехом увенчались и попытки осознать до конца модель WML tasks/events. Но, похоже, я не одинок - имеющиеся в сети материалы страдают схожими проблемами.
Метафора игральных карт Краеугольный камень WML-дизайна - колода игральных карт - набор показываемых по отдельности карточек (экранов), хранящихся в памяти. То есть, если для обычного сайта единицей является Web-page, то единица WML - это т. н. deck, состоящая из одной или нескольких card, составляющих вместе WML-документ (wml-файл). Как только wml-файл загружен в устройство с сервера, пользователь может листать экраны, переходить к следующему или возвращаться к предыдущему, не ожидая загрузки с сайта, что, конечно, выгодно по скорости. WML колода из одной карты <wml> <card> <p>Welcome</p> </card> </wml>
Нетрудно заметить, что структура языка
во многом родственна HTML: теги <wml>...</wml>
начинают и завершают документ, а тело карт
заключается в <card>...</card>. В полном примере ниже DTD-ссылка WML колода из трех карт <?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="home" title="Welcome">
<p align="center">Taler's HP<br/>
<img src="logo.wbmp" alt="home"/><br/>
<do type="accept" label="next"><go href="#card1"/></do></p>
</card>
<card id="card1" title="Page 1">
<p>This is the first card.</p>
<do type="accept" label="next"><go href="#card2"/></do>
<do type="prev" label="back"><prev/></do>
</card>
<card id="card2" title="Page 2">
<p>This is the second card.</p>
<do type="accept" label="home"><go href="#home"/></do>
</card>
</wml>
В Web есть программы-имитаторы, с помощью
которых wml-файлы можно "видеть" даже без
реального устройства, а просто на базе
имеющегося броузера. К примеру, это посредник
Примечание: размер загружаемых в WAP-устройства файлов ограничен - не более что-то около 1.4k (1397, 1492, .. байт - граница зависит от устройства).
Переменные В WML есть глобальные переменные, в
которых можно запоминать информацию на уровне
текущего сеанса. Их присутствие в языке вызвано
уменьшением обмена с сервером, и это отличается
от традиций HTML.
Основные типы тегов WML Строительные блоки и функциональные средства WML можно условно разделить на четыре категории: форматирование, навигация, ввод данных и управление действиями/событиями. Далее показан ряд конструкций языка с примерами - подчеркну, что здесь могут оказаться не все атрибуты. За дополнительной информацией нужно обращаться к документации. Форматирование Поскольку на экран выводится по одной карте, то в элементе card предусмотрен атрибут id - внутренний идентификатор для переходов, а также видимый на экране заголовок title. Для форматирования текста, почти аналогично HTML, используются такие элементы, как:
Навигация Для навигации и установки гиперссылок предусмотрены теги
Семантика a повторяет HTML, а в элементе anchor используется либо подэлемент go с атрибутом href, задающим адрес ссылки, либо prev - вернуться к предыдущему экрану. Вызвав страницу, мы получаем первую карточку. Чтобы перейти к следующей, необходимо как-то адресоваться к картам, для чего служит id тега <card> - уникальный идентификатор карты. Обратите внимание также на "title" - название карточки, имеющее смысл, в частности, для закладок. <anchor>List of Tales <go href="tales.wml"/></anchor> <anchor>Previous page<prev/></anchor> <a href="story.wml">goto Story</a><br/>
В примере выше ссылки устанавливаются при помощи 'якоря' anchor и традиционного тега <a>. У anchor два атрибута: "href" определяет объект, на который мы ссылаемся, и "title" - экранная надпись, идентифицирующая связь, которую броузер может опционально показывать.
Элементы ввода Безусловно, всю мощь идея переменных приобретает при возможности что-то получить от пользователя. Для этого предусмотрен комплект тегов ввода, достаточно близких к своим HTML аналогам:
Атрибуты name тегов <input> и <select> хранятся как переменные на всем пространстве колоды и выступают параметрами в переходах по go и a. Посредством других атрибутов <input,> типа type, format и maxlength, можно управлять форматным вводом. Пользуясь тегом fieldset, можно задавать некоторые стили оформления. Пример input и select <wml> <card id="search" title="search"> <p align="left"> CD: <input name="band" title="JazzBand:" size="18" value="Rolling Stones" emptyok="false"/><br/> Type: <select name="type" value="double" title="Type:"> <option value="single">Single CD</option> <option value="double">Double CD</option> </select> </p> </card> <card id="add" title="Add CD"> CD: <input name="CD" size="18" type="text" /><br/> Price: <input name="Price" size="8"/><br/> </card> </wml>
Здесь атрибут name - имя переменной, куда заносится значение, type - тип формы (текст или число), value - значение по умолчанию (до ввода), a emptyok показывает, допустима ли в качестве значения пустая строка.
Управление действиями "Действия" (tasks, do) используются для
структур типа меню и для описания отдельных
действий, например, для выбора новой
карты/ссылки. Типовые "исполнительные" теги
действий - это go, prev, refresh (перечитать
текущую карту) или noop (ничего не делать).
Действия на уровне конкретной карты описываются
в тегах do, а на уровне всей колоды - в элементе template.
<wml> <card id="variable" title="Variable" ontimer="WMLScript.wml"> <timer value="5"/> <p align="left"> Wait for 5 seconds ... </p> </card> <!-- Card and deck linking --> <card id="input1" title="Input"> <do type="Next input properties"> <go href="#input2"/> </do> <do type="Task properties"> <go href="Task.wml"/> </do> ... </card> </wml>
Согласно WML-спецификации, у элементов do должны быть уникальные name, но если какое-либо из имен опущено, то подразумевается, что оно берется из type. В таких случаях различные элементы do легко могут начать пересекаться по именам, что может стать источником трудно диагностируемых ошибок. <do type="accept" name="yeah" label="Menu"> <go href="Menu.asp#menu"/> </do> <do type="accept" name="blah" label="Back"> <prev/> </do>
В WML есть также возможность назначать клавиши навигации. Тег <onevent type="button"><действие></onevent> позволяет приписать к одной из кнопок телефона (зависит от модели) пользовательское событие. В качестве действия обычно используется <go href="url"/>. Так, добавив к карте строку <onevent type= "GO"><go href="#card2"/></onevent>, мы назначим кнопке GO переход непосредственно в меню. Вариант <do type="accept" label="Search"> <go href="table.asp?srch=$varsearch"/></do>
иллюстрирует другой вариант переназначения стандартного меню телефона и способ передачи переменных в сервер-ориентированные скрипты. Значение параметра type показывает, какая именно клавиша будет переопределена (в данном случае кнопка, соответствующая OK). Префикс $ перед именем переменной говорит о том, что будет использовано значение переменной, а не само слово "varsearch". Графика В настоящее время в WML поддерживается графический формат, называемый WBMP (Wireless BMP type 0) - монохромные (двуцветные) изображения. Формат WBMP type 0 имеет следующие характеристики :
Для вставки в wml картинки предназначен тег <img />, где, как в HTML, для ссылки на источник картинки используется атрибут "src". Типичные параметры img: <img alt= src="url" localsrc="icon" align= height= width= vspace= hspace= />.
Назначение атрибутов большей частью очевидно. Пояснения требует лишь localsrc, позволяя, как замену src, указать в качестве источника внутреннюю пиктограмму броузера. Атрибут "align" задает выравнивание картинки с опциями top, bottom и middle. WBMP в качестве ссылки <anchor title="Home"> <img alt="Home" src="url" localsrc="house" />Home <go href="default.wml"/> </anchor><br/>
Для конвертирования в формат WBMP лучше
всего выбирать маленькие контрастные
изображения. Список ресурсов для работы с WBMP можно
найти, например,
WML для вызова динам. картинок через ASP и Wapaint.dll <wml> <card id="home" title="example"> REM GRAPH.asp is the image to construct <p align="center">example<br/> <img src="GRAPH.asp" alt="problem"/><br/></p> <do type="prev" label="prev"> <prev/> </do> </card> </wml>
Если вы пользуетесь имитатором, необходимо тщательно протестировать страницы на реальном телефоне, потому что многие имитаторы плохо поддерживают графические файлы. Желательно проверить все в реальных условиях - это единственный способ застраховаться от неприятностей.
Советы по разработке WML приложений Устройства WAP ограничены по возможностям из-за памяти, процессора, скорости передачи т. д., однако кое-что все-таки можно делать, зная об этих ограничениях. А технологии совершенствуются, и появляются новые улучшенные решения.
Вместо заключения: в настоящее время в
поисковой системе
Сссылки :
|