Introdução

 

WML é uma linguagem de programação baseada no XML (eXtensible Markup Language). A especificação oficial do WML foi desenvolvida e é mantida pelo WAP Forum, um consórcio industrial fundado pela Nokia, Phone.com, Motorola, e Ericsson. As especificações definem a sintaxe, variáveis e elementos usados no WML. Um atual WML 1.1 está disponível em:

http://www.wapforum.org/DTD/wml_1.1.xml

Neste tutorial são apresentados o WML básico e seus exemplos. Os exemplos demonstrarão eventos e a navegação.

Entendendo

O XML permite definir algumas tags e estas tags devem ser agrupadas conforme mencionado no documento sobre WML:

http://www.wapforum.org/DTD/wml_1.1.xml

Se um telefone ou outro dispositivo de comunicação é tido como WAP, significa que este possui um software, conhecido como microbrowser, e este software tem a capacidade de entender tudo que é especificado como sendo WML 1.1..

A primeira informação dentro de um XML é conhecida como um prolog. Quando o prolog for opcional, ele consistirá em duas linhas de código: A declaração XML (que define a versão do XML) e a declaração de documentação(um ponteiro indicando o documento DTD do wapforum). Veja um prolog abaixo:

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

Depois do prolog, cada XML contém um único elemento que contém todos outros sub-elementos e entidades. Como no HTML todos elementos são delimitados pelos caracteres:

<> e </>

Ficaria então: <elemento>Minha Informação</elemento>. Pode haver somente um elemento "documento" por documento. Com o WML, o elemento "documento" é <wml>; Todos outros elementos estarão contidos nele.

Os dois métodos mais comuns de armazenar dados com o XML são os elementos e atributos. Os elementos são itens estruturados e são representados pelas tags. Os elementos podem também conter sub elementos. Veja um exemplo a seguir:

<!--cartão login -->
<card id="LoginCard" title="Login"> seu nome. </card>

O comentário foi colocado entre os caracteres <!-- e -->.

O elemento card contém os atributos id e title.

Elementos WML

O WML define elementos que podem ser combinados para que se possa criar documentos WML. Os elementos podem ser divididos em dois grupos: os elementos Deck/Card e os elementos Eventos.

Deck/Card

wml

card

template

head

access

meta

Eventos

do

ontimer

onenterforward

onenterbackward

onpick

onevent

postfield

Tarefas

go

prev

refresh

noop

Variáveis

setvar

Entradas

input

select

option

optgroup

fieldset

Ancoras, Imagens e Timers

a

anchor

img

timer

Formatação de Textos

br

p

table

tr

td

 

Veja as descrições de cada um destes elementos em Tags para WML, cada um destes elementos é utilizado na seguinte forma:

<elemento>valor do elemento</elemento>

Se um elemento não possuir nenhum dado entre ele (o que é freqüente), pode-se utilizar o caractere "/". Por exemplo, no caso do elemento <Br>, pode-se usar <Br/>

 

<!--

