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

         

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



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

Как и приложение формата WML, файл FlightSchedule.hdml позволяет пользователю определить состояние выбранного рейса, используя переносное устройство(в нашем случае сотовый телефон). Этот файл имеет следующий исходный код:

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltChoice Name=GetAirline1 Key=AirCode&gt

&ltAction Type=Accept Task=GO Dest=#GetFlightNum&gt

&ltCenter&gtFlight Schedule &ltbr&gt&ltLine&gtAirline:

&ltCE Value=SU&gtAeroflot &ltCE Value=AC&gtAir Canada &ltCE Value=AF&gtAir France &ltCE Value=NZ&gtAir New Zealand &ltCE Value=AS&gtAlaska Airlines &ltCE Value=AQ&gtAloha Airlines &ltCE Value=HP&gtAmerica West &ltCE Value=AA&gtAmerican Airlines &ltCE Value=TZ&gtAmerican Trans Air &ltCE Task=GO Dest=#GetAirline2&gt...More

&lt/Choice&gt

&ltChoice Name=GetAirline2 Key=AirCode&gt

&ltAction Type=Accept Task=GO Dest=#GetFlightNum&gt &ltAction Type=Soft1 Label=Back Task=GO Dest=#GetAirline1&gt

&ltCenter&gtFlight Schedule &ltbr&gt&ltLine&gtAirline:

&ltCE Value=CO&gtContinental &ltCE Value=DL&gtDelta Airlines &ltCE Value=LH&gtLufthansa &ltCE Value=JL&gtJapan Airlines &ltCE Value=KL&gtKLM Royal Dutch &ltCE Value=NW&gtNorthwest Airlines &ltCE Value=QF&gtQantas Airlines &ltCE Value=QQ&gtReno Air &ltCE Value=SR&gtSwissAir &ltCE Task=GO Dest=#GetAirline3&gt...More

&lt/Choice&gt

&ltChoice Name=GetAirline3 Key=AirCode&gt

&ltAction Type=Accept Task=GO Dest=#GetFlightNum&gt &ltAction Type=Soft1 Label=Back Task=GO Dest=#GetAirline2&gt

&ltCenter&gtFlight Schedule &ltbr&gt&ltLine&gtAirline:

&ltCE Value=TW&gtTWA &ltCE Value=UA&gtUnited Airlines &ltCE Value=US&gtUSAir &ltCE Value=VS&gtVirgin Atlantic




&lt/Choice&gt

&ltEntry Name=GetFlightNum Format=5N Key=FlightNum Default=""&gt



&ltAction Type=Accept Task=GO Label=Find Method=Post PostData=$(AirCode)&$(FlightNum) Dest=../waplibcgi/FlightScheduleHDML.pl&gt

Flight Number:

&lt/Entry&gt

&lt/HDML&gt

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

Как вы видите, для отображения списка авиакомпаний, приложение используетэлемент <Choice>. Внутри <Choice> используется элемент <Action> для определения места в деке, куда приложение передает управление, когда пользовательпроизводит выбор авиакомпании. В отличие от версии формата WML, где используются два отдельных файла (один для получения названия авиакомпании иодин для получения номера рейса), в версии приложения формата HDML используется только один файл. Если вы подробнее изучите приложение, вы заметите,что в элементе <Choioe> с именами GetAirline2 и GetAirlineS используетсяэлемент <Action>, который определяет место в деке, куда передается управлениепосле того как пользователь нажимает кнопку Back (Назад).

После выбора пользователем авиакомпании в исходном коде осуществляется переход к элементу GetFlightNum, который предлагает пользователю ввести номеррейса и загружает сценарий языка Perl FlightScheduleHDML.pl.

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



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

Когда пользователь запускает приложение FlightSchedule, дека FlightSchedule.wmlотображает список авиакомпаний, из которого пользователь может сделать свойвыбор. После ввода названия авиакомпании, в приложении предлагается ввестиномер рейса и затем подключается сценарий языка Perl (файл FlightSchedule.pl).Дека FlightSchedule.wml имеет следующий исходный код:

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

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="GetAirline1"&gt

&ltonevent type="onenterforward"&gt

&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltonevent type="onenterbackward"&gt

&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltdo type="accept"&gt &ltgo href="GetFlightNum.wml" /&gt &lt/do&gt

&ltp align="center"&gt

Flight Schedule&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="nowrap"&gt

Airline:

&ltselect name="AirCode"&gt

&ltoption value="SU"&gtAeroflot&lt/option&gt &ltoption value="AC"&gtAir Canada&lt/option&gt &ltoption value="AF"&gtAir France&lt/option&gt &ltoption value="NZ"&gtAir New Zealand&lt/option&gt &ltoption value="AS"&gtAlaska Airlines&lt/option&gt &ltoption value="AQ"&gtAloha Airlines&lt/option&gt &ltoption value="HP"&gtAmerica West&lt/option&gt &ltoption value="AA"&gtAmerican Airlines&lt/option&gt &ltoption value="TZ"&gtAmerican Trans Air&lt/option&gt &ltoption onpick="#GetAirline2"&gt...More&lt/option&gt




