WAP: будущее или настоящее?

Не прошло и полгода с тех пор, как наш еженедельник в № 45 от 24 ноября поведал читателям о новой технологии интеграции мобильных устройств с сетью Internet — стеке протоколов WAP, а количество продуктов и сервисов, предлагаемых в этой области, уже превосходит все самые смелые ожидания. Серверное ПО; средства разработки WAP-сайтов; эмуляторы броузеров; число страниц, проиндексированных только одной специализированной поисковой машиной Fast WAP (wap.fast.no), доходит до 20 тыс. И это неудивительно — все торопятся оседлать "золотую" лошадь, ведь рынок цифровых сотовых терминалов — один из самых динамично развивающихся и в будущем сулит значительные доходы. По прогнозам, к 2005 г. количество проданных мобильных телефонов превысит число их "проводных" собратьев.

Спецификация WAP в версии 1.2, которая в данный момент находится в стадии уточнения и окончательного утверждения, должна быть принята WAP Forum совместно c консорциумом W3C в качестве стандарта доставки цифрового контента для третьего поколения (3G) мобильных устройств. Тем не менее не стоит думать о WAP, как о чем-то недоступном и нереальном. Создать свой собственный маленький сервис по силам каждому уже сейчас, а некоторые даже смогут им воспользоваться, несмотря на то что украинские операторы мобильной связи пока (по крайней мере, на момент написания статьи) не объявили о поддержке этой технологии.

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

…немного теории

Стек протоколов WAP (рис. 1) основан на классической многоуровневой модели OSI и включает в себя четыре основные составляющие и одну спецификацию самого высокого уровня — WAE (Wireless Application Environment). Стандарт WAE описывает языки разметки, используемые для создания информационных страниц. Версия WAP 1.0 определяла в качестве стандарта два — HDML и WML. HDML не получил широкого распространения и был исключен из последующих реализаций, поэтому далее он не рассматривается. Следует заметить, что, помимо стандартных, некоторые компании встраивают в терминалы поддержку своих собственных языков, так, например, Motorola использует разработанный ею VoxML и поддерживает портал, созданный с его помощью. Кроме собственно языка разметки, для разработки несложных интерактивных "колод" в WAE введен скриптовый язык WML Script — очень близкий родственник JavaScript, его упрощенная версия.


Рис. 1

Еще один стандарт WTA (Wireless Telephone Application), относящийся к прикладному уровню, описывает способ создания и взаимодействия специальных операторских сервисов, как-то: автоматический биллинг, информационные бюллетени. Таким образом, провайдер мобильных услуг получает возможность предоставлять дополнительные услуги и упростить работу с клиентами.

Следующий уровень — сессионный, и ему соответствует протокол WSP (Wireless Session Protocol). Его основная задача — поддерживать неразрывным сеанс связи в течение длительных интервалов ожидания ответа, которые могут возникнуть при выборе SMS в качестве bearer или применении удаленного gateway. Кроме того, WSP предусматривает использование push-технологий, то бишь доставку "незапрошенного" контента. В этом случае соединение инициируется не клиентом, а сервером, что применяется для распространения новостей, рекламы и т. д. Уровень транзакций, который обрабатывает отдельные пакеты соединения, реализуется протоколом WTP (Wireless Transaction Protocol).

Над основным протоколом передачи WDP (Wireless Datagram Protocol) для обеспечения безопасности и шифрования данных в соединении введена надстройка — WTSL (Wireless Transport Security Layer). Ее спецификация основана на обычном для Internet Secure Socket Layer. Ну а WDP в своей основе имеет классические TCP/IP и UDP/IP. К сожалению, наряду со всеми достоинствами, присущими этим протоколам, к WAP перешли и их недостатки. Так, например, если используется обмен данными по типу UDP (т. е. без установления соединения), то становится невозможным контроль потерянных пакетов на уровне транзакций, и его приходится осуществлять методом повтора сессий, что серьезно увеличивает трафик в и без того узкой полосе пропускания мобильных коммуникаций.

Ну и последний уровень — физический. Он характеризует способ передачи данных в эфире. Разработчики WAP постарались сделать эту часть спецификации как можно более гибкой, это было необходимо, чтобы сервисом могли воспользоваться все, вне зависимости от того, какой стандарт мобильной связи поддерживает терминал. В версии WAP 1.0 в качестве bearer (носитель — это название получил конкретный физический коммуникационный протокол) предлагался исключительно SMS. Такое положение дел не устраивало множество операторов (в частности, не предусматривался протокол для аналоговых сетей), поэтому спустя четыре месяца появилась версия 1.1. Сюда были добавлены: СDPD для аналоговых сотовых сетей, USSD, классический CSD, GPRS — для цифровых. В разрабатываемой спецификации 1.2 также обещана поддержка стандарта UMTS (Universal Mobile Telephone Service), более известного сейчас как 3G.

