Dit hoofdstuk bespreekt de Wireless Markup Language (WML). WML is een markup- taal, gebaseerd op XML en bedoeld om de inhoud en de gebruikersinterface van toestellen met lage bandbreedte te specificeren, met inbegrip van GSM's en beepers.
WML werd ontworpen met het oog op de beperkingen waar we bij de mobiele terminals rekening moeten houden. Deze beperkingen zijn:
WML omvat tevens vier belangrijke functionele gebieden, die hieronder kort omschreven worden.
Vooreerst is er de voorstelling van tekst en lay-out. WML voorziet in de ondersteuning van tekst en figuren, met een brede waaier aan mogelijkheden voor tekstopmaak. Zo bijvoorbeeld kan tekst in vet worden weergegeven en ook de uitlijning kan worden bepaald.
Vervolgens is ook de deck/card organisatie van belang. Alle informatie in WML wordt georganiseerd in een collectie van cards en decks. Cards omvatten één of meerdere elementen van de interactie met de gebruiker (zoals een keuzemenu of een invoerveld). De gebruiker zal door een reeks van WML cards navigeren, de inhoud bekijken van deze cards, gevraagde informatie invoeren, keuzes maken en naar de volgende card gaan. Cards worden gegroepeerd in een deck. Een WML deck is in feite gelijkaardig aan een HTML pagina, in die zin dat een deck ook via een URL wordt geadresseerd en tevens de eenheid van transmissie is. Er wordt steeds een deck doorgestuurd, net zoals steeds een Webpagina wordt verzonden.
Ten derde is er de navigatie tussen de verschillende cards en het linken van cards. WML voorziet ondersteuning om de navigatie tussen de verschillende cards te controleren. Bovendien zijn er ook voorzieningen om event-handling door te voeren in het toestel. Dit kan voor navigatiedoeleinden gebruikt worden of om scripts uit te voeren.
Het laatste functionele gebied is dat van de string-parametrisatie en state management. Alle WML decks kunnen geparametriseerd worden gebruik makend van een state model. Variabelen kunnen gebruikt worden in de plaats van strings, en vervangen worden in run-time. Deze parametrisatie laat een efficiënter gebruik van de netwerkresources toe.
Zoals reeds gezegd is WML speciaal ontworpen om rekening te houden met de beperkingen van de draagbare terminals. Het gaat hierbij steeds om kleine toestellen met lage brandbreedte. Algemeen kunnen we deze toestellen als volgt kenmerken:
WML is een XML-taal en erft dus de tekenset over. In WML is de tekenset van een document een set van alle logische tekens die een document kan bevatten zoals bijvoorbeeld de letter 'T' en een vaste integer die deze letter identificeert. Een WML-document is dus een opeenvolging van integers, die samen een document vormen.
De basiseenheid van WML is een card. Cards worden samen gegroepeerd in decks. Een deck is het hoogste element in een WML document. Wanneer de gebruiker een deck ontvangt, wordt steeds de eerste card uit dat deck geactiveerd en getoond aan de gebruiker. De volgende figuur stelt het card/deck concept eenvoudig voor.
WML heeft veel van zijn syntax geleend van XML. Lezers die vertrouwd zijn met XML zullen dan ook snel de analogie onderkennen. Ook voor wie reeds voor het World Wide Web heeft ontwikkeld, zal het concept dat hieronder geschetst wordt, niet nieuw zijn.
Het is trouwens steeds een streefdoel geweest om een standaard te ontwikkeling die dicht aanleunt bij bestaande standaarden, vermits een nauwe samenwerking van beide domeinen nodig is. Denk hierbij aan HTML-inhoud die in WML wordt omgezet op verzoek van een user agent.
Tekst in WML kan numerieke of benoemde tekstentiteiten bevatten. Deze entiteiten specificeren bepaalde tekens in de tekenset van het document. Entiteiten worden voor die reden gebruikt omdat bepaalde tekens moeilijk in te geven zijn in een editor. Bijvoorbeeld is het zo dat de ampersand (&) wordt weergegeven door de benoemde entiteit &. Elke entiteit begint met een ampersand en eindigt op een puntkomma.
Een tag beschrijft een taalelement en bevat het type van het element en een unieke identificatie. Een tag kan ook attributen bevatten die andere eigenschappen van het element beschrijven.
WML bestaat uit inhoud die wordt omgeven door tags, die elk omsloten zitten
tussen
de '<
' en '>
' tekens.
<tag> |
Dit is het begin van het element. De starttag kan attributen bevatten. |
</tag> |
Dit is het einde van de beschrijving van het element. (eindtag) |
<tag/> |
Dit is een leeg element, zoals bijvoorbeeld
<br/> die een regel splitst. |
De tags worden bij het opstellen van de applicatie uitvoerig behandeld. Om de lezer toch al enige voeling te geven met het concept werden onderstaande voorbeelden opgenomen.
Een deck, de basiseenheid in WML, bevat verschillende elementen van de interactie met de gebruiker. Deze 'elementen' die in een deck zitten, staan tussen de tags die in het statement worden vermeld.
<wml> |
De <wml> -tag is het begin van een deck. |
... | |
</wml> |
Deze tag sluit een deck af. |
In de praktijk zullen in een deck verschillende cards zitten, waarvan de lezer de syntax in voorbeeld twee kan zien. Let op: beide tags uit het eerste voorbeeld hebben geen attributen die verdere informatie over het deck bepalen.
Verschillende cards samen vormen een deck. De syntax voor één card vindt de lezer hieronder.
<card id="card1" title="Hallo"> |
Dit vormt het begin van een card. |
... | |
</card> |
En deze tag beëindigt de card. |
Dit element (een card) heeft dus een begintag die wel attributen bevat. Immers, in de starttag worden twee extra informaties meegegeven van de card: een id, wat een unieke identificatie is van die card binnen een deck, en de titel van de card. De betekenis van deze attributen wordt verder in dit hoofdstuk behandeld.
Wanneer we nu beide combineren, dan krijgen we volgende opbouw. De onderstaande declaratie is deze van één document in WML dat drie cards bevat. Volledigheidshalve vermeld ik hierbij dat het geen volwaardig WML-document is, omdat een aantal vereiste elementen nog ontbreken. Onderstaande syntax wil de lezer enkel voeling geven met het gebruik van tags bij elementen.
<wml> // Begin WML-deck <card id="card1" title="Welcome"> // Begin card1 ... </card> // Einde card1 <card id="card2" title="Main"> // Begin card2 ... </card> // Einde card2 <card id="card3" title="Info"> // Begin card3 ... </card> // Einde card3 </wml> // Einde WML-deck
Meteen kan voor de lezer ook al duidelijk worden waarom bepaalde attributen van een element verplicht zijn, zoals hier het id-attribuut van een card. Immers, geeft men die attribuut niet mee, dan kan geen onderscheid gemaakt worden tussen de verschillende cards, wat voor navigatie knap vervelend kan zijn.
Opmerking: binnen een card worden ook elementen gespecificeerd, maar daar wordt verder op ingegaan in dit boek. Deze elementen werden weggelaten.
Elementen specificeren alle structurele en markupinformatie in verband met een WML deck. Elementen kunnen een begintag hebben, inhoud en een eindtag. Ze hebben steeds één van de twee geïllustreerde structuren:
<tag> inhoud </tag> |
Voorbeeld: <card> en </card> |
of | <tag/> |
Voorbeeld: <br/> |
Elementen die inhoud bevatten worden geïdentificeerd via een begintag
<tag>
en een eindtag </tag>
. Een element
dat geen inhoud bevat wordt dan door de lege tag <tag/>
bepaald, zoals in de tweede mogelijkheid wordt aangegeven.
Het <br/>
statement zorgt dat naar een nieuwe regel wordt
gesprongen. Het is nutteloos om daar attributen aan toe te kennen, en het heeft
ook geen inhoud. Dat is een voorbeeld van wat we een leeg element noemen.
Dit overzicht geeft een opsomming van alle tags die in de Nokia WAP Toolkit 2.0 ondersteund worden, gegroepeerd per categorie.
Categorie WML elementen Deck en card wml card template head access meta Events do ontimer onenterforward onenterbackward onpick onevent postfield Taken go prev refresh noop Variabele setvar Gebruikersinvoer input select option optgroup fieldset Ankers, figuren en timers a anchor img timer Tekstopmaak br p table tr td b iVele WML elementen laten toe dat er attributen voor gespecificeerd worden. Attributen bevatten extra informatie over een element. De attributen kunnen altijd gespecificeerd worden in de starttag van een element, gebruikmakend van de volgende syntax:
<tag attribuut1="waarde1" attribuut2="waarde2">
Elk attribuut wordt gescheiden van een ander door een spatie. De waarde van een attribuut moet steeds tussen dubbele aanhalingstekens geplaatst worden, en de namen van een attribuut mogen nooit in hoofdletters zijn.
Sommige attributen zijn verplicht. Bijvoorbeeld, het go
element vereist het href
attribuut:
<go href="http://www.nokia.com"/>
Andere attributen zijn optioneel en kunnen standaardwaarden hebben. Een voorbeeld van een optioneel attribuut is het align attribuut voor het img element. Wanneer je het align attribuut niet specificeert, is de standaardwaarde bottom. In hoofdstuk 6 (de applicatie e-Search) wordt dit element verder besproken.
Dit is bedoeld voor de WML-ontwikkelaar.De commentaarstijl in WML volgt die van XML, en heeft de volgende syntax:
<! --commentaar -- >
Er kunnen parameters gebruikt worden voor cards en decks via het gebruik van variabelen. Om deze variabelen in een card of een deck te substitueren, worden de volgende syntaxen gebruikt:
§identifier | Voorbeeld : $amount |
§(identifier) | Voorbeeld : $(first amount) |
De haakjes zijn verplicht als een witte ruimte het einde van de variabele niet aanduidt. Onderstaand voorbeeld illustreert het verschil tussen de eerste en de tweede mogelijkheid.
Als we de een variabele (first amount) zouden willen substitueren met de syntax $first amount (dus niet tussen haakjes), zou dit geïnterpreteerd worden als $first en zou enkel first doorgegeven worden, wat tot een foutmelding zal leiden. De interpreter denkt immers dat een blanco ruimte het einde van de variabele aangeeft!
Een geldig WML deck is een geldig XML document en moet daarom een declaratie van het documenttype bevatten.
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN" http://www.wapforum.org/DTD/wml_1.1.xml>
Een WML deck begint en eindigt met het wml element, en alle andere elementen komen tussen deze begin- en eindtag te staan.
<wml> alle andere elementen </wml>
Onderstaand voorbeeld is een eenvoudig WML deck dat één enkele card bevat.
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML 1.1//EN" http://www.wapforum.org/DTD/wml_1.1.xml> <wml> <card id="First_Card" title="First Card"> <p> The first WML example </p> </card> </wml>
En dat resulteert in volgende schermuitvoer op de GSM:
Onderstaande tabel legt kort uit welke elementen men kan gebruiken om een card te definiëren binnen een deck.
Element | Verklaring |
---|---|
wml | Definieert een deck en omsluit alle informatie en cards in het deck |
card | Duidt de algemene lay-out voor de user agent aan. |
template | Creëert een template voor de cards in het deck. |
head | Bevat informatie over het deck als geheel, met inbegrip van meta-gegevens en toegangscontrole. |
access | Specificeert toegangscontrole voor het hele deck. |
meta | Specificeert algemene meta-data met betrekking tot het deck |
We gaan nog even dieper in op het card element. Onderstaande declaratie is een eenvoudig voorbeeld van een card-element:
<card id="card_name" title="title"> <p> Text containing<i>
information</i>
</p> </card>
Daar dit werk de lezer enkel een inleiding wil aanbieden tot WML, worden niet alle elementen behandeld. Voor verdere informatie kan de lezer steeds de bibliografie raadplegen.
Men kan onderstaande elementen gebruiken om navigatie en functies te voorzien.
Element | Verklaring |
---|---|
do | Voorziet een algemene mogelijkheid om acties op de huidige card uit te voeren. |
ontimer | Specificeert een intrinsiek event dat plaatsvindt wanneer de timer afloopt. |
onenterforward | Specificeert een intrinsiek event dat plaatsvindt wanneer de gebruiker een card onder bepaalde voorwaarden opent. |
onenterbackward | Specificeert een intrinsiek event dat plaatsvindt wanneer de gebruiker naar een bepaalde card navigeert via de history. |
onpick | Specificeert een intrinsiek event dat plaatsvindt wanneer de gebruiker een item selecteert of een selectie ongedaan maakt waarvoor het event werd gespecificeerd. |
onevent | Verbindt een taak met een bepaald intrinsiek event. |
postfield | Specificeert een veldnaam en een waarde voor de transmissie naar een origin server tijdens een verzoek. |
Het is van belang om toch kort het do
element toe te lichten, omwille van het
grote belang in de constructie van cards, en ook voor het verband met de taken.
Een card element kan dus do
elementen bevatten die taken toewijzen aan een
bepaalde toets. Volgende declaratie is een eenvoudige voorbeeld van hoe men het
element gebruikt:
<do type="tasktype" label="label" name="name" optional="false">
<do>
Dit is de begintag van het do element. Je kan slechts
één taak per do
element specificeren.
type="tasktype" |
Dit verwijst naar de taak die moet uitgevoerd worden. |
label="label" |
Bevat het label voor de toets. |
name="name" |
Bevat de naam van de koppeling van de taak aan de toets. |
optional="false" |
Wanneer dit attribuut op "true" wordt gezet, kan de user agent dit element negeren. |
Een do
element kan een taak bevatten die specificeert wat de user agent moet
doen wanneer de gebruiker een toets activeert door ze in te drukken, of door een
card of deck navigeert. Vier taken zijn beschikbaar:
go
, prev
, noop
en refresh
.
<go href="#card2"/>
Verklaring:
<go>
Dit is de begintag van het go element, die duidt op een
navigatie naar een href.
ref="href"
specificeert de bestemming, bijvoorbeeld de locatie van de
card die moet worden getoond. Dit attribuut is verplicht!
Element | Verklaring |
---|---|
input | Specificeert een object voor tekstinvoer. |
select | Laat de gebruiker toe om te kiezen uit een lijst met opties. WML ondersteund zowel keuzelijsten waarop één of meerdere keuzes tezelfdertijd kunnen worden gemaakt. |
option | Specificeert een keuze in een select element. |
optgroup | Staat toe dat verbonden option elementen (bijvoorbeeld allemaal keuzes uit één lijst) gegroepeerd worden in een groter geheel om zo de lay-out en de presentatie door de user agent te vereenvoudigen. |
fieldset | Laat toe dat verbonden velden en tekst gegroepeerd worden. |
1.<?xml version=1.0"?>
2.<!DOCTYPE wml PUBLIC "-//WAPFORUM/DTD WML1.1//EN" 3. http://www.wapforum.org/DTD/wml_1.1.xml>
4.<wml>
5.<card id="First_Card">
6.<do type="accept" label="Next">
7.<go href="#Second_Card"/>
8.</do>
9.<p>
10. Select<b>
Next</b>
to display next card. 11.</p>
12.</card>
13.<card id="Second_Card">
14.<p>
15. This card contains the following… 16.</p>
17.</card>
18.</wml>
In de user agent zorgt bovenstaande code dat onderstaande interface wordt gegenereerd:
Verklaring van de code:
<wml>
tag.<wml>
tag en eindigen met de </wml>
tag.<card>
en de eindtag </card>
moeten staan.
De meeste WML elementen laten de gebruiker toe om attributen te specificeren.
Attributen worden ingevoerd onder volgende vorm: attribuut="waarde", waarbij
attribuut de naam is van het attribuut en waarde een numerische of tekstwaarde
die door de ontwerper wordt aangeduid.