&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="GetAirline2"&gt

&ltonevent type="onenterforward"&gt

&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltonevent type="onenterbackward"&gt

&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltdo type="accept"&gt &ltgo href="GetFlightNum.wml" /&gt &lt/do&gt

&ltdo type="options" label="Back"&gt &ltgo href="#GetAirline1" /&gt &lt/do&gt

&ltp align="center"&gt

Flight Schedule&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="nowrap"&gt

Airline:

&ltselect name="AirCode"&gt

&ltoption value="CO"&gtContinental&lt/option&gt &ltoption value="DL"&gtDelta Airlines&lt/option&gt &ltoption value="LH"&gtLufthansa&lt/option&gt &ltoption value="JL"&gtJapan Airlines&lt/option&gt &ltoption value="KL"& gtKLM Royal Dutch&lt/option&gt &ltoption value="NW"&gtNorthwest Airlines&lt/option&gt &ltoption value="QF"&gtQantas Airlines&lt/option&gt &ltoption value="QQ"&gtReno Air&lt/option&gt &ltoption value="SR"&gtSwissAir&lt/option&gt &ltoption onpick="#GetAirline3"&gt...More&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&ltcard id="GetAirline3"&gt

&ltonevent type="onenterforward"&gt



&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltonevent type="onenterbackward"&gt

&ltrefresh&gt

&ltsetvar name="AirCode" value="" /&gt &ltsetvar name="FlightNum" value="" /&gt

&lt/refresh&gt

&lt/onevent&gt

&ltdo type="accept"&gt &ltgo href="GetFlightNum.wml" /&gt &lt/do&gt

&ltdo type="options" label="Back"&gt &ltgo href="#GetAirline2" /&gt &lt/do&gt

&ltp align="center"&gt

Flight Schedule&ltbr/&gt

&lt/p&gt

&ltp align="left" mode="nowrap"&gt

Airline:

&ltselect name="AirCode"&gt

&ltoption value="TW"&gtTWA&lt/option&gt &ltoption value="UA"&gtUnited Airlines&lt/option&gt &ltoption value="US"&gtUSAir&lt/option&gt &ltoption value="VS"&gtVirgin Atlantic&lt/option&gt

&lt/select&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Так же как и во всех деках формата WML, первые два ее элемента сообщают браузеру, какую из версий спецификации WAP поддерживает данное приложение. Внашем случае WML-страница поддерживает версию 1.0 языка XML и версию 1.1описания типа документа (DTD), разработанного ассоциацией WAP Forum.

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

Далее, за информацией о версиях, каждый WML-файл начинается с тега <wml>. Вконце каждого файла вводят </wml>, что означает окончание исходного кодаприложения. За <wml> следуют теги <head> и </head>, внутри которых находитсяинформация о самом исходном коде, включая метаданные и информацию обуправлении доступом.


Многие программисты называют метаданные «данными оданных». Другими словами, в этом случае метаданные, которые считывает и обрабатывает браузер, сообщают ему, как трактовать данные.

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

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

Далее, за элементами заголовка в деке определяется первая карта, которая в нашем случае называется GetAirlinel. Основной задачей этой карты является предоставление пользователю возможности произвести выбор из списка авиакомпаний. Цифра 1 в конце имени этой карты сообщает о том, что она первая изтрех подобных карт. Приложению требуется много подобных карт для обработкивыбора пользователя из-за большого числа авиакомпаний.

Внутри каждой карты GetAirline приложение использует два элемента<onevent>, которые обрабатывают выбор пользователем кнопок <до> или<prev>. В каждом из случаев код обработки этих событий просто переинициализирует переменные AirCode (Код авиакомпании) и FlightNum (Номер рейса),присваивая им значения нуля.


После этого в каждой из карт используется элемент <Select> для отображения списка авиакомпаний и для обработки выборапользователя.

После выбора пользователем желаемой авиакомпании приложение загружаетдеку GetFMghtNum.wml, которая предлагает пользователю ввести номер рейса изатем загружает сценарий языка Perl FlightScheduleWML.pl. Исходный код декиGetFlightNurn.wml приведен ниже:

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

&ltwml&gt

&lthead&gt

&ltmeta http-equiv="Cache-Control" content="max-age=0" forua="true"/&gt

&lt/head&gt

&ltcard id="GetFlightNum"&gt

&ltdo type="accept" label="Find"&gt

&ltgo method="post" href="../waplibcgi/FlightScheduleWML.pl"&gt &ltpostfield name="AirCode" value="$(AirCode)&"/&gt &ltpostfield name="FlightNum" value="$(FlightNum)"/&gt &lt/go&gt

