Язык разметки WML для WAP-совместимых усройств
Основы WAP
Wireless Application Protocol (WAP) - протокол передачи данных (текста, изображений) между мобильным устройством и WAP-сервером. Передача данных между мобильным устройством и WAP-сервером осуществляется через специальный сервер, называемый WAP-шлюзом. Общая схема обмена информацией такая. Запрос, посылаемый с мобильного устройства через радиолинию попадает на WAP-шлюз оператора соторой связи, где перекодируется HTTP-формат и отправляется WAP-серверу через Интернет. На полученный запрос WAP-сервер формирует ответ и отправляет WAP-шлюзу, где осуществляется перекодирование информации в двоичный формат и отправка пакетов данных мобильному устройству. Например, через WAP-протокол реализована передача данных записанных в соответствии с правилами языка разметки текста Wireless Markup Language (WML).
Язык разметки текста WML
Wml-страница представляет собой текстовый файл с расширением .wml
и размером не более 1400 байт, содержащий текст и специальные элементы,
называемые тегами. Основная структура wml-страницы имеет следующий вид:
<wml> <head> </head> <card> </card> </wml>
В начале файла указывается открывающий тег <wml>
, а в самом конце файла - закрывающий тег </wml>
.
Между этими тегами располагается содержимое wml-страницы. Служебная информация помещается в заговок
страницы между тегами <head>
и </head>
, а отображаемая на экране wap-усройства информация
располагается между тегами <card>
и </card>
.
Поскольку язык разметки текста WML является разновидностью универсального языка разметки текста XML, то в самой первой строке wml-файла необходимо указать, что к содержимому файла должны применяться правила языка XML и указать файл, где эти правила записаны. С учетом такой записи структура wml-страницы имеет вид:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'> <wml> <head> </head> <card> </card> </wml>
Служебной информацией может быть, например, указание на отключение кэша при повторном чтении
wml-страницы с сервера. Такая инструкция располагается между тегами <head>
и </head>
и имеет вид:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'> <wml> <head> <meta http-equiv='Cache-Control' content='max-age=0' forua='true'/> </head> <card> </card> </wml>
Собственно информация, отображаемая на экране мобильного устройства размещается между тегами <card>
и </card>
.
Текстовая информация указывается внутри тегов абзаза <p>
и </p>
. Например,
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'> <wml> <head> <meta http-equiv='Cache-Control' content='max-age=0' forua='true'/> </head> <card> <p> ПОГОДА<br/> Сейчас в нашем городе +27 C<br/> Завтра ожидается +35 С<br/> </p> </card> </wml>
Здесь для принудительного перехода на следующую строку использован тег <br/>
. Браузеры некоторых
мобильных устройств отображают название wml-страницы в верхней части окна. Текст названия страницы
можно задать в открывающем теге <card>
, указав значение свойства title
. Например,
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'>
<wml>
<head>
<meta http-equiv='Cache-Control' content='max-age=0' forua='true'/>
</head>
<card title='Погода'>
<p>
ПОГОДА<br/>
Сейчас в нашем городе +27 C<br/>
Завтра ожидается +35 С<br/>
</p>
</card>
</wml>
Видно, что значения температуры записаны как +27 С, хотя правильная запись должна иметь вид +27 °C.
Для того, чтобы поставить символ °
необходимо записать последовательно символы ,
затем код
176
этого символа в кодовой таблице ISO-Latin-1, затем символ ;
. В результате должно
получиться так:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'>
<wml>
<head>
<meta http-equiv='Cache-Control' content='max-age=0' forua='true'/>
</head>
<card title='Погода'>
<p>
ПОГОДА<br/>
Сейчас в нашем городе +27 °C<br/>
Завтра ожидается +35 °С<br/>
</p>
</card>
</wml>
Гиперссылки на другие ресурсы записываются с помощью тега <a></a>
.
Между тегами записывается текст ссылки, а URL-адрес записывается в свойстве href
открывающего тега <a>
, например,
<a href='http://wap.meteolab.ru'>Погода в городах России</a>
. Однако, более
универсальным является использование тега <anchor></anchor>
. Между тегами
записывается текст ссылки и тег <go></go>
, в открывающем теге <go>
указывается адрес ресурса. К примеру:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'>
<wml>
<head>
<meta http-equiv='Cache-Control' content='max-age=0' forua='true'/>
</head>
<card title='Погода'>
<p>
ПОГОДА<br/>
Сейчас в нашем городе +27 °C<br/>
Завтра ожидается +35 °С<br/>
<anchor>
Погода в городах России
<go href='http://wap.meteolab.ru'></go>
</anchor>
</p>
</card>
</wml>
В случае, когда пользователю необходимо передать информацию на сервер используется
тег <input>
, содержимое которого заполняется пользователем
и отправляется по указанному URL-адресу при переходе по гиперссылке. Для возможности
ввода символов с помощью тега <input>
в его свойстве type
указывается тип text
. Например,
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'> <wml> <head> <meta http-equiv='Cache-Control' content='max-age=0' forua='true'/> </head> <card title='Сейчас'> <p> Температура:<br/> <input type='text' name='temperature' value=''/><br/> Влажность:<br/> <input type='text' name='humidity' value=''/><br/> <anchor> Отправить данные <go href='http://wapsite.h18.ru' method='post'> <postfield name='temperature' value='$(temperature)'/> <postfield name='humidity' value='$(humidity)'/> </go> </anchor> </p> </card> </wml>
В случае, когда необходимо не вводить текст, а осуществить выбор одного из нескольких
готовых вариантов, используется тег <select></select>
. Между тегами
располагаются теги <option></option>
, внутри которых записываются
варианты текста для выбора. Например,
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'> <wml> <head> <meta http-equiv='Cache-Control' content='max-age=0' forua='true'/> </head> <card title='Ветер'> <p> Скорость:<br/> <input format='*N' name='speed'/> Направление:<br/> <select name='direction'> <option value='0'>Северный</option> <option value='90'>Восточный</option> <option value='180'>Южный</option> <option value='270'>Западный</option> </select> <anchor> Отправить данные <go href='http://wapsite.h18.ru' method='post'> <postfield name='speed' value='$(speed)'/> <postfield name='direction' value='$(direction)'/> </go> </anchor> </p> </card> </wml>
Пример динамической страницы на PHP
<?php
if(strstr($_SERVER["HTTP_ACCEPT"], "text/vnd.wap.wml"))
{
header('content-type: text/vnd.wap.wml');
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
echo "<!DOCTYPE wml PUBLIC '-//WAPFORUM//DTD WML 1.1//EN' 'http://www.wapforum.org/DTD/wml_1.1.xml'>\n";
echo "<wml>\n";
echo "<head>\n";
echo "<meta http-equiv='Cache-Control' content='max-age=0' forua='true'/>\n";
echo "</head>\n";
echo "<card title='Погода'>\n";
echo "<p>\n";
echo "Сейчас в городе +27 °C<br/>\n";
echo "</p>\n";
echo "</card>\n";
echo "</wml>\n";
}
else
{
header("content-type: text/html");
echo "<html>\n";
echo "<head>\n";
echo "<meta http-equiv='content-type' content='text/html; charset=utf8'>\n";
echo "<title>Погода</title>\n";
echo "</head>\n";
echo "<body>\n";
echo "Сейчас в городе +27 °C<br>\n";
echo "</body>\n";
echo "</html>\n";
}
?>
Настройка web-сервера Apache
Для корректной работы wap-сайта обязательно необходимо настроить web-сервер. Для настройки широко распространенного web-сервера Apache следует создать текстовый файл настроек с именем.htaccess
,
в который записать следующий текст:
DirectoryIndex index.php index.wml index.html
AddType text/vnd.wap.wml wml
AddType application/vnd.wap.wmlc wmlc
AddType text/vnd.wap.wmlscript wmls
AddType application/vnd.wap.wmlscriptc wmlsc
AddType image/vnd.wap.wbmp wbmp
AddDefaultCharset UTF-8
Здесь, в первой строке указана инструкция web-серверу отправлять в качестве ответа файл index.php
(если нет такого файла, то index.wml
, а если и такого нет, то файл index.html
) в случае,
если пользователь обратился к каталогу сервера без указания имени файла. В следующих строках описываются
MIME-типы файлов, используемых при обмене по wap-протоколу. Последняя строка устанавливает кодировку UTF-8
для wml-страниц,
отправляемых web-сервером пользователям. Файл .htaccess
необходимо скопировать на сервер в корневой каталог wap-сайта.
Рекомендуемые источники
Введение в WMLWML
Introducing WML and WMLScript
WML Tutorial
WMLScript Tutorial