Цель этой статьи - представить возможности WML (Wireless Markup Language) - языка разметки для работы в Интернет беспроводных устройств (WAP), основанный на XML. Назначение WML - описание контента и пользовательского интерфейса для особого класса узкополосных устройств, типа Palm Pilot, сотовых телефонов и пейджеров.
WML специально "заточен" (и продолжает "затачиваться") с ориентацией на ограничения подобных устройств, а именно: малоформатный экран, узкую полосу пропускания канала связи, малую собственную память и ограничения на "вычислительные" способности. По этой причине, и из-за острой нужды в стандартизации, в языке "визуальной разметки" для WAP устройств свое законное место заняла идея хорошо структурированных данных - WML наследует синтаксис XML.
Трудно ожидать, что кто-то будет подключать к сотовому телефону мышь, поэтому модель "point-and-click" для WAP не годится (по крайней мере, видимо так считает группа разработчиков языка), и большая роль в WML отводится другим механизмам событий. Доводы здесь те, что у пользователя должен быть шанс на управление голосом, либо еще какие-то варианты, кроме кнопочных. Экраны WAP устройств выглядят достаточно по-разному, встречаются вертикальные и горизонтальные, но объединяет их все то, что они предельно малоформатны.
Сам WML выглядит как "HTML для бедных", но с чуть более жесткими требованиями к парности тегов, использованию регистра и обрамлению атрибутов кавычками. Используемые компоненты синтаксиса в WML - это символьные сущности, элементы, атрибуты, комментарии, переменные и секции CDATA.
Начало страницы может быть простеньким, вот таким например
<wml>
<card>
<p>Welcome to Antichat</p>
</card>
</wml>
Пример выше еще не вполне завершен. WML - это ветвь XML, а любой XML-документ сначала должен пройти проверку на соответствие своему DTD (Document Type Definition). Следовательно, в любом wml-файле, как документе, необходимо указать полный путь к WML DTD.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="home" title="Welcome to Antichat">
<p align="center">Taler's HP<br/>
<img src="logo.wbmp" alt="home"/><br/>
<do type="accept" label="next"><go href="#card1"/></do></p>
</card>
<card id="card1" title="Page 1">
<p>This is the first card.</p>
<do type="accept" label="next"><go href="#card2"/></do>
<do type="prev" label="back"><prev/></do>
</card>
<card id="card2" title="Page 2">
<p>This is the second card.</p>
<do type="accept" label="home"><go href="#home"/></do>
</card>
</wml>
Тут сайт разбит на 3 карты (части)
id - это идентификатор блока сайта.
title - указывает на заголовок сайта.
<p align="center">12345<br/> - тут содержание вашей страницы.
<img src="logo.wbmp" alt="home"/><br/>. - распологается картинка, но не обычная а специальная в формате wbmp.
alt - текстовое описание.
<do> необходим для обозначения что надо делать когда посетитель делат что-то.
С ним комплектуются:
1)
label - атрибут значение котрого используется для замены названия кнопки
2)
type - указывает мобильному браузеру назначение кнопки - помогает костамизировать приложения(количество символов ограничено возможностями устройства)
3)
name - дает возможность пользоваться возможностями иерархической структуры
4)
optional - указывает на неоюязательность показа этой кнопки в случае, если атрибуту присвоено значение true .Тег <go> содержит информацию о том, на какую карту слудует перейти после выполнения <do> - переход на карту с меткой #card1
Атрибуты тега <go>
1)
href - url
2)
sendreferer - этот атрибут необходим для серверу в списках контроля доступа. Его значение указывает браузеру на то, что необходимо отослать на сервер url минимально возможной длины.
3)
method - может принимать значение лобо post, либо get. Значение аналогично html
4)
accept-charset - указывает кодировку, в которой браузер мобильного должен будет посылать ссылку.
Идем далее...
СоБыТиЯ - действия производимые в в зависимости от определенных условий, клика например.
Например в языке wml есть элемент Onevent, который обладает атрибутом type. в этом атрибуте задется одно из четырех следующих событий:
1)
onenterbackward - срабатывает при выборе элемента prev
2)
onenterforward - при вызове карты
3)
ontimer - при истечении времени у элемента timer
Пример кода с событиями:
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="start">
<do type="accept">
<go href="two"/> <!- Переход к метке two -->
</do>
<p>Choose Accept</p>
</card>
<card id="two"> <!-сама метка two -->
<do type="accept">
<go href="there"/>
</do>
<onevent type="onenterbackward"> <!-описание события -->
<prev/>
</onevent>
<p>Chooce Accept</p>
</card>
<card id="there">
<do type="accept">
<prev/>
</do>
<p>Choose Accept.>
</card>
</wml>
СтРуКтУрА - при помощи структуры можно запретить или разрешить пользователю зайти на определенные страницы или даже сайты..Это делается с помощью элемента access, с этими атрибутами :
1)
domain - имя домена для запрета доступа.Этот атрибут необходим для того чтобы браузер просматривал и сравнивал со значением все имена доменов, встречающихся в документе.Если апример будет такая строчка <acces domain="antichat.ru"/> ? ,браузер только сможет зайти на
www.antichat.ru , но не на
www.antichat.com например
2)
path - это путь для сравнения. Например если будет такая строчка <acces domain="antichat.ru" path="/spin"/> то юзер сможет зайти только если
www.antichat.ru/spin/blahblah или
www.antichat.ru/spin/123123 но не сможет зайти например сюда
www.antichat.ru/spin/blahblah/qwerty
вот пример с использованием структур
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/dtd/wml_1.1.xml">
<wml>
<head>
<acces domain="antichat.ru" path="/spin"/>
</head>
<template>
<do type="accept" name="accept1" label="OK">
<go href="#accept"/>
<do>
</template>
<card id="start" title="Start Here">
<p>
Start Here
</p>
</card>
<card id="accept" title="Okey card">
<do type="accept" name="accept1" label="Okay">
<go href="accept2"/>
</do>
<p>
Card Accept
<card id="accept2" title="Ok Card" >
<do type="accept" >
<go href="#start" />
</do>
<p>
Card Accept2
</card>
</p>
</wml>
В следующей деке мы будем вводить данные...
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card id="card1" title="Tutorial">
<do type="accept" label="Answer">
<go href="#card2"/>
</do>
<p>
<select name="name">
<option value="HTML">HTML Tutorial</option>
<option value="XML">XML Tutorial</option>
<option value="WAP">WAP Tutorial</option>
</select>
</p>
</card>
<card id="card2" title="Answer">
<p>
You selected: $(name)
</p>
</card>
</wml>
будет это выглядеть примерно так
<pre>----- Tutorial ----------
HTML Tutorial <input type="radio" name="a" checked="checked" />
XML Tutorial <input type="radio" name="a" />
WAP Tutorial <input type="radio" name="a" />
Answer</pre></form></td></tr></table>
<p>
Следующая карта будет вяглядеть примерно так:</p>
<pre>----- Answer ----------
You Selected: HTML
</pre></td></tr></table>
<br />
Вот пример парагрофа и "разрушительной линии"
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Paragraphs"> <p>
Это параграф
</p>
<p>
Это другой<br/>с разрушительной линией
</p></card>
</wml>
... и будет это выглядеть примерно так
</p>
<pre> ------ Paragraphs ------
This is a paragraph
This is another
with a line break
</pre>
</td></tr></table>
можно также форматировать текст
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Formatting">
<p>
нормальный<br/>
<em>курсивом </em><br/>
<b>размашестый</b><br/>
<i>курсив</i><br/>
<u>подчеркнутый</u><br/>
<big>большой</big><br/>
<small>маленький</small>
</p>
</card>
</wml>
...и будет примерно вот так
<pre>----- Formatting -----</pre>
<br />
нормальный<br />
<b>размашестый</b><br />
<i>курсив</i><br />
<u>подчеркнутый</u><br />
<big>большой</big><br />
<small>маленький</small>
</td></tr></table>
Таблицы...
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Table"><p>
<table columns="3">
<tr>
<td>Cell 1</td>
<td>Cell 2</td>
<td>Cell 3</td>
</tr>
</table>
</p></card>
</wml>
будет это в телефоне примерно так
------ Table ------
Cell 1 Cell 2 Cell 3
Пример полей для ввода
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Input">
<p>
Имя: <input name="Имя" size="15"/><br/>
Возраст: <input name="Возраст" size="15" format="*N"/><br/>
Пол: <input name="Пол" size="15"/>
</p>
</card>
</wml>
в телефоне будет так
</p>
<table width="200" border="1" bgcolor="#cccccc"><tr><td>
<form action="">
<pre>----- Input ----------
Имя: <input type="text" name="Имя" size="15" />
Возраст : <input format="*N" type="text" name="Возраст" size="15" />
Пол : <input type="text" name="Пол" size="15" />
</pre>
</form>
</td></tr></table>
<br />
Рассмотрин некоторые теги, начнем с
<anchor>[QUOTE] Он устанавливает что делать когда юзер выберет линк. В этом примет юзер должен нажать на Next page и перейти тем самым на test.wml
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Anchor Tag"><p>
<anchor>Next page
<go href="test.wml"/>
</anchor>
</p></card>
</wml>
Тег
<a> всегда выполняет "go" задание, без переменных.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="A Tag"><p>
<a href="test.wml">Next page</a>
</p></card>
</wml>
картинки...с помощью следующего кода можно выводить картинки.
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="Image"> <p>
Памелла Андерсон
<img src="/img/pamella.wbmp" alt="stickman" />
in a paragraph
</p></card>
</wml>
таймер...Единица времени сдесь.... время это 1/30 .т.е секунда будет 10, две секунды 20 и тд.Пример
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card ontimer="test.wml"><timer value="30"/>
<p>прошло 3 секунды</p>
</card>
</wml>
<prev> представляет действие предыдущей перехода на предыдущую карту
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card>
<p>
<anchor>
Предыдущая страничка
<prev/>
</anchor>
</p>
</card>
</wml>
<refresh> - тег с помощью которого можно обновить все, что находится на странице
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card>
<p>
<anchor>
Обновить
<go href="thispage.wml"/>
<refresh>
<setvar name="x" value="30"/>
</refresh>
</anchor>
</p>
</card>
</wml>
В этом примере используется добавление линка "Back" в карту.Когда юзер нажмет "Back" он прейдет на предыдущую карту .Но тег <noop> препядствует этой операции; когда юзер кликнет "Back" с линкон ничего не случится
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card>
<p>
<do name="back" type="prev" label="Back">
<noop/>
</do>
</p>
</card>
</wml>