&lt/do&gt

&ltp align="left"&gt

Flight Number: &ltinput name="FlightNum" maxlength="5" format="*N" /&gt

&lt/p&gt

&lt/card&gt

&lt/wml&gt

Как вы видите, в исходном коде используется элемент <input> для предоставления пользователю возможности ввода номера рейса. В этом элементе поле тахlength ограничивает количество вводимых знаков до пяти. Аналогично, формат*N позволяет пользователю вводить только числовые данные. После ввода пользователем желаемой информации о полетах, дека использует элемент <do> дляподключения сценария FlightScheduleWML.pl, который описан ниже.


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



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

Как было описано выше, когда пользователь производит выбор авиакомпании иопределяет номер рейса в файле FlightSchedule.hdml, приложение пересылаетданные сценарию FlightScheduleHOML.pl. Как вы понимаете, элементы в исходномкоде для отображения информации о рейсе этого сценария практически идентичны элементам сценария, описанного ранее в этой главе. Описанные нижеоператоры языка Perl создают исходный код формата HDML, который используется браузером для отображения информации о рейсе или сообщения об ошибке(если номер рейса неправильный):

#!/usr/bin/perl

read (STDIN, $Buffer, $ENV{'CONTENT_LENGTH'});

@data = split(/&/, $Buffer);

$AirCode = $data[0]; $FlightNum = $data[1];

