2. WML

2.1 YLEISKATSAUS

 

 

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.

 


 

2.1.1 Entiteetit

 

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.

 

2.1.2 Tagit

 

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.

 

 

2.1.3 Elementit

 

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

Tapahtumatdo

                           ontimer

                           onenterforward

                           onenterbackward

                           onpick

                           onevent

                           postfield

Tehtävätgo

                           prev

                           refresh

                           noop

Muuttujatsetvar

Käyttäjän syötteetinput

select

                           option

                           optgroup

                           fieldset

Linkit, kuvat ja ajastusa

                           anchor

                           img

                           timer

Tekstin muotoilubr

                           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


 

2.1.4 Attribuutit

 

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.

 

2.1.5 Kommentit

 

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ää.

 

2.1.6 Muuttujat

 

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ä.

 

 

2.1.7 Kirjainherkkyys

 

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"

 

2.1.8 WML-rakenne

 

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">

Ekakortti

<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.

 


 

2.2 DEKKI- JA KORTTIELEMENTIT

 

 

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.

 

 

2.2.1 Kortti-elementti

 

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.

 

2.2.1 Template -elementti

 

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.

 

2.2.2 Access-elementti

 

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>

 


 

2.2.2.1 WML ja turvallisuus

 

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.

 

2.2.3 Korttien ja dekkien hallinta

 

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>


 

2.3 TAPAHTUMA-ELEMENTIT

 

 

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.

 


 

2.3.1 do-elementti

 

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.

 

2.3.2 ontimer-elementti

 

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ä.

 

Esimerkki ontimer –elementistä:

<?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>

 

 

2.3.3 onenterforward-elementti

 

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ä.

 

 

2.3.4 onenterbackward-elementti

 

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ä.

 

 

2.3.5 onpick-elementti

 

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.

 

 

2.3.6 onevent-elementti

 

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>

 

 

2.4 TEHTÄVÄ-ELEMENTIT

 

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.

 

 

2.4.1 go-elementti

 

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.

 

2.4.2 prev-elementti

 

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.

 

2.4.3 refresh-elementti

 

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.

 

2.4.4 noop-elementti

 

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.

 


 

2.5 MUUTTUJAT

 

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ä.

 

2.5.1 Muuttujien nimeäminen

 

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.


 

2.5.2 Muuttujien asettaminen

 

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.

 

2.5.3 Muuttujien korvaaminen

 

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.

 


 

2.5.4 Muuttuja-esimerkki

 

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.

 


 

2.6 KÄYTTÄJÄN SYÖTTEET

 

 

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.

 

 

2.6.1 input-elementti

 

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).


 

2.6.2 select-elementti

 

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.

 

 

2.6.2.1 Yksivalintalista

 

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>

 

 


 

2.6.2.2 Monivalintalista

 

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>

 

 


 

2.6.3 Syötteiden muodot

 

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>

 

 

2.7 ANKKURIT JA KUVAT

 

2.7.1 anchor-elementti

 

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>

 

 


 

2.7.2 img-elementti

 

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


 

 

2.8 TEKSTIN MUOTOILUELEMENTIT

 

2.8.1 Korostus

 

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.

 

 

2.8.2 Rivitys ja linjaus

 

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 (&nbsp; tai &#160;) ilmaisee selaimelle, että tyhjää tilaa ei pidä tulkita sanojen väliseksi tyhjäksi väliksi. Merkintää &nbsp; suositellaankin käyttämään mm. tilanteissa, joissa halutaan välttää rivinvaihdon osumista ei-toivottuun kohtaan.

 

Tavuviivan entiteetti (&shy; tai  &#173) ilmaisee selaimelle paikkaa, mistä rivin saa katkaista. Jos rivinvaihto osuu tavuviiva-entiteetin kohdalle, selain lisää tavuviiva-merkin(&#45;) 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ä.

 

 

2.8.3 Taulukot

 

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">

Taulukko

<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ä.

 


 

2.8.4 Erikoismerkit

 

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 &#123; viittaa aina samaan loogiseen merkkiin, riippumatta dokumentin koodaustavasta.

 

WML tukee seuraavien merkkien entiteettimuotoja:

 

·                   Nimettyjen merkkien entiteettejä, kuten &amp;  ja  &lt;

 

·                  Desimaalilukujen entiteettejä, kuten  &#123;

 

·                  Heksadesimaalilukujen entiteettejä, kuten  &#x12;

 

Seuraavassa taulukossa kuvataan seitsemän nimetyn merkin entiteettiä, jotka ovat tärkeässä asemassa WML:n prosessoinnissa.

 

Entiteetti              Notaatio                              Kuvaus

 

quot       &#34;           lainausmerkki

 

amp        &#38;           et -merkki (&)

 

apos       &#39;           heittomerkki

 

lt         &#60;           pienempi kuin ( < ) (less than)

 

gt         &#62;           suurempi kuin ( > ) (greater than)

 

nbsp       &#160;          tyhjä väli

 

shy        &#173;          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 &#60.

 

<?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 &#60; 10

  </p>

 </card>

</wml>

 

 

2.8.5 Tekstin muotoiluesimerkit

 

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.

 


 

2.9 WML-SKRIPTIEN KÄYTTÖ

 

 

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.

 

 

2.9.1 WML-Scriptin standardikirjastot

 

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

 

 

2.9.2 WML-Script esimerkkejä

 

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

 

2.10 PUSKU-VIESTIJÄRJESTELMÄ

 

 

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.


 

2.10.1 Palveluilmoitus -sisältötyyppi (SI)

 

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.

 

3.10.2 Palvelun lataus -sisältötyyppi (SL)

 

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.

 


 

2.10.3 Välimuistioperaatio -sisältötyyppi (CO)

 

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.

 


 

2.10.4 Yhdistelmätyyppinen sisältö (Multipart)

 

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.

 

2.11 WML JA TURVALLISUUS

 

 

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.

 

<< Alkuun | etusivu | sisällys | työkaluohjelmat


Sivun alkuun