Основы WAP-программирования (WML).
Основы WAP-программирования (WML).
Программируем на WML
WML во многом напоминает HTML, и изучить его не составляет труда. Однако при использовании WML приходится придерживаться нескольких неформальных рекомендаций.
По WAP-протоколу данные в телефон поступают в виде колод (desks), размер одной колоды невелик - порядка 1,5 Кб. Это сделано для повышения эффективности трафика, и разработчику желательно предварительно компилировать WML-тексты для подбора их оптимальных размеров. Колода состоит из карт (cards), каждая из которых описывает один законченный модуль взаимодействия с пользователем (интерактивный элемент экрана) и определяет способ навигации внутри колоды.
WML-тексты чувствительны к регистру (как тексты на языке Си), и в этом состоит одна из хоть и непринципиальных, но важных в практическом плане особенностей WML. Последовательности символов переводов строки, табуляции, пробелов всегда преобразуются в один пробел.
Все WML-документы имеют расширение .wml и начинаются с трех стандартных строк:
<?xml version="1.0"?> (номер версии XML)<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" > (идентификатор SGML-описания языка WML)
<A HREF="http://www.wapforum.org/DTD/wml_1.1.xml"> (Web-адрес DTD-определения WML-документа)
Колода берется в теги
<wml>
...
</wml>
Внутри колоды друг за другом следуют описания карт:
<card>
...
</card>
<card>
...
</card>
...
С помощью специальных шаблонов можно определять дополнительные стандартные действия при обращении к некоторым или ко всем картам колоды.
Каждая карта должна иметь свой идентификатор и название:
<card id="wap.pcweek.card1" title="pcweek.ru demonstraciya">
Здесь надо отметить, что так как далеко не все используемые в нашей стране WAP-телефоны русифицированы, WAP-дизайнеру обязательно надо предлагать несколько видов представления своих ресурсов - в частности, на транслите (латинскими буквами).
Большинство тегов WML - парные, т. е. открывающие и закрывающие, как того требует стандарт XML, за небольшими исключениями, например, кроме тега новой строки
.
Простейший тег <p> описывает один параграф текста:
<p>
Dobro pozhalovat' na wap-server pcweek.ru!
</p>
Законченная страничка (она может быть, например, сохранена на сайте wap.pcweek.ru как заглавная - index.wml) полностью запишется так:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" > <A HREF="http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="wap.pcweek.card1" title="pcweek.ru demonstraciya"> <p> Dobro pozhalovat' na wap-server pcweek.ru! </p> </card> </wml>На картинке можно увидеть одно из возможных представлений wap-сайта.
Если выводимый текст не умещается на мониторе трубки, то пользователю придется его скроллировать, поэтому лучше не создавать больших карт и колод, а разбивать их на маленькие составляющие, снабжая продуманными средствами навигации.
Для привязки различных функций к средствам управления телефона служит тег . Его важнейшие атрибуты - type (тип действия; значение accept задает переход к следующей карте, значение prev - к предыдущей), name (идентификатор для связи с данной реализацией тега) и label (название действия, выводимое на экран в область навигации).
Конкретный адрес перехода задается непарным тегом .
Среди других WML-тегов можно отметить средства захвата пользовательского ввода, создания всевозможных списков, расширенной навигации, форматирования текста. Кроме того, имеются переменные, начинающиеся с символа $ и позволяющие передавать данные между картами.
Следующий пример описывает колоду из двух карт. Первая, с заголовком экрана "Карта 1", выводит подсказку "Vvedite imya:" (телефон Б), а после ввода и выбора действия "Sled" активизирует вторую карту, которая показывает на экране телефона приветствие с ранее введенным именем и позволяет выполнить переход на сайт wap.zdnet.ru:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" > <A HREF="http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="Card1" title="Karta 1"> <do type="accept" label="Sled"> <go href="#Card2"/> </do> <p> Vvedite imya: <input name="username"/> </p> </card> <card id="Card2" title="Karta 2"> <do type="accept" label="ZdNet.Ru"> <go href="http://wap.zdnet.ru"/> </do> <p> Privet, $(username)! </p> </card> </wml>(телефон В).
На WML-страничке можно также размещать небольшие сценарии на языке WMLScript, представляющем собой подмножество JavaScript и оптимизированном для выполнения на мобильных устройствах с малыми вычислительными ресурсами.
Сформированную таким образом WML-страничку можно положить, например, по обычному FTP-протоколу на поддомен wap.pcweek.ru (это стандартная практика - организовывать для WAP-доступа сайты, начинающиеся не с www, а с wap), после чего этот поддомен станет новым российским WAP-ресурсом.