2. WML
Tässä
osassa käydään läpi vain WML:n perusteet. Kattavia teoksia aiheesta on
ilmestynyt suomeksikin useita. Toisaalta monipuolisempi XHTML soveltuu nykyisin
myös WAP-palveluiden ohjelmointiin, mihin WML vuosia sitten kehitettiin.
XHTML:n rakenteeseen ja koodiin paneudutaan seikkaperäisemmin sivuston
seuraavassa osassa.
Wireless
Markup Language (WML) on merkintäkieli, joka perustuu Extensible Markup
Languageen
(XML) ja sitä käytetään sisällön koodaamiseen langattomiin laitteisiin.
WML
lähdetiedoston MIME-tyyppi on text/vnd.wap.wml. Koodatun tai käännetyn WML tiedoston MIME-tyyppi on application/vnd.wap.wmlc.
WML-tiedostoa
kutsutaan dekiksi (deck). Dekki on
pienin WML-yksikkö, jonka web-palvelin voi lähettää selaimelle prosessoitavaksi
langattomassa laitteessa.
WML-dekin
perusosa on kortti (card), joka
määrittää vuorovaikutteisuuden laitteen selaimen ja käyttäjän välillä. Kun
selain vastaanottaa dekin, se yleensä aktivoi dekin ensimmäisen kortin.
Toisaalta aloitus voidaan ohjata myös mihin tahansa dekin korttiin.
WML
on kirjainherkkä kieli, eli Kieli ja kieli ovat eri asioita. WML myös kääntää
pakotetut rivinvaihdot, sisennykset ja muut tyhjät tilat yksinkertaiseksi
välilyönniksi. Tarkastelemissamme esimerkeissä on käytetty rivinvaihtoja ja
sisennyksiä koodin selkeyden vuoksi. Validi WML ei kuitenkaan vaadi tuollaisia
muotoiluja.
WML
perii useimmat syntaksin muotonsa XML:stä. Yksityiskohtaista tietoa XML:n
syntaksista löytyy muun muassa W3C:n (World Wide Web Consortium)
sivuilta otsikolla XML Specification.
WML-tekstissä
tietyt erikoismerkit ja -kirjaimet täytyy korvata määrätyillä entiteeteillä. Ne
ovat numeeristen ja kirjainmerkkien alkumuotoja, nimettyjä korvausmerkkejä.
Esimerkiksi et -merkkiä (&) edustaa nimetty entiteetti &
ja ä:tä ä. Kaikki entiteetit alkavat et -merkillä ja päättyvät
puolipisteeseen.
Tagi
on kielen elementin kuvaaja. Se määrittää elementin, sisältää elementin tyypin ja yksilöi sen. Tagi voi myös sisältää attribuutteja, jotka kuvaavat elementin ominaisuuksia.
WML
koostuu sisällöstä, joka on suljettu muotoiltuihin tageihin. Kullakin tagilla
on aloitus- ja lopetusparina kulmasulku, <
>.
<tagi> Tämä aloittaa elementin. Aloitustagi voi sisältää myös attribuutteja.
</tagi> Tämä sulkee elementin.
<tagi/> Tämä on ns. tyhjä elementti. Esimerkiksi <br/> ilmaisee rivinvaihtoa.
Elementeissä
määritetään kaikki WML-dekin sisältämät merkkaustavat ja informaation rakenne. Elementit voivat sisältää aloitustagin, varsinaisen sisällön, toisia elementtejä, ja lopetustagin. Elementeillä on joko kaksi- tai yksitaginen perusrakenne:
<tagi> sisältö </tagi>
-
tai-
<tagi/>
Sisällöstä ja toisista elementeistä (ns. lapsielementeistä) muodostuvat elementit
määritetään aloitustagin <tagi> ja
lopetustagin </tagi>
väliin. Tyhjä elementti -tagi <tagi/> ilmaisee
elementtiä, joka ei sisällä varsinaista sisältöä.
Seuraavassa
taulukossa on lista muutamista yleisesti käytetyistä WML-elementeistä:
Kategoria WML-elementit
Dekki
ja kortit
wml
card
template
head
access
meta
Tapahtumat
do
ontimer
onenterforward
onenterbackward
onpick
onevent
postfield
Tehtävät
go
prev
refresh
noop
Muuttujat
setvar
Käyttäjän syötteet
input
select
option
optgroup
fieldset
Linkit,
kuvat ja ajastus
a
anchor
img
timer
Tekstin
muotoilu
br
p
table
tr
td
pre
(WAP 1.2 ja 1.3)
WML-elementtejä
käytetään erilaisten kortin komponenttien luontiin. Kortti voi sisältää
esimerkiksi komponentin, joka luo yhteyden kahden dokumentin välille, tai
dokumentin kahden eri osan välille. Tällaista komponenttia kutsutaan linkiksi (link). Tai kortissa voidaan tarvita
esim. komponenttia, joka vain kuittaa tietyn tehtävän suoritetuksi. Tällainen
komponentti on luokkaa tehtävät (task).
Eri
tyyppisiä komponentteja käsittelevät WML-elementit jakautuvat eri
kategorioihin, joista tarkemmin seuraavissa kappaleissa.
Yksityiskohtaisempaa tietoa WML-elementeistä löytyy mm.
WAP Forumin sivuilta osoitteesta
http://www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
Moniin
WML-elementteihin voidaan liittää attribuutteja, joilla määritetään lisäinformaatiota
elementeille. Attribuutit määritetään aina elementin aloitustagissa, käyttäen
seuraavanlaista syntaksia:
<tagi attribuutti1="arvo1"
attribuutti2="arvo2" attribuutti3="arvo3"..>
Jokainen
attribuutti-arvo -pari erotetaan toisistaan tyhjällä välillä, joka voi olla
sisennys, rivinvaihto, tyhjä rivi tai välilyönti. Arvot merkitään aina
lainausmerkkien sisään ("). Attribuuttien nimet on kirjoitettava pienin kirjaimin.
Jotkut
attribuutit ovat pakollisia. Esimerkiksi go elementti vaatii href attribuutin:
<go
href="http://www.jokupalvelin.com"/>
Toiset
attribuutit ovat valinnaisia ja toimivat oletusarvoilla. Esimerkiksi align on valinnainen attribuutti img -elementille. Jos align attribuuttia ei määritetä, sen oletusarvo on bottom.
WML-kommentit
noudattavat XML-kommentoinnin tyyliä ja ovat syntaksiltaan seuraavan esimerkin
kaltaisia:
<!-- kommentti -->
Kommentit
on tarkoitettu koodaajien käyttöön eivätkä näy käyttäjälle selaimessa.
Sisäkkäisiä WML-kommentteja ei voida käyttää.
Parametreja
voidaan asettaa WML-korteille ja dekeille muuttujia käyttäen. Muuttuja
kohdistetaan kortille tai dekille seuraavanlaisilla syntakseilla:
$tunniste
$(tunniste)
$(tunniste:muunnos)
Muuttuja
merkitään sulkuihin, ellei tyhjä tila ilmaise muuttujan päättymistä.
XML
on kirjainherkkä merkintäkieli ja WML on perinyt sen luonteenominaisuudet.
Parseri eli koodin jäsennin ei noudata mitään valintarakennetta jäsentäessään WML-dekkiä.
Tämä tarkoittaa, että kaikki WML-tagit, attributit ja sisältö ovat
kirjainherkkiä. Sama
koskee jopa attribuuttien luetteloarvoja.
Esimerkiksi
seuraavat attribuuttiarvot ovat eri asioita:
·
id="Kortti1"
·
id="kortti1"
·
id="KORTTI1"
Sääntöjen mukainen WML-dekki on myös validi XML-dokumentti.
Niinpä WML-dekin täytyy sisältää XML-deklaraatio ja DTD (Document Type Definition), joka tässä tapauksessa on WAP
1.1:n mukainen:
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
WML-dekki alkaa ja loppuu wml -elementtiin. Kaikki muut elementit sijoittuvat näiden
aloitus- ja lopetustagien väliin:
<wml>
...kaikki muut elementit...
</wml>
Seuraavassa yksinkertainen WML-dekki, joka sisältää yhden
kortin:
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<card id="Eka_Kortti"
title="Eka Kortti">
<p>
Ensimmäinen WML-esimerkki.
</p>
</card>
</wml>
Ja perään selitykset rivi riviltä:
1 Ensimmäinen rivi määrittää XML-version numeron.
2 Toinen rivi on julkinen SGML-dokumenttimääritys.
(Kaikki merkintäkielet -myös XML- pohjautuvat SGML:ään, joka on lyhenne
sanoista Standard Generalized Markup Language.)
3 Kolmas rivi määrittää paikan, josta WML:n dokumenttimääritys
(DTD) löytyy. DTD voi sijaita yleisessä verkossa, kuten tässä esimerkissä, tai
se voidaan myös tallentaa oman koneen levylle, jolloin paikalliseksi
tarkoitettu sovellus toimii nopeammin.
4 Neljäs rivi määrittää WML-dekin alun.
5 Seuraavat rivit määrittävät kortin, joka sisältää aloitus-
ja lopetustagit, kappaleen ja sen sisällä lyhyen tekstin, joka näytetään
käyttäjälle.
6 Viimeinen rivi on dekin alatunniste. Käyttäjän selain
tulkitsee kaiken välillä dekin alku- ja lopputunniste.
Seuraava taulukko esittelee lyhyesti elementit, joita
käytetään määrittämään dekkiin sisältyvät kortit.
Elementti Selitys
wml Määrittää
dekin ja sisältää informaation sekä kortit dekissä.
card Ilmaisee
yleisen layoutin ja käyttäjä-skeeman selaimessa.
template
Ilmaisee
mallin dekin korteille.
head Sisältää koko dekkiä koskevan informaation, mukaan lukien
meta-datan ja elementtien valintaohjauksen.
access Määrittää
valintaohjaus-informaation koko dekille.
meta Sisältää
yleisen dekkiä koskevan meta-informaation.
Kortti on dekin navigoinnin perusyksikkö. Kortista on
mahdollista siirtyä dekin toiseen korttiin tai toiseen dekkiin. Siirryttäessä
toiseen dekkiin näytetään sen ensimmäinen kortti, ellei linkissä ole toisin
määritetty.
Seuraavassa yksinkertainen kortti:
<card
id="kortin_nimi" title="nimi">
<p>
Tekstiä, joka sisältää <i>
viestin </i>.
</p>
</card>
Seuraavassa tuon kortin elementit ja attribuutit.
id="kortin_nimi" Määrittää
nimen, jolla navigoidaan korttiin dekin muista korteista.
title="nimi"
Määrittää
kortin tarkentavan informaation.
<p>
Kappaleen määritys.
<i>
Määrittää tekstin kursiivin
korostuksen.
Seuraavassa lista muista kortin (card) elementeistä.
newcontext="false" Jos tälle
attribuutille annetaan arvo true, selaimen konteksti uudelleenalustetaan saavuttaessa takaisin kortille. Selaimen
kontekstia käytetään mm. käsittelemään parametreja, muuttujia ja navigaatiohistoriaa.
ordered=boolean
Osoittaa
selaimelle, miten kortin sisältö järjestetään.
onenterforward="href"
Jatkaa
osoitteeseen, joka on annettu kohdassa href. Käyttää go komentoa ja
tapahtuu käyttäjän tullessa kortille.
onenterbackward="href"
Palaa
osoitteeseen, joka on annettu kohdassa href.
Käyttää
prev komentoa ja tapahtuu
käyttäjän tullessa kortille.
ontimer="href"
Navigoi
määritetyn ajan kuluttua osoitteeseen, joka on annettu kohdassa href.
xml:lang
Määrittää dokumentin luonnollisen tai formaalin kielen.
id Tarjoaa mahdollisuuden nimetä elementti yksilöidysti dekin
puitteissa.
class Liittää elementin yhteen tai useampaan luokkaan.
Malli-elementti (template) mahdollistaa tiettyjen tehtävä-elementtien (lista alla)
toiminnan, kun mille tahansa dekin kortille saavutaan. Template-elementissä
määritetty tehtävä (task) suoritetaan, ellei tehtävää ole ylikirjoitettu
toisessa tehtävä-elementissä samalla kortilla.
do -elementti kohdistuu siihen wml -elementtiin, missä se on määritetty. Jos se määritetään
dekin template -elementissä,
se koskee koko dekkiä, eli dekin kaikkia kortteja. Jos se määritetään card -elementissä, määritys koskee vain tuota yksittäistä
korttia. Kannattaa huomata, että jos do -elementti esiintyy toisen elementin sisällä,
arvojärjestyksen prioriteetti kohdistuu tuohon suppeampaan sovellusalaan.
Template voi sisältää seuraavat elementit:
·
do
·
onevent
·
onenterforward
·
onenterbackward
·
ontimer
Esimerkissä template ja
do -elementit antavat mahdollisuuden määrittää toimintoja, jotka
toteutetaan aina kortille saavuttaessa, elleivät kortilla määritellyt komennot
ylikirjoita template -elementissä
määriteltyjä toimintoja.
Kun määritetään URL, hyväksytään samalla kaikkien sen
sisältämien muuttujien käyttö. Tämän potentiaallisen turvallisuusriskin
hallitsemiseksi WML tukee saantitoiminnon hallintaa, joka esitetään access elementissä.
access elementtiä voidaan käyttää dekin otsikko-osassa määrittämään
toiminnan hallintaa koko dekille.
Seuraavassa yksinkertainen esimerkki access elementin käytöstä:
<wml>
<head>
<access
domain="verkkotunnus" path="polku"/>
</head>
<card
id="kortti1">
<p>
Kortin sisältö
</p>
</card>
</wml>
Seuraavassa taulukossa kuvaus ylläolevan esimerkin
elementeistä:
<head>
Aloitustagi head elementille,
joka siis voi sisältää sekä access että
meta elementit.
<access>
Aloitustagi access elementille.
domain=”verkkotunnus” Dekin
domain ja path attribuutit määrittävät
path=”polku” muut
dekit, jotka voivat käyttää sitä.
Esimerkiksi voitaisiin antaa seuraavat toiminnan hallinnan
attribuutit:
domain="askolaurila.fi"
path="/wap"
Seuraavien dekkien siis sallittaisiin käyttää dekkiä:
askolaurila.fi/wap/uutuudet.cgi
www.askolaurila.fi/wap/vanhat/tarjoukset.cgi
Mutta seuraaville dekeille ei käyttölupaa tähän dekkiin
heruisi:
www.testi.net/kirjat
www.askolaurila.fi/intranet/oma.wml
Oletusarvoiset toiminnan hallinnan asetukset sallivat minkä
tahansa URL:n käytön saman verkkotunnuksen piirissä. WAP-selain käyttää
verkkotunnus- ja polku-attribuutteja päättämään, mitkä URL:t voivat käyttää
dekkiä.
Seuraava taulukko listaa ne elementit ja vastaavat toiminnan
hallinnan asetukset kohde-dekissä, jotka sallivat navigoinnin dekkien välillä.
Elementit Käytön
vaatimukset
prev Ei
mitään.
go href="osoite" Dekkiin tietyssä
osoitteessa täytyy määrittää domain ja/tai
path -attribuutti, joka vastaa pyynnön lähettävän dekin URL:ää.
Toinen yksinkertainen esimerkki access elementin
käytöstä:
Seuraavassa pikku esimerkissä access elementtiä sovelletaan rajoittamaan dekin käyttöä. Vain
dekit verkko-osoitteessa “munfirma.fi/WML”
saavat käyttää dekkiä.
<head>
<!-- HUOM: Verkko-osoite ja polku
täytyy tietenkin muuttaa sen mukaan, -->
<!-- mihin kyseiset WML dekit
on tallennettu -->
<access
domain="munfirma.fi"
path="/WML"/>
</head>
Seuraavat WML-elementit ja attribuutit auttavat pienentämään
tietoturvariskejä, kun tehdään WML-palveluita.
Elementti Attribuutti Kuvaus
access domain Sallii
määrätyn dekin käytön. Dekin domain ja path
path -attribuutit määrittävät ne muut dekit, jotka voivat käyttää dekkiä.
go sendreferer Määrittää, pitäisikö selaimen
lähettää dekin URL
sivupyynnön yhteydessä. Asetus sendreferer="true"
määrittää laitteen lähettämään
dekin URL:n HTTP_REFERER
-pyynnön otsikko-osassa.
Koko palvelun kaikkia kortti-elementtejä ei tarvitse yrittää
mahduttaa yhteen dekkiin. Itse asiassa on suositeltavaa rajoittaa dekkien
kokoa, koska eri laitteilla on erilaiset muistikapasiteetit. Mobiililaitteiden
muistirajoitukset kannattaa selvittää ennen sovelluksen suunnittelua ja sovittaa
kunkin WML-dekin korttien enimmäismäärä sen mukaan, millaisille laitteille
palvelu on tarkoitus rakentaa.
Kannattaa myös muistaa, että jos kortti sisältää enemmän
rivejä kuin laitteen selain pystyy kerralla esittämään, käyttäjä joutuu
vierittämään näyttöä. Siksi on suositeltavaa jakaa informaatio useammalle
kortille, jotta käyttäjän on helppo navigoida palvelun sivuilla.
Seuraava esimerkki esittelee
dekin sisällön jakamista useammalle kortille. Dekki2a.wml
käyttää myös template
-elementtiä määrittämään
paluunavigointia, joka koskee dekin kaikkia kortteja. Tämä template
-elementti antaa mahdollisuuden
määrittää toimintoja, jotka toteutetaan aina kortille saavuttaessa, elleivät
kortilla määritellyt komennot ylikirjoita template -elementissä määriteltyjä toimintoja.
Esimerkki: dekki2a.wml
Kortissa 1 (card1) template-tehtävä
ylikirjoitetaan ei-operaatio toiminnolla. Kolmas kortti sisältää go tehtävän, joka määrittää kuvitteellisen dekki2b.wml
URL:n. Kun käyttäjä aktivoi go tehtävän, selain navigoi kyseiseen dekkiin ja näyttää sen
sisällön.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<template>
<do
type="prev" name="Edellinen" label="Takaisin">
<prev/>
</do>
</template>
<card
id="card1" title="Eka kortti"
newcontext="true">
<p>
Kortti 1 ... <br/>
<do
type="accept" label="Seuraava kortti">
<go
href="#card2"/>
</do>
<!-- Täytyy ylikirjoittaa DO/PREV
templatessa (noop), jotta estetään PREV-elementtiä navigoimasta takaisin
edelliseen dekkiin -->
<do
type="prev" name="Edellinen">
<noop/>
</do>
</p>
</card>
<card
id="card2" title="Toka kortti">
<p>
Kortti 2 ... <br/>
<do
type="accept" label="Seuraava kortti">
<go
href="#card3"/>
</do>
</p>
</card>
<card
id="card3" title="Kolmas kortti">
<p>
Kortti 3 ... <br/>
<!-- HUOM: seuraava
DO-elementti ohjaa uuteen dekkiin.
Tämän dekin nimi on upotettu
URL:ään.-->
<do
type="accept" label="Seuraava dekki">
<go
href="deck2b.wml"/>
</do>
</p>
</card>
</wml>
Joitakin WML elementtejä voidaan muodostaa
reaaliaikaisesti vuorovaikutuksessa
käyttäjän kanssa. Nämä vuorovaikutteiset tapahtumat ilmenevät selaimen tilan muutoksina.
WML määrittää muutaman reaaliaikaisen tapahtuman. Seuraavassa taulukossa lyhyt kuvaus näistä elementeistä.
Elementti
Kuvaus
do Tarjoaa yleisen mekanismin korttikohtaisen toiminnon
suorittamiseen.
ontimer Määrittää
reaaliaikaisen tapahtuman, joka suoritetaan, kun määritetty aika on kulunut.
onenterforward
Määrittää
reaaliaikaisen tapahtuman, joka suoritetaan, kun käyttäjä saapuu kortille
tietyissä tilanteissa.
onenterbackward
Määrittää
reaaliaikaisen tapahtuman, joka suoritetaan, kun
käyttäjä
navigoi kortille käyttäen sivuhistorian URI:a.
onpick Määrittää
reaaliaikaisen tapahtuman, joka suoritetaan, kun
käyttäjä
valitsee tai poistaa valinnan vaihtoehdosta, jolle on määritetty tapahtuma.
onevent Sitoo
tehtävän yksittäiseen reaaliaikaiseen tapahtumaan.
postfield
Määrittää
kentän nimen ja arvon lähetettäväksi alkuperäiselle palvelimelle URI -pyynnön
aikana.
Elementti card voi
sisältää do -elementtejä, jotka
sijoittavat tehtäviä tietyille avaintiedoille. Seuraavassa yksinkertainen
esimerkki do -elementistä:
<do
type="duunityyppi" label="otsake" name="nimi"
optional="false">
Entiteetti Kuvaus
<do> Aloitustagi do -elementille. Do -elementit voi sijoittaan card ja template -elementteihin.
Vain yksi tehtävä voidaan määrittää yhdelle do -elementille.
type="duunityyppi"
Määrittää suoritettavan tehtävän
tyypin. Esimerkiksi accept navigoi
seuraavalle kortille, ja prev palaa
edelliselle kortille. Attribuutti type on pakollinen.
label="otsake" Määrittää
selaimen pikalinkin otsikon.
name="nimi"
Määrittää kyseiseen do -tehtävään sidotun nimen.
optional="false" Jos
tälle attribuutille annetaan arvo true, selain voi ohittaa elementin.
Elementti timer asettaa
kortilla esiintyvän ajastuksen, joka käynnistyy kortille saavuttaessa ja
pysähtyy kortilta poistuttaessa. Tätä ajastinta voidaan käyttää prosessoimaan
pysähdys- tai odotusaikaa. Ajastimen arvo pienenee alkuarvosta ja laukaisee ontimer -tapahtuman, kun ajastin saavottaa arvon nolla. WML
syntaksin mukaisesti yhdelle kortille mahtuu vain yksi ajastus.
Aika-arvo määritetään sekunnin
kymmenesosina (1/10).
Komponentti Kuvaus
<timer>
Aloitustagi
timer -elementille.
name="nimi"
Määrittää
muuttujan nimen, joka annetaan ajastimen arvon lisäksi.
value="50" Määrittää kulutettavan ajan kymmenesosasekunteina. Tämä
attribuutti on pakollinen.
timer -elementtiä käytetään sidoksissa ontimer -entiteettiin, joka määritetään card -elementissä muodossa ontimer="/next". Entiteetti ontimer määrittää
URL:n, josta haku suoritetaan ajan päätyttyä.
Seuraavassa yksinkertainen esimerkki timer -elementin käytöstä:
<card
id="kortinnimi" ontimer="/seuraava">
<timer
name="avain" value="50"/>
<p>
Moi
maailma!
</p>
</card>
Joka kerta kun ylläolevan esimerkin kortille saavutaan,
ajastin asetetaan arvoon, joka on määritetty value -attribuutissa. Teksti “Moi maailma!” näytetään viiden
sekunnin ajan, jonka jälkeen selain menee osoitteeseen URL/seuraava.
Entiteetti ontimer voidaan määrittää joko kortissa tai
template-elementissä.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.2//EN"
"http://www.wapforum.org/DTD/wml12.dtd">
<wml>
<card id="kortti1"
ontimer="#kortti2" title="Eka kortti">
<timer value="20"/>
<p
align="center">
<br/> <br/>
<big>
Moi
maailma ...
</big>
</p>
</card>
<card id="kortti2"
ontimer="#kortti3" title="Toka kortti">
<timer value="50"/>
<p
align="center">
<br/>
<br/>
<b>
Toka maailma <br/>
</b>
<u>
ja kortti
</u>
...
</p>
</card>
<card
id="kortti3" title="Kolmas kortti">
<p align="center">
<br/>
<br/> <br/>
<big>
<i>
Ja kolmas!
</i>
</big>
</p>
</card>
</wml>
Tapahtuma onenterforward toteutuu,
kun käyttäjä navigoi kortille käyttäen go tehtävää tai muuta identtistä metodia.
Entiteetti onenterforward voidaan
määrittää card tai template
-elementeissä.
Tapahtuma onenterbackward toteutuu,
kun käyttäjä navigoi kortille käyttäen prev -tehtävää tai muuta identtistä metodia. Toisin sanoen onenterbackward
-tapahtuma toteutuu, kun käyttäjä
palaa kortille sivuhistorian sisältämän URL:n kautta.
Entiteetti onenterbackward voidaan
määrittää card tai template
-elementeissä.
Yksi options -elementin
attribuuteista on onpick, jonka muoto
on onpick="/url".
Monivalintalistassa, kun käyttäjä valitsee tai poistaa
valinnan vaihtoehdosta, jossa on onpick -attribuutti, selain navigoi URL:ään, joka on määritetty onpick -attribuutissa.
Elementti onevent sitoo
tehtävän yhteen kolmesta edellä läpikäydystä reaalitapahtumasta --ontimer, onenterforward,
tai onenterbackward-- käyttäen
muotoa <onevent type="reaalitapahtuma">.
Käyttäen onevent-elementtiä päästään parempaan selaimen
ominaisuuksien hallintaan. Elementti onevent toteutetaan emo-elementtinsä sisällä, määrittämällä
tapahtuma, joka on sidottu erityiseen reaaliaikaiseen tapahtumaan. Esimerkkinä
seuraavanlainen WML-koodinpätkä:
<card>
<onevent
type="onenterforward">
<go
href="/url"/>
</onevent>
<p>
Moi!
</p>
</card>
Ylläoleva koodi vastaa seuraavaa:
<card
onenterforward="/url"> Moi! </card>
do -elementillä voidaan määrittää tehtäviä, jotka selain
toteuttaa, kun käyttäjä painaa näppäintä tai navigoi kortille tai dekille.
WML:n tehtävät go, prev,
noop ja refresh on kuvattu seuraavassa taulukossa.
Tehtävä Kuvaus
go Ilmaisee
navigoinnin osoitteeseen, joka on määritetty attribuutissa href. Jos href nimeää WML-kortin tai -dekin, se näytetään.
prev Ilmaisee
navigoinnin edelliseen URI:in sivuhistoriassa.
refresh Ilmaisee
selaimen kontekstin päivitystä, ja määritetään setvar -tagissa.
noop Ilmaisee,
että ei tehdä mitään.
Elementti go ohjaa selaimen
osoitteeseen, joka on määritetty attribuutissa href. Jos href nimeää
WML-kortin tai -dekin, se näytetään.
Seuraava yksinkertainen esimerkki käyttää go -elementtiä.
<go
href="#kortti2"/>
Ylläolevan esimerkin selvitys:
<go> Aloitustagi go -elementille,
ilmaisee navigoinnin URI:iin, joka määritetään attribuutissa href.
href="URI" Määrittää kohdeosoitteen, esimerkiksi esitettävän kortin.
Tämä attribuutti on pakollinen. Seuraava taulukko
listaa muut go -elementin
attribuutit.
sendreferer=boolean Jos arvoksi asetetaan true, selaimelle täytyy palvelimen
toiminnan helpottamiseksi määrittää URI, josta tämän tehtävän sisältävä dekki
löytyy.
method="post|get" Määrittää HTTP
-lähetysmetodin. Arvot get ja
post ovat sallittuja
kumpikin erikseen.
enctype="ContentType" Kun metodina on post,
sisällön koodaustyyppinä on käytettävä muotoa: application/x-wwwform-urlencoded
(oletusarvo) tai multipart/form-data
(vain WAP 1.2:ssa). Kun metodina
on get, vain sisällön koodaustyyppi application/x-www-formurlencoded
on sallittu.
accept-charset="chset" Määrittää merkkien
koodaustavan datalle, jota web-palvelin voi käyttää käsitelläkseen syötteet.
Oletusarvo on unknown. Selain käyttää merkkien koodaustapaa, joka
on asetettu tämän attribuutin sisältävälle WML-dekille.
id Antaa mahdollisuuden nimetä elementin uniikilla nimellä
tietyssä dekissä.
class Liittää elementin yhteen tai useampaan luokkaan.
Elementti prev selvittää
tehtävän, joka ilmaisee siirtymistä sivuhistorian edelliseen URI:in. Elementti
suorittaa pistäytymisen sivuhistoriaan.
Seuraavassa prev -elementin
attribuutit.
id Antaa
mahdollisuuden nimetä elementin uniikilla nimellä tietyssä dekissä.
class Liittää
elementin yhteen tai useampaan luokkaan.
Elementti refresh selvittää
refresh -tehtävän, joka
ilmaisee selaimen kontekstin päivitystä ja määritetään setvar -tagissa. Käyttäjälle näkyvä sivun tilan muutos (esimerkiksi
näytön vaihtuminen) tapahtuu refresh -tehtävän
suorituksen aikana.
Elementti noop määrittää,
että mitään ei tehdä, eli “no operation”. Tämä elementti on käyttökelpoinen,
kun halutaan esimerkiksi ylikirjoittaa jokin template -toiminto.
Kaikelle WML-sisällölle voidaan asettaa parametreja. Tämä tuo
joustavuutta korttien dynaamiseen luontiin, sisällön esityksen muutoksiin ja
käyttäjän syötteisiin perustuvaan navigointiin. WML-muuttujia voidaan käyttää
merkkijonojen sijasta; annettu arvo voidaan korvata ajonaikaisesti.
Muuttujilla voidaan luoda dynaamisia dekkejä ja kortteja
käyttäjän syötteiden mukaan.
Muuttuja määritetään käyttäen setvar -elementtiä.
WML-muuttujien nimet muodostetaan US-ASCII -kirjaimista,
alaviivasta ja nollasta tai useammasta kirjaimesta, yksinumeroisesta luvusta
tai alaviivasta. Muut merkit ovat kiellettyjä. Muuttujien nimet ovat myös
kirjainherkkiä. Kaarisulkeet vaaditaan kaikkialla, missä muuttujan nimen
päättymistä ei voida nähdä ympäröivästä yhteydestä, esimerkiksi jos muuttuja päättyy kiellettyyn merkkiin, kuten
välilyöntiin. Seuraavassa esimerkinomaisia, sallittuja muuttujia:
Yksi $muuttuja
Toinen $(muuttuja)
Kolmas an
escaped $(var:e)
Long form
of escaped $(var:escape)
Long form
of unescape $(var:unesc)
Lyhyt
muoto of no-escape $(var:N)
Muita luvallisia muuttujan
muotoja: $_X $X32 $Test_9A
Jäsennyssääntöjen mukaan dollari-merkki, jos sitä halutaan
käyttää muuttujassa, täytyy koodata entiteettinä.
Itse asiassa jos halutaan käyttää $ -merkkiä WML-dekissä, se
täytyy nimenomaan merkitä kiertoilmaisulla käyttäen seuraavaa syntaksia: $$
Kaksi peräkkäistä dollari-merkkiä korvataan selaimessa $
-merkillä. Esimerkiksi:
Tämä on $$ -merkki
näkyisi selaimessa:
Tämä on $ -merkki
Käytettäessä $ -merkkiä URL-osoitteen merkkijonossa se tulisi
kirjoittaa muodossa %23.
Koska muuttujien nimet ovat kirjainherkkiä, esimerkiksi muuttuja1, Muuttuja1 ja
muuTTUja1 ovat kaikki
eri muuttujia.
On monia tapoja asettaa muuttujille arvoja.
·
setvar -elementti,
joka voidaan määritellä seuraavissa tehtävä-elementeissä:
- go
- prev
- refresh
·
input -elementti,
joka asettaa muuttujaksi (määritetään name -attribuutissa) minkä tahansa käyttäjän syötteen.
·
select -elementti,
joka asettaa muuttujaksi (määritetään value -attribuutissa) minkä tahansa käyttäjän valinnan.
Käyttäjän syöte kirjoitetaan muuttujaksi, kun käyttäjä antaa
hyväksyttävän syötteen input tai
select -elementissä.
Muuttujia asetettaessa kannattaa muistaa myös:
-
WML:ssä asetettujen muuttujien
arvoja voidaan muuttaa käyttäen WMLScriptiä, ja päinvastoin, eli WML ja
WMLScript voivat käyttää samoja muuttujia.
- Kaikkien muuttujien arvot voidaan tyhjentää selaimen
kontekstista newcontext -attribuuttia käyttäen.
Muuttujien arvot voidaan korvata WML-elementeissä
muotoillulla tekstillä, valintavaihtoehdoilla ja URL-attribuuteilla. Kuitenkin
vain teksti-informaatio voidaan korvata, eli elementtejä tai attribuutteja ei
voida korvata. Muuttujien arvojen korvaaminen tapahtuu ajonaikaisesti
selaimessa. Koska korvaustoiminto on täydellisesti merkkipohjaista, se ei muuta
muuttujalle annettua arvoa.
Seuraava esimerkki kuvaa tehtävien ja muuttujien käyttöä
WML-dekeissä ja -korteissa. Kannattaa huomata, että muuttujia ei aseteta, ennen
kuin käyttäjä navigoi dekin toiseen korttiin.
<?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="kortti1"
title="Eka kortti" newcontext="true">
<p>
Kortti 1:n sisältö... <br/>
<!-- Seuraavia muuttujia ei
määritetä, ennen kuin
saavutaan dekin toiselle kortille.
-->
kortti1 var1
= $(kortti1_var1) <br/>
kortti2 var1
= $(kortti2_var1) <br/>
</p>
<do
type="accept" label="Kortti 2 ->">
<go href="#kortti2">
<setvar
name="kortti1_var1" value="arvo_1"/>
</go>
</do>
</card>
<card id="kortti2"
title="Toka kortti">
<onevent
type="onenterforward">
<refresh>
<setvar
name="kortti2_var1" value="arvo_2"/>
</refresh>
</onevent>
<p>
Kortti 2:n sisältö... <br/>
kortti1 var1
= $(kortti1_var1) <br/>
kortti2 var1
= $(kortti2_var1) <br/>
</p>
<do
type="prev" label="Paluu">
<prev/>
</do>
</card>
</wml>
Kun saavutaan dekin ensimmäiselle kortille, näytetään kuvan
vasemmanpuoleinen käyttöliittymä: muuttujia ei ole vielä asetettu.
Kun painetaan Options
ja navigoidaan toiselle kortille, muuttuja kortti1_var1 asetetaan.
Saavuttaessa toiselle kortille muuttuja kortti2_var1
asetetaan ja selaimen konteksti
päivitetään.
Käyttäjän syötteille tarkoitetut elementit tarjoavat
mekanismin poimia tietoja käyttäjältä. Seuraava taulukko listaa tällaisia
elementtejä.
Elementti Kuvaus
input Määrittää
tekstinsyöttöobjektin.
select Sallii
käyttäjän valita listasta vaihtoehtoja. WML tukee sekä yksivalinta- että
monivalintalistoja.
option Määrittää
yksivalintavaihtoehdon select -elementissä.
optgroup
Sallii
ryhmän muodostuksen option -elementeistä
samassa hierarkiassa, jolla saadaan sivulle selkeä layout.
fieldset
Sallii
saman asiayhteyden kenttien ja tekstien ryhmityksen.
Toisin kuin HTML:ssä, missä käyttäjä syöttää tiedot kenttiin
ja klikkaa lopuksi Submit-painiketta syötteiden lähettämiseksi palvelimelle,
WML:ssä ei ole erityistä Submit-painiketta tietojen lähetykseen. WML:ssä
syötteet lähetetään palvelimelle, kun käyttäjä valitsee <do> -elementtiin
yhdistetyn pikalinkin otsikon.
Elementti input määrittää
tekstinsyöttöobjektin. Kentälle voidaan asettaa tietty vaatimus, mitä muotoa
syötettävän merkkijonon on oltava. Samoin kenttään voidaan asettaa haluttu
oletusteksti.
Seuraavassa yksinkertainen esimerkki, joka käyttää input -elementtiä:
<card>
Syote: <input name="muuttujanimi"
default="oletus"
format="muoto"
emptyok="boolean" size="syotteen_koko"
maxlength="max_char"/>
</card>
Seuraavassa lista ylläolevassa esimerkissä käytetyistä input -attribuuteista.
name="muuttujanimi"
Muuttujan
nimi, joka saadaan käyttäjän tekstisyötteen tuloksena. Tämä attribuutti on
pakollinen.
default="oletus" Määrittää
oletustekstin, joka näkyy tekstinsyöttökentässä.
format="muoto" Määrittää
syöttömaskin käyttäjän syötteille. Oletusmuoto sallii kaikkien merkkien syötön.
emptyok="boolean"
Jos
emptyok asetetaan arvoon true, käyttäjän syötettä ei vaadita; jos false (oletus),
käyttäjän tekstisyöte vaaditaan.
size="syotteen_koko" Määrittää
tekstinsyöttökentän leveyden, eli sallitun merkkimäärän.
maxlength="max_char" Määrittää
maksimimäärän merkkejä lukuna, jonka määrän käyttäjä voi syöttää merkkejä
tekstikenttään. Oletusarvo on rajoittamaton.
Seuraavassa taulukossa lista muista input -elementin attribuuteista.
tabindex="numero"
Määrittää
syöttökentän tabulaattorijärjestyksen. Ilmaisee suhteellista järjestystä, missä
järjestyksessä WML kortin elementit
käydään läpi käyttäjän painellessa tabulaattoria.
value="arvo"
Määrittää
muuttujan arvon, joka annetaan name -attribuutissa.
Attribuuttien default ja value käyttäytyminen ja syntaksi ovat identtisiä.
type="input_tyyppi"
Määrittää
tekstinsyöttöalueen tyypin. Sallittuja arvoja ovat text ja password.
Tyypissä text syöte
näytetään käyttäjälle
luettavassa muodossa. Tyypissä password jokainen
syötetty merkki näytetään salatussa muodossa. Oletustyyppi
on text. On syytä muistaa, että password
-syöte ei ole tietoturvan
kannalta turvallinen;
kriittisiä
sovelluksia ei pitäisi rakentaa sen varaan.
title="otsikko"
Määrittää
input -elementin otsikon.
Otsikkoa voidaan käyttää tämän objektin esittelynä.
accesskey="painike"
Osoittaa
toimintonäppäimen (puhelimissa käytetään tyypillisesti merkkejä
"0"-"9" tai "*" tai "#")
syöte-elementille. Sallii
käyttäjän aktivoida tietyn elementin yhdellä näppäinpainalluksella.
xml:lang
Määrittää luonnollisen tai formaalin kielen, jolla
dokumentti on koodattu.
id Tarjoaa mahdollisuuden nimetä elementti ainutkertaisella
nimellä dekin puitteissa.
class Liittää
elementin yhteen tai useampaan luokkaan.
Seuraava dekki määrittää kortin, joka pyytää käyttäjän
syöttämään nimen, ja toisen kortin, joka näyttää syötetyn nimen.
<?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="Kortti_1"
title="Kortti 1">
<do
type="accept">
<go
href="#Kortti_2"/>
</do>
<p>
Anna nimesi: <input
name="nimi"/>
</p>
</card>
<card id="Kortti_2"
title="Kortti 2">
<p>
Moi, $(nimi)!
</p>
</card>
</wml>
Dekin toiminta:
1. Kun käyttäjä tulee kortille, käyttöliittymä pyytää nimeä.
Painamalla Options saa esiin
valinnat. Painamalla Select tullaan
nimen syöttöön.
2. Nimen syöttökortilla kirjoitetaan nimi puhelinsimulaattorin
näppäimillä, ja painetaan OK.
3. Ensimmäinen kortti näytetään uudestaan ja kentässä on
syötetty nimi. Painamalla OK siirrytään
dekin toiselle kortille.
Attribuutti name määrittää
muuttujan nimen, mihin puhelin tallettaa tekstin, jonka käyttäjä syöttää
tekstikenttään. Jotta muuttujan arvo korvautuisi käytönaikaisesti, muuttujan
nimen eteen on kirjoitettava dollarimerkki ($),
kuten esimerkissämme: $(nimi).
Valintalista määrittää listan mahdollisuuksia, joista käyttäjä
voi valita. WML tukee sekä yksivalinta- että monivalintalistoja.
Seuraavassa yksinkertainen esimerkki select -elementin käytöstä:
<card
id="kortti1" title="Valuutta"
newcontext="true">
<p>
Summa:
<input format="*N" name="summa"
title="Summa:"/>
<select
name="mista" value="EUR" title="Rahayks:">
<option
value="SKR">Ruotsin kruunu</option>
<option
value="NKR">Norjan kruunu</option>
<option
value="USD">US Dollari</option>
<option
value="EUR">Euro</option>
</select>
<select
name="mihin" value="USD" title="Kohde:">
<option
value="SKR">Ruotsin kruunu</option>
<option
value="NKR">Norjan kruunu</option>
<option
value="USD">US Dollari</option>
<option
value="EUR">Euro</option>
</select>
<br/>=
<u>$(muunto)</u>
<do
type="accept" label="Laske">
<go href="valuutta.wmls#muunto('muunto',
'$(mista)','$(mihin)',$(summa))"/>
</do>
<do
type="help" label="Ohje">
<go
href="#kortti1_ohje"/>
</do>
</p>
</card>
Seuraavassa taulukossa
select -elementin
attribuutit:
multiple="boolean" Jos asetetaan arvolle
TRUE, käyttäjälle sallitaan useampi valinta; jos FALSE, vain yksi valinta on
sallittu. Oletusarvo on FALSE.
name="muuttujanimi"
Muuttujan
nimi, jolle varataan valitun vaihtoehdon arvo.
default="oletus"
Oletusarvo
muuttujalle, joka määritetään name attribuutilla.
Jos muuttuja jo sisältää arvon, name attribuutti ohitetaan.
title="otsikko"
Otsikko
select -elementille.
Käytetään kuvaamaan tätä objektia.
iname="indeksi" Muuttujalle
annettava indeksi. Numero 1 on ensimmäinen vaihtoehto, numero 2 toinen, jne.
Numero 0 ilmaisee, että mitään
option -arvoa ei ole
annettu.
tabindex="numero"
Määrittää
syöttökentän tabulaattorijärjestyksen. Ilmaisee suhteellista järjestystä, missä
WML kortin elementit käydään
läpi käyttäjän painellessa tabulaattoria.
xml:lang
Määrittää luonnollisen tai formaalin kielen, jolla
dokumentti on koodattu.
id Tarjoaa mahdollisuuden nimetä elementti ainutkertaisella
nimellä dekin puitteissa.
class Liittää
elementin yhteen tai useampaan luokkaan.
Seuraava esimerkki kuvaa yksinkertaista yksivalintalistaa
oletusarvolla. Huom:
- Vaihtoehto “koira” on esivalittuna, ellei muuttuja “I” ole
valmiiksi asetettu.
-
Jos käyttäjä valitsisi vaihtoehdon
“marsu” , muuttujalle “I” annettaisiin arvo “2”.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card>
<p>
Valitse suosikkieläimesi:
<select
iname="I" ivalue="1">
<option
value="K">Koira</option>
<option
value="M">Marsu</option>
</select>
</p>
</card>
</wml>
Seuraavassa esimerkki monivalintalistasta. Huom:
- Valinnat “koira” ja “marsu” ovat esivalittuna, ellei muuttuja
“I” ole valmiiksi asetettu.
- Jos käyttäjä valitsisi vaihtoehdot “marsu” ja “hevonen” ,
muuttujalle “X” annettaisiin arvot “M;H” ja muuttujalle “I” annettaisiin arvot
“2;3”.
<?xml
version="1.0"?>
<!DOCTYPE wml PUBLIC
"-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card>
<p>
Valitse <i>kaikki</i>
suosikkieläimesi:
<select
name="X" iname="I" ivalue="1;2"
multiple="true">
<option
value="K">Koira</option>
<option
value="M">Marsu</option>
<option
value="H">Hevonen</option>
</select>
</p>
</card>
</wml>
Attribuutti format sallii
käyttäjän syöttämien merkkien tyypin ja käyttötavan määrityksen. Seuraavien
merkkiyhdistelmien käyttö on mahdollista:
Merkki Kuvaus
A Sallii
kaikkien isojen kirjainmerkkien ja välimerkkien käytön.
a Sallii
kaikkien pienten kirjainmerkkien ja välimerkkien käytön.
N Sallii
kaikkien numeeristen merkkien käytön.
X Sallii
kaikkien isojen merkkien käytön.
x Sallii
kaikkien pienten merkkien käytön.
M Sallii kaikkien merkkien käytön. Selain voi olettaa
yksittäisen datasyötteen isoksi merkiksi, mutta sallii kaikkien merkkien
käytön. Tämä on oletusmuoto.
m Sallii
kaikkien merkkien käytön. Selain voi olettaa yksittäisen datasyötteen pieneksi
merkiksi, mutta sallii kaikkien merkkien käytön.
*f Sallii minkä tahansa määrän merkkejä; f on yksi ylläolevista muodoista ja määrittää, millaisia
merkkejä voidaan syöttää. Tämä muoto voidaan määrittää vain kerran ja täytyy
esiintyä viimeisenä muotoilumerkeistä.
nf
Sallii
n määrän merkkejä,
missä n on numero 1
... 9; f on yksi
ylläolevista muodoista ja määrittää, millaisia merkkejä voidaan syöttää. Tämä
muoto voidaan määrittää vain kerran ja täytyy esiintyä viimeisenä
muotoilumerkeistä.
\c Näyttää seuraavan merkin, c, syöttökentässä. Sallii muotoilumerkkien lainaamisen, joten
ne voidaan esittää syöttöalueella.
Jos esimerkiksi käytetään muotoilumääritystä \(3N\), se ohjaa selainta lisäämään automaattisesti vasemman
kaarisulkeen ennen kuin käyttäjä on syöttänyt mitään, ja oikean kaarisulkeen
käyttäjän syötettyä kolme numerolukua.
Seuraavan esimerkin kortti pyytää käyttäjältä etunimeä, sukunimeä
ja ikää. Ikä -kenttään käyttäjä voi syöttää kaksinumeroisen luvun.
<card>
<p>
Etunimi:
<input type="TEXT" name="eka"/><br/>
Sukunimi: <input
type="TEXT" name="suku"/><br/>
Ikä:
<input type="TEXT" key="ika" format="NN"/>
</p>
</card>
Elementit anchor ja
a määrittävät linkin
otsikon. Linkin sidos määritetään osaksi toista elementtiä, esimerkiksi nimi
-attribuutilla. Sisäkkäiset linkit ovat WML syntaksin mukaan virheellisiä.
Tekstiä voidaan linkittää missä tahansa, paitsi option -elementeissä.
Linkki täytyy yhdistää johonkin tehtävään, joka suoritetaan,
kun linkki valitaan. Yksi seuraavista tehtäväelementeistä on yhdistettävä
linkkiin:
·
go
·
prev
·
refresh
WML syntaksin mukaan on virhe määrittää enemmän kuin yksi
tehtävä anchor tai a -elementtiin.
Elementti a on lyhyt muoto
anchor -elementistä ja on
sidottu go -tehtävään
ilman muuttujia. Esimerkiksi seuraava merkintä
<anchor>seuraa minua
<go
href="harhaan.wml" />
</anchor>
on semanttisesti sama kuin
<a
href="harhaan.wml">seuraa minua</a>
Seuraavassa yksinkertainen anchor -elementtiä käyttävä esimerkki:
<card id="nimi"
title="otsikko">
<p>
Normaalia tekstiä ja
<anchor
title="linkki_otsikko" accesskey="#">linkki!
<go
href="urli.wml"/>
</anchor>
</p>
</card>
Seuraavassa selitykset anchor -elementin sisällä käytetyille elementeille ylläolevassa
esimerkissä (elementissä anchor voidaan
määrittää myös xml:lang -attribuutti):
<go>
Määrittää linkkiin sidotun tehtävän.
title="linkki_otsikko" Määrittää linnkkiä
kuvaavan tekstin. Hyvän toimivuuden varmistamiseksi erilaisissa selaimissa itse
otsikko kannattaa rajoittaa korkeintaan 6 merkkiin.
accesskey="#" Ilmaisee toimintonäppäimen "#" linkille, joka on määritetty href -attribuutissa, ja sallii näin käyttäjän aktivoida linkin
painamalla "#" -näppäintä.
Seuraava WML dekki sisältää linkin tiedostoon file.wml. Kun käyttäjä aktivoi linkin, selain navigoi kohteeseen file.wml
ja asettaa määritetyt muuttujat.
<!DOCTYPE wml PUBLIC
"-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card
id="linkit" title="Linkit">
<p>
Tämä on normaalia tekstiä, mutta
tässä on
<anchor
title="LINKKI"> Linkki!
<go
href="dir/file.wml">
<setvar
name="var_nimi" value="var_arvo"/>
</go>
</anchor>
</p>
</card>
</wml>
Elementti img ilmaisee,
että kuva on tarkoitus sisällyttää tekstin lomaan. Seuraavassa yksinkertainen
esimerkki img -elementistä.
<card id="kortin_nimi"
title="otsikko">
<p>
Tämä tekstivirta esittää
<img alt="Koivun kuva ei
saatavilla"
src="http://koivu.com/kuva.wbmp” />
jonka piirsin itse.
</p>
</card>
Seuraavassa kuvaus attribuuteista, joita käytettiin
esimerkin img -elementissä.
alt Määrittää
tekstin, jonka selain esittää ellei kuva ole käytettävissä.
src Määrittää
esitettävän kuvan URI:n.
Seuraavassa taulukko muista img -elementin attribuuteista.
localsrc=filename Määrittää vaihtoehtoisen sisäisen esiintymän kuvalle. Jos
tällainen kuva on olemassa, sitä käytetään src -elementissä määritetyn kuvan sijasta.
hspace=length Määrittää tyhjän tilan kuvan vasemmalla ja oikealla (hspace) sekä vspace=length ylä- ja alapuolella (vspace) . Oletusarvo on 0. Arvo length
voidaan ilmaista myös prosentteina käytettävästä tilasta.
Align=(top
| Määrittää
kuvan paikoituksen suhteessa tekstiin. Top tarkoittaa,
middle | bottom) että kuvan yläreuna paikantuu
tekstirivin yläreunan tasolle; middle kohdistaa kuvan keskikohdan tekstilinjan
keskikohtaan;
ja bottom paikoittaa kuvan alareunan
tekstirivin alareunan tasolle.
height=length Nämä attribuutit tarjoavat vihjeen selaimelle (joka voi olla
width=length piittaamatta
vihjeistä) latautuvan kuvan koosta, jotta selain voisi ennakoida tarvittavan välin
prosessoidessaan latautuvaa tekstiä.
xml:lang Näitä
kolmea attribuuttia (joiden merkitys on jo kuvattu muissa
id yhteyksissä) voidaan myös käyttää img -elementissä.
class
Muotoilutagit määrittävät tekstin korostusmerkintöjen
informaation. Korostukseen käytettävät tagit kuvataan seuraavassa taulukossa.
em Toistuu
korostettuna.
strong Toistuu
vahvasti korostettuna.
i Toistuu
kursivoidulla (italic) fontilla.
b Toistuu
lihavoidulla (bold) fontilla.
u Toistuu
alleviivatulla (underlined) fontilla.
big Toistuu
suurella fontilla.
small Toistuu
pienellä fontilla.
Muotoiluja strong ja
em voidaan käyttää missä
tahansa. Tagien b, i ja u käyttöä ei suositella,
ellei täsmälleen niiden mukainen tekstin muotoilu ole pakollista.
Tekstin aloittamiseksi uudelta riviltä riittää tagi <br/>
kohtaan, josta uuden rivin
halutaan alkavan. Kannattaa muistaa, että esimerkiksi enterin painamisella tai
editorin marginaalimerkillä ei ole vaikutusta, WML-kääntäjä tulkitsee ne
tyhjiksi väleiksi.
Elementillä p asetetaan sekä
rivitys että linjaus tekstikappaleessa. WML tuntee kaksi rivitysmuotoa
visuaalisille selaimille: rivin katkaisu (wrapping) eli ns. juokseva teksti ja
kiinteä teksti (nonwrapping). Käytössä oleva rivitysmuoto määrää, miten
sellaiset tekstirivit, jotka eivät mahdu näytön leveyteen, esitetään.
Jos muoto on "wrap", pitkä teksti jakautuu
useammalle riville. Tässä muodossa tekstirivien katkaisu tapahtuu
automaattisesti käytettävän laitteen ja näytön koon mukaan, tai rivit voidaan
katkaista halutusta kohtaa <br/> -merkinnällä. Mikä tahansa sanojen väli on
laillinen rivin katkaisukohta.
Jos muoto on "nowrap", rivit eivät automaattisesti
katkea. Tässä muodossa selaimelle on tarjottava mahdollisuus esittää pitkäkin
teksti samalla rivillä (esimerkiksi vaakasuuntaisella vierityksellä, tai
jollakin muulla selainkohtaisella mekanismilla).
Tyhjän tilan entiteetti ( tai  )
ilmaisee selaimelle, että tyhjää tilaa ei pidä tulkita sanojen väliseksi
tyhjäksi väliksi. Merkintää suositellaankin
käyttämään mm. tilanteissa, joissa halutaan välttää rivinvaihdon osumista
ei-toivottuun kohtaan.
Tavuviivan entiteetti (­ tai ­) ilmaisee selaimelle paikkaa, mistä rivin saa katkaista.
Jos rivinvaihto osuu tavuviiva-entiteetin kohdalle, selain lisää
tavuviiva-merkin(-) rivin
loppuun. Muissa tapauksissa entiteetti ohitetaan. Yleensäkin selain voi
kokonaan jättää ottamatta huomioon tavuviivat tekstirivejä muodostaessaan.
Tagi p edustaa
kappaleessa sekä uutta rivitys- että linjausparametria. Jos rivitysmuotoa ei
määrätä, se on sama kuin kortin edellisessä kappaleessa. Jos tekstin linjausta
ei määritetä, oletus on left.
Tyhjät kappaleet, kuten tyhjän elementin tai
merkityksettömän tyhjän välin sisältävän elementin, selain saattaa tulkita
ohitettavaksi. Merkityksettömillä kappaleilla ei ole vaikutusta tekstin
rivitykseen. Jos kortin p -elementti ei
määritä rivitystä tai linjausta, sovelletaan kortilla voimassaolevaa muotoa.
Selaimen on suoritettava rivinkatkaisu merkityksellisten p -elementtien välillä.
Elementtiä table käytetään elementtien tr ja td kanssa asettamaan
tekstiä ja kuvia palstoiksi. Taulukkoelementit määrittävät palstojen rakenteen.
Elementit erottavat sisällön palstoiksi, mutta eivät määritä palstojen mittoja.
Selain käyttää tehokkainta sisällön esitystapaa käytettävässä
päätelaitteessa. Kannattaa muistaa, että sisäkkäisiä table -elementtejä ei voida WML:ssä käyttää. Taulukot muodostetaan
käyttäen seuraavaa kolmea elementtiä.
table Muodostaa
linjattuja teksti- ja kuvapalstoja.
tr Käytetään
table -elementin kanssa,
määrittää taulukon rivin alun.
td Käytetään
table -elementin kanssa,
määrittää taulukon datan (solun) taulukon rivillä.
Tekstien ja kuvien linjaus palstoilla määritetään align -attribuutilla. Sisältö voidaan linjata palstoille joko
keskelle, vasemmalle tai oikealle. Attribuutin align arvo ilmaistaan listana linjausmäärityksiä, kullekin
palstalle omansa. Keskitetty linjaus määrätään arvolla "C", vasen
arvolla "L" ja oikea arvolla "R".
Listan ensimmäinen määritys koskee 1. palstaa, toinen toista
palstaa jne. Jos palstalle ei ole määritetty linjausta, käytetään
oletuslinjausta. Vasemmalta oikealle -kielissä oletus on linjaus vasemmalle.
Attribuutilla columns määritetään palstojen lukumäärä riveillä. Selain muodostaa
rivisarjasta juuri sen määrän palstoja, kuin columns -attribuutille on annettu arvoksi.
Jos todellinen palstojen lukumäärä rivillä on pienempi kuin columns
-attribuutille annettu arvo, rivi
täytetään tehokkaasti tyhjillä palstoilla. Taulukon suuntautuminen riippuu
kielestä: vasemmalta oikealle -kielissä ensimmäinen vasemmanpuoleinen palsta on
taulukon 1. palsta. Palstat lisätään rivillä vasemmalta oikealle.
Jos todellinen palstojen määrä rivillä on suurempi kuin columns
-attribuutille annettu arvo, loput
palstat yhdistetään viimeiseen palstaan siten, että rivillä on täsmälleen
määritetty lukumäärä palstoja.
Riippuen näytön ominaisuuksista selain voi luoda linjatut
palstat jokaiselle taulukolle erikseen, tai se voi asettaa yhteiset
palstalinjaukset kortin kaikille taulukoille. Varmistaakseen kapeimman
tilankäytön selain määrittää palstaleveyden tekstin ja kuvien leveyden mukaan.
Ei-tyhjien palstojen välillä on syytä käyttää nollasta poikkeavaa
erotusleveyttä.
Seuraavan esimerkin kortti sisältää yksinkertaisen
palstaryhmän, jossa on kaksi palstaa ja kolme riviä.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card>
<p>
<table
columns="2" align="L">
<tr><td>Yksi
</td><td> Kaksi </td></tr>
<!--riviltä puuttuu yksi solu
-->
<tr><td>1</td></tr>
<!-- rivillä on liian monta
solua -->
<tr><td>A</td><td>B</td><td>C</td></tr>
</table>
</p>
</card>
</wml>
Seuraavassa taulukossa edellisen esimerkin table -elementin sisältämien elementtien ja attribuuttien
kuvaukset.
<tr>
Varaa
tilan taulukon riville. Taulukon rivit voivat olla myös tyhjiä (esimerkiksi:
kaikki rivin solut ovat tyhjiä). Tyhjätkin rivit ovat merkityksellisiä
eikä niitä ohiteta.
<td> Varaa tilan taulukon datasolulle rivillä. Taulukon solut
voivat olla myös tyhjiä. Tyhjätkin solut ovat merkityksellisiä eikä niitä
ohiteta. Selain käyttää solun tilan hyödyllisesti soveltaen monirivisiä soluja
käytettyjen kuvien, rivin katkaisumerkkien ja datan mukaan.
columns="2"
Määrittää
palstojen määrän rivillä.
align="L"
Määrittää
tekstin ja kuvien layoutin palstojen sisällä.
WML tukee sekä nimettyjen että numeeristen merkkien
entiteettejä. Kannattaa huomata, että kaikki
numeeristen merkkien entiteetit noudattavat yleisen dokumenttimäärityksen
mukaista merkkijärjestelmää (Unicode), eikä yksittäisen dokumentin koodaustapaa
(charset). Näin ollen notaatio { viittaa
aina samaan loogiseen merkkiin, riippumatta dokumentin koodaustavasta.
WML tukee seuraavien merkkien entiteettimuotoja:
·
Nimettyjen merkkien entiteettejä, kuten & ja
<
·
Desimaalilukujen
entiteettejä, kuten {
·
Heksadesimaalilukujen
entiteettejä, kuten 
Seuraavassa taulukossa kuvataan seitsemän nimetyn merkin
entiteettiä, jotka ovat tärkeässä asemassa WML:n prosessoinnissa.
Entiteetti Notaatio Kuvaus
quot " lainausmerkki
amp & et -merkki
(&)
apos ' heittomerkki
lt < pienempi kuin
( < ) (less than)
gt > suurempi kuin
( > ) (greater than)
nbsp   tyhjä väli
shy ­
ehdollinen
tavuviiva (soft hyphen)
Huom: Puolipiste (;) on osa erikoismerkkien notaation kirjoitusasua.
Kun halutaan käyttää erikoismerkkiä, lisätään koodiin jokin
taulukossa esitetyistä kiertoilmaisuista, notaatioista. Esimerkiksi seuraava
koodi sisältää pienempi kuin (less than)
-merkin (<) notaationa <.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card id="Kortti_1">
<p>
Numeerisesti 5 < 10
</p>
</card>
</wml>
Seuraava pieni WML -esimerkki kuvaa tekstin korostamista.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card id="kortti1">
<p>
Pikku
<em>
<u> kokeilu </u>
Nokian
</em>
<i>
<strong>
WAP </strong>
<br/>
</i>
Toolkitilla
</p>
</card>
</wml>
Seuraava WML -dekki sisältää kaksi korttia. Kun käyttäjä
painaa accept -pikalinkkiä “Seuraava”,
selain navigoi dekin seuraavalle kortille ja näyttää sen sisällön.
<?xml
version="1.0"?>
<!DOCTYPE
wml PUBLIC "-//WAPFORUM//DTD WML 1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card
id="Eka_kortti">
<do
type="accept" label="Seuraava">
<go
href="#Toka_kortti"/>
</do>
<p>
Valitse <b> Seuraava
</b><br/>
katsoaksesi seuraavan kortin.
</p>
</card>
<card
id="Toka_kortti">
<p>
Ja siinä kaikki !
</p>
</card>
</wml>
Useimmat WML -elementit sallivat attribuutin määrityksen.
Attribuutit annetaan muodossa attribuutti=arvo, missä attribuutti
on attribuutin nimi ja arvo on
aakkosellinen tai numeerinen arvo, joka sille annetaan.
Esimerkin kuudes rivi määrittää toiminnon, mitä selaimen
pitäisi tehdä, kun käyttäjä valitsee Options
-valikosta pikalinkin ja painaa sitä. Attribuutti type ilmaisee toiminnon(accept) ja attribuutti label otsikon nimen (Seuraava) määritetylle pikalinkille.
Tässä kappaleessa tarkastellaan Wireless Markup Language
Scriptin (WMLScript) ominaisuuksia ja sen käyttöä.
WMLScript on osa WAP -sovellustasoa, ja sitä voidaan käyttää
lisäämään asiakaspuolen eli selainkäyttöistä toimintalogiikkaa WML -kortteihin
ja dekkeihin. Kieli perustuu ECMAScriptiin, mutta sitä on muokattu tukemaan
paremmin pienempien kaistanleveyksien laitteita, kuten kännyköitä.
WMLScriptiä voidaan käyttää myös itsenäisenä työkaluna.
WMLScriptillä voidaan täydentää normaaleja WML -funktioita
mm. seuraavin tavoin:
·
Käyttäjän syötteiden oikeellisuuden tarkistus.
·
Selaimen käytön
tehostaminen. Esimerkiksi kännykässä se
sallii ohjelmoijan koodata puhelinsoittoja, viestien lähetyksiä, lisätä
puhelinnumeroita osoitekirjaan, tai käyttää SIM -korttia.
·
Sillä voidaan
generoida paikallisia viestejä ja dialogeja, kuten huomautuksia,
virheilmoituksia, vahvistuksia jne. käyttäjän välittömän huomion
herättämiseksi.
·
Sillä voidaan
rakentaa laajennuksia selainohjelmaan ja säätää joitakin selaimen asetuksia.
Seuraava
taulukko kuvaa lyhyesti WML-Scriptin standardikirjastot.
Float Kirjasto sisältää
joukon tyypillisiä aritmeettisia liukulukufunktioita, joita voidaan käyttää
sovelluksissa.
String Kirjasto
sisältää joukon merkkijonofunktioita.
URL Kirjasto
sisältää joukon funktioita absoluuttisten ja suhteellisten URLien käyttöön.
WMLBrowser Kirjasto
sisältää funktioita, joita WML-Script käyttää WML -viitekehyksen yhdistämiseen.
Dialogs Kirjasto sisältää
joukon tyypillisiä käyttöliittymäfunktioita.
Yksityiskohtainen
esitys WML-Scriptistä löytyy WAP Forumin Open Mobile
Alliance -sivuilta osoitteesta http://www.openmobilealliance.org/tech/affiliates/wap/wapindex.html
Tämä
luku sisältää kolme esimerkkiä WML- ja WML-Script sovelluksista. Ensimmäinen generoi
sattumanvaraisia numeroita; toinen on valuuttamuunnin; kolmas laskee
asuntolainan kustannukset.
Numerogeneraattori
Tämä
esimerkki käyttää WML-tiedostoa (sattuma.wml),
joka sisältää kaksi korttia ja
WML-Script -tiedoston (sattuma.wmls).
Ensimmäinen
kortti (kortti1) kutsuu WML-scriptiä sattuma.wmls
ja käyttää funktiota getRandom,
joka muodostaa numeroita sattumanvaraisesti.
Toinen
kortti (kortti2) näyttää tuloksen WML-Script -operaatiosta.
Skriptitiedosto
sattuma.wmls muodostaa numeroita
sattumanvaraisesti ja palauttaa tuloksen WML-dekin toisella kortilla.
WML-koodi (sattuma.wml)
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML
1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<!-- sattuma.wml -->
<wml>
<card id="kortti1" title="Numerogeneraattori">
<p
align="center">
Valitse sattuma
</p>
<do
type="accept" label="Sattuma">
<go
href="sattuma.wmls#getSattuma()"/>
</do>
</card>
<card id="kortti2" title="Sattuman
Tulos">
<p>
Tulos: $(TULOS)
</p>
</card>
</wml>
WML-Script koodi (sattuma.wmls)
Scriptin
funktio asettaa tunnuksen "s" sattumanvaraisesti numeroihin välillä 0
ja 100, jonka jälkeen se kutsuu funktiota WML-selaimen kirjastosta asettaakseen
muuttujan $(TULOS) tälle numerolle "s". Tämän jälkeen se kutsuu toista
funktiota selaimen kirjastosta näyttääkseen toisen kortin ,missä TULOS
-muuttuja näytetään varustettuna sen uudella arvolla.
extern function getSattuma ()
{
var s = Lang.random(100);
WMLBrowser.setVar("TULOS",
s);
WMLBrowser.go("sattuma.wml#kortti2");
}
Valuuttamuunnin
Seuraava
WML- ja WML-Scriptiesimerkki esittää sovelluksen, joka muuntaa valuuttoja
välillä Eurot, US dollarit, Englannin punnat ja Ruotsin kruunut.
WML-koodi (valuutta.wml)
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML
1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card
id="kortti1" title="Valuutta"
newcontext="true">
<p>
Summa: <input
format="N*M" name="summa" title="Summa:"/>
Mistä: <select
name="sta" value="EUR" title="Sta:">
<option
value="EUR">Euro</option>
<option
value="GBP">Punta</option>
<option
value="SEK">Kruunu</option>
<option
value="USD">US Dollari</option>
</select>
Mihin: <select
name="ksi" value="USD" title="Ksi:">
<option
value="EUR">Euro</option>
<option
value="GBP">Punta</option>
<option
value="SEK">Kuunu</option>
<option
value="USD">US Dollari</option>
</select>
<br/> =
<u>$(muunto)</u>
<do type="accept"
label="Laske">
<go
href="valuutta.wmls#vaihto('muunto','$(sta)','$(ksi)',$(summa))"/>
</do>
<do type="help"
label="Help">
<go
href="#kortti1_help"/>
</do>
</p>
</card>
<card id="kortti1_help"
title="Help">
<onevent
type="onenterforward">
<go
href="valuutta.wmls#getInfoPvm('pvm')"/>
</onevent>
<p>
Vaihtokurssit
perustuvat Euroopan keskuspankin valuuttakurssiin $(pvm).
<do
type="prev" label="Back">
<prev/>
</do>
</p>
</card>
</wml>
WML-Scriptikoodi (valuutta.wmls)
/*
* Palauttaa päivämäärän, jolloin data muodostettiin.
*
*@param varNimi - muuttuja johon tallennetaan tulokset
*/
extern function
getInfoPvm(varNimi) {
WMLBrowser.setVar(varNimi,"Maaliskuu
08 2008");
WMLBrowser.refresh();
}
/*
* Lasketaan vaihtokurssit
* Euro = 0.68752 GBP
* 9.22202 SEK
* 1.10140 USD
*
*@param varNimi - muuttuja johon tallennetaan tulokset
*@param summa - muunnettava summa
*@param sta - alkuperäinen valuutta
*@param ksi - valuutta joksi muunnetaan
*@palauttaa merkkijonon, joka ilmoittaa muunnetun summan,
*tai virheilmoituksen jos "mistä" ja/tai
"mihin" ei ole tuettu.
*/
extern function vaihto(varNimi,sta,ksi,summa) {
var
kerroin = 0.0;
var returnString = "Ei mahdollinen";
var result;
if (sta == "EUR") {
/*
* Eurosta
*/
var EUR_SEK = 0.106;
var EUR_GBP = 1.312;
var EUR_USD = 0.651;
if
(ksi == "EUR")
kerroin
= 1.0;
else
if (ksi == "SEK")
kerroin = EUR_SEK;
else
if (ksi == "GBP")
kerroin = EUR_GBP;
else
if (ksi == "USD")
kerroin = EUR_USD;
}
else if (sta == "SEK") {
/*
* Ruotsin kruunusta
*/
var
SEK_EUR = 9.405;
var SEK_GBP = 12.333;
var SEK_USD = 6.125;
if
(ksi == "SEK")
kerroin
= 1.0;
else if
(ksi == "EUR")
kerroin
= SEK_EUR;
else
if (ksi == "GBP")
kerroin = SEK_GBP;
else
if (ksi == "USD")
kerroin = SEK_USD;
}
else if (sta == "GBP") {
/*
* Engl. punnasta
*/
var GBP_EUR = 0.763;
var GBP_SEK = 0.081;
var GBP_USD = 0.497;
if (ksi == "GBP")
kerroin = 1.0;
else if
(ksi == "SEK")
kerroin
= GBP_SEK;
else
if (ksi == "EUR")
kerroin = GBP_EUR;
else
if (ksi == "USD")
kerroin = GBP_USD;
}
else if (sta == "USD") {
/*
* US dollarista
*/
var USD_EUR = 1.535;
var USD_SEK = 0.163;
var USD_GBP = 2.014;
if (ksi == "USD")
kerroin = 1.0;
else if
(ksi == "SEK")
kerroin
= USD_SEK;
else
if (ksi == "GBP")
kerroin = USD_GBP;
else
if (ksi == "EUR")
kerroin = USD_EUR;
}
if (kerroin !=
0.0) {
/*
* Suorita laskenta
*/
result = summa / kerroin;
returnString =
String.toString(result);
returnString = String.format("%.2f", returnString);
}
/*
* Palauttaa tulokset selaimelle
*/
WMLBrowser.setVar(varNimi,returnString);
WMLBrowser.refresh();
}
Lainalaskuri
Seuraava
WML- ja WML-Scripti -esimerkki kuvaa yksinkertaista sovellusta asuntolainan
kustannusten laskemiseksi.
WML-koodi (laina.wml)
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML
1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<card
id="kortti1" title="Lainalaskuri"
newcontext="true">
<p>
Laina,€:
<input format="N*N" name="paaoma"
title="Paaoma:" value=""/>
Korko%:
<input format="N*M" name="korko"
title="Korko:" value=""/>
KK-eriä:<input format="N*N"
name="lkm_erat" title="Lkm. erat:" value=""/>
Euroa/kk = <u>$kustan</u>
<do
type="accept" label="Laske">
<go
href="laina.wmls#kustan('kustan','$(paaoma)','$(korko)','$(lkm_erat)')"/>
</do>
<do type="help"
label="Help">
<go href="#help"/>
</do>
</p>
</card>
<card id="help"
title="Help">
<p>
<u>Laina,€</u>
- $paaoma<br/>
<u>Korko</u>
- $korko %<br/>
<u>Erien lkm</u> - $lkm_erat / 30
v.<br/>
<do type="prev"
label="Back">
<prev/>
</do>
</p>
</card>
</wml>
WML-Scriptikoodi (laina.wmls)
/*
* Laskee asuntolainan kustannukset
*
*@param varnimi
muuttujan nimi johon tallennetaan tulokset
*@param paaoma,
pääoma
*@param korko,
korko-prosentti
*@param lkm_erat, maksuerien
lukumäärä
*@return kustan,
kustannukset
*/
extern function kustan(varnimi, paaoma, korko, lkm_erat) {
/*
* Koron muodostus:
*
*
If (i != 0), then:
* pmt = paaoma * [i * (1+i)^n / ((1+i)^n
- 1)]
*
*
If (i == 0), then:
* pmt
= paaoma / n
*/
var mi =
korko/1200; // kuukausikorko
vuosittaisesta korosta
var kustan = 0;
if (mi != 0) {
var tmp =
Float.pow((1 + mi), lkm_erat);
kustan =
paaoma * (mi * tmp / (tmp - 1));
}
else {
if (lkm_erat != 0)
kustan
= paaoma / lkm_erat;
}
var s;
if (kustan != 0)
s =
String.format("%6.2f", kustan);
else
s =
"Dataa ei ole";
/*
*
Lähettää tuloksen selaimelle
*/
WMLBrowser.setVar(varnimi,
s);
/*
* Varmistaa että selain päivittää kortin
*/
WMLBrowser.refresh();
};
Esimerkin kuvaus
Kortti
esittää oletusarvot lainapääomasta, korosta ja maksuerien lukumäärästä.
Ylös
ja alas -nuolipainikkeilla pääsee
valitsemaan editoitavan kentän; valitsemalla Options -valikosta Edit -pikalinkin pääsee muuttamaan arvoa, esim.
lainapääoman.
Lainapääomaa
voi editoida valitsemalla Clear ja
poistamalla oletusarvona näkyviä lukuja sekä kirjoittamalla tilalle haluamansa
luvun. Samalla tavoin voi editoida korko- ja erien lukumäärä -kenttiä.
Kun
halutut arvot on asetettu, valitaan Options
-valikosta Laske ja vieritetään
näytön alareunaan, jossa viimeisellä rivillä näkyy, minkä suuruinen kuukausierä
valituilla arvoilla olisi.
Jos
haluaa vielä tarkistaa Options -valikon
Help -pikalinkillä, mitkä olivat lähtötiedot, sekin on mahdollista
Puskuviestijärjestelmä
(The Push Message Framework) on termi, jota käytetään kuvaamaan niitä
protokollia, palvelurajapintoja ja ohjelmistoja, jotka yhdessä tarjoavat
mahdollisuuden "työntää" dataa WAP -laitteiden selaimiin
asynkronisella menetelmällä, siis ilman loppukäyttäjän erityistä pyyntöä
vastaanottaa dataa.
Puskuviestijärjestelmä
tarjoaa palveluntuottajille mahdollisuuden tuottaa mobiiliasiakkailleen uuden
tyyppisiä palveluita, kuten automaattisia ilmoituksia uuden e-mailin
saapumisesta, pörssikurssien päivityksestä, tietoa valuuttakurssien
muutoksista, jne.
WML
-sisältöä ei yleensä pusketa suoraan käyttäjän WAP-selaimeen, koska viestin
saapuminen voisi keskeyttää käyttäjän mahdollisesti meneillään olevan
selaussession. Sen sijaan puskun alustusohjelma lähettää viestin, joka sisältää
prioriteettitason, URL:n josta sisällön voi hakea ja tekstiviestin
näytettäväksi käyttäjälle.
Tuollainen
ilmoitusviesti näytetään käyttäjälle jossakin vaiheessa riippuen sen
"tärkeydestä". Viestin teksti näytetään käyttäjälle varustettuna
mahdollisuudella hakea URL, joka sisältää ilmoitetun WML -sisällön.
Puskuviesti
voi sisältää yhden kolmesta sisältötyypistä: Service Indication (SI) eli
palveluilmoituksen, Service Loading (SL) eli varsinaisen palvelun latauksen, ja
Cache Operation (CO) eli välimuistioperaation. Lisäksi on olemassa
yhdistelmätyyppinen puskuviesti, nimeltään Multipart, joka voi sisältää yhden-
tai useammantyyppistä sisältöä, mukaanlukien puskuviestin. Näistä kaikista
sisältötyypeistä hieman lisää seuraavissa osissa.
Palveluilmoitus
(SI) -sisältötyyppi tarjoaa menetelmän lähettää ilmoitusviestin asiakkaalle
asynkronisesti (ilman asiakkaan pyyntöä). Kun tällainen kuvaileva viesti
esitetään käyttäjälle, käyttäjä voi valita, lataako ilmoitetun WML -sisällön
(määritellystä URI:sta, joka liittyy ilmoitukseen). SI -sisältötyyppi on
Extensible Markup Language (XML) 1.0 -sovellus.
SI
-mediatyyppejä ovat:
Tekstimuoto: text/vnd.wap.si
Token -muoto: application/vnd.wap.sic
SI
-sisältötyypin juurielementti on si -elementti, joka vaatii vähintään yhden indication
-elementin; info -elementti on vapaaehtoinen. Elementti info voi sisältää useamman item -attribuutin, joita käytetään määrittämään
sovellus-sidonnaista informaatiota, mitä indication -elementin attribuutit eivät sisällä.
Seuraavassa
esimerkinomainen si -puskuviesti:
<?xml
version="1.0"?>
<!DOCTYPE si PUBLIC
"-//WAPFORUM//DTD SI 1.0//EN"
"http://www.wapforum.org/DTD/si.dtd">
<si>
<indication>
href= "http://www.osakekurssit.com/tervetuloa.wml"
si-id= "cust-msg-num52"
created= "2003-03-31T15.28.19Z"
si-expires= "2003-03-31T23.59.59Z"
action= "signal-medium"
Katso osakekurssit nyt?
</indication>
<info>
<item class=MoreInfo>
Edellinen päivitys tapahtui tiistaina klo 15.00.
</item>
</info>
</si>
Seuraavassa
taulukossa suppea kuvaus elementeistä ja attribuuteista.
href URI
palvelusovellukseen.
si-id Yksilöllinen
tunniste, joka annetaan jokaiselle SI -viestille.
created Päiväys ja aika (UTC
-muodossa) jolloin viesti luotiin.
si-expires Päiväys
ja aika, jolloin viesti vanhenee ja voidaan automaattisesti poistaa tai merkitä
vanhentuneeksi.
action Määrittää SI -viestin tärkeysasteen.
class Tässä info
-elementin lapsielementissä määritetään tarvittava lisäinformaatio, jonka
sovelluksen kehittäjä katsoo tarpeelliseksi.
Service
Loading- (SL) eli palvelun lataus -sisältötyyppi tarjoaa menetelmän lähettää
asiakkaan mobiililaitteeseen URI:n, jonka kautta asiakas sitten lataa sisällön
palvelimelta mobiililaitteeseensa. Tämä sisältötyyppi on XML1.0 -sovellus.
Kun
WML -sisältö on haettu, se liitetään selaimeen, joka esittää sen. Koska WML
-sisältö tulkitaan WML -selaimessa, käyttäjä havaitsee sisällön vasta tässä
vaiheessa.
Käyttäjällä
voi kuitenkin juuri sillä hetkellä olla muuta tekemistä. Palvelun lataus
-sisältötyyppi tarjoaakin sovelluskehittäjälle myös mahdollisuuden asettaa
prioriteettitason sisällön esitykselle. SL voi niinikään ohjata sisällön
välimuistiin esittämättä sitä samantien.
SL
-mediatyyppejä ovat:
Tekstimuoto: text/vnd.wap.sl
Token -muoto: application/vnd.wap.slc
Palvelun
lataus -sisältötyyppi määritetään sl -elementissä, joka vaatii href -attribuutin; action -attribuutti on vapaaehtoinen. Seuraavassa pieni sl -puskuesimerkki:
<?xml version="1.0"?>
<!DOCTYPE sl PUBLIC "-//WAPFORUM//DTD SL
1.0//EN"
"http://www.wapforum.org/DTD/sl.dtd">
<sl>
href= "http://www.osakekurssit.com/abc.wml"
action=
"execute-low"
</sl>
Seuraavassa
taulukossa suppea kuvaus elementeistä ja attribuuteista.
href URI palvelun
lataus -sovellukseen.
action
Attribuutissa
määritetään, minkä toimenpiteen selain suorittaa, kun palvelusovellus on
ladattu selaimeen. Kolme mahdollista arvoa ovat:
(1) execute-low:
selain siirtää sovelluksen esitettäväksi vastaanottavan laitteen metodikutsun
mukaisesti, joka on merkitty päätelaitteen WAE -määrityksessä ei-häiritseväksi
tasoksi.
(2) execute-high:
sama kuin execute-low:ssa, paitsi että sovellus voi vaatia käyttäjän huomiota.
(3) cache: sama
kuin execute-low:ssa, mutta sen sijaan että sisältö esitettäisiin, se
sijoitetaan välimuistiin, jos sellaista on vapaana; jos välimuistia ei ole,
sovellus hylätään.
Cache
Operation- eli välimuistioperaatio -sisältötyyppi vaatii selaimen välimuistissa
mahdollisesti olevien yhden tai useamman objektin korvaamisen, kun CO -viesti
saapuu. Välimuistioperaatio -viesti voidaan joko "puskea"
(palvelin-orientoitunut) tai ladata (asiakas-orientoitunut); selaimessa
toiminta on molemmissa tapauksissa sama.
Välimuistioperaation
WAP-määrityksessä kuvataan, miten selaimen pitäisi vastata välimuistioperaatio
-viestiin. Siinä kuvataan säännöt, joiden perusteella määräytyy CO -viestin
luonne ja yhteys selaimeen. Säännöt ovat myös sidoksissa päiväykseen ja
viimeksi muokattu -otsikkotietoihin ja päättävät milloin välimuistissa oleva
objekti tai palvelu katsotaan vanhentuneeksi ja poistetaan.
CO
-mediatyyppejä ovat:
Tekstimuoto: text/vnd.wap.co
Token -muoto: application/vnd.wap.coc
CO
-sisältötyyppi määritellään co -elementissä, joka
sisältää yhden tai useamman attribuutin. Luvallisia attribuutteja on kaksi: invalidate-object ja invalidate-service. Molemmat attribuutit tarvitsevat URI:n arvokseen.
Seuraavassa CO -viestissä määritetään molemmat attribuutit:
<?xml
version="1.0"?>
<!DOCTYPE
co PUBLIC "-//WAPFORUM//DTD CO 1.0//EN"
"http://www.wapforum.org/DTD/co_1.0.dtd">
<co>
invalidate-object=
"http://www.osakekurssit.com/abc.wml"
invalidate-service=
"http://www.osakekurssit.com/def.wml"
</co>
Seuraavassa
taulukossa suppea kuvaus attribuuteista.
invalidate Määrittää
URI:n attribuutin arvoksi. Jos välimuistiobjektin URI
-object vastaa
selaimen välimuistissa olevaa objektia, välimuistiobjekti poistetaan.
invalidate
-service Määrittää URI:n
attribuutin arvoksi. Jos palvelun URI vastaa selaimen välimuistissa olevaa
palvelua, välimuistissa oleva palvelu poistetaan.
Yhdistelmäviesti
sisältää useita osia, joilla kullakin on erilainen sisältötyyppi. Yhdistelmäviestin
kukin osa muodostuu (1) joukosta otsikkotietoja, jotka kuuluvat kyseiseen
viestin osaan (ja yksi vaadittavista otsikkotiedoista on sisältötyyppi) ja (2)
osan varsinaisesta sisällöstä.
Yhdistelmäviestiä
voidaan käyttää mm. pienentämään viivettä ja tehostamaan sisällön saattamista
käyttäjälle. Esimerkiksi kolmiosainen yhdistelmäviesti voisi muodostua (1)
säätilan päivityksestä ilmoittavasta uutisotsikosta, (2) säävaroituksesta
tietyllä seudulla kertovasta tekstistä, ja (3) alueen kartasta (WBMP -kuva).
Kun käyttäjän päätelaite vastaanottaa yhdistelmäviestin, sen pakkausmuoto
puretaan ja sisältö tallennetaan laitteen välimuistiin. Kun käyttäjä on
havainnut uutisotsikon, hän voi lukea säävaroituksen ja katsoa kartan
tarvitsematta odottaa niiden latautumista verkosta.
Kun
WAP-selain (kuten Nokian Mobile Internet Toolkit 3.1) vastaanottaa
yhdistelmäviestin, se suorittaa viestin perustuen sääntöihin, jotka on kuvattu
Taulukossa 1.
MIME
-määritykset (RFCs 2045 ja 2046) kuvaavat yhdistelmämuodot ja kolme
yhdistelmätyyppiä, joita Nokian Toolkit tukee. WAP-määrityksissä kerrotaan
yhdistelmäviestin tiedostojen liitoskoodauksesta. Toolkitilla on mahdollista
luoda joko MIME -tyypin (koodaamatonta) tai WSP-koodattua
yhdistelmäviesti-sisältöä (siis tyyppejä "application/vnd.wap.multipart.mixed",
"application/vnd.wap.multipart.alternative", tai
"application/vnd.wap.multipart.related"). On kuitenkin syytä muistaa,
että sisäkkäisten yhdistelmäviestin osien käyttöä ei tueta.
Nokian
Mobile Internet Toolkit käsittelee kolmea yhdistelmäviestin alatyyppiä ja
käyttäytyy WAE -määritysten mukaan
seuraavasti:
Taulukko 1: Yhdistelmäviestin
tyypit
Alatyyppi Kuvaus ja Toolkitin
käyttäytyminen
Mixed
Yhdistelmäviesti tyyppiä mulitpart/mixed tai application/vnd.wap.multipart.mixed
on kokoelma erilaisia osia mahdollisesti vaihtelevista sisältötyypeistä.
Vastaanottaessaan Toolkit purkaa viestin informaation komponenteiksi ja
suorittaa kunkin viestin osan järjestyksessä.
Osat tallennetaan välimuistiin, jos Toolkit tukee niiden
sisältötyyppiä; muussa tapauksessa osat poistetaan. Välimuistiin
tallennettavien osien tunnuksina Toolkit käyttää Content-Location -otsikkotietoa, jos sellainen esiintyy; muussa
tapauksessa se käyttää X-Wap-Content-URI
-otsikkotietoa (header).
Jos tällainen mixed-tyypin viesti on vastaus hakupyyntöön,
Toolkit suorittaa ensin osat, joiden Content-Location
-otsikkotiedot vastaavat hakupyynnön URL:ia; muussa tapauksessa se
suorittaa ensimmäisen osan. (Suorittaminen tarkoittaa yleensä -mutta ei aina-
sisällön esittämistä selaimessa.)
Jos tällainen mixed-tyypin viesti pusketaan Toolkitiin (ei
siis Toolkitin käyttäjän hakupyynnön seurauksena), Toolkit suorittaa
ensimmäisen osan samalla tavalla (yleensä esittää), kuin jos osa olisi vastaanotettu
itsenäisenä puskuviestinä. Muut osat ilman Content-Location
tai X-Wap-Content-URI -otsikkotietoja
poistetaan.
Related
Yhdistelmäviesti tyyppiä multipart/related tai application/vnd.wap.multipart.related
on kokoelma osia, jotka liittyvät määrittämättömään menetelmään. Toolkit
käsittelee tätä tyyppiä samoin kuin Mixed -alatyyppiä (ks.edellinen).
Alternative Yhdistelmäviesti tyyppiä multipart/alternative tai
application/vnd.wap.multipart.alternative
on kokoelma osia, jotka ovat
erilaisia esitysmuotoja samasta sisällöstä. Viesti voisi sisältää esimerkiksi
JPEG, GIF, ja WBMP -muodot samasta kuvasta.
Molemmat yhdistelmäviestin muodot, pusketun ja hakupyynnön
seurauksena vastaanotetun, Toolkit suorittaa kunkin osan järjestyksessä ja
käyttää ensimmäisenä osana sitä, jonka sisältötyyppiä se tukee. Muut osat
poistetaan.
WAP
Forum on laatinut seuraavat määritykset kuvaamaan turvallisuussäännöksiä, jotka
liittyvät langattomien päätelaitteiden markkinoihin. Määritykset löytyvät
osoitteesta http://www.openmobilealliance.org/Technical/
Wireless Transport Layer Security Specification (WTLS). Tämä dokumentti määrittää WTLS:n, joka on turvallisuus-tason
protokolla. Se operoi siirto-tason protokollan(WDP) yläpuolella ja
istunto-tason protokollan (WSP) alapuolella. WTLS määrittää rajapinnan
muodostamaan turvatun yhteyden välille asiakas (mobiililaite) ja palvelin (WAP
gateway).
WMLScript Crypto Library Specification. Tämä
dokumentti määrittää salausfunktiot ja allekirjoitusmuodot, jotka WAP
-asiakkaalta vaaditaan turvattuun kommunikointiin palvelimen kanssa (WTLS:n
avulla).
Wireless Identity Module Specification (WIM). Tämä dokumentti määrittää funktiot, jotka tukevat sellaisten
varusteiden käyttöä puhelimessa kuin esimerkiksi älykortti tai SIM -kortti.
Nämä funktiot sisältävät, osittain, henkilökohtaisten tunnusten ja varmenteiden
varastoinnin, samoin kuin tuen näiden tunnusten käytölle allekirjoitukseksi
datan turvallista siirtoa varten.
Public Key Infrastructure Definition (WPKI). Tämä dokumentti määrittää infrastruktuurin ja menetelmät,
jotka vaaditaan luotettavan, autentikointiin perustuvan vuorovaikutuksen muodostamiseen palvelimen
ja asiakkaiden välille.
Lisäksi nettikaupan transaktioille pyritään jatkuvasti kehittämään
asianmukaisia vuorovaikutusmäärityksiä. Yksi tällainen kehittäjäryhmä on MeT
CUE Task Force, joka on luonut määrityksen nimeltä MeT Consistent User Experience.