Рассмотрение приложения Restaurant.hdml
Рассмотрение приложения Restaurant.hdml
Как и приложение, основанное на WML, Restaurant.hdml позволяет отображатьадрес и номер телефона, используя для этого портативное устройство пользователя. Кроме того, при желании, пользователь также может автоматически позвонить в ресторан. Приложение Restauranthdml реализуется с помощью следующего программного кода на HDML:
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetRestType Key=RestType>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=$RestType Dest=../waplibcgi/RestCallTypeHDML.pl>
<Center>Restaurants
<CE Value="American">American <CE Value="Chinese">Chinese <CE Value="FastFood">Fast Food <CE Value="HealthFood">Health Food <CE Value="Italian">Italian <CE Value="Mexican">Mexican <CE Value="Seafood">Seafood
</Choice>
</HDML>
Первый элемент в файле сообщает браузеру (или другим программистам) информацию о версии спецификации HDML, поддерживаемой приложением. Крометого, параметр Markable=True определяет, что браузер может устанавливать наHDML-странице закладку (Bookmark), а параметр TTL=0 предписывает браузеру невыполнять кэширование HDML-страницы. Для предоставления пользователювозможности указывать тип предпочитаемой кухни приложение использует элемент <Choice>. Затем приложение запускает Peri-сценарий RestCallTypeHDML.pl,чтобы отобразить на экране список названий ресторанов, из которых пользователь может сделать свой выбор. Peri-сценарий RestCallTypeHDML.pl реализуется спомощью следующего программного кода: #!/usr/bin/perl
read (STDIN, $RestType, $ENV{'CONTENT_LENGTH'});
if ($RestType eq "American")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetAmerican Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallAmerHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>American<br>
<CE Value=AllStar& gtAll Star Cafe <CE Value=MarysDiner>Mary's Diner <CE Value=Timberline>Timberline Inn
</Choice>
</HDML>";
}
elsif ($RestType eq "Chinese")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetChinese Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallChineseHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Chinese<br>
<CE Value=ChinaGarden>China Garden <CE Value=GoldenDragon>Golden Dragon <CE Value=PlumTree>Plum Tree Inn
</Choice>
</HDML>";
}
elsif ($RestType eq "FastFood")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetFastFood Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallFastFoodHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Fast Food<br>
<CE Value=BurgerKing>Burger King <CE Value=McDonalds>McDonald's <CE Value=TopSpot>Top Spot
</Choice>
</HDML>";
}
elsif ($RestType eq "HealthFood")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetHealthFood Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallHealthFoodHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Health Food<br>
<CE Value=GeneralNutrition& gtGeneral Nutrition <CE Value=HealthExpress>Health Express <CE Value=LivingHealthy>Living Healthy
</Choice>
</HDML>";
}
elsif ($RestType eq "Italian")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetItalian Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallItalianHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Italian<br>
<CE Value=Marios>Mario's <CE Value=OliveGarden>Olive Garden <CE Value=PapaMurphys>Papa Murphy's
</Choice>
</HDML>";
}
elsif ($RestType eq "Mexican")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetMexican Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallMexicanHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Mexican<br>
<CE Value=BajaFresh>Baja Fresh <CE Value=Guadalajara>Guadalajara Grill <CE Value=LaVilla>La Villa
</Choice>
</HDML>";
}
elsif ($RestType eq "Seafood")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Choice Name=GetSeafood Key=RestName>
<Action Type=Accept Label=Pick Task=GO Method=Post PostData=\$RestName Dest=RestCallSeafoodHDML.pl>
<Action Type=Soft1 Label=Back Task=GO Dest=../RestaurantCall/RestaurantCall.hdml>
<Center>Restaurants<br> <Center>Seafood<br>
<CE Value=KPSeafood>K & P Seafood <CE Value=FishCompany>Las Vegas Fish Company <CE Value=SevenSeas>Seven Seas
</Choice>
</HDML>";
}
print $Deck;
Сценарий анализирует параметр, после этого присваивает тип ресторана переменной $RestType. Далее программа использует серию ветвлений if-else дляопределения выбранного типа ресторана, в этом месте программного кода сценарий создает HDML-страницу, отображаемую браузером в виде списка соответствующих ресторанов. После выбора пользователем некоторого конкретного ресторана вновь созданная HDML-страница запускает соответствующий типу кухниPeri-сценарий, подобный RestCallSeafoodHDML.pl, приводимому здесь:
#!/usr/bin/perl
read (STDIN, $RestName, $ENV{'CONTENT_LENGTH'});
if ($RestName eq "KPSeafood")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=KPSeafood>
<Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl>
<Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212>
<Center>Restaurants<br> <Center>Seafood<br> <Line>K & P Seafood<br> 111 Main Street<br> Las Vegas, NV<br> 702-555-1212
</Display>
</HDML>"; }
elsif ($RestName eq "FishCompany")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=FishCompany>
<Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl>
<Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212>
<Center>Restaurants<br> <Center>Seafood<br> <Line>Las Vegas Fish Company<br> 222 East Sahara<br> Las Vegas, NV<br> 702-555-1212
</Display>
</HDML>"; }
elsif ($RestName eq "SevenSeas")
{ $Deck = "Content-type: text/x-hdml
<HDML Version=3.0 Markable=True TTL=0>
<Display Name=SevenSeas>
<Action Type=Soft1 Label=Back Task=GO Method=Post PostData=Seafood Dest=RestCallTypeHDML.pl>
<Action Type=Accept Icon=phone1 Label=Call Task=Call Number=702-555-1212>
<Center>Restaurants<br> <Center>Seafood<br> <Line>Seven Seas<br> 100 Water Street<br> Las Vegas, NV<br> 702-555-1212
</Display>
</HDML>"; }
print $Deck;
Элемент <Action> с параметром Task= Call определяет номер, который будетвызывать браузер, когда пользователь нажимает кнопку ввода (Accept), на которой может быть нанесено слово Call (Вызов) или, если телефон поддерживаетпиктограммы, изображение телефона.