Пособие по написанию WAP сайтов



Пособие по написанию WAP сайтов

         

Пособие по написанию WAP сайтов



ГЛАВА 4

Подробнее о приложении MovieGuide.wml
Подробнее о сценарии языка Perl MovieGuideWML.pl
Необходимость использования приложением сценария языка Рerl
Подробнее о приложении MovieGuide.hdml
Подробнее о сценарии языка Perl MovieGuideHDML.pl
Подробнее о вновь созданном файле формата HDML

В наше время, в этом вечно занятом мире, многие совершенно не думают о том,чтобы спланировать свое свободное время. Часто во время командировок, вовремя обеда, или просто в свободный часок, мы решаем, что неплохо было быпосмостреть интересный кинофильм. К несчастью, приняв подобное решение,мы не знаем, какие фильмы, в какое время и в каком кинотеатре идут. Приложение MovieGuide (путеводитель по кинотеатрам) сочетает в себе файлы фоматаWML (или HDML) и сценарий языка Perl для отображения названий кинофильмови времени их начала в каждом из выбранных кинотеатров. Когда вы запускаетеприложение MovieGuide, ваш сотовый телефон отображает список из трех кинотеатров, как показано на Рис. 4.1. После выбора кинотеатра, приложение отобразит список кинофильмов и время их начала, как показано на Рис. 4.2.



Если вы еще не установили пакет инструментальных средствдля разработки программного обеспечения (SDK) для WAP, например, с сайта www.openwave.com, можно протестироватьприложение MovieGuide, используя сотовый телефон, поддерживающий протокол WAP. Для этого с помощью телефона необходимо набрать адрес waplib.com/MovieGuide/MovieGuide.hdml,если браузер телефона поддерживает язык HDML. Если браузерподдерживает язык WML, то надо ввести адрес waplib.com/MovieGuide/MovieGuide. wml.






Необходимость использования приложением сценария языка Perl





Необходимость использования приложением сценария языка Perl




После того как вы познакомились с приложением, вы можете спросить: «Зачемэто приложение использует сценарий языка Perl?» Вместо этого приложение может использовать файлы формата WML для описания каждого кинофильма. Хотявариант использования индивидуальных файлов кинофильмов и работоспособен, разработка приложения будет требовать больше программирования каждыйраз, когда будут происходить изменения в афишах. Поэтому лучшей альтернативой будет ограничить все изменения одним местоположением (в нашем случае всценарии языка Perl), что позволит этому сценарию создавать индивидуальныефайлы каждый раз, когда будут происходить изменения в афишах.


Как вы уже поняли, сценарий языка Perl приложения MovieGuideWML создает впроцессе своей работы новую деку посредством чтения и записи уже существующей исходной деки. Вы можете быть удивлены, зачем приложение используетсценарий Perl, вместо того, чтобы просто создать законченное приложение безиспользования сценария. В идеальном случае реальное приложение будет получать свои данные (или потенциально новую деку) от сервера. В нашем примересценарий языка Perl показывает, хотя и довольно примитивно, симуляцию взаимодействия клиент-сервер.





Подробнее о приложении MovieGuide.hdml





Подробнее о приложении MovieGuide.hdml


Как и приложение MovieGuide.wml, приложение MovieGuide.hdml отображаетвремя начала кинофильмов в определенном месте. Когда приложение запускается в первый раз, браузер загружает деку MovieGuide.hdml, содержимое которойприведено ниже:
<HDML Version=3.0 Markable=True TTL=0>
<Choice Title=MovieGuide Method=Alpha>
<Center>Select Theater
<CE Task=GO Method=Post PostData=Cine8 Dest=../waplibcgi/MovieGuideHDML.pl>Cinema 8
<CE Task=GO Method=Post PostData=Fid6 Dest=../waplibcgi/MovieGuideHDML.pl>Fiddler's 6
<CE Task=GO Method=Post PostData=Twin Dest=../waplibcgi/MovieGuideHDML.pl>Cedar Twin
</Choice>
</HDML>


Первый элемент внутри деки сообщает браузеру (или другим программистам)какая версия языка HDML используется приложением. Далее, выражение Markable=True сообщает браузеру, что он может установить закладку в исходной деке,a TTL=0 сообщает браузеру о невозможности кэширования.


Для выбора из списка требуемого кинотеатра приложение использует элемент<Choice>. Внутри <Choice> приложение использует элемент <Action> для определения имени и местонахождения сценария языка Perl (и данных, которые приложение передает сценарию), который будет запущен приложением после того,как пользователь выберет определенный кинотеатр.


Далее, для центрирования текста Select Theater (Выберите кинотеатр) на дисплеетелефона приложение использует элемент <Center>. В заключение приложениеснова использует <Choice> для определения названий кинотеатров вместе с элементами <СЕ>. Как и в случае файла формата WML, элемент <Choice> используется пользователем для выбора кинотеатра из приведенного списка. После того какпользователь произведет свой выбор, браузер выполнит специальную операцию,которая в нашем случае будет операцией вызова сценария языка Perl.