Как работает WAP?

Схема работы WAP-сервисов, если не вдаваться в технические детали, крайне проста и насчитывает три основных компонента. Первый — это WAP-микроброузер, второй — WAP-gateway и последний — сервер с WML- и WMLS-контентом (рис. 2). В качестве микроброузера может выступать мобильный терминал или эмулятор. Разница лишь в том, что в терминале обязательно будет встроена по крайней мере часть стека протоколов WAP, а эмулятор может воспользоваться TCP/IP и заниматься только визуализацией WML.


Рис. 2

Сессия начинается с запроса у gateway по протоколу WSP некоторого URL, после чего он транслируется в классический HTTP Request. Когда загрузка "колоды" или "карты" завершена, WML компилируется gateway-сервером в бинарную форму, что позволяет обеспечить большую скорость обмена информацией. При необходимости (совершение финансовых сделок, передача конфиденциальной информации) подключается WTSL, и содержимое шифруется.

На сегодняшний день насчитывается несколько основных встраиваемых микроброузеров. Наиболее распространенный — от команды разработчиков Unwired Planet. Он применяется в WAP-телефонах компаний Alcatel, Motorola, Samsung и др. У грандов индустрии — Nokia и Ericsson — имеются собственные решения, кроме того, пару недель назад был анонсирован телефон компании Benefon, который впервые использует ПО от Microsoft — Mobile Explorer. Этим же броузером оснастила свою новую модель, показанную на CeBIT 2000, Sony. От других продуктов его отличает универсальность — кроме WAP-"колод", он может отображать также и HTML-страницы.

Безусловно, несмотря на полное соответствие стандарту, любой микроброузер имеет свои особенности. Так, например, максимальный размер "колоды", которую в состоянии загрузить терминал, может варьироваться. Поскольку этот параметр очень важен в разработке сервисов, его основные значения для различных телефонов приведены в табл. 1.

Среди серверного ПО также наблюдается радужное многообразие. Около полугода назад увидела свет первая версия Nokia Wap Server. Этот мощный продукт, рассчитанный на работу с платформами Windows NT и Solaris, по сути представляет собой высокоинтегрированный gateway. Поддерживается множество различных bearer, непосредственное соединение с SMS-сервером, полная спецификация WTA. Для работы серверу необходимы Java Runtime Enviroment и Hotspot Engine, поскольку некоторые модули написаны на этом языке. SDK для создания приложений WTA также предусматривает использование Java, что обеспечивает их кросс-платформенность и масштабируемость. Правда, за все достоинства приходится платить ресурсами сервера — рекомендуемая конфигурация: 256 MB RAM, два процессора Pentium III. На сайте производителя (www.nokia.com) доступна пробная версия продукта вместе со всей необходимой документацией и SDK.

Безусловно, не отстает от конкурента и концерн Ericsson. В настоящий момент предлагается два продукта — Ericsson WAP/Gateway Proxy и Jambala WAP Gateway. Оба пакета также являются комплексными решениями для организации на базе операторов мобильной связи доступа к WAP-сервисам и включают в себя gateway-сервер с возможностью рекомпиляции HTML-страниц в WML, интерфейс для WTA, поддержку SMS-gateway, CSD и пр. К сожалению, сами продукты не имеют демо- или пробных версий, зато совершенно бесплатно доступен Ericsson Application Toolkit — набор средств для разработки и анализа WML-страниц (www.ericsson.com).

Unwired Planet, один из основателей организации WAP Forum, тоже имеет собственное решение — UP.Link Server Suite. Этот пакет включает стандартные компоненты для создания gateway-серверов. Кроме них, в UP.Link включены специальные расширения: Push Server — средство для распространения широковещательной информации, UP.Web, UP.Mail, UP.Organaizer — сервер-ориентированные службы для владельцев WAP-телефонов. Для демонстрации возможностей своего продукта Unwired Planet поддерживает три бесплатных gateway-сервера. Чтобы воспользоваться ими, необходимо пройти процедуру регистрации и получить электронный ключ, который применяется для соединения по протоколу WTSL (дополнительная информация на сайте разработчика — www.uplanet.com)

