WML.

WML (Wireless Markup Language) - язык разметки для работы в Интернет беспроводных устройств (WAP), основанный на XML. Назначение WML - описание информационного контента и пользовательского интерфейса для особого класса узкополосных устройств, типа Palm Pilot, сотовых телефонов и пейджеров.

В языке "визуальной разметки" для WAP устройств свое законное место заняла идея хорошо структурированных данных - WML наследует синтаксис XML. XML- язык разметки, получивший невероятную поддержку благодаря своей способности описывать данные. HTML - предопределяет те тэги, которые могут быть использованы для описания страницы так, чтобы ее смог правильно понять и обработать броузер. XML, в свою очередь, позволяет создателю документа определять такой набор тэгов, которой он считает необходимым. Этот набор тэгов группируется затем в набор грамматических "правил", называемых Определение Типа Документа или проще DTD. DTD, используемый для описания WML, расположен по адресу: http://www.wapforum.org/DTD/wml_1.1.xml

Используемые компоненты синтаксиса в WML - это символьные сущности, элементы, атрибуты, комментарии, переменные и секции CDATA.

Самая первая фраза внутри любого XML-документа называется пролог. Поскольку стандартен, он содержит две строчки кода: определение версии XML и DTD (указатель на файл, содержащий DTD)

Пролог выглядит следующим образом.

<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">

Следом за прологом, в каждом XML-документе содержится один единственный элемент, который содержит в себе остальные подэлементы и entities. Так же как и в HTML этими элементами являются угловые скобки: <> и </>. Например: <element>data</element>. В документе должен содержаться только один элемент описывающий сам документ. В WML этим элементом является <wml>. Все остальные элементы содержатся уже внутри него.

Два самых распространенных способа хранения информации внутри XML-документа это элементы и их атрибуты. Элементы определяют структурную разметку внутри документа открытием и закрытием определенных тэгов. Элементы, в свою очередь могут содержать подэлементы. Атрибуты в основном используются для описания элементов. Набор поддерживаемых WML тегов невелик, и язык основан на метафоре колоды карт.

WML был разработан для для устройств с низкой пропускной способностью и маленьким дисплеем. В качестве составной этого дизайна была применена концепция дек и карт. Один WML-документ (а точнее элементы, содержащиеся внутри элемента <wml>) называется декой (deck). Интерактивное взаимодействие с пользователем осуществляется с помощью карт (card). Достоинство такой реализации заключается в том, что несколько экранов могут быть загружены на клиентское устройство за один раз. Используя WMLScript, обработка действий пользователя может быть произведена с использованием находящихся в одной деке карт, исключая тем самым множественные транзакции с сервером. Конечно, в связи с ограниченными ресурсами клиентского устройства возникает другая проблема. Поэтому вам вполне возможно придется разбрасывать ваши карты по разным деками во избежании чрезмерного увеличения объема одного файла.

Как только wml-файл загружен в устройство с сервера, пользователь может листать экраны, переходить к следующему или возвращаться к предыдущему, не ожидая загрузки с сайта, что, конечно, выгодно по скорости.

WML колода из одной карты

<wml>
 <card> 
 <p>Welcome</p> 
 </card> 
</wml>
Структура языка во многом родственна HTML: теги <wml>...</wml> начинают и завершают документ, а тело карт заключается в <card>...</card>.
В WML есть глобальные переменные, в которых можно запоминать информацию на уровне текущего сеанса. Их присутствие в языке вызвано уменьшением обмена с сервером, и это отличается от традиций HTML.

