Сайт
Чукина
Владимира
Владимировича

28 марта 2024 г.

Язык разметки 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 &#176;C<br/>
			Завтра ожидается +35 &#176;С<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 &#176;C<br/>
			Завтра ожидается +35 &#176;С<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 &#176;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 &#176;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-сайта.

Рекомендуемые источники

Введение в WML
WML
Introducing WML and WMLScript
WML Tutorial
WMLScript Tutorial
Православное радио "Воскресенье"   Валаамский монастырь   Медиа-сервер "Россия Православная"   Интернет-магазин "ЛинуксЦентр"   Яндекс цитирования   Valid CSS!   Valid XHTML 1.0 Strict!   Unicode Encoded Badge