Подробнее о приложении MovieGuide.wml





Подробнее о приложении MovieGuide.wml


Когда вы запустите приложение MovieGuide, браузер загрузит деку MovieGuide.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 title="Movie Guide">
<p align="center">
Select Theater
<select>
<option onpick="../waplibcgi/MovieGuideWML.pl?Cine8" >Cinema 8</option> <option onpick="../waplibcgi/MovieGuideWML.pl?Fid6" >Fiddler's 6</option> <option onpick="../waplibcgi/MovieGuideWML.pl?Twin" >Cedar Twin</option>
</select>
</p>
</card>
</wml>


Так же как и во всех деках формата WML, первые два ее элемента сообщают браузеру, какую из версий спецификации WAP поддерживает данное приложение. Внашем случае WML-страница поддерживает версию 1.0 языка XML и версию 1.1описания типа документа (DTD), разработанного ассоциацией WAP Forum.
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">


Далее, за информацией о версиях, каждый WML-файл начинается с тега <wml>. Вконце каждого файла вводят </wml>, что означает окончание исходного кодаприложения. За <wml> следуют теги <head> и </head>, внутри которых находитсяинформация о самом исходном коде, включая метаданные и информацию обуправлении доступом. Многие программисты называют метаданные «данными оданных». Другими словами, в этом случае метаданные, которые считывает и обрабатывает браузер, сообщают ему, как трактовать данные.
<head>
<meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
</head>


Элемент <meta> позволяет точно определить метаинформацию для исходногофайла. В нашем случае строка http-eguiv="Cache-Control" сообщает браузеруWAP, что эта часть метаинформации используется системой кэширования памяти. Аналогично, строка content=maxi-age=0 сообщает браузеру, что максимальное время, в течение которого будет кэшироваться этот файл, равно нулю секунд;значит, браузер не будет кэшировать данные, а загружать данные с сервера каждый раз, когда они будут запрошены. Для этой книги значение нуля было выбрано для содействия процессу обучения читателя. При выборе нуля каждый раз,когда будут происходить изменения, они будут передаваться на телефон. В реальном приложении статическое меню, подобное этому, можно использовать поумолчанию в течение 30 дней. Последняя строка forua="true" определяет, чтозначение Cache-Control предназначено для телефона и не может быть измененокаким-либо промежуточным агентом.


За начальными элементами в исходном коде определяется единственная карта,которая в нашем случае называется MovieGuide.


Далее, в исходном коде используется элемент <select> для показа списка кинотеатров пользователю. Внутри <select> каждый кинотеатр имеет свою собственную опцию, которая определяет для браузера, какие действия выполнять далее. В случае простого приложения, браузер каждый раз загружает сценарийязыка Perl MovieGuideWML.pl, передавая ему имя выбранного кинотеатра как параметр.





Подробнее о сценарии языка Perl MovieGuideHDML.pl





Подробнее о сценарии языка Perl MovieGuideHDML.pl


Когда пользователь произведет выбор кинотеатра в приложенииMovieGuide.hdml, браузер пошлет данные файлу сценария языка PerlMovieGuideHDML.pl, который, в свою очередь, откроет определенный файл формата HDML, основываясь на названии кинотеатра, которое приложение передаетсценарию.


Далее, сценарий языка Perl будет считывать и записывать содержимое файлаформата HDML. Браузер будет перехватывать это содержимое и создавать новуюдеку, основанную на вышеупомянутом содержимом файла формата HDML. Сценарий MovieGuideHDML.pl имеет следующий исходный код:
#!/usr/bin/perl
print "Content-type: text/x-hdml\n\n";
read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});
$FileName = "../MovieGuide/" . $Buffer . ".hdml";
open (MovieInfo, $FileName);
while (<MovieInfo>) { print; }
close (MovieInfo);





Подробнее о сценарии языка Perl MovieGuideWML.pl





Подробнее о сценарии языка Perl MovieGuideWML.pl


Как вы заметили, когда пользователь производит выбор кинотеатра, приложениеMovieGuide вызывает сценарий языка Perl MovieGuideWML.pl:
#!/usr/bin/perl
print "Content-type: text/vnd.wap.wml\n\n";
$Buffer = $ENV{'QUERY_STRING'};
$FileName = "../MovieGuide/" . $Buffer . ".wml";
open (MovieInfo, $FileName);
while (<MovieInfo>) { print; }
close (MovieInfo);


Когда запускается сценарий языка Perl, он открывает файл формата WML, соответствующий выбранному пользователем кинотеатру. Вы уже знаете, что декаMovieGuide.wml передает сценарию название кинотеатра как параметр. Используя содержимое специальной деки кинотеатра формата WML, сценарий языка Perlсоздает второй файл формата WML, который затем отобразит браузер.