Поскольку в одной деке может содержаться несколько карт, то нужен механизм хранения информации из одной карты для ее последующего использования в другой. Этот механизм обеспечивается переменными. Переменные могут быть созданы и определены, используя несколько различных методов.

  • Используя элемент <setvar> в качестве результата выполнения пользователем определенных действий. Кроме того, этот элемент может быть использован для определения переменной внутри следующих элементов: <go>, <prev>, <refresh>. Следующий элемент создает переменную x и присваивает ей значение "123".
     <setvar name="x" value="123"/>
    
  • Переменным также присваивается значение через использование элементов <input>, <select>, <option> и других. При этом автоматически создается переменная с именем этого элемента. По окончании ввода, ей присваивается значение соответствующее выбору пользователя. Например следующий элемент создаст переменную с именем "x"
    <select name="x" title="X Value:">
    
Строительные блоки и функциональные средства WML можно условно разделить на четыре категории: форматирование, навигация, ввод данных и управление действиями/событиями.

Форматирование

Поскольку на экран выводится по одной карте, то в элементе card предусмотрен атрибут id - внутренний идентификатор для переходов, а также видимый на экране заголовок title. Для форматирования текста, почти аналогично HTML, используются такие элементы, как:

 

  • p для параграфов, В <p> можно указывать атрибуты align и mode. align принимает значения right, center или left, а mode задает, будет ли текст на экране с авто-переносом (wrap) или нет (nowrap).
  • em и I - для выделения курсивом,
  • strong - для "полужирного начертания.
  • u - для подчеркивания,
  • big - для текста большего размера
  • small - для текста маленького размера.
  • table для таблиц, с привычными <tr> и <td>
  • <br/ > - для перехода на новую строку,
  • <img/ > для графики.

 


Навигация

Для навигации и установки гиперссылок предусмотрены теги

  • anchor
  • и a

 

Семантика a повторяет HTML, а в элементе anchor используется либо подэлемент go с атрибутом href, задающим адрес ссылки, либо prev - вернуться к предыдущему экрану.

Вызвав страницу,пользователь получает первую карточку. Чтобы перейти к следующей, необходимо как-то адресоваться к картам, для чего служит id тега <card> - уникальный идентификатор карты. Еще есть "title" - название карточки, имеющее смысл, в частности, для закладок.

<anchor>List of Tales
  <go href="tales.wml"/></anchor>

<anchor>Previous page<prev/></anchor>

<a href="story.wml">goto Story</a><br/>
В примере выше ссылки устанавливаются при помощи anchor и традиционного тега <a>. У anchor два атрибута: "href" определяет объект, на который мы ссылаемся, и "title" - экранная надпись, идентифицирующая связь, которую броузер может опционально показывать.

Элементы ввода

Всю мощь идея переменных приобретает при возможности что-то получить от пользователя. Для этого предусмотрен комплект тегов ввода, достаточно близких к своим HTML аналогам:

  • Поле input предназначено для ввода данных пользователем
  • select/option - поле выбора из заранее заданного списка.
  • postfield - аналог скрытых input в HTML-формах. На самом деле, это даже более мощная вещь, так как имея переменные, в postfields сейчас можно собирать и перегруппировывать информацию.
Атрибуты name тегов <input> и <select> хранятся как переменные на всем пространстве колоды и выступают параметрами в переходах по go и a. Посредством других атрибутов <input,> типа type, format и maxlength, можно управлять форматным вводом. Пользуясь тегом fieldset, можно задавать некоторые стили оформления.

Пример input и select

<wml> 
<card id="search" title="search"> 
<p align="left"> 
CD: <input name="band" title="JazzBand:" size="18"
  value="Rolling Stones" emptyok="false"/><br/>
Type: <select name="type" value="double" title="Type:"> 
  <option value="single">Single CD</option> 
  <option value="double">Double CD</option> 
</select>
</p> 
</card> 

<card id="add" title="Add CD"> 
CD: <input name="CD" size="18" type="text" /><br/> 
Price: <input name="Price" size="8"/><br/> 
</card> 
</wml>
Здесь атрибут name - имя переменной, куда заносится значение, type - тип формы (текст или число), value - значение по умолчанию (до ввода), a emptyok показывает, допустима ли в качестве значения пустая строка.

Управление действиями

