??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
WML使用XML文档字符集,目前支持Unicode 2.0Q和HDML不同QWML的所有标{,属性和规定的可接收值必d写,CARD的名字和变量也是区分大小写的。和HDML一P对于q箋的空字符Q只昄一个空根{标{ֆ属性的值必ȝ"或者’括hQ属性名Q=和g间不能有I格。对于不成对出现的标{,必须?gt;前加/Q比?lt;br/>?/p>
在对变量的引用上和HDML基本相同Q有Q?(var1:esc)$(var1:noesc)$(var1:unesc)三种形式Q具体含义参见前面HDML的相关部分。在对保留字W的处理上也基本相同Q对应的取代字符有:< <> >??'" "& &$ $$I格 - -q里要指出的是在URL的传递过E中Q用来连接参数的&必须转化?amp;?/p>
Q?基本格式和文件头
wml文g的一般格式:
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//
DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head> <access/> <meta..../> </head> <card>Some contents... </card><wml>Some contents...
l构看上dHTMl文g很类|对于每一个DECKQ在其文档开头必L明以下的cd声明?/p>
千万注意字母的大写。对于一个DECKQ其文g大小最好不要超q?.2K?/p>
标签和HTML中的标签一P用来表明q是一个WML的DECKQ它有一个可选的xml:lang属性来制定文档的语aQ比如表C文档语aZ文?/p>
和HTML一P标签包含了该DESK的相关信息。标{之间可以包含一个标{֒多个标签?/p>
相当于HTML中的标签Q指定该DECK的访问控制信息,它用两个可选的属性,domain用来指定域,默认gؓ当前域,path用来指定路径Q默认gؓ"/"Q即根目录。由于单独用,所以要?l尾Q以后对于类似的情况不再赘述?/p>
和HTML中的cMQ提供了该DECK的meta信息。属性是必选的Q包括一下三U情况name="name" UP.Link Server忽略meta数据http-equiv="name" UP.Link Servermeta数据转ؓHTTP响应?同HTML)user-agent="agent" UP.Link Server直接meta数据传给手机讑֤content属性也是必选的Q其内容Ҏ属性而定。scheme属性目前尚不支持。forua为可选属性,指定在该wml文g传到客户端之前,标签是不是被中间代理删除(因ؓ传输的协议可能改?Q默认gؓfalse?/p>
目前支持的meta数据:指定DECK在手机内存缓存中的存储时间段Q默认的?0?除非内存耗尽)Q在该期_手机对于讉Kq的DECK直接从缓存里调用。如果信息是Ҏ间敏感的Q可以用max-age指定DECK在缓存里的生存期Q最单位是U,如果指定?Q则每次都需通过q接服务器来调用该DECK?br />
cM于普通浏览器的书{֊能。当用户一个CARD做了书签后,手机览器首先用一个标记记录该CARDQ这个标记默认的是标{中的title属?以后会讲?Q然后当用户选择了该书签以后Q浏览器׃打开被记录的URL。但是因为在默认的情况下Q手Z记录所有的DECKQ所以,一般被用来使手Z要记录当前的URLQ即不用title属性。此外,如果要ؓ书签指定不同于当前DRECk的URLQ则需用title属性?/p>
一个DECK可以包含多个CARDQ每个CARD的内容可能不止一屏显C,注意DECKQCARD和屏q显C围的关系。一个CARD可以包含以下可选的属性:*id属性用来指定CARD的名字,可用来在CARD间蟩转,相当于在HTML中在内跌{时用?/p>
*title属性用来作Z{标记Q该属性一般不会显C在屏幕上?/p>
*newcontext属性,默认gؓfalseQ用来指C当跌{到本CARDӞ手机是不是要清除以前保留的信息,包括变量Q堆栈里的历史记录,重新讄手机状态等?/p>
*ordered属性,默认值是trueQ表明该CARD里的内容是按固定的顺序显C,q是按用L选择来显C。这点和HTMl不同QCARD面里的内容可以按一定的序昄Q默认的是按U性顺序显C,x代码的顺序,但是Q要注意的是Q以下三个标{ֿL以下序来写Q?q和以后要讲的“事件”有?。这样做是ؓ了方便填表单Q当ordered讄为trueӞ如果一个表单的内容不能在一屏里昄完,分成多屏显C;当ordered讄为falseӞ手机可以昄一个概要CARD来ȝ有效的选项Q用户可以从中选取表单选项来填写?/p>
*onXXX属性,cM于HTML标签中的onXXX属性,用来捕捉事gQ当事g被触发时执行指定的操?d)Q在q里是{向某个URL?/p>
Q?昄文本
在文本的昄上WML基本和HTML相同。文字段落包含在<p align= "alignment" mode=" wrapmode">?lt;/p>之间Qalign属性指定该D|字的寚w方式Q默认的是leftQ其他可选择right和centerQmode属性指定当一行显CZ下所有的文字时是否自动换行,默认的是自动换行wrapQ如果选nowrapQ则在一行中昄Q浏览器会通过cM于水qx动条的机制来昄所有文字。换行标{也一样ؓ<br/>Q这里先替一下,在标单中如果有多?lt;input>或?lt;select>Q其间不要用<br/>Q否则会使手机浏览器认ؓ是断点而把表单分页昄?/p>
文字的修饰标{有<b>?lt;i>?lt;u>?lt;em>?lt;strong>?lt;big>?lt;small>Q意义和HTML里的相同?/p>
表格的显C标{也和HTML相近Q?lt;table title="name" align="left|right|center" columns="列数">?lt;tr>?lt;td>来显C,<table>的title属性用来给表格命名Qcolumns属性指定表的列敎ͼ不能?Q可选的align属性和前面提到的一h寚w方式。表g可以包含文字和图片?
test1.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 align="center"><i>Hello</i><br/><b><i>World!</i></b><table title="mytable" align="right" columns="2"><tr><td>1-1</td><td>1-2</td></tr><tr><td>2-1</td><td>2-2</td></tr></table></p></card></wml>
Q?昄囄
昄囄(1位黑白BMP囄)的标{一LgHTMLQ?lt;img alt="text" src="url" localsrc="icon" align="left" height="n" width="n" vspace="n" hspace="n"/>Q属性中alt和src是必要有的Q其他可选。另外要注意的是<img>要放?lt;p>里,不能攑֜<do>?lt;option>{功能健标签和选单标签里?/p>
*alt属性用来指定当手机不支持图片显C时用来昄的文字?/p>
*src属性指定图片的URLQ但当有了以下的localsrc属性时Q手机浏览器忽略src属性?/p>
*localsrc属性用来指定显C存在手机ROM中的图标Q如果找不到Q则到UP.Link Server上去找?/p>
*可选的align属性用来表明图片同当前行文本的寚w方式Q默认gؓbottomQ可选to和middle?/p>
*height、width、vspace、hspace属性分别指定图片的长宽和距环绕文字的间距,目前不是所有的WAP手机都支持这些属性?/p>
test2.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 align="center"><img alt=":)" src="xxx.bmp" localsrc="smileyface"/></p></card></wml>
Q?锚和d
q接是HTML面里最基本的功能,在WML里也一L<a href="url" title="label">?lt;/a>来包括用来徏立连接的文字Q必选属性href指定了要打开的URLQ可选的title属性给该连接取个标记名字,q个名字作Y按钮之一的ACCEPT?详见以前的HDML入门文章)的标记显C在屏幕的Y按钮区,所以通常可以属性作为提C文字用?/p>
然而,以上的连接在WML里只是Q务的一U情况,Z能够使用其它dQ所以引q了新的标签<anchor title="label">d标签文本</anchor>Q?lt;a>其实是当d标签?lt;go/>时的单表C方式?/p>
test3.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><anchor title="Link1"><go href="test1.wml"/>News</anchor><br/><a title="Link2" href="test2.wml">Sports</a></p></card></wml>WML里的d标签有以下几U,除了用于<anchor>Q还可以用在事g中:1)<go>用来指示览器显C指定的URLQ包括DECK的第一个CARD或者指定的CARD。语法如?<go href="url" sendreferer="false|true" method="get|post" accept-charset="charset"><postfield name="name" value="value"/><setvar name="name" value="value"/></go>其中href属性ؓ必选,其他为可选?/p>
sendreferer属性表C是否传递调用href所指定的URL的页面的URLQ也是当前늚URLQ即HTTP头中的HTTP_REFERERQ默认gؓfalseQ可选gؓtrue。method和HTML中的表单FORM的method属性一P指定表单是以get的方式还是post的方式递交Q以便cgi处理Q默认的gؓgetQ但如果未指定method?lt;go></go>间存?lt;postfield>Q手动以post方式传递。accept-charset属性可覆盖在HTTP头里指定的字W集Q可以写多个字符集,如accept-charset="UTF-8,US-ASCII, ISO-8859-1"?br />
1)<postfield name="name" value="value"/>可以看作是HTML表单FORM中的<INPUT TYPE="HIDDEN" NAME="变量? VALUE="?>Q通过它可以向指定的URL传递以“变量名/值”Ş式的数据。name和value属性都是必选的。注意只有这里的变量是用来递交lCGIE序的?/p>
除了<postfield>Q还可以?lt;go>?lt;/go>间加入一句或者多?lt;setvar name="name" value="value"/>Q该语句的意思是Q当触发某一事gӞl变量赋倹{?/p>
要注意的是,?lt;go>?lt;/go>之间没有M语句Ӟ要用<go/>的Ş式,q点比较特别Q比?lt;anchor title="Link1"><go href="test.wml"/>News</anchor>?/p>
2)<prev>用来当前页面的URL压入URL历史堆栈Qƈ打开此前的URLQ若该URL不存在,?lt;prev>无效。语法类?lt;go>Q?lt;prev><setvar name="name" value="value"/></prev>Q?lt;prev>?lt;/prev>之间可加入一句或多句<setvar name="name" value="value"/>Q若不加Q则必须变成<prev/>的Ş式?/p>
3)<refresh>用来h当前的页面,从而得页面内的变量刷斎ͼ语法?lt;refresh><setvar name="name" value="value"/></refresh>?/p>
4)<noop>Q表CZ么也不做Q该标签不能用在<anchor>中,一般用在覆盖DECKU的<do>(后面会有说明)?/p>
Q?昄表单
cM于HTML?lt;FORM>Q?lt;fieldset>可用来包括一l表单选项Q但不是必须的。前面说q,?lt;card>的ordered讄为falseӞ手机可以昄一个概要CARD来ȝ有效的选项Q方便用户从中选取表单选项来填写,概要CARD是Ҏ<fieldset>和独立的输入?lt;input>以及选单<select>来ȝ的。语法ؓQ?lt;fieldset title="label">表单内容</fieldset>Q可选的title属性除了可用来表示表单的名字外Q还在概要CARD里作为选择的标题。表单内容可以是嵌套?lt;fieldset>Q输入框<input>Q选单<select>和必要的提示文本?/p>
<input name="variable" title="label" type="type" value="value" default="default" format="specifier" emptyok="false|true" size="n" maxlength="n" tabindex="n"/>Q用来输入文本,除了name属性是必要的,其他可选?/p>
*name属性,指定了用来存储该输入文本的变量名字?/p>
*title属性,该输入框的名字,同样可被用来作ؓ概要CARD中的选项名?/p>
*type属性,默认gؓtextQ如选择passwordQ则输入的数据显CZؓ*?/p>
*value属性,在语法和行ؓ上等同于下面的default属性,*default属性,指定输入框的默认|即name属性指定变量的默认|当用戯入新值时Q该值无效,如果该gW合以下format属性的规定Q则手机也忽略该默认倹{?/p>
*format属性,用来格式化输入的数据Q可用的标记如下Q用时可用“一位数字标记”和?标记”的形式Q前者代表N个标记型字符Q如3XQ后者代表Q意个(于maxlength属性的?标记型字W?br />
<optgroup>可用来将多个<option>分组Q?lt;optgroup>?lt;/optgroup>间还可包?lt;optgroup>?lt;option>Q该标签目前未被支持?/p>
<option>Q类gHTML中选单?lt;OPTION>Q用来表C选单的可选项?lt;option>?lt;/option>间可包括事g(见下?和选单的显C文本?lt;option>的属性ؓ可选,其中value属性用来提供|当选到该项后,该Dl?lt;select>的name属性所指定的变量。onpick属性,用来指定用户选到该项q按ACCEPT键后所打开面的URL?/p>
test5.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="card0" ordered="false"><p>Please select a city...<select title="Cities List" name="city"><option title="Beijing" value="c1">Beijing</option><option title="Shanghai" value="c2">Shanghai</option><option title="Hongkong" value="c3">Hongkong</option></select>Please select columns...<select title="Column List" multiple="true" name="col"><option title="Hot News" value="l1">News</option><option title="Cool Sports" value="l2">Sports</option><option title="Pop Enter,,," value="l3">Entertainment</option></select></p></card></wml>
Q?事g
WML的事件基本上分ؓ两大c,一cL键盘(包括软硬按钮)输入事gQ用<do>标签来处理,另一cL相关面内部的事Ӟ?lt;onevent>标签来处理?/p>
<do>的语法如下:<do type="type" label="label" name="name" optional="false|true">d</do>QQ务就是以前提到的四种d?lt;do>的属性中Qtype是必选的Q其他ؓ可选?/p>
*label属性,指定了Y按钮在屏q上的显C文本。目前type属性ؓdeleteQhelpQprev时该属性无效?/p>
*name属性,?lt;do>取个名字Q同一的CARD里的<do>不能重名。如果CARDU的<do>和DECKU的<do>同名Q则覆盖DECKU的<do>?/p>
*optional属性,指定手机是不是可以忽略这个事Ӟ默认值是false?/p>
*type属性,指定触发的事Ӟ具体如下QtypeD发原因accept调用ACCEPT按钮机制delete调用DELETE按钮机制help调用HELP按钮机制options调用选择按钮机制prev调用PREV按钮机制reset调用清除和重新设定手机状态时的RESET机制(目前不支?unknown调用unknown机制Q等于type=""(目前不支?vnd. co-type调用厂商特定的机?目前不支?X-*, x-*供以后?不保?(目前不支?test6.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><card id="card0" ordered="false"><do type="accept" label="InputName" name="do1"><go href="#card01"/></do><p>NAME:<input name="userName" title="User Name" type="text" format="*M" emptyok="false" maxlength="12"/></p></card><card id="card01"><p>You name is $(userName:noesc).</p></card></wml><onevent>的语法如下,<onevent type="type">d</onevent>Q必选属性type的取值如?type值如果用h行了以下操作执行Q务onpick用户选择或不选一?lt;option>Ҏ?br />
标记描述AMW号或者大写字?不包括数?aMW号或者小写字?不包括数?NM数字(不包括符h者字?XMW号、数字或者大写字?不可改变为小写字?xMW号、数字或者小写字?不可改变为大写字?MMW号、数字或者大写字?可改变ؓ写字母)或者多个字W,默认为首字大写mMW号、数字或者小写字?可改变ؓ大写字母)或者多个字W,默认为首字小?maxlength属性,指定了用户可输入的最大字W长度,最大限制ؓ256个字W?/p>
*emptyok属性,表示用户可否不填输入框,默认为falseQ即要填?/p>
*size属性,输入框显C长度,目前未被支持?/p>
*tabindex属性,cM于在HTML表单中按TAB键后Q焦点落在哪个选项上,该值决定了q个选择序Q数字大的排在后面。目前未被支持?/p>
test4.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="card1" ordered="false"><p>USERNAME:<input name="userName" title="User Name" type="text" value="YourNameHere" format="*M" emptyok="false" maxlength="12" tabindex="1"/>PASSWORD:<input name="password" title="Password" type="password" format="8x" emptyok="false" maxlength="8" tabindex="2"/>COMMENTS:<input name="comments" title="comment" type="text" value="YourCommentsHere" format="*M" emptyok="true" maxlength="30" tabindex="3"/></p></card></wml>上?lt;card>中的odered的值改?true"试试看,然后再在<p>?lt;/p>内加?lt;fieldset title="field1">?lt;/fieldset>试试看?/p>
<select>选单cM于HTML表单中的<SELECT>Q?lt;select>?lt;/select>间可包含<optgroup>?lt;option>标签Q语法如下,所有属性都为可选:<select title="label" multiple="false|true" name="variable" default="default" iname="index_var" ivalue="default" tabindex=" n"><optgroup title="label">选单内容</optgroup><option title="label" value="value" onpick="url">事g或者文?lt;/option></select>*title属性,如以?lt;input>的title属性?/p>
*multiple属性,指定用户可否q行多项选择Q默认gؓfalse?/p>
*name属性,用来存储用户选择的变量名,其gؓ<option>标签的value属性,若用h有选择又没有用default属性指定默认|则手机将改变量赋gؓI字W串""Q对于多w择Q每个值用?”分开?br />
*default属性,可ؓname属性指定的变量赋默认倹{?/p>
*iname属性,用来记录用户选择的位置Q相应的g1开始。若没选,则该gؓ0?/p>
*ivalue属性,用来记录默认值所在的位置?br />
onenterforward用户使用<go>d到达一个CARD时?/p>
onenterbackward用户使用<prev>dq回到前面的CARDӞ或者按BACK按钮时?/p>
ontimer?lt;timer>q期时?/p>
test7.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><card id="card0" ordered="false"><p>Please select a city...<select title="Cities List" name="city"><option title="Beijing" value="Beijing"><onevent type="onpick"><go href="#card01"/></onevent>Beijing</option><option title="Shanghai" value="Shanghai" onpick="#card01">Shanghai</option><option title="Hongkong" value="Hongkong" onpick="#card01">Hongkong</option></select></p></card><card id="card01"><p>You are Living in $(city:noesc)</p></card></wml><timer/>可以用来在用户不q行M操作的一D|间后Q自动执行一个Q务,MȀzCARD面的Q务和用户操作都会启动<timer/>Q而Q务进行时Q?lt;timer/>停止。每个CARD只能有一?lt;timer/>Q一?lt;timer/>只能触发一个Q务。语法如下:<timer name="variable" value="value"/>Q其中name为可选属性,指定Z个变量名Q当退CARDӞ该变量存储此时定时器的|当定时器时Ӟ手机该变量设ؓ0Qvalue为必选属性,用来讄定时器的定时|最单位ؓ0.1U?/p>
test8.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><card id="card1" ontimer="#card2"><timer name="time1" value="50"/><p align="center">After 5s, goto card2</p></card><card id="card2"><onevent type="ontimer"><go href="#card1"/></onevent><timer name="time2" value="50"/><p align="center">Here is card2!</p></card></wml>再提一下,<onevent><timer><do>三者必L以上序写?/p>
此外在DECKU还可以加入<template>Q用来将事g捆绑在DECKU上Q语法如下:<template onenterforward="url" onenterbackward="url" ontimer="url"><do>或?lt;onevent></template>test9.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><template><do type="accept" label="deckPress" name="do1"><go href="#card01"/></do></template><card id="card0" ordered="false"><do type="accept" label="cardPress" name="do1"><go href="#card02"/></do><p>Press ACCEPT...</p></card><card id="card01"><p>Here is card01</p></card><card id="card02"><p>Here is card02</p></card></wml>
onenterforward用户使用<go>d到达一个CARD时?/p>
onenterbackward用户使用<prev>dq回到前面的CARDӞ或者按BACK按钮时?/p>
ontimer?lt;timer>q期时?/p>
test7.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><card id="card0" ordered="false"><p>Please select a city...<select title="Cities List" name="city"><option title="Beijing" value="Beijing"><onevent type="onpick"><go href="#card01"/></onevent>Beijing</option><option title="Shanghai" value="Shanghai" onpick="#card01">Shanghai</option><option title="Hongkong" value="Hongkong" onpick="#card01">Hongkong</option></select></p></card><card id="card01"><p>You are Living in $(city:noesc)</p></card></wml><timer/>可以用来在用户不q行M操作的一D|间后Q自动执行一个Q务,MȀzCARD面的Q务和用户操作都会启动<timer/>Q而Q务进行时Q?lt;timer/>停止。每个CARD只能有一?lt;timer/>Q一?lt;timer/>只能触发一个Q务。语法如下:<timer name="variable" value="value"/>Q其中name为可选属性,指定Z个变量名Q当退CARDӞ该变量存储此时定时器的|当定时器时Ӟ手机该变量设ؓ0Qvalue为必选属性,用来讄定时器的定时|最单位ؓ0.1U?/p>
test8.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><card id="card1" ontimer="#card2"><timer name="time1" value="50"/><p align="center">After 5s, goto card2</p></card><card id="card2"><onevent type="ontimer"><go href="#card1"/></onevent><timer name="time2" value="50"/><p align="center">Here is card2!</p></card></wml>再提一下,<onevent><timer><do>三者必L以上序写?/p>
此外在DECKU还可以加入<template>Q用来将事g捆绑在DECKU上Q语法如下:<template onenterforward="url" onenterbackward="url" ontimer="url"><do>或?lt;onevent></template>test9.wml---------------<?xml version="1.0"?><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"><wml><head><meta http-equiv="Cache-Control" content="max-age=0"/></head><template><do type="accept" label="deckPress" name="do1"><go href="#card01"/></do></template><card id="card0" ordered="false"><do type="accept" label="cardPress" name="do1"><go href="#card02"/></do><p>Press ACCEPT...</p></card><card id="card01"><p>Here is card01</p></card><card id="card02"><p>Here is card02</p></card></wml>
WML是一U基于XML的标记语aQ她的官方说明和规范是由WAP论坛l护的。WML的文档类型定义是xml文gcd的,http://www.wapforum.org/DTD/wml_1.1.xml?/p>
和HTML语言一PWML是ؓ了显C数据的Q而XML的目的则是描q数据,我们定义了一pd的标记ƈl织成ؓ语法规范把它UCؓDTD(Document Type Definition)。支持WAP的手机里面都安装了WAP览器他能够解析q些标记q正显C在手机屏幕上?/p>
通常在WML的文本的开头都有这L内容
<xml version='1.0'>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
我们把它叫做序言。在后面是标记了,我们所有的数据都是嵌套在这两个标记里面的。WML的标记非常少Q基本可以分ZU一U称为Deck/Card一U称为Event。在q里不能一一讲述Q在我们开发WML应用的时候参考手册就可以了,我给大家提供一个在U的参考:Online WML Tag Reference?/p>
在标记内的内Ҏ们把它称为deckQ每个屏q的内容我们把它定义为cardQ由于WML是ؓ无线|络传输定义的,充分考虑到带宽的限制Q我们允许在一个deck内包含多个cardq可以一起下载到用户代理中,q样我们可以在本地q行不同屏幕的切换了Q避免每ơ都去联|。当然这也给客户端增加了负担Q因此我们要避免在deck内包含过多的card?/p>
下面我们~写一个WML的例子test.wmlQ内容如下:
<?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="Password">
<go href="#Password"/>
</do>
<p>
UserName:
<select name="name" title="Name:">
<option value="John Doe">John Doe</option>
<option value="Paul Smith">Paul Smith</option>
<option value="Joe Dean">Joe Dean</option>
<option value="Bill Todd">Bill Todd</option>
</select>
</p>
</card>
<card id="Password" title="Password:">
<do type="accept" label="Results">
<go href="#Results"/>
</do>
<p>
Password: <input type="text" name="password"/>
</p>
</card>
<card id="Results" title="Results:">
<p>
You entered:<br/>
Name: $(name)<br/>
Password: $(password)<br/>
</p>
</card>
</wml>
在这个deck中包含了三个card,可以一q下载到客户端,通过按键操作我们可以在不同的card之间q行切换Q你可以在手机或者winwap模拟器中看看q行的效果。下面是winwap下的q行截图?/p>
虽然我们已经可以开发wml的应用了Q但是这些毕竟都是些静态的内容。如果我们要开发和服务器交互的功能呢?{案当然是我们可以用Servlet技术。看下面的例子:
<?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="Order" title="Query Inventory">
<p>
<select name="Items" title="Items">
<option value="Books">Books</option>
<option value="Music">Music</option>
<option value="Video">Video</option>
<option value="Software">Software</option>
</select>
</p>
<do type="accept" label="Query">
<go href="http://222.28.218.222:8088/wap/wapservlet" method="get">
<postfield name="Items" value="$(Items)"/>
</go>
</do>
</card>
</wml>
用户可以从列表中选择Item,通过无线|络传输l服务器后Servlet通过request.getParameter()Ҏ得到用户的选择q发送给用户Qservlet的代码如下:
package com.j2medev.mingjava;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WapServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
{
String select = request.getParameter("Items");
response.setContentType("text/vnd.wap.wml");
PrintWriter out = response.getWriter();
out.println("<?xml version=\"1.0\"?>");
out.println("<!DOCTYPE wml PUBLIC\"-//WAPFORUM//DTD WML 1.1//EN\"");
out.println("\"http://www.wapforum.org/DTD/wml_1.1.xml\">");
out.println("<wml>");
out.println("<card title=\"test\">");
out.println(" <p align=\"center\">");
out.println("you selected "+select);
out.println("</p>");
out.println("</card>");
out.println("</wml>");
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException
{
doGet(request,response);
}
}
正确部vServlet和wml文g后,在winwap下输?a target="_blank">http://222.28.218.222:8088/test2.wml 认后就可以看到you selected xxxx的内容了?/p>
1、基本属性(tableQ?/p>
相关属性:
title 表格的标?br />align 格内的文本和囄讄水^寚w方式QC=center L=left R=rightQ缺省参CؓL
columns 表格列数目,当该变量讄?时会发生错误?/p>
2、表DQtrQ?/p>
tr用来声明一行表|WML允许I白行的存在Q而且I白行不会被览器忽略?/p>
3、表格列QtdQ?/p>
td元素声明表格中的一个单元格Q单元格可以为空白,而且I白单元g会被览器忽。浏览器可以处理多行文本的单元格Q单元格分行可以?lt;img>?lt;br/>标签?/p>
Nokia 7110不支持多列表|所以表格应用在一定程度上受到限制?/p>
CZQ?/p>
<?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>
<table columns="2">
<tr><td>one</td><td>two</td></tr>
<tr><td>1</td></tr>
<tr><td>B</td><td>C<br/>D</td></tr>
</table>
</p>
</card>
</wml>
WML提供1位黑白BMP囄的操作,标签cM于HTMLQ?lt;img alt="text" src="url" localsrc="icon" align="left" height="n" width="n" vspace="n" hspace="n"/>Q属性中alt和src是必要有的Q其他可选。另外要注意的是<img>要放?lt;p>里,不能攑֜<do>?lt;option>{功能健标签和选单标签里?/span>
alt属性用来指定当手机不支持图片显C时用来昄的文字?br /> src属性指定图片的URLQ但当有了以下的localsrc属性时Q手机浏览器忽略src属性?br /> localsrc属性用来指定显C存在手机ROM中的图标Q如果找不到Q则到UP.Link Server上去找?/span>
可选的align属性用来表明图片同当前行文本的寚w方式Q默认gؓbottomQ可选to和middle?br /> height、width、vspace、hspace属性分别指定图片的长宽和距环绕文字的间距,目前不是所有的WAP手机都支持这些属性?/span>
CZQ?/p>
<img src="http://wap.sina.com.cn/wbmp/logo.wbmp" alt="sina"/>
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//wapforun//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <xml> <card id="card1" title="Title"> <P> <!--Write your card implementation here.--> Hello World!! </P> </card> </xml> |
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapfourm.org/DTD/wml_1.1.xml"> <wml> <card id="card1" ontimer="#card2" title="Tookit Demo"> <timer value="50"/> <p aligh="center"> </br></br></br> <big> <!--Write your card implementation here.--> Welcome to.... </big> </p> </card> <card id-"card2" ontimer="#card 3"title="Toolkit Demo"> <timer value="50"/> <p align="center"> <br/><br/> <b> The Nokia<br/> </b> Wireless Application Protocol </u> ... </p> </card> <card id="card3"title="Toolkit Demo"> <p align="center"> <br/><br/><br/> <big> <i> Toolkit </i> </big> </p> </card> </xml> |
<?xml version="1.0"> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> |
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1xml"> <wml> <head> <access/> <meta..../> </head> <card> Some contents... </card> <wml> |
<?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" label="back">
<prev/>
<!--provide a button you can clink to back a step-->
</do>
</template>
<card id="friends" title="Hot link">
<p>
<a >Sina WAP</a><br/>
<a href="#nextcard">Next Card</a>
</p>
</card>
<card id="nextcard">
<p>
this is the second card.
</p>
</card>
</wml>
通过以上CZ大家应该了解C下内容:
1、语法:WML的语法与HTML怼Q仍然是一U标记语aQ而且延箋了xML语法规则
2、元素:在XML和WML 语言中,语言的基本元素称之ؓ"标签"
标签必须?< ?> 括v来?br /> 大多数标{N包括"?"?两部分,例如Q?lt;p>?lt;/p>
某些Ҏ标签可以只有一个标{,但是必须有结束标讎ͼ例如Q?lt;prev/>
3、属性:XML语言的标{֏以包含很多属性,l标{提供必要的附加信息
属性内定w常在v始标{ֆ使用
属性只作ؓ参数为标{提供必要的信息Q不会被览器显C?br /> 属性的值需要被引号括v来,可以是单引号或者双引号Q引号可以成对嵌套?br /> 例如Q?lt;card id="friends" title="Hot link">
4、注?br /> 注释内容是方便制作者阅L代码Q不会被览器显C?br /> WML不支持注释嵌?br /> 例如Q?lt;!-- This is a comment. -->
5、文档结?br /> WML文档是由Card和Deck构成的,一个Deck是一个或多个Card的集合。在得到客户l端的请求之后,WML从网l上把Deck发送到客户的浏览器Q访问者可以浏览Deck内包含的所有CardQ而不必从|上单独下蝲每一个Card?/p>
其他一些示例中没有涉及到的基本内容Q?/p>
6、大写敏感
无论是标{օ素还是属性内定w是大写敏感的,q一点承了XML的严格特性,M大小写错误都可能D讉K错误Q这是WML制作者必L意的问题?br />
7、躲避语法检查的ҎQCDATA
CDATA内的数据内容都会被当作文本来处理Q从而避开语法查,直接作ؓ文本昄?br /> CZQ?br /> < ! [ CDATA [ this ia <b> a test ] ] >
昄l果?br /> this ia <b> a test
8、定义变?br /> WML可以使用变量供浏览器和Script使用Q通过在Deck中的一个Card上设|变量,其他Card不必重新讄可以直接调用?/p>
变量的语法如下:
$identifier
$(identifier)
$(identifier:conversion)
如果变量内容包含I格需要用圆括hh。由于变量在语法中有最高的优先U,包含变量声明字符的字W串会被当作变量对待Q所以如果要昄$Q就一定要q箋使用两个$?/p>
CZQ?br /> <p> Your account has $$15.00 in it.</p>
昄l果为:Your account has $15.00 in it
XML是一U语法非怸格的语言QWML也承了q种规则QQ何地不规范语法都会导致错误?br />
q里单介l一个关于WML文g的概念,其他的细节问题会在后面的章节q详l介l?
声明
׃WML语言l承于XMLQ所以一个有效的WML文档必须包含一个XML声明和一个文件类型声明?/p>
以下是一个最常用的声明,׃WML语法要求非常严格Qؓ了避免出错,制作者可以直接拷贝粘贴到制作文档?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
注:<?xml version="1.0"?> 语句必须出现在一个Deck的首行,而且必须头写,插入M字符哪怕是I格都会造成语法错误?/p>
Ml构
q是一个最单的WML文gQ?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card title="sample">
<p>Hello WAP!</p>
</card>
</wml>
q一部分单讲解WML的变量赋值和数据提交ҎQ在后面的章节中有专门讲解?/p>
变量赋|SetvarQ?br /> Setvarl浏览器的当前页面内变量赋|该变量可以在当前Dock中的LCard中调用?/p>
相关属?
1. name 变量名,作ؓ讉K变量的标?/p>
CZQ?lt;setvar name=$bogus value=$bear>
2. value变量的?
数据交换QPostfieldQ?br /> Postfield通过URL甌与CGI交换数据?/p>
相关属?
name & value 交换参数用的变量的名字和倹{?/p>
CZQ?lt;postfield name=$bogus value=$bear>
一个综合应用的例子
CZQ?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card id="Start" title="Sina WAP">
<do type="accept">
<setvar name="MyCGI" value="/cgi-bin/count.pl">
<go href="$MyCGI" method="post">
<postfield name="one" value="one one"/>
<postfield name="two" value="two two"/>
</go>
</do>
<p>Hello World!</p>
</card>
</wml>
上例相当于生一个count.pl?one="one one"&two="two two"的Post甌?br />
go的基本属性和应用
实现Card之间跌{的一个基本方法是goQgo和do、anchor{标{l合是WML高应用的一个基?/p>
相关属性:
hrefQ声明链接的URL
sendrefererQ表C是否传递调用href所指定的URL的页面的URLQ也是当前늚URLQ即HTTP头中的HTTP_REFERERQ默认gؓfalseQ可选gؓtrue
methodQWML的method与HTTP提交表单的方法类|同样有Post和Get两种Q缺省参CؓGet?/p>
Post与Get的不同:Post在发送前要进行编码处理,然后分组发送,发送过E相对安全,适合大数据量的处理;而GetҎ不进行Q何处理,一ơ性发出,适合数据量交换。除非你肯定你提交的数据可以一ơ性提交,否则请尽量用PostҎ?/p>
accept-charsetQ定义浏览器与服务器之间收发信息的字W集cdQ例如:accept-charset="UTF-8,US-ASCII,ISO-8859-1"?/p>
CZQ?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<card id="Start">
<do type="accept" label="next">
<go href="#nextCard"/>
</do>
<p>This is the First Card!</p>
</card>
<card id="nextCard">
<do type="prev" label="before">
<prev/>
</do>
<p>This is the last card!</p>
</card>
</wml>
Gol合Postfield交换参数
标签Go可以包含一个或多个Postfield标签Q用q些标签携带参数与服务器q行数据交换?/p>
CZ1Q生一?quote.pl?stock=00001"Get甌
<go href="/cgi-bin/quote.pl">
<postfield name="stock" value="00001"/>
</go>
CZ2Q生一?stockname=证券&page=1"Post甌
<go href="/cgi-bin/query.pl" method="post">
<postfield name="stockname" value="证券"/>
<postfield name="page" value="1"/>
</go>
内部d
q回<prev>
用来当前页面的URL压入URL历史堆栈Qƈ打开此前的URLQ若该URL不存在,?lt;prev>无效。语法类?lt;go>Q?lt;prev>?lt;/prev>之间可加入一句或多句<setvar name="name" value="value"/>Q若不加Q则必须?lt;prev/>的Ş式出现?/p>
h<refresh>
用来h当前的页面,从而得页面内的变量刷新或|空Q语法与prev相同?lt;refresh> <setvar name="name" value="value"/> </refresh>Q或<refresh/>?/p>
无动?lt;noop>
表示什么也不做Q该标签不能用在<anchor>中,一般用在覆盖DECKU的<do>?
d屏蔽QTask ShadowingQ?br /> WML的Task有两个别,DeckU和CardU。通常Zq习惯把讄在某些条件中的Q务成为第三Q在q里先不讨论Q后面有专门的描q?/p>
Deck LevelQ把通用的Task讄在template中,q个Deck中所有的Card都自动承ƈ使用q些task?/p>
Card LevelQ只在当前的Card中有效,q替换掉Deck Level的相同属性的Task?/p>
CZQ?/p>
<wml>
<template>
<do type="options" name="general" label="Back">
<prev/>
</do>
</template>
<!-- a deck level task-->
<card id="Card1">
<p>Hello , this is a test <br/>
<a href="#card2">the second</a>
<p>
</card>
<card id="Card2">
<!-- This Card override the deck level task by noop -->
<do name="general" type="options" label="none">
<noop/>
</do>
<p>nothing happend here</p>
</card>
</wml>
讄动作QDoQ?br />Do是WML语言中最有有价值的元素之一Q它l用h供一U在当前Card上进?动作"的通用Ҏ。这U动作通常被定位在用户l端界面的特定部件上Q例如WAP手机的功能键QCancelQOptionQAcceptQ,特定的图标,语音识别功能{等。Do可以讄在Deck的Template上或者Card上,当他们重名的时候Card上的Do会覆盖Template上的同名元素Q参看Q务屏蔽说明)?/p>
属性列表:
typeQ诉览器动作的意图?br /> WMLd声明?个类型的动作Q最常用的动作类型是"accept"?option"?br /> 1.1 acceptQ接受、确?br /> 1.2 prevQ返回上一个历史堆栈中的URL
1.3 helpQ请求帮?br /> 1.4 resetQ清除或者重|状?br /> 1.5 optionsQ根据当前页面的功能讄选项?br /> 1.6 deleteQ删除选择条目
1.7 unknowQ相当于I白字串
1.8 q有两个属性还没有最后确定?/p>
labelQ设|按钮标题,昄在浏览器定义好的屏幕位置Q不同浏览器地显CZ|不同。如果不讄标题Q按钮会按照览器的~省格式昄Q不同浏览器的缺省格式不同?/p>
nameQ按钮名Uͼ可以用CardU的动作覆盖template上的同名动作Q重新赋予那些动作新的Q务?/p>
optionalQ来定义一个按钮是否显C,讄为True时会被浏览器忽略
CZQ?/p>
<do type="accept" label="Accept" name="accept1" optional="false">
{Content}
</do>
链接QAnchorQ?br />archor是WML定义链接的基方式Q与其他标签l合可以满很多应用Qanchor必须与gol合?/p>
相关属?
title 链接的文本显C内宏V?/p>
CZQ?/p>
<anchor title="Click"> click me <go href="#clickedMe"/> </anchor>
化的链接形式QaQ?
a是anchor的简化Ş式,不需要Go语句配合。ؓ了提高效率,推荐使用<a>?/p>
相关属?
1. href 链接的目标Url
CZQ?/p>
<a href="#clickedMe">click me</a>
内部事gQOneventQ?br />相关属?
typeQ内部事件的触发条gQ当前浏览器状态满发条件时Q浏览器׃触发q个条g下设|的TaskQ内部事件d?U触发条件?/p>
1 ontimer 满旉讄的条件时Q该条g成立。关于时钟设|问题,后面q有专门的说明?br /> 2 onenterbackward 通过Prev或其他外部命令返回到当前CardQ该条g成立?br /> 3 onenterforward 当浏览器通过链接q入当前CardQ该条g成立
4 onpick 在用Option控g列表的时候,M点击控g的行为都会触发本事gQ包括选择和去掉选择?/p>
CZQ?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
<wml>
<!-- this deck can't use in Ericsson r320sc ,because r320sc haven't accept button-->
<card id="start">
<do type="accept" label="next">
<go href="#two"/>
</do>
<p>This is the first card.</p>
</card>
<card id="two">
<do type="accept" label="next">
<go href="#three"/>
</do>
<onevent type="onenterbackward">
<go href="#temp"/>
</onevent>
<p>This is the second card.</p>
</card>
<card id="three">
<do type="accept" label="back">
<prev/>
</do>
<p>This is the thired card.</p>
</card>
<card id="temp">
<do type="accept" label="start">
<go href="#first"/>
</do>
<p>haha, you are lost!</p>
</wml>
1、声明(PrologueQ?br /><?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.com/DTD/wml_1.1.xml">
2、元素(ElementQ?br /> WML首先定义一个DeckQ然后在Deck内封装信息和Card?/p>
3、文件头QHead ElementQ?br /> 头信息包含与Deck有关的信息,包括meta数据和控制元素?/p>
3.1、访问权限设|(AccessQ?/p>
该元素用于设|有讉K当前Deck权限的列表。如果Deck内不包含Access Element信息Q该Deck下的Access Element处于无效状态,其他所有的Deck都可以访问该Deck?/p>
相关属?
domainQ假如设|?<access domain="sina.com.cn"/> 那么 http://www.sina.com.cn/ 有讉K权限, ?http://www.sino.com.cn/ ?http://www.sina.net.cn/ 没?
pathQ工作原理与Domain非常怼Q例如设|?lt;access path="/internal"/> 那么"/internal/wml" 获得访问权限,?/internal-wml"没有?/p>
CZQ?/p>
做如下设|?<access domain="sina.com.cn" path="/wap"/>
那么以下几个Urlh讉K权限Q?/p>
http://www.sina.com.cn/wap/goto.cgi
http://www.sina.com.cn/wap/index.wml
http://www.sina.com.cn/wap/cgi-bin/create_report.cgi?name=123&pwd=234
以下的几个Url没有讉K权限Q?/p>
http://www.sina.com/wap/getuid.cgi
http://www.sina.com.cn/internal/wap/getuid.cgi
3.2、头元素讄QMetaQ?/p>
<meta 属?content="? scheme="格式" forua="true|false"/>和HTML中的cMQ提供了该DECK的meta信息?/p>
例如Q?lt;meta http-equiv="Cache-Control" content="max-age=0" forua="true"/>
content属性是必选的Q其内容Ҏ属性而定。scheme属性目前尚不支持。forua为可选属性,指定在该wml文g传到客户端之前,<meta>标签是不是被中间代理删除(因ؓ传输的协议可能改?Q默认gؓfalse?/p>
目前支持的meta数据:
<meta http-equiv="Cache-Control" content="max-age=0"/>指定DECK在手机内存缓存中的存储时间段Q默认的?0?除非内存耗尽)Q在该期_手机对于讉Kq的DECK直接从缓存里调用。如果信息是Ҏ间敏感的Q可以用max-age指定DECK在缓存里的生存期Q最单位是U,如果指定?Q则每次都需通过q接服务器来调用该DECK?/p>
<meta user-agent="vnd.up.markable" content="false"/>?lt;meta user-agent="vnd.up.bookmark" content="指定的URL"/>cM于普通浏览器的书{֊能。当用户一个CARD做了书签后,手机览器首先用一个标记记录该CARDQ这个标记默认的?lt;card>标签中的title属?以后会讲?Q然后当用户选择了该书签以后Q浏览器׃打开被记录的URL。但是因为在默认的情况下Q手Z记录所有的DECKQ所以,一?lt;meta>被用来手机不要记录当前的URLQ即<meta user-agent="vnd.up.markable" content="false"/>。此外,如果要ؓ书签指定不同于当前DRECk的URLQ用<meta user-agent="vnd.up.bookmark" content="指定的URL"/>?/p>
4、模板(TemplateQ?br /> Z节省资源Q可以把每个Card中都要用到的Task讄在模板中Q供当前Deck中所有Card使用Q加入个别Card不需要该模板内容Q可以Override掉它Q详见Q务屏蔽)?/p>
5、卡片(CardQ?br /> 适用事g
以下事g适用于Card和TemplateQ参见前面的相关说明?br /> 1. onenterbackward
2. onenterforward
3. ontimer
卡片属性(CardQ?/p>
idQ同一Deck内Card的唯一标识Q可以作为标{被使用?#nextcard).
titleQ卡片标题。不同的览器处理标题处理title的原则不一P有的览器会昄标题Q如果当前卡片没有设|标题,当前卡片的URL会被昄在标题位|。有些浏览器Z节省昄区域会忽略标题?/p>
newcontextQ默认gؓfalseQ用来指C当跌{到本CARDӞ手机是不是要清除以前保留的信息,包括变量Q堆栈里的历史记录,重新讄手机状态等?/p>
ordered 布尔变量Q声明Card是否有序。通常可以用来开发自动播攄qȝ片效果?
CZQ?/p>
<?xml version="1.0"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<access domain="sina.com.cn" path="/wap"/>
</head>
<template>
<do type="accept" name="accept1" label="OK">
<go href="#accept"/>
</do>
</template>
<card id="start" title="Start Here">
<p> Start Here. </p>
</card>
<card id="accept" title="Okay Card">
<do type="accept" name="accept1" label="Okay">
<go href="#accept2"/>
<!-- override the same task in template-->
</do>
<p> Card Accept </p>
</card>
<card id="accept2" title="OK Card" >
<do type="accept" >
<go href="#start" />
</do>
<p> Card Accept2 </p>
</card>
</wml>
对表单的控制能力可以证明一个HTML设计者是否够专业Q而且很多交互功能也必M赖表单。WML没有表单属性,但是WML可以直接使用控gQ同样可以达C用表单的效果。因此,使用控g的水q_以体C个WML设计者的制作水^?
WML控g有Select List和Input Box两个pdQ每个系列另外包含几个子pdQ基本可以满单设计的需求?
Select有两对很重要也很Ҏh的属性:name, value , iname , ivalue。这四个属性的区别和用途不太容易描q清除,看了后面的例子会很容易理解?
每个Select是一个或多个Option的集合,Option地结果返回给Select元素的name和iname?
CZQ?
<select name="name" iname="iname value="value" ivalue="ivalue">
<option value="S">sina</option>
<option value="Y">yahoo</option>
</select>
相关属?
1. multiple q个布尔变量的值决定是否允许多重选择QgؓTrue时Select控g允许复选,否则相反?
2. name & Value q一l变量的主要作用是获取于该option的返回|value提供name的缺省倹{?
3. iname & ivalue 与上一l参数功能相|不同的是ivalueq回有效Option的序列号。被选中的控件用它的序号表示Q?代表没有option被选中Q假如第二个和第三个同时被选中pCZؓ 2;3
4. title 作ؓ标题参数提供l浏览器Q但是不同的览器处理方式有所不同Q有些浏览器直接昄选项内容不显C标题,有的览器显C标题,按选择键进入选择界面?
5. tabindex 提供l浏览器的控件序号参数?
Option只有包含在Select内才有意义,无法单独使用?
相关属?
1. value Option的返回|假如当前Option被选择Q这个Value的g被传送到Select元素的Name变量?
2. title 供浏览器昄的选项标题?
3. onpick 如果当前Option被点选,览器蟩转到指定的Url?
CZ1Q?
<card>
<p>Please choice your favourite Web.<br/>
<select name="X">
<option value="S">sina</option>
<option value="Y">yahoo</option>
</select>
<p>
</card>
上例是一个基本的单选列表,选择的结果被赋值给X?
CZ2Q?
<card>
<p>Please choice all your favourite Web.<br/>
<select name="X" iname="I" ivalue="1;3" multiple="true">
<option value="S">sina</option>
<option value="Y">yahoo</option>
<option value="N">netease</option>
</select>
<p>
</card>
上例是一个用了iname和ivalue的多选列表,I被预|ؓ 1;3 。假如用户选择了sina和yahooQX被赋gؓ S;YQI被赋gؓ 1;2。假如用户不做Q何选择QI{于1;3QX内容为空?
CZ3Q?
<card>
<p>Jump to your favourite Web.<br/>
<select>
<option onpick="http://wap.sina.com.cn">sina</option>
<option onpick="http://wap.chnmobile.net">china mobile</option>
</select>
<p>
</card>
上例演示了Option的onpick功能Q不Option的状态如何,只要它被炚w,览器就会蟩转到指定的Url?
CZ四:
<card>
<p>Please choice your favourite Web.<br/>
<select name="X">
<option value="S">sina</option>
<option value="Y">yahoo</option>
<option value="S;Y">both</option>
</select>
<p>
</card>
上例演示了一个通过单选功能完成多选需求的CZ?
相关Option分组产生层Q对最l用h说可能没有什么意义,但是对于制作者来_Option分组可以提供很多方便?/p>
相关属?
1. title 标题Q通常q种标题无法被显C?/p>
CZQ?/p>
<card>
<p> What OS You Use NowQ?br /> <select name="OS">
<optgroup title="microsoft">
<option value="dos">dos</option>
<option value="windows">windows</option>
</optgroup>
<optgroup title="others">
<option value="unix">unix</option>
<option value="linux">linux</option>
</optgroup>
</select>
</p>
</card>
上例演示了一个基本的Optgroup元素的应用,׃Optgroup没有变量参数Q所以只能提供有限的应用?/p>
一个比较复杂的例子Q?/p>
<?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="options" label="Back">
<prev/>
</do>
</template>
<card id="lists">
<p>
<select title="Pick Lists">
<option onpick="#JY">Jin Yong</option>
<option onpick="#GL">Gu Long</option>
</select>
</p>
</card>
<card id="JY">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept">
<go href="#display_fav"/>
</do>
<p> Pick your fav Book:
<select name="fav" title="Stooges">
<option value="Xiao">Xiao ao jiang hu</option>
<option value="She">She diao ying xiong</option>
<option value="Lu">Lu ding ji</option>
<option value="Shen">Shen diao xia lv</option>
</select>
</p>
</card>
<card id="GL">
<onevent type="onenterbackward">
<prev/>
</onevent>
<do type="accept">
<go href="#display_fav"/>
</do>
<p> Pick your fav Book.
<select multiple="true" title="Gu Long" name="fav" >
<option value="Gu">Gu xing zhuan</option>
<option value="Da">Da di fei ying</option>
<option value="Tian">Tian ya ming yue dao</option>
<option value="feng">Lu xiao feng</option>
</select>
</p>
</card>
<card id="display_fav">
<p> Your fav was $fav. </p>
</card>
</wml>