if ($AirCode eq "SU") { $AirName = "Aeroflot";

if ($FlightNum eq "1") { $ArriveCity = "Moscow"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AC")

{ $AirName = "Air Canada";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AF")

{ $AirName = "Air France";

if ($FlightNum eq "1") { $ArriveCity = "Paris"; $ArriveTime = "9:45 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "London"; $ArriveTime = "11:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NZ")

{ $AirName = "Air New Zealand";

if ($FlightNum eq "1") { $ArriveCity = "Auckland"; $ArriveTime = "8:50 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Sydney"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }




elsif ($ AirCode eq "AS")

{ $AirName = "Alaska Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Portland"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AQ")

{ $AirName = "Aloha Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Hilo"; $ArriveTime = "11:15 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "HP")

{ $AirName = "America West";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "PHoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AA")

{ $AirName = "American Airlines";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Phoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TZ")

{ $AirName = "American Trans Air";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "San Francisco"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "CO")

{ $AirName = "Continental";

if ($FlightNum eq "1") { $ArriveCity = "Boston"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }



elsif ($ AirCode eq "DL")

{ $AirName = "Delta";

if ($FlightNum eq "1") { $ArriveCity = "Atlanta"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "8:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "LH")

{ $AirName = "Lufthansa";

if ($FlightNum eq "1") { $ArriveCity = "Berlin"; $ArriveTime = "9:30 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Chicago"; $ArriveTime = "9:00 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "JL")

{ $AirName = "Japan Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "KL")

{ $AirName = "KLM Royal Dutch";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:00 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NW")

{ $AirName = "Northwest Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Seattle"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Portland"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "QF")

{ $AirName = "Qantas Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Melbourne"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }



elsif ($ AirCode eq "QQ")

{ $AirName = "Reno Air";

if ($FlightNum eq "1") { $ArriveCity = "Reno"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "SR")

{ $AirName = "Swiss Air";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TW")

{ $AirName = "TWA";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "UA")

{ $AirName = "United Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "11:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "US")

{ $AirName = "USAir";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "VS")

{ $AirName = "Virgin Atlantic";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }



if ($ArriveCity eq "Unknown") {

$Deck = "Content-type: text/x-hdml

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltDisplay&gt

&ltAction Type=Accept Task=GO Label=Done Dest=../FlightSchedule/FlightSchedule.hdml Vars=AirCode=&FlightNum=&gt

$AirName flight $ FlightNum is not in the database. Try again.

&lt/Display&gt

&lt/HDML&gt";

print $Deck; } else { $Deck = "Content-type: text/x-hdml

&ltHDML Version=3.0 Markable=True TTL=0&gt

&ltDisplay&gt

&ltAction Type=Accept Task=GO Label=Done Dest=../FlightSchedule/FlightSchedule.hdml Vars=AirCode=&FlightNum=&gt

$AirName flight $FlightNum will arrive in $ArriveCity at $ArriveTime

&lt/Display&gt

&lt/HDML&gt";

print $Deck; }

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



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



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

Как было сказано выше, каждый раз, когда пользователь производит выбор авиакомпании и определяет номер рейса, приложение FlightSchedule.wml запускаетсценарий языка Perl, который отображает информацию о текущем состояниирейса или выдает сообщение об ошибке, если такой рейс не существует. Сценарий FlightScheduleWML.pl имеет следующий исходный код: #!/usr/bin/perl

require 'DeckUtils.pl';

%cgiVars = &AppUtils::ParseCGIVars(); $AirCode = $cgiVars{"AirCode"}; $FlightNum = $cgiVars{"FlightNum"};

if ($AirCode eq "SU") { $AirName = "Aeroflot";

if ($FlightNum eq "1") { $ArriveCity = "Moscow"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AC")

{ $AirName = "Air Canada";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AF")

{ $AirName = "Air France";

if ($FlightNum eq "1") { $ArriveCity = "Paris"; $ArriveTime = "9:45 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "London"; $ArriveTime = "11:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NZ")

{ $AirName = "Air New Zealand";

if ($FlightNum eq "1") { $ArriveCity = "Auckland"; $ArriveTime = "8:50 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Sydney"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AS")

{ $AirName = "Alaska Airlines";




if ($ FlightNum eq "1") { $ArriveCity = "Portland"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AQ")

{ $AirName = "Aloha Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Hilo"; $ArriveTime = "11:15 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "HP")

{ $AirName = "America West";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "PHoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "AA")

{ $AirName = "American Airlines";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Phoenix"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TZ")

{ $AirName = "American Trans Air";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "San Francisco"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "CO")

{ $AirName = "Continental";

if ($FlightNum eq "1") { $ArriveCity = "Boston"; $ArriveTime = "6:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "DL")



{ $AirName = "Delta";

if ($ FlightNum eq "1") { $ArriveCity = "Atlanta"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "8:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "LH")

{ $AirName = "Lufthansa";

if ($FlightNum eq "1") { $ArriveCity = "Berlin"; $ArriveTime = "9:30 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Chicago"; $ArriveTime = "9:00 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "JL")

{ $AirName = "Japan Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "KL")

{ $AirName = "KLM Royal Dutch";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:00 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:00 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "NW")

{ $AirName = "Northwest Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Seattle"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Portland"; $ArriveTime = "7:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "QF")

{ $AirName = "Qantas Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Melbourne"; $ArriveTime = "7:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Tokyo"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }



elsif ($ AirCode eq "QQ")

{ $AirName = "Reno Air";

if ($FlightNum eq "1") { $ArriveCity = "Reno"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Las Vegas"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "SR")

{ $AirName = "Swiss Air";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "TW")

{ $AirName = "TWA";

if ($FlightNum eq "1") { $ArriveCity = "Chicago"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Los Angeles"; $ArriveTime = "9:30 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "UA")

{ $AirName = "United Airlines";

if ($FlightNum eq "1") { $ArriveCity = "Las Vegas"; $ArriveTime = "10:00 am"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "11:45 pm"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "US")

{ $AirName = "USAir";

if ($FlightNum eq "1") { $ArriveCity = "New York"; $ArriveTime = "8:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "Boston"; $ArriveTime = "6:45 am"; } else { $ArriveCity = "Unknown"; } }

elsif ($AirCode eq "VS")

{ $AirName = "Virgin Atlantic";

if ($FlightNum eq "1") { $ArriveCity = "London"; $ArriveTime = "10:30 pm"; } elsif ($FlightNum eq "2") { $ArriveCity = "New York"; $ArriveTime = "9:45 am"; } else { $ArriveCity = "Unknown"; } }



if ($ArriveCity eq "Unknown") {

$Deck = "Content-type: text/vnd.wap.wml

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

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $ FlightNum is not in the database. Try again.

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck; } else {

$Deck = "Content-type: text/vnd.wap.wml

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

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $FlightNum will arrive in $ArriveCity at $ArriveTime

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck; }

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

Далее, код использует серию конструкций if-else для определения, в первуюочередь, введенной авиакомпании, а затем и введенного номера рейса.


Для простоты в нашем приложении код поддерживает только номер рейса 1 для всехавиалиний, в некоторых случаях и номер рейса 2. В реальном приложении сценарий должен получать номера рейсов из базы данных, которая позволит обрабатывать неограниченное число рейсов.

Если сценарий идентифицирует соответствующие авиакомпанию и номер рейса,он создает новую деку формата WML, которая отображает информацию о рейсе изатем позволяет пользователю вернуться в начало приложения:

$Deck = "Content-type: text/vnd.wap.wml

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

&ltwml&gt

&lthead&gt

&ltmeta http-equiv=\"Cache-Control\" content=\"max-age=0\" forua=\"true\"/&gt

&lt/head&gt

&ltcard&gt

&ltdo type=\"accept\" label=\"Done\"&gt &ltgo href=\"../FlightSchedule /FlightSchedule.wml\" /&gt &lt/do&gt

&ltp align=\"left\" mode=\"wrap\"&gt

$AirName flight $FlightNum is not in the database. Try again.

&lt/p&gt

&lt/card&gt

&lt/wml&gt";

print $Deck;

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