Введение в WAP, WML и WMLScript
Эмуляторы и средства разработки
Телефоны, поддерживающие протокол WAP
Все, кто в какой-то мере интересуется тенденциями развития Internet и соответствующими технологиями, наверняка слышали про WAP (Wireless Access Protocol) и, возможно, даже могли опробовать его в действии, посетив пока немногочисленные российские WAP-сайты. В нашем журнале мы рассказывали об устройствах, поддерживающих этот протокол (см. «Сотовые телефоны с поддержкой Интернет-протокола WAP» КомпьютерПресс 5’2000). Целью данной статьи является ознакомить Web-мастеров и разработчиков с протоколом WAP, c лежащими в его основе технологиями, показать основные возможности языка WML, используемого для реализации содержимого WAP-сайтов, скриптового языка WMLScript, а также представить имеющиеся средства разработки, браузеры и эмуляторы.
Протокол WAP изнутри
WAP (Wireless Application Protocol) — это новый набор стандартов, разработанных для расширения сервисов Internet и делающих возможным доступ к этим сервисам с мобильных телефонов, пейджеров и карманных компьютеров. Разработка протокола WAP координируется WAP Forum (http://www.wapforum.org) — независимой организацией, членами которой являются все ведущие производители мобильной телефонии, аппаратного обеспечения, сетевые операторы, поставщики сервисов, а также многие производители программного обеспечения.
![]() |
История WAP
В 1995 году фирма Ericsson начала работу над протоколом ITTP (Intelligent Terminal Transfer Protocol), целью которого было расширение сервисов, предоставляемых мобильными телефонами. В течение 1996-1997 годов Nokia приступила к работе над концепцией Smart Messaging, а фирма Unwired Planet (в настоящее время — Phone.com) разработала спецификацию языка Handheld Device Markup Language (HDML) — языка разметки документов, схожего с HTML, но оптимизированного для устройств с экранами небольшого размера: мобильных телефонов и карманных компьютеров.
К концу 1997 года разработчики поняли, что конкурирующие протоколы только расколют и, возможно, даже погубят потенциальный рынок. Поэтому в декабре фирмы Ericsson, Motorola, Nokia и Unwired Planet объединили свои усилия и сформировали WAP Forum. После выпуска весной 1998 года спецификации WAP 1.0 организация стала принимать новых членов, и к концу следующего года в ее состав входило более 90 компаний.
Основные участники WAP Forum
America Online, Inc. | IBM Corporation | Sony International |
AT&T Wireless | Intel Corporation | Sun Microsystems |
Charles Schwab & Co, Inc. | MasterCard International | Toshiba Corporation |
Compaq Computer Corp | Microsoft Corporation | Unisys Corporation |
Ericsson Mobile Com | Nokia | Visa International |
Hewlett-Packard | Phone.com | Xircom, Inc. |
Hitachi Ltd | Samsung Electronics | Yamaha Corporation |
![]() |
Протокол WAP
К основным преимуществам протокола WAP можно отнести:
- программную модель, базирующуюся на Internet;
- язык разметки WML — Wireless Markup Language;
- протокольный стек, оптимизированный для беспроводных коммуникаций;
- поддержку более чем 90% производителей всех мобильных устройств.
Протокол WAP создавался для решения трех основных проблем, возникающих при обмене данными по беспроводным сетям, а именно: низкая скорость передачи (9600 бит/с для GSM), задержки и нестабильность соединения. Кроме того, протокол WAP учитывает размер мобильных устройств — большинство из них имеет экран небольшого размера и небольшую, но многофункциональную клавиатуру.
Сетевой компонент реализует как транспортный, так и прикладной уровень протокола. WAP-данные доставляются в виде байткода, что позволяет максимально эффективно использовать невысокую скорость передачи. В языке WML используется метафора «колода карт» (card/deck). Этот набор, полностью обеспечивающий тот или иной сервис, загружается целиком, и, следовательно, отпадает необходимость в поддержании постоянного сетевого соединения.
Непосредственное управление устройствами происходит на уровне WML. Карта обычно описывает одну операцию, и, как правило, ее содержимое может быть отображено на небольшом экране мобильного устройства. В зависимости от приложения несколько карт могут быть объединены вместе для обеспечения более комплексного сервиса.
WAP базируется на таких Internet-протоколах и спецификациях, как HTTP, UDP, URL, HTML и JavaScript. Таким образом, основные программные концепции должны быть знакомы Internet-разработчикам. WML-файлы могут быть загружены с обычного Web-сервера (например, Microsoft Internet Information Server) при соответствующей конфигурации MIME-типов.
Транспортная модель WAP схожа с моделью Internet — единственным отличием является наличие специального шлюза, располагающегося между беспроводной сетью и клиентом. Этот шлюз выполняет роль proхy между Internet и беспроводной сетью и также кодирует WAP-данные в байткод для сокращения времени передачи данных по беспроводной сети. Эти различия показаны на рис. 1 и рис. 2.
Стек протокола WAP состоит из пяти основных уровней:
- Wireless Application Environment (WAE);
- Wireless Session Protocol (WSP);
- Wireless Transaction Protocol (WTP);
- Wireless Transport Layer Security (WTLS);
- Wireless Datagram Protocol (WDP),
а также из вспомогательного, зависящего от типа мобильной сети (CSD, SMS, CDMA и т.п.).
На рис. 3 показано сравнение стека Web и WAP.
Читатели, желающие более детально изучить вопросы реализации протокола WAP и его отдельных уровней, могут обратиться к подготовленным WAP Forum документам, которые можно найти на нашем CD-ROM.
В этом обзоре мы рассмотрим лишь верхний, прикладной уровень — WAE и более подробно остановимся на его компонентах — WML и WMLScript.
![]() |
Прикладной уровень
Прикладной уровень (Wireless Application Environment, WAE) состоит из четырех частей:
- модели адресации (The Addressing Model);
- языка Wireless Markup Language (WML);
- языка WMLScript;
- приложения Wireless Telephony Application (WTA).
Модель адресации, используемая в WAP, аналогична Internet-модели и базируется на URL и URI. Язык Wireless Markup Language представляет собой эквивалент языка HTML и основывается на языке XML. Язык WMLScript базируется на спецификации ECMAScript, которая, в свою очередь, является стандартом языка JavaScript. WMLScript позволяет добавлять в WML-страницы процедурную логику. И наконец, WTA позволяет создавать сервисы на базе WAP.
![]() |
Создание страниц. Язык WML
После того как мы кратко ознакомились с протоколом WAP и его основными компонентами, перейдем к рассмотрению языка WML, который используется для создания страниц, доступных через WAP-устройства.
![]() |
Наборы и карты
Как мы уже знаем, в языке WML используется метафора «колода карт». В отличие от языка HTML, где каждому HTML-файлу соответствует одна страница на экране браузера, WML-файл содержит одну или более страниц, называемых картами (card). Таким образом, карты, находящиеся в одном WML-файле, загружаемом целиком при обращении к серверу, попадают в кэш-память мобильного устройства, где затем могут быть отображены. Такая коллекция карт называется колодой. Каждая колода также содержит шаблон (можете считать это джокером), описывающий общие характеристики каждой карты в колоде (рис. 4).
Например, WAP-сайт может содержать главную страницу, страницу с краткой справкой и страницу с контактной информацией. Остальные страницы могут описывать предлагаемые товары и услуги.
Обратите внимание на то, что все содержимое нашего узла располагается в двух файлах — Main.wml и Service.wml, но отображается шестью экранными страницами. Концепция колоды схожа с использованием HTML-элемента # для задания секций внутри большого HTML-документа. Единственным отличием является то, что в каждый момент на WAP-устройстве видна только одна секция.
![]() |
Пишем WML-код
Давайте реализуем колоду, показанную на рис. 5. Она состоит из трех карт — первого экрана, краткой справки и контактной информации. Ниже показан WML-код, реализующий эту колоду.
<?xml version=”1.0"?> <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml”> <wml> <!—Это — аблон —> <template> </template> <!—Это – первая карта в колоде —> <card id=”card1" title=”Welcome”> <p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </p> </card> <!—Это – вторая карта в колоде —> <card id=”card2" title=”Help”> <p align=”center”> <big><strong>Справочная информация</strong></big><br> Используйте кнопки для навигации </p> <do type=”accept” label=”Main”> <go href=”#card1"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </card> <!—Это – третья карта в колоде —> <card id=”card3" title=”Contact”> <p align=”center”> <big><strong>Контактная информация</strong></big><br> тел. 234-6581<br> e-mail : editors@cpress.ru </p> <do type=”accept” label=”Main”> <go href=”#card1"/> </do> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> </card> </wml>
Как мы отмечали выше, язык WML базируется на языке XML, и поэтому наш WML-файл начинается с заголовка
<?xml version=”1.0"?> <!DOCTYPE wml PUBLIC “-//WAPFORUM//DTD WML 1.1//EN” “http://www.wapforum.org/DTD/wml_1.1.xml”>
и указания на местоположение DTD-файла (Document Type Definition), описывающего язык WML. Более подробно о языке XML можно узнать на Web-сайте по адресу: http://www.xml.com. Далее идет открывающий элемент <wml>, указывающий на то, что здесь начинается WML-документ. Документ завершается закрывающим элементом </wml>.
Как видно из приведенного выше рисунка, наша колода состоит из шаблона и трех карт. В показанном WML-коде шаблон не реализован и не содержит ничего, кроме открывающего и закрывающего элемента:
<template> </template>
Далее идет описание первой (главной) карты, которая будет отображаться при обращении к нашему WAP-узлу.
<card id=”card1" title=”Welcome”> <p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> <do type=”accept” label=”Help”> <go href=”#card2"/> </do> <do type=”accept” label=”Contact”> <go href=”#card3"/> </do> </p> </card>
Каждая карта начинается с открывающего элемента <card> и завершается закрывающим элементом </card>. Элемент <card> задает идентификатор карты (атрибут id) и ее заголовок, отображаемый на экране (атрибут title). Между открывающим и закрывающим элементами <card>...</card> располагается содержимое карты. В данном случае это выделенный жирным шрифтом текст, расположенный в центре параграфа, и две кнопки, обеспечивающие доступ к справочной и контактной информации.
После описания первой карты следует описание второй и третьей карт. Порядок следования описаний не существенен — главное, чтобы карта, которая отображается первой, была описана в самом начале, до других карт.
Отметим, что в отличие от языка HTML, язык WML требует, чтобы все элементы и атрибуты были написаны со строчной буквы.
![]() |
Содержимое карты
Создавая карту, следует помнить, что она будет отображаться на небольшом экране мобильного устройства. Поэтому она не должна содержать большого объема информации, хотя устройства и поддерживают функции скроллинга.
Карта может содержать небольшой текст, графическое изображение, меню или форму. Лучше не пытаться объединять все эти типы информации вместе, за исключением текста и графики.
Текст располагается в параграфах. WML требует, чтобы параграфы начинались с элемента <p> и завершались элементом </p>. Вложенные параграфы не допускаются. Пример параграфа:
<p align=”center”> <strong>КомпьютерПресс WAP-тест</strong> </p>
Графические изображения хранятся в формате Wireless BMP (WBMP) и должны быть преобразованы с помощью известных онлайновых средств или утилит, входящих в состав средств разработки и эмуляторов. Изображения подключаются с помощью элемента <img>:
<img src=’cplogo.wbmp’ alt=’CPLOGO’/>
Отметим, что небольшой размер экрана (например, в Nokia 7110 он равен 96 x 65 пикселов, в Ericsson R320 — 101 x 52, а в Ericsson R380 — 360 x 120) не позволяет размещать графические изображения большого размера. Более того, некоторые устройства вообще не поддерживают графику.
Меню можно создавать, например, с помощью элемента <select>. Ниже показано, как реализовать меню, состоящее из трех элементов.
<p> <select name=”name”> <option value=”CP”>КомпьютерПресс</option> <option value=”CAD”>САПР </option> <option value=”ART”>КомпьюАрт </option> </select> </p>
Чтобы определить, какой из элементов меню выбран, используем следующий WML-код:
<card id=”card1" title=”Menu”> <do type=”accept” label=”Select”> <go href=”#card2"/> </do> <p> <select name=”name”> <option value=”CP”>КомпьютерПресс</option> <option value=”CAD”>САПР </option> <option value=”ART”>КомпьюАрт </option> </select> </p> </card> <card id=”card2" title=”Answer”> <p> Ваш выбор: $(name) </p> </card>
В приведенном примере показан простой механизм обработки событий на базе элемента <go>, а также способ передачи значений локальных переменных между картами (переменная name, хранящая значение выбранного элемента меню).
![]() |
Использование ссылок
Как и в языке HTML, в WML для задания ссылок используется элемент <a>. Атрибут href указывает адрес WML-документа, на который осуществляется переход. Этот переход осуществляется к первой карте, описанной в указанном файле. Если же необходимо выбрать какую-то определенную карту, в адресе указывается символ # и имя карты. Для перехода к определенной карте внутри колоды в атрибуте href указывается символ # и имя карты. Ниже даны примеры использования элемента <a>.
<!—Переход по относительному адресу —> <a href=’products.wml’> <!—Переход по абсолютному адресу —> <a href=’http://wap.cpress.ru/products.wml’> <!—Переход к определенной карте —> <a href=’http://wap.cpress.ru/products.wml#cad’> <!—Переход к определенной карте внутри колоды—> <a href=’#cad’>
![]() |
Шаблоны
Завершая наш мини-обзор языка WML, следует сказать несколько слов о шаблонах. Элемент <template> позволяет задать общие характеристики всех карт в колоде. Например, у всех карт может быть кнопка Back, которая реализуется следующим WML-кодом:
<do type=’prev’ label=’Back’> <prev/> </do>
Достаточно поместить этот код в элемент <template>, и у всех карт в колоде появится кнопка Back:
<template> <do type=’prev’ label=’Back’> <prev/> </do> </template>
Элементы языка WML представлены во врезке «Элементы языка WML», а их полное описание, а также описание поддерживаемых ими атрибутов можно найти в спецификации языка WML Reference на нашем CD-ROM.
![]() |
Язык WMLScript
Как мы уже отметили, язык WMLScript вносит процедурную логику в клиентские WML-страницы. Этот язык базируется на спецификации ECMAScript, которая, в свою очередь, является стандартом языка JavaScript. Язык WMLScript модифицирован таким образом, чтобы обеспечить поддержку низкой скорости передачи данных и «тонких» клиентов. Использование скриптового языка и включение его в спецификацию позволяют отказаться от реализации многих функций на сервере и, следовательно, сократить число обращений к серверу. Перечислим основные сферы применения языка WMLScript в составе WML-страниц:
- проверка введенных пользователем данных;
- доступ к функциональности устройства — обеспечение программного выполнения таких функций, как набор номера, отсылка сообщений, добавление номеров в телефонную книгу и т.п.;
- локальная генерация сообщений и диалоговых панелей;
- расширение функциональности программного обеспечения устройства и его настройка.
Язык WMLScript поддерживает основные типы данных (Boolean, Integer, Floating-point, String и Invalid), стандартные объявления переменных (ключевое слово var), функции (ключевое слово function) и другие общие структуры типа выражений if-then-else, циклов for/while и выражений break и continue. Среди других характеристик языка отметим возможность использования внутренних откомпилированных модулей (через прагму use url), контроль доступа (через прагму access), а также набор стандартных библиотек, описанных в спецификации языка. К этим библиотекам относятся библиотеки Lang, Float, String, URL, WMLBrowser и Dialogs (см. врезку «Стандартные библиотеки WMLScript»). Спецификация языка также определяет интерпретатор байткода, так как код на WMLScript компилируется в бинарную форму (WAP-шлюзом) перед отсылкой его клиенту.
После того как мы ознакомились с протоколом WAP, языками WML и WMLScript, следует посвятить некоторое время обзору средств разработки и эмуляторов мобильных устройств, позволяющих тестировать создаваемые WAP-узлы.
![]() |
Эмуляторы и средства разработки
Вполне естественно, что ведущие разработчики мобильных телефонов предоставляют и эмуляторы своих устройств, а, к примеру, фирмы Ericsson, Motorola и Nokia делают это бесплатно.
Новейшие версии таких эмуляторов можно найти (после регистрации) по следующим адресам:
Ericsson http://www.ericsson.com/developerszone/;
Motorola http://www.motorola.com/MIMS/MSPG/spin/mix/mix.html;
Nokia http://www.forum.nokia.com/waplogin/.
Текущие версии эмуляторов и средств разработки фирм Ericsson и Nokia представлены на нашем CD-ROM.
Кроме эмуляторов фирмы предоставляют и средства для разработки WAP-узлов. Так, набор средств фирмы Nokia называется Nokia WAP Toolkit, фирмы Motorola — Motorola Application Development Kit, а Ericsson — WAP IDE Service Development Kit. Существует и набор средств разработки фирмы Phone.com — UP.SDK. Ниже мы кратко остановимся на основных возможностях каждого из этих средств.
![]() |
Ericsson WapIDE 4.0 
Ericsson WapIDE SDK представляет собой набор продуктов, поддерживающих дизайн и тестирование WAP-приложений, а также предоставляющих возможность разработки нового WAP-устройства для тестирования его функциональности.
В настоящее время Ericsson WapIDE Software Development Kit доступен только для платформ Windows NT 4.0 и Windows 95/98. В состав среды разработчика входят продукты для тестирования серверных приложений. К ним относятся: Perl 5.0, Tcl/Tk и Xitami Web Server. Установка WapIDE требует установки IDE, SDK и Xitami Web Server в указанной последовательности. Главный экран WapIDE обеспечивает доступ к браузеру (используется для тестирования приложений), дизайнеру приложений и серверным утилитам — компилятору WML/WMLScript и анализатору синтаксиса.
Браузер поддерживает различные устройства (эмулятор R320s используется по умолчанию) и позволяет тестировать как входящие в состав продукта примеры, так и собственные WAP-страницы и узлы. В состав WapIDE входят примеры приложений для банковских операций, проверки ценных бумаг и создания расписаний.
Дизайнер приложений (AppDesigner) интегрирует редактор WML-кода и браузер, позволяя выполнять кодирование и тестирование в рамках одного приложения.
Среди других WAP-продуктов фирмы Ericsson отметим WAP Application Server — сервер приложений, бaзирующийся на языке Java для платформы Solaris, поддерживающий до 50 тыс. пользователей, и WAP Gateway — шлюз на платформе Intel, выполняющий роль сервера для GSM-сетей с такими протоколами, как SMS and USSD.
![]() |
Nokia WAP Toolkit 1.2 
WAP Toolkit 1.2 фирмы Nokia во многом схож с Ericsson WapIDE. Оба продукта предоставляют в распоряжение разработчиков интегрированную среду, браузеры и компиляторы WML/WMLScript. WAP Toolkit в текущей версии работает только на платформе Windows и требует наличия Java 2 Runtime: вы можете загрузить либо Java 2 SDK, либо Java 2 Runtime Environment (JRE) с Web-узла фирмы Sun (http://java.sun.com).
После установки WAP Toolkit вам становятся доступными интегрированная среда разработчика (IDE) и набор документации по WAP, WML и WMLScript.
Среда разработчика позволяет работать как с локальными файлами, так и с WAP-файлами, загруженными по протоколу HTTP или через WAP-шлюз. Nokia также распространяет WAP Server на базе Java-сервлетов. Этот сервер включает сервер приложений и WAP-шлюз.
![]() |
Phone.com UP.SDK 4.0 
UP.SDK фирмы Phone.com (для платформ Windows 95/98/NT и Solaris) отличается от продуктов фирм Nokia и Ericsson в первую очередь отсутствием графической среды разработчика.
Вместо того чтобы создавать интегрированную среду для редактирования и тестирования WML/WMLScript-кода, UP.SDK предоставляет в распоряжение разработчика набор библиотек, которые можно использовать из таких языков, как WML, Perl, C, C++ и Visual Basic. Поскольку фирма Phone.com является ведущим разработчиком WAP-микробраузера, в состав UP.SDK входит WAP-браузер UP.Simulator. Этот эмулятор работает только под управлением Windows.
Для работы с эмулятором требуется подключение к Internet, так как он динамически соединяется с Web-сайтом Phone.com для загрузки примеров и доступа к WAP-приложениям.
В состав UP.SDK входят библиотеки функций на языках Perl и C, позволяющие генерировать WML-код, обрабатывать HTTP-запросы, а также объекты C++ (для платформы Solaris) и COM-объекты (для платформы Windows) для выполнения многочисленных операций, включая обработку нотификаций и факсов.
Помимо обеспечения базовой WAP-функциональности Phone.com поддерживает такие функции, как нотификации и передача факсов. Сервер UP.LINK содержит компонент Fax Manager для отсылки факсов непосредственно из WAP-браузера. Поддерживаются документы в формате Postscript, ASCII, Microsoft Word, RTF и Adobe Acrobat. Асинхронные нотификации могут быть направлены клиентам через интерфейс Notification API.
Дополнительная информация доступна на Web-узле (http://www.phone.com/products/upsdk.html), документация по продукту находится на нашем CD-ROM.
![]() |
Motorola ADK
Motorola Application Development Kit (ADK) — это средство для создания WAP-приложений, включающее среду разработчика и набор эмуляторов, среди которых по умолчанию используется эмулятор Motorola 7389 (Timeport). Отметим, что, в отличие от Nokia WAP Toolkit, Motorola ADK использует виртуальную Java-машину фирмы Microsoft (Microsoft JVM), поэтому для работы с этим средством вам потребуется установить как минимум Microsoft Internet Explorer 5.0 или 5.5.
Помимо рассмотренных выше средств разработки существует ряд редакторов WML-кода. Среди них отметим:
- EasyPad WAPtor (http://www.waptop.net/) — простой, но мощный WML-редактор, облегчающий создание WAP-страниц;
- WAPPage (http://www.wapmine.com) — мощное средство для дизайна WAP-узлов. Поддерживает редактирование и компиляцию WML-страниц;
- DotWAP (http://www.inetis.com/english/solutions_dotwap.htm) — визуальное средство для создания WAP-страниц;
- WinWAP (http://www.slobtrot.com) — небольшой WAP-браузер, работающий под управлением Microsoft Windows;
- Wireless Companion (http://www.yourwap.com) — базовый эмулятор WAP-телефонов, позволяющий тестировать создаваемые WAP-страницы и узлы. Поддерживает протоколы HTTP и WAP;
- CardOne (http://www.peso.de/wap/index.htm) — средство для быстрого создания WAP-страниц, не требующее знания синтаксиса языка WML;
- Klondike WML Browser — базовый WAP-браузер, имеющий интерфейс, похожий на Microsoft Internet Explorer;
- WAPSody (http://alphaworks.ibm.com/aw.nsf/techmain/wapsody) — набор Java-классов, реализующих все основные компоненты протокола WAP. Эти классы могут использоваться в средствах разработки WAP-приложений;
- Pic2WBMP (http://wap.gingco.de) — набор Java-классов для преобразования графических изображений в формат WBMP;
- M3Gate (http://www.m3gate.com) — расширение для Web-браузеров Microsoft Internet Explorer и Netscape Communicator, позволяющее просматривать WML-страницы на компьютере.
![]() |
Заключение
В этом обзоре мы ознакомились с протоколом WAP и рассмотрели его устройство, обсудили язык WML и скриптовый язык WMLScript, а также имеющиеся в распоряжении разработчиков средства разработки и эмуляторы ведущих производителей мобильных телефонов, а кроме того, средства, выпускаемые иными фирмами.
В заключение отметим, что по данным WAP Forum число пользователей мобильных телефонов в мире к 2003 году достигнет 500 млн. человек, причем 75% всех мобильных телефонов (375 млн.) будут способны обращаться к Internet. В корпоративном секторе количество пользователей, регулярно обращающихся к различным Internet-данным через мобильные телефоны, к 2001 году составит 24 млн. человек.
Приведенные данные означают, что рынок приложений для мобильной телефонии и других устройств будет неуклонно расти и, естественно, будет расти спрос на различные услуги. Если сегодня подавляющее большинство WAP-сайтов предлагают новости, прогноз погоды, результаты спортивных состязаний или локальную информацию, то вскоре появится новый класс корпоративных приложений — приложения для сбора данных, распространения продуктов и сервисов, доступа к корпоративной информации из любой точки мира, доступа к электронной почте, серверам Lotus Notes и т.п. И следовательно, резко возрастет спрос на разработчиков, владеющих языками WML и WMLScript, знающих основы протокола WAP и умеющих применить эти навыки на практике. Так что не откладывая в долгий ящик, обратитесь к нашему CD-ROM и начните изучение WAP, WML и WMLScript. Успехов вам!
КомпьютерПресс 9'2000