Кроме вышеуказанных, существует масса продуктов сторонних производителей, среди них наибольший интерес представляет проект Kannel. Этот проект был основан компанией WapIT Ltd. (участники WAP Forum) летом 1999 г. с целью разработки свободно распространяемого gateway-сервера для Unix-платформ. Цель была достигнута, и в данный момент на сайте www.kannel.org совершенно бесплатно можно получить полноценный Wap- и SMS-gateway для Linux RedHat 6.1 или Debian с исходными кодами. Такой подход позволяет проекту развиваться крайне динамично, ведь портировать пакет под любую другую Unix-систему не составит труда, а доступность кода предполагает быстрое возникновение новых модулей и расширение возможностей сервера. О широком его распространении свидетельствует появление в Internet нескольких gateway c бесплатным доступом, речь о которых пойдет ниже.

Что же касается последнего звена цепи — размещения WML-контента, то здесь все обстоит крайне просто. Для этого достаточно воспользоваться любым предлагаемым HTTP-сервером. Многие наборы инструментов поставляются с freeware-серверами, например, с комплектом программ от Ericsson распространяется Xitami Web Server. Есть всего лишь одно условие — сервер необходимо сконфигурировать, так чтобы он опознавал WML и WMLS-файлы и устанавливал соответствующий MIME Content-Type (табл. 2).

Как увидеть WAP?

Варианта всего два — либо вы счастливый обладатель WAP-терминала, либо таковым не являетесь. В последнем случае придется воспользоваться его эмулятором. Детальную информация о существующих утилитах и о том, где их взять, можно почерпнуть из табл. 3. Наиболее удобен UP.Browser. Он достаточно прост в работе и занимает немного дискового пространства. Кроме того, debug-окно позволяет изучать процессы, происходящие во время работы телефона.

С реальным устройством дело обстоит сложнее, поскольку официально о поддержке WAP пока не заявил никто из украинских операторов. Но означает ли это на самом деле, что сервис недоступен? На текущий момент существует два наиболее популярных bearer для работы с WAP — Circuit Switched Data (CSD) и SMS. И тот и другой в полной мере представлены в Украине. Где взять gateway? Вот два самых известных бесплатных сервера: Ericsson (IP — 195.58.110.201) и wapHQ (212.1.130.132). Естественно, необходим договор с одним из Internet-провайдеров для доступа к Сети.

Другой способ, еще более дешевый, — воспользоваться в качестве bearer службой коротких сообщений. Для этого нужно найти сервер, который предоставит услуги gateway WAP over SMS. Такие службы, конечно, встречаются реже, чем data gateway, но все же они существуют. По адресу www.kiez.net/wml/ можно найти инструкции по настройке терминалов для использования подобного сервиса. Безусловно, у этого способа, кроме положительной стороны (стоимость), есть и отрицательная — скорость соединения. Она значительно ниже, чем при обычной передаче данных, кроме того, необходимо, чтобы оператор мобильной связи поддерживал межсетевые SMS.

Краткое введение в WML

Поскольку WYSIWYG-редакторов кода WML пока не существует, для того чтобы рассмотреть несколько небольших примеров, воспользуемся freeware-программой EasyPad WAPtor, которую можно загрузить с сайта разработчиков www.waptop.cz/waptor/. Эта утилита удобна тем, что в интерактивном режиме позволяет форматировать текст и вставлять изображения. Помимо прочего, есть и предварительный просмотр, но слишком доверять ему не стоит, потому что на самом деле выполняется рендеринг HTML, конвертированного из WML-карты, и многие ошибки попросту не отображаются. Поэтому для контроля результатов лучше использовать UP.Browser. Полная же поддержка WML-WYSIWYG анонсирована разработчиками Macromedia в одной из следующих версий пакета Dreamweaver.

Поскольку WML основан на модели описания языков XML, то первой строкой в любом файле должно быть указание на документ DTD (Document Type Definition) для данного языка. В нашем случае такой строкой является следующий код: <?xml version=”1.0"?><!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum. org/DTD/wml_1.1.xml”>. Здесь указывается DTD, разработанный организацией WAP Forum, он описывает все обязательные теги и элементы стандарта WML, интерпретируемые всеми броузерами. Кроме них, существуют различные расширения стандарта, введенные сторонними разработчиками. Для того чтобы ими воспользоваться, необходимо определить соответствующий документ (например — <!DOCTYPE wml PUBLIC “-//PHONE. COM// DTD WML1.1// EN””http://www. phone.com/dtd/wml11.dtd” >), но поскольку поддержка расширений ограничена, далее они не рассматриваются. Кроме того, в целях экономии места, в коде не приводится и само указание DTD, однако помните — оно необходимо! WML-код должен быть заключен в тег <wml></wml>.