.black10verdana {  font-family: Verdana; font-size: 10pt; font-style: normal; color: #000000}

.black10verdanaN {  font-family: Verdana; font-size: 10pt; font-style: normal; font-weight: bold; color: #000000}

.black12verdanaN {  font-family: Verdana; font-size: 12pt; font-style: normal; font-weight: bold; color: #000000}

-->

Aplicações com WML

 

O WML foi desenvolvido para uma pequena banda, e displays muitos pequenos. Uma parte deste desenvolvimento é o conceito utilizado como deck/cards. Um único documento WML é conhecido como Deck. Uma única interação com o usuário é conhecida como card. A vantagem do projeto é que múltiplas telas podem ser baixadas para o cliente numa única requisição. Usando WMLScript, as seleções e entradas do usuário podem ser retidas e distribuídas entre os cartões já carregados, eliminando então, transações excessivas com os servidores remotos. Claro que com limitações para o usuário. Dependendo da capacidade de memória do cliente, pode ser necessário dividir vários cartões e vários Decks para evitar que um deck fique demasiadamente grande.

Variáveis

Como vários cartões podem estar contidos em um deck, alguns mecanismos precisam estar posicionados para reter dados, enquanto o usuário navega de cartão em cartão. Este mecanismo é fornecido pelas variáveis WML. As variáveis podem ser criadas e usadas utilizando-se diversos métodos diferentes. Por exemplo:

·         Usando o elemento <setvar> como resultado do usuário que executa uma tarefa. O elemento <setvar> pode ser usado para "setar" uma variável para os seguintes elementos: go, prev e refresh. O elemento abaixo criará uma variável "v1" com um valor "meu":

<setvar name="v1" value="meu"/>

·         As Variáveis também são "setadas" através dos elementos de entrada (input, select, option, etc.). Uma variável é automaticamente criada correspondendo a um atributo de um elemento de entrada. Por exemplo, o elemento abaixo criará uma variável de nome "v1":

<select name="v1" title="v1 Value:">

É bom mencionar que quando o WML e o WMLScript trabalham juntos, eles compartilham as mesmas variáveis.

Criando um Deck WML

Neste exemplo, nós criaremos um Deck WML que nos permite primeiramente selecionar um username da lista, entrar com uma senha, então temos nossas seleções repetidas. Basicamente será mostrado a manipulação de entrada, dos eventos e das variáveis num único Deck que utiliza vários cartões (cards).

Fonte1: (faça o download de fonte1wml.wml)

 

 

 

 

<?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="Login" title="Login">

                                <do type="accept" label="Senha">

                                                <go href="#Senha"/>

                                </do>

                                <p>

                                Usuário:

                                <select name="nome" title="Nome:">

                                                <option value="joão">João</option>

                                                <option value="Sergio">Sergio</option>

                                                <option value="Maria">Maria</option>

                                                <option value="Claudio">Claudio</option>

                                </select>

                                </p>

                </card>

 

                <card id="Senha" title="Senha:">

                                <do type="accept" label="Resultado">

                                                <go href="#Resultado"/>

                                </do>

                                <p>

                                Senha: <input type="text" name="senha"/>

                                </p>

                </card>

 

                <card id="Resultado" title="Resultado:">

                <p>

                Entrada:<br/>

                Nome: $(nome)<br/>

                Senha: $(senha)<br/>

                </p>

                </card>

</wml>

 

Como você pode ver, o prolog deste documento contém a versão do XML. Depois deste, vem o elemento do documento WML, o Deck, que contém tres cartões: Login, Senha e Resultado. Cada um destes cartões é definido usando um elemento <card>. Os cartões do Login e da Senha também definem Eventos, eles utilizam o elemento <do type ="accept"> para definir o evento a ser chamado.

Quando o elemento "accept" é encontrado, ele é mostrado no display do celular (ou outro dispositivo) como uma opção.

Selecionando uma destas opções, o elemento <go> será analizado.

Se você está familiarizado com a tag anchor <a> no HTML, e você conhece as especificações do atributo href, então se pode fazer um link no browser para uma âncora selecionada . O elemento WML <go> e o atributo href trabalham da mesma maneira. Com HTML, para fazer um link para outro cartão no mesmo documento, você simplesmente insere o símbolo # antes do link. Por exemplo, um link para o cartão Resultado, é só definir o seguinte elemento:

<go href="#Results"/>

Este cartão resultado emprega variáveis recuperando e exibindo o conteúdo das variáveis Nome e Senha. Lembre-se que as variáveis são substituídas em um cartão ou deck usando a seguinte sintaxe:

$(nome_da_variável)

 

Acessando um Servidor de Scripts

 

Sem a habilidade de executar transações no servidor, o WML serviria somente para fornecer uma maneira padronizada de exibir um texto ao cliente. Com a habilidade de se conectar dinâmicamente a um servidor remoto, aí então se abre, aos dispositivos WAP, a possibilidade transação de mensagens, base de dados das empresas e até mesmo o e-commerce. Os dispositivos WAP interagem com estas origens de dados através da Gateway WAP. Este Gateway deve se conectar a um portador, como: CDMA, GSM2, GPRS. Entretanto, é possível instalar e testar produtos do Gateway conjuntamente com servidores da WEB, tais como o IIS4 (Microsoft) ou o Apache.

Para rodar WML e WMLScript, configure os MIME types para:

WML text/vnd.wap.wml wml
WMLScript text/vnd.wap.wmlscript wmls

Feito isso, será criado um exemplo simples que permite que o usuário selecione uma opção e então recupere dados de um servidor baseado na opção escolhida. Neste exemplo, utilizaremos o Active Server Pages (ASP) para o script server-side e, naturalmente nosso servidor deverá suportá-lo. Pode-se usar outros servidores para Servlets Java, JavaScript ou Perl. Fonte2 exibe o código fonte em WML para um novo deck. Basicamente ele contém:

<select>

Elemento que dá ao usuário algumas opções de recuperação

<go>

Elemento para a lista de seleções que chama um servidor de scripts com os argumentos apropriados.

Fonte2: (faça o download de fonte2wml.wml)

<?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="Lazer" title="Selecione">

                                <p>

                                <select name="Opcao" title="Opcao">

                                    <option value="Futebol">Futebol</option>

                                    <option value="Volei">Volei</option>

                                    <option value="Tenis">Tenis</option>

                                    <option value="Ciclismo">Ciclismo</option>

                                </select>

                                </p>

                                <do type="accept" label="Execute">

                                    <go href="fonte3wml.asp" method="post">

                                       <postfield name="Opcao" value="$(Opcao)"/>

                                    </go>

                                </do>

                </card>

 

</wml>

O servidor de script (mostrado em Fonte3) examina a entrada e produz uma saída WML para ser mostrada no dispositivo WAP.

Fonte3: (faça o download de fonte3wml.asp)

<%

Dim conteudo

 

If Request.Form("Opcao") = "Futebol" Then

                conteudo = "Você selecionou Futebol"

ElseIf Request.Form("Opcao") = "Volei" Then

                conteudo = "Você selecionou Volei"

ElseIf Request.Form("Opcao") = "Tenis" Then

                conteudo = "Você selecionou Tenis"

ElseIf Request.Form("Opcao") = "Ciclismo" Then

                conteudo = "Você selecionou Ciclismo"

End If

 

Response.ContentType = "text/vnd.wap.wml"%>

 

<?xml version="1.0"?>

<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">

<wml>

<card>

<p>

 

<%Response.write(conteudo)%>

 

</p>

</card>

</wml>

 

Algumas coisas devem ser mencionadas para que este exemplo funcione em seu servidor web local. Você deve registrar os tipos apropriados do MIME type no seu servidor web de modo que o conteúdo WML possa ser corretamente exibido. Os dois MIME types que devem ser registrados são:

.wml text/vnd.wap.wml
.wmls text/vnd.wap.wmlscript

Para usar imagens bitmap wireless (WBMP - o formato da imagem suportado para WAP), adicione também:

.wbmp image/vnd.wap.wbmp

 

Tags WML

 

<a>

<access>

<anchor>

<b>

<big>

<br>

<card>

<do>

<em>

<fieldset>

<go>

<head>

<i>

<img>

<input>

<meta>

<noop>

<onevent>

<optgroup>

<option>

<p>

<postfield>

<prev>

<refresh>

<select>

<setvar>

<small>

<strong>

<table>

<td>

<template>

<timer>

<tr>

<u>

<wml>

 

 

 

 

 

 

 

 

 

CONCEITOS

 


<a>

 

Especifica o texto dentro das tags um hiperlink. O destino de uma ligação é especificado como uma URL: O endereço ou o ID de um outro tag. Os autores devem usar esta tag ao invés da tag anchor.

Esta tag é a forma curta de anchor e é limitado a tarefas que não utilizem variáveis.

 

<access>

 

Especifica a informação controle do acesso para todo deck. É um erro utilizar mais de um elemento access em um deck. Se um deck não incluir um elemento access, o controle de acesso é desabilitado. Quando o controle de acesso é desabilitado, os cartões em toda o deck podem acessar esto deck.

Os domínios e os atributos path especificam quais são os outros decks que se pode acessar. Quando o browser navega de um deck para outro, executa verificações do controle de acesso para determinar se o deck do destino permite o acesso do deck atual.

Se um deck tiver um domínio ou atributo path, a URL consultada deve combinar os valores dos atributos. A combinação é feita como se segue: o sufixo do domínio do access é combinado com o prefixo do domínio da URL consultada e o path do access tem seu prefixo combinado a parcela do path da URL consultada.

Para combinar o sufixo do domínio use o elemento inteiro de cada domínio-secundário e combine cada elemento exatamente.

<anchor>

 

Especifica ao texto dentro das tags um hiperlink. O destino de uma ligação é especificado como uma URL: O endereço ou o ID de um outro tag. Os autores devem usar a tag "a" ao invés de anchor.

A tag "a" é a forma curta de anchor e é limitado a tarefas que não utilizem variáveis.

 

<b>

 

Indica que o texto dentro das tags deve estar com formato bold (negrito). Os autores devem tentar usar os tags strong em lugar da tag b, i e u.

<big>

 

Indica que o texto dentro das tags deve estar em um formato grande

 

<br>

 

Termina a linha atual e começa uma linha nova. Também é suportado dentro de tabelas.

 

<card>

 

Um deck de WML contém uma coleção de cards (cartões). O elemento card delimita elementos texto e permite a entrada de uma grande variedade de dispositivos.

Um card pode conter markup, os campos de entrada e os elementos que indicam a estrutura do card.

A identificação de um card pode ser usada como um fragmento de "anchor".

<!--

.LinksWhite{COLOR:#CC6600;TEXT-DECORATION:none;font-size:8pt;line-height:100%;font-family:verdana}A.LinksWhite:hover{COLOR:#000000}TABLE

-->

<do>

 

Esta tag fornece um mecanismo para que o usuário acesse acima do card atual.

A representação da tag depende do dispositivo. A tag 'do' deve aparecer no card e no deck.

 

<em>

 

Indica que o texto dentro das tags devem ser tratados com ênfase. Os autores devem tentar usar o "em" e o tag "strong" em lugar das tags "b", "i", "u".


<fieldset>

 

O elemento de fieldset permite o agrupamento de campos relacionados e texto. Este agrupamento permite otimizar o layout e navegação. Elementos Fieldset podem aninhar e podem proporcionar para o autor meios para especificar comportamentos para uma grande variedade dispositivos.

<!--

.LinksWhite{COLOR:#CC6600;TEXT-DECORATION:none;font-size:8pt;line-height:100%;font-family:verdana}A.LinksWhite:hover{COLOR:#000000}TABLE

-->

<go>

 

Declara uma tag 'go' indicando a navegação para uma nova URL. Se o nome da URL é um cartão WML ou deck, a execução da tarefa exibirá o conteúdo indicado. Esta tarefa executa uma operação 'push' no histórico do browser

 

<head>

 

A tag head contém a informação relacionando o cabeçalho ao todo, inclusive meta-data e tags de controle de acesso.

 

<i>

 

Indica que o texto dentro das tags deverá ser exibido em modo itálico. Os autores deveriam tentar usar a tag strong em lugar de tags como b, i e u.

 

<img>

 

A tag img indica que uma imagem será incluída no fluxo do texto. O layout da imagem é feito dentro do contexto do layout do texto.

 

<input>

 

O elemento input especifica a entrada de um objeto. O input do usuário é restrito pelo atributo Format (opcional).


<!--

.LinksWhite{COLOR:#CC6600;TEXT-DECORATION:none;font-size:8pt;line-height:100%;font-family:verdana}A.LinksWhite:hover{COLOR:#000000}TABLE

-->

<meta>

 

O elemento meta contém o meta-information genérico relativo ao deck do WML. É especificado um meta-information com nomes de propriedades e valores. Esta especificação não define nenhuma propriedade, nem define como os browsers têm que interpretar meta-data.




<noop>

 

A tag noop especifica que nada deveria ser feito - quer dizer, " nenhuma operação". Isto pode ser usado em um cartão para cancelar uma tarefa que foi especificada em um template à nível de deck.

 

<onevent>

 

O elemento onevent liga uma tarefa a um evento particular para o elemento imediatamente incluído. Por exemplo, especificando um elemento de onevent dentro de um elemento card, este associa um evento intrínseco que o liga com aquele elemento card. Os browser ignorarão qualquer elemento onevent que especifica um tipo que não corresponda a um evento intrínseco legal para o elemento imediatamente incluído.

<optgroup>

 

O elemento optgroup permite ao autor agrupar elementos option relacionados em uma hierarquia. Os browsers podem usar esta hierarquia para facilitar o layout de apresentação em uma grande variedade de dispositivos.

 

<option>

 

Este elemento especifica uma única opção de escolha em um elemento selecionado.


<!--

.LinksWhite{COLOR:#CC6600;TEXT-DECORATION:none;font-size:8pt;line-height:100%;font-family:verdana}A.LinksWhite:hover{COLOR:#000000}TABLE

-->

<p>

 

O elemento p estabelece uma linha em branco e parâmetros de alinhamento para um parágrafo. Se o alinhamento do texto não é especificado, o padrão passa ser o alinhamento à esquerda. Se o modo de linha de texto não é especificado, ficará idêntico ao modo de linha de texto do parágrafo anterior no cartão atual. Parágrafos vazios (um elemento vazio ou um elemento com um insignificante espaço branco) será considerado como insignificante e será ignorado nos browsers. Se o primeiro elemento p em um cartão não especificar uma linha de texto ou modo de alinhamento, o padrão será o do modo inicial do cartão.

Os browsers inserirão uma linha no fluxo de texto entre parágrafos significantes.

 

<postfield>

 

O elemento postfield especifica um nome de um campo e o valor para transmissão a um servidor de origem durante uma requisição de URL. A codificação atual do nome e valor dependerá do método usado para comunicar-se com o servidor de origem.

 

<!--

.LinksWhite{COLOR:#CC6600;TEXT-DECORATION:none;font-size:8pt;line-height:100%;font-family:verdana}A.LinksWhite:hover{COLOR:#000000}TABLE

-->

<prev>

 

A tag prev indica a navegação para a URL anterior no histórico do browser.

 

 

<refresh>

 

A tag refresh indica uma atualização da tela e contexto do dispositivo