"Действия" (tasks, do) используются для структур типа меню и для описания отдельных действий, например, для выбора новой карты/ссылки. Типовые "исполнительные" теги действий - это go, prev, refresh (перечитать текущую карту) или noop (ничего не делать). Действия на уровне конкретной карты описываются в тегах do, а на уровне всей колоды - в элементе template.

При помощи тега timer и атрибута ontimer тега card можно, например, на время 'заморозить' страницу. На практике часто применяется ontimer="url", говорящий, что некое время карта должна отображаться, а затем должен загрузиться ресурс с адреса url. Время в value выражается в 0,1 сек.

<wml> 
<card id="variable" title="Variable" ontimer="WMLScript.wml"> 
 <timer value="5"/> 
 <p align="left"> Wait for 5 seconds ... </p> 
</card> 

<!-- Card and deck linking --> 
<card id="input1" title="Input"> 
<do type="Next input properties"> 
  <go href="#input2"/> </do> 
<do type="Task properties"> 
  <go href="Task.wml"/> </do> 
  ...
</card> 
</wml>
Согласно WML-спецификации, у элементов do должны быть уникальные name, но если какое-либо из имен опущено, то подразумевается, что оно берется из type. В таких случаях различные элементы do легко могут начать пересекаться по именам, что может стать источником трудно диагностируемых ошибок.

<do type="accept" name="yeah" label="Menu">
<go href="Menu.asp#menu"/>
</do>
<do type="accept" name="blah" label="Back">
<prev/>
</do>
В WML есть также возможность назначать клавиши навигации. Тег <onevent type="button"><действие></onevent> позволяет приписать к одной из кнопок телефона (зависит от модели) пользовательское событие. В качестве действия обычно используется <go href="url"/>. Так, добавив к карте строку <onevent type= "GO"><go href="#card2"/></onevent>, можно кнопке GO поставить в соответствие переход непосредственно в меню. Вариант

<do type="accept" label="Search">
<go href="table.asp?srch=$varsearch"/></do>
иллюстрирует другой вариант переназначения стандартного меню телефона и способ передачи переменных в сервер-ориентированные скрипты. Значение параметра type показывает, какая именно клавиша будет переопределена (в данном случае кнопка, соответствующая OK). Префикс $ перед именем переменной говорит о том, что будет использовано значение переменной, а не само слово "varsearch".

Графика

В настоящее время в WML поддерживается графический формат, называемый WBMP (Wireless BMP type 0) - монохромные (двуцветные) изображения. Формат WBMP type 0 имеет следующие характеристики :

  • No compression
  • One bit color (white=1, black=0)
  • One bit color deep (monochrome)
Для вставки в wml картинки предназначен тег <img />, где, как в HTML, для ссылки на источник картинки используется атрибут "src". Типичные параметры img:

<img alt=  src="url"  localsrc="icon" 
  align=  height=  width=  vspace=  hspace= />. 
Атрибут localsrc позволяет, как замену src, указать в качестве источника внутреннюю пиктограмму броузера. Атрибут "align" задает выравнивание картинки с опциями top, bottom и middle.

WBMP в качестве ссылки

<anchor title="Home">
 <img alt="Home" src="url" localsrc="house" />Home
 <go href="default.wml"/>
</anchor><br/>
Для конвертирования в формат WBMP лучше всего выбирать маленькие контрастные изображения.

Максимальный размер картинки в байтах зависит от устройства, но не должен превышать ограничений на размер карты (около 1,4k). Соответственно, предельный размер в пикселах например для Nokia 7110 составляет около 96 x 65 (width, height), хотя физический экран (без скроллинга) еще меньше и ограничен 96 x 44 (4 строки по 11 пикселов), а к примеру, для Ericsson R320 - 101x52 (строка в 13 пикселов). Следует учитывать, что пикселы отдельных устройств не всегда квадратные.


Назад На стартовую Вперед

Hosted by uCoz