Card и Deck. "Карты" и "колоды" — это базовые понятия языка WML. Card является прямой аналогией HTML-страницы. Одновременно на экране броузера может отображаться только одна карта, но поскольку она обычно очень мала по объему и на запрос очередной карты уходит больше времени, чем на ее загрузку, близкие по смыслу карты объединяются в "колоды" (Deck), что позволяет существенно ускорить навигацию. Отдельный WML-файл представляет собой отдельную "колоду".

Так же, как и HTML-страницы, "карты" имеют заголовок, определяемый параметром title, внутренний идентификатор (параметр id), по которому формируются гиперссылки на "карту", и еще множество параметров, причем на практике чаще всего применяется ONTIMER="url". Он указывает на то, что карта будет отображаться определенное количество времени, а затем загрузится ресурс, находяшийся по адресу url. Чтобы обозначить его, вслед за описанием "карты" следует поместить строку вида <timer name= ”имя_переменной” value=”значение”/>, где value выражается в 0,1 с.

Текст. Описание любых элементов внутри карты начинается с парного тега <p>тело карты</p>, его необходимо использовать каждый раз, когда переопределяется форматирование абзаца. Обратите внимание на то, что язык WML чувствителен к регистру, поэтому в написании ключевых слов употребляются только строчные буквы. С этим тегом можно задавать следующие параметры: align="выключка" и mode= "wrapmode". Выключка может принимать значения right, center или left, а mode указывает на то, будет ли текст автоматически переноситься на экране (wrap) или задействуется скроллинг (nowrap).

Для форматирования текста используется несколько тегов, аналогичных HTML: <b></b> — полужирное начертание, <i></i> — курсив, <u></u> — подчеркнутый текст. Кроме этих основных тегов, существует ряд других, но они пока не поддерживаются броузерами от Unwired Planet. Тем не менее их можно применять, хотя они и не будут отображаться в UP.Browser. Среди них <big></big> и <small></small> — управляют размерами шрифта на экране, <strong> </strong> — отменяет любое форматирование. Для перевода строки служит классический тег <br/>.

Изображения. Стандарт WML предусматривает всего один формат изображений для отображения в броузерах — WBMP (Wireless BMP). По сути это классическое двухцветное изображение со специфическим алгоритмом компрессии. Для преобразования обычных цветных растровых файлов в WBMP существует несколько средств: например, по адресу www.rcp.co.uk/distributed/Downloads можно получить plug-in экспорта в этот формат для Photoshop 5.X, на сайте компании Gingco (www.gingco.de/wap/) доступна бесплатная утилита-конвертор pic2wbmp (предполагается установленный Java Runtime Environment 1.1), а на страничке с адресом www.teraflops.com/wbmp/ разместился онлайн-преобразователь GIF и JPEG-файлов в WBMP. Наилучший результат дают маленькие контрастные изображения, потому что ограниченные возможности телефонных дисплеев не позволяют отображать большие картинки с плавными полутоновыми переходами.

Для присоединения изображения к карте служит тег img со следующими параметрами <img alt=”текст” src=”url” localsrc=”пикто” align=”выключка” height=”N” width=”N” vspace=”N” hspace=”N “/>. Большей частью предназначение этих тегов очевидно и аналогично HTML. Отдельного пояснения требует лишь параметр localsrc. По сути он представляет собой замену тегу src и позволяет в качестве источника изображения указать внутреннюю пиктограмму броузера. Подробную таблицу таких пиктограмм можно изучить в документации UP.SDK40. Ни в коем случае не пренебрегайте указанием параметра alt (текста — замены изображения), потому что если среди Internet-броузеров отсутствие поддержки изображений является анахронизмом, то у WAP-терминалов это очень распространено.

Гиперссылки создаются внутри карты с помощью тега <a href=”url” любые элементы карты </a>. Гиперссылка может быть направлена как внутрь "колоды" на другую карту, так и на внешний WML-файл. К сожалению, в микроброузерах от Unwired Planet назначение ссылки отменяет любое другое форматирование (точнее, они просто не отображаются), чего нельзя сказать о продуктах Nokia и Ericsson.

Ну что ж, зная эти основные азы, мы уже можем создать первую "карту". Приведем пример кода:

<card id=”MainITC” title=”firstcard”>
<p align=”center”>
<img src=”logo.wbmp” alt=”logo”/><br/>
<b>Welcome to ITC Publishing House Wap
Server!</b> <br/>
<big><i><a href=”#secondcard”>Enter Here</a>
</i></big>
</p></card>

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