Перед тем как вы узнаете, почему приложение использует второй сценарий,важно, чтобы вы поняли, как работает сценарий MovieGuideWML.pl. Первая строка сценария является просто командой, которая сообщает интерпретатору командной строки, где находится интерпретатор языка Perl. Далее print выводитданные, которые браузер использует для создания новой деки формата WML:
#!/usr/bin/perl
print "Content-type: text/vnd.wap.wml\n\n";


Сценарий использует функцию $ENV для извлечения значения параметра, в нашем случае названия кинотеатра. Далее, сценарий создает путь доступа, например, . .MovieGuide/CineS .wml посредством связи (конкатенации) пути. .MovieGuide/ и имени параметра, например, CineS, а также расширения wml:
$Buffer = $ENV{'QUERY_STRING'};
$FileName = "../MovieGuide/" . $Buffer . ".wml";


Сценарий открывает файл и начинает читать и записывать содержимое файладля создания нового файла сценария. Другими словами, сценарий считывает информацию в формате WML из входного файла, затем записывает информацию настандартное выходное устройство (stdout), откуда браузер эту информацию считывает и создает новую деку формата WML. Для управления входными даннымисценарий использует дескриптор файла, который сохраняется в переменнойMovielnf о. Приведем операторы, которые используются в цикле while для обеспечения сценарию считывания и записи файла формата WML:
open (MovieInfo, $FileName);
while (<MovieInfo>) { print; }
close (MovieInfo);


Далее приведем исходный код файла CineS.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>
<do type="accept" label="Back"> <go href="../MovieGuide/MovieGuide.wml"/> </do>
<p align="center">
<b>Cinema 8</b> <br/>1040 South <br/>Sage Way
</p>
<p align="center">
.......... <br/><i>The Blair Witch Project</i> <br/>4:25, 7:30, 9:15
</p>
<p align="center">
.......... <br/><i>Inspector Gadget</i> <br/>4:40, 7:35, 9:25
</p>
<p align="center">
.......... <br/><i>Story of Us</i> <br/>7:10, 9:30
</p>
<p align="center">
.......... <br/><i>Three to Tango</i> <br/>7:25, 9:30
</p>
<p align="center">
.......... <br/><i>Three Kings</i> <br/>7:05, 9:20
</p>
<p align="center">
.......... <br/><i>Super Star</i> <br/>7:25, 9:15
</p>
<p align="center">
.......... <br/><i>Mystery Alaska</i> <br/>7:05, 9:20
</p>
<p align="center">
.......... <br/><i>Runaway Bride</i> <br/>7:00, 9:10
</p>
</card>
</wml>


Как вы можете видеть, файл начинается со стандартной информации заголовка.Далее, файл определяет единственную карту, в которой используется серия теговабзаца <р> для вывода времени начала фильмов. Используется также элемент<do>, который позволяет пользователю вернуться к предыдущему экрану, который в нашем случае находится в файле MovieGuide.wml в директории MovieGuide:
<do type="accept" label="Back"> <go href="../MovieGuide/MovieGuide.wml"/> </do>





Подробнее о вновь созданном файле формата HDML





Подробнее о вновь созданном файле формата HDML


Как вы поняли, сценарий языка Perl приложения MovieGuideHDML создает в процессе работы новую деку просто путем считывания и записи существующего содержимого исходной деки. Снова вы можете быть удивлены, зачем приложение использует сценарий языка Perl, вместо того, чтобы просто создать законченное приложение без использования сценария. В идеальном случае реальное приложение будет получать свои данные (или потенциально новую деку) от сервера. В нашемпримере сценарий языка Perl показывает, хотя и довольно примитивно, симуляцию взаимодействия клиент-сервер. Приведенные ниже элементы отображаютсодержимое файла Twin.HDML, который является одним из файлов, созданныхсценарием языка Perl на основании выбора пользователя:
<HDML Version=3.0 Markable=True TTL=0>
<Display>
<Action Type=Accept Task=GO Label=Back Dest=../MovieGuide/MovieGuide.hdml>
<Center>Cedar Twin <br><Center>33 North Main St
<br><Center>.......... <br><Center>Tarzan <br><Center>5:00, 7:00, 9:00
<br><Center>.......... <br><Center>Big Daddy <br><Center>4:45, 7:10
</Display>
</HDML>


Как вы видите, в исходном коде используется элемент <Display> для отображения содержимого на дисплее сотового телефона. В коде используется также элемент <Action> для возвращения управления обратно приложениюMovieGuide.hdml в случае, если пользователь выберет кнопку Back, появившуюсяна дисплее телефона.



Отображение спискакинотеатров



Рис.. 4.1. Отображение спискакинотеатров





Отображение кинофильмовв кинотеатре и времени их начала



Рис.. 4.2. Отображение кинофильмовв кинотеатре и времени их начала