Рассмотрение приложения SmartHouseScript.wml
Рассмотрение приложения SmartHouseScript.wml
При запуске приложения SmartHouseScript браузер загружает WML-страницу, содержащуюся в файле SmartHouseScript.wml, которая вначале инициализирует домашние установки, устанавливая их случайным образом в состояния on (Вкл) иoff (Выкл). Если вы просмотрите WML-страницу, то обнаружите, что в ней имеется много ссылок, подобных приводимой ниже. Эта ссылка активизирует функцию, находящуюся в отдельном WMLScript-файле:
<go href="SmartHouseScript.wmls#Initialize()" />
В данном случае элемент отдает браузеру команду выполнить ветвление и перейти к функции Initialize (Инициализация), находящейся в файлеSmartHouseScript.wmls. После того как функция выполнит обработку, для которой она предназначена, управление возвращается в текущее место программного кода. Как вы увидите, для присвоения состояния on (Вкл) или off (Выкл) каждой из домашних установок функция initialize использует генератор случайных чисел.
По мере знакомства с WML-страницей вы также встретите ряд элементов, примеркоторых приводится ниже. Здесь элемент ссылается на значение, хранимое впеременной:
<option>Bedroom is $(Bedroom)
В данном случае программный код ссылается на переменную Bedroom, котораяможет принимать значение On (Вкл) или Off (Выкл). При первоначальном запуске сценария функция initialize, находящаяся в WMLScript-файле, присваиваеткаждой переменной ее исходное значение. Каждый раз, когда пользователь изменяет состояние, WML-страница вызывает связанную с изменяемой установкойфункцию, которая, в свою очередь, обновляет значение. ПриложениеSmartHouseScript.wml реализуется с помощью следующего программного кода:
<?xml version="1.0"?> <!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 id="SmartHouse">
<onevent type="onenterforward">
<go href="SmartHouseScript.wmls#Initialize()" />
</onevent>
<p align="center">
Smart House
</p>
<p align="left" mode="nowrap">
<select>
<option>Bedroom is $(Bedroom)
<onevent type="onpick">
<go href="SmartHouseScript.wmls #Bedroom()" />
</onevent>
</option>
<option>Kitchen is $(Kitchen)
<onevent type="onpick">
<go href="SmartHouseScript.wmls #Kitchen()" />
</onevent>
</option>
<option>Living is $(Living)
<onevent type="onpick">
<go href="SmartHouseScript.wmls #Living()" />
</onevent>
</option>
<option>Office is $(Office)
<onevent type="onpick">
<go href="SmartHouseScript.wmls #Office()" />
</onevent>
</option>
<option>Outside is $(Outside)
<onevent type="onpick">
<go href="SmartHouseScript.wmls #Outside()" />
</onevent>
</option>
</select>
</p>
</card>
</wml>
Как и во всех WML-страницах, первые два элемента рассматриваемой WML-страницы сообщают WAP-браузеру (а также программистам) версию WAP-спецификации поддерживаемой приложением. В данном случае WML-страницасовместима с XML 1.0 и описанием типа документа (DTD) версии 1.1, разработанным ассоциацией WAP Forum.
Любая WML-страница, размещаемая после информации о версии, начинается стега <WML>. В конце каждой WM L-страницы должен находиться соответствующийтег </WML>, который завершает элементы WML-страницы.
Теги <HEAD> и </HEAD>,располагающиеся после тега <WML>, позволяют указывать данные о WML-странице, включая метаданные и информацию управляющую доступом. Многиепрограммисты рассматривают метаданные как «данные о данных». Другими словами, метаданные в нашем примере, считываемые и обрабатываемые браузером,сообщают браузеру, что надо делать с данными карт.
Элемент <meta> позволяет определять для WML-страницы метаинформацию. Внашем случае параметр http-equiv=Cache-Control сообщает WAP-браузеру, чтоданная часть метаинформации относится к системе кэширования памяти. Аналогично, параметр content=max-age=0 сообщает браузеру, что максимальное время, в течение которого должно выполняться кэширование WML-страницы, равнонулю секунд; то есть, браузер должен не запоминать, а повторно загружать данные с сервера каждый раз, когда поступает запрос. Для данной книги нулевоезначение было выбрано, чтобы помочь читателю в разработке программы. Привыборе нулевого значения каждый раз, когда происходит изменение, это изменение передается на телефон. В реально эксплуатируемом приложении статическое меню, подобное рассматриваемому здесь, по-видимому, должно использовать интервал хранения, установленный по умолчанию, равным 30 дням. Наконец, параметр forua="true" определяет, что данное значение Cache-Controlпредназначено для телефона и не должно удаляться каким-либо промежуточнымагентом.
Хотя WML-страница несколько длинновата, она достаточно проста. По сути дела,в ней используется один элемент <select>, предоставляющий пользователю возможность указывать пункт данных, который необходимо обновить. Внутри элемента <select> для каждой установки вложен элемент <option>, предписывающий браузеру отображать текущее состояние установки и указывающий функциюWMLScript, которую должен вызывать браузер при изменении определенной установки в доме.