В WML предусмотрены специальные средства для определения навигационных клавиш. Тег <onevent type=”Подпись”><действие></onevent> позволяет назначить пользовательское событие на одну из кнопок телефона (варьируется от модели к модели). Для задания действия используется тег <go href=”url”></go>. Справедливости ради заметим, что здесь указаны наиболее часто употребляемые параметры тегов, за дополнительной информацией обратитесь к документации. Итак, добавим к карте следующую строку <onevent type= ”go”><go href=”#secondcard”></go> </onevent>. Теперь в броузере появилась кнопка GO, с помощью которой можно попасть непосредственно в основное меню.

Вот пример кода, представляющего собой набор гиперссылок для выбора загружаемого в терминал контента:

<card id=”secondcard” title=”mainmenu”>
<p><b>We presents you now three our magazine</b><br/>
<a href=”#hotlinecard”>HotLine</a>
<a href=”#crcard”>ComputerReview</a>
<a href=”#DPKcard”>Home PC</a>
</p></card>

Формы ввода. В спецификации WML предусмотрен набор средств создания интерактивных форм для организации CGI-запросов, контекстно-зависимых "карт" и пр. В следующем примере кода организуется несложная форма ввода с последующей передачей поисковому скрипту ключевого слова:

<card id=”hotlinecard” title=”HL”>
<do type=”accept” label=”Search”>
<go href=”table.asp?srch=$varsearch”/></do>
<p><b>Search Form</b>
<input name=”varsearch” type=”text”
value=”MotherBoard” emptyok=”false”/>
</p></card>,

где <input…./> — тег описания формы, параметр name — имя переменной, в которую заносится значение формы, type — описания типа формы (текстовая или числовая), value — значение формы по умолчанию (до начала ввода), emptyok показывает, допустима ли передача пустой строки в качестве значения формы. Фрагмент кода

<do type=”accept” label=”Search”>
<go href=”table.asp?srch=$varsearch”/></do>

иллюстрирует одновременно иной вариант переназначения стандартного меню телефона и способ передачи переменных в сервер-ориентированные скрипты. Значение параметра type показывает, какая именно клавиша будет переопределена (в данном случае кнопка, соответствующая OK). Префикс $ перед именем переменной говорит о том, что будет использовано значение переменной, а не само слово varsearch.

Таблицы. Как пример создания таблиц рассмотрим карту, которую возвращает сервер в качестве ответа на запрос поисковой формы. Код имеет следующий вид:

<card id=”tabcard” title=”response”>
<p mode=”nowrap” align=”center”>
<table columns=”3">
<tr><td><b>Product</b></td>
<td><b>Price</b></td>
<td><b>Firm</b></td></tr>
<tr><td>ASUS P2B</td>
<td>110</td>
<td>McLemon Inc.</td></tr>
<tr><td>Fic 505</td>
<td>80</td>
<td>MellonC Corp.</td></tr>
</table>
</p></card>

Таким образом, табличные теги практически ничем не отличаются от их аналогов в HTML. При программировании таблиц лучше всего использовать режим nowrap, иначе таблица будет плохо читаться на маленьком экране дисплея.

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

<card id=”crcard” title=”CR”>
<p><b>Please select rubric</b>
<do type=”accept” label=”Receive”>
<go href=”rubricator.asp?select=$rubr”/></do>
<select name=”rubr”>
<option value=”news”>Hi-Tech News</option>
<option value=”FL”>First Look</option>
<option value=”WM”>World Market</option>
<option value=”UM”>Ukraine Market</option>
</select>
</p></card>

Как видно из выделенного фрагмента, основным является тег <select></select>, параметр name, пожалуй, в комментариях не нуждается. Тег <option></option> определяет очередной пункт меню, а value — соответствующее ему значение перемененной. Далее он передается на сервер, который генерирует соответствующую выбору карту.

Кроме тегов, которые задают внешний вид "карт", стандарт также описывает скриптовый язык WML Script, исполняемый на клиентской стороне. Основные его конструкции основаны на аналогичных элементах JavaScript, и детальное их рассмотрение выходит за рамки этой статьи.

Ну и единственный вопрос, который остается открытым, — где можно разместить готовые карты с целью доступа к ним широкой общественности. Если вы не обладаете собственным доменом и серверным пространством, попробуйте сервер www.hoiley.com, который предоставляет бесплатное место под оригинальные WAP-проекты. Все, что необходимо, — это заполнить регистрационную форму и заинтересовать создателей службы. Дерзайте, и, быть может, через определенное время он станет популярным и начнет приносить ощутимый доход.