??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲va在线va天堂成人,亚洲AV午夜成人片,亚洲欧美不卡高清在线http://www.tkk7.com/zhangrenquan/category/10888.htmlzh-cnTue, 27 Feb 2007 12:25:40 GMTTue, 27 Feb 2007 12:25:40 GMT60WML语言与编E?/title><link>http://www.tkk7.com/zhangrenquan/articles/45147.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Tue, 09 May 2006 01:43:00 GMT</pubDate><guid>http://www.tkk7.com/zhangrenquan/articles/45147.html</guid><wfw:comment>http://www.tkk7.com/zhangrenquan/comments/45147.html</wfw:comment><comments>http://www.tkk7.com/zhangrenquan/articles/45147.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhangrenquan/comments/commentRss/45147.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhangrenquan/services/trackbacks/45147.html</trackback:ping><description><![CDATA[     摘要: WAP 构架 t         WML 是一U适用于无U互q网的标记语a? t         WAP Q? Wireles...  <a href='http://www.tkk7.com/zhangrenquan/articles/45147.html'>阅读全文</a><img src ="http://www.tkk7.com/zhangrenquan/aggbug/45147.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhangrenquan/" target="_blank">kelven</a> 2006-05-09 09:43 <a href="http://www.tkk7.com/zhangrenquan/articles/45147.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WML语言介绍http://www.tkk7.com/zhangrenquan/articles/35803.htmlkelvenkelvenFri, 17 Mar 2006 03:51:00 GMThttp://www.tkk7.com/zhangrenquan/articles/35803.htmlhttp://www.tkk7.com/zhangrenquan/comments/35803.htmlhttp://www.tkk7.com/zhangrenquan/articles/35803.html#Feedback0http://www.tkk7.com/zhangrenquan/comments/commentRss/35803.htmlhttp://www.tkk7.com/zhangrenquan/services/trackbacks/35803.htmlQ?基本规则*

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对应的取代字符有:< <> >??&apos;" "& &$ $$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>



kelven 2006-03-17 11:51 发表评论
]]>
WML—XML标记语言开发实例详l解?/title><link>http://www.tkk7.com/zhangrenquan/articles/35802.html</link><dc:creator>kelven</dc:creator><author>kelven</author><pubDate>Fri, 17 Mar 2006 03:46:00 GMT</pubDate><guid>http://www.tkk7.com/zhangrenquan/articles/35802.html</guid><wfw:comment>http://www.tkk7.com/zhangrenquan/comments/35802.html</wfw:comment><comments>http://www.tkk7.com/zhangrenquan/articles/35802.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhangrenquan/comments/commentRss/35802.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhangrenquan/services/trackbacks/35802.html</trackback:ping><description><![CDATA[ <p>本文主要介绍WML的相关知识,如何开发WAP应用E序?/p> <p>WML是一U基于XML的标记语aQ她的官方说明和规范是由WAP论坛l护的。WML的文档类型定义是xml文gcd的,<a target="_blank">http://www.wapforum.org/DTD/wml_1.1.xml</a>?/p> <p>和HTML语言一PWML是ؓ了显C数据的Q而XML的目的则是描q数据,我们定义了一pd的标记ƈl织成ؓ语法规范把它UCؓDTD(Document Type Definition)。支持WAP的手机里面都安装了WAP览器他能够解析q些标记q正显C在手机屏幕上?/p> <p>通常在WML的文本的开头都有这L内容</p> <p><xml version='1.0'><br /><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "<a target="_blank">http://www.wapforum.org/DTD/wml_1.1.xml</a>"></p> <p>我们把它叫做序言。在后面是标记了,我们所有的数据都是嵌套在这两个标记里面的。WML的标记非常少Q基本可以分ZU一U称为Deck/Card一U称为Event。在q里不能一一讲述Q在我们开发WML应用的时候参考手册就可以了,我给大家提供一个在U的参考:Online WML Tag Reference?/p> <p>在标记内的内Ҏ们把它称为deckQ每个屏q的内容我们把它定义为cardQ由于WML是ؓ无线|络传输定义的,充分考虑到带宽的限制Q我们允许在一个deck内包含多个cardq可以一起下载到用户代理中,q样我们可以在本地q行不同屏幕的切换了Q避免每ơ都去联|。当然这也给客户端增加了负担Q因此我们要避免在deck内包含过多的card?/p> <p>下面我们~写一个WML的例子test.wmlQ内容如下:</p> <p><?xml version='1.0'?><br /><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" <br />"<a target="_blank">http://www.wapforum.org/DTD/wml_1.1.xml</a>"><br /> <br /><wml><br /><card id="Login" title="Login"><br /><do type="accept" label="Password"><br /><go href="#Password"/><br /></do><br /><p><br />  UserName:<br /><select name="name" title="Name:"><br /><option value="John Doe">John Doe</option><br /><option value="Paul Smith">Paul Smith</option><br /><option value="Joe Dean">Joe Dean</option><br /><option value="Bill Todd">Bill Todd</option><br /></select><br /></p><br /></card></p> <p><card id="Password" title="Password:"><br /><do type="accept" label="Results"><br /><go href="#Results"/><br /></do><br /><p><br />  Password: <input type="text" name="password"/><br /></p><br /></card></p> <p><card id="Results" title="Results:"><br /><p><br />You entered:<br/><br />Name: $(name)<br/><br />Password: $(password)<br/><br /></p><br /></card><br /></wml></p> <p>在这个deck中包含了三个card,可以一q下载到客户端,通过按键操作我们可以在不同的card之间q行切换Q你可以在手机或者winwap模拟器中看看q行的效果。下面是winwap下的q行截图?/p> <p> <img src="http://www.windstudio.net/upload/20051024100237_1.jpg" onload="JavaScript:if(this.width>540)this.width=540" /> </p> <p> <img src="http://www.windstudio.net/upload/20051024100247_1.jpg" onload="JavaScript:if(this.width>540)this.width=540" /> </p> <p> <img src="http://www.windstudio.net/upload/20051024100257_1.jpg" onload="JavaScript:if(this.width>540)this.width=540" /> </p> <p>虽然我们已经可以开发wml的应用了Q但是这些毕竟都是些静态的内容。如果我们要开发和服务器交互的功能呢?{案当然是我们可以用Servlet技术。看下面的例子:</p> <p><?xml version='1.0'?><br /><DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "<a target="_blank">http://www.wapforum.org/DTD/wml_1.1.xml</a>"></p> <p><wml><br /><card id="Order" title="Query Inventory"><br /><p><br /><select name="Items" title="Items"><br /><option value="Books">Books</option><br /><option value="Music">Music</option><br /><option value="Video">Video</option><br /><option value="Software">Software</option><br /></select><br /></p><br /><do type="accept" label="Query"><br /><go href="<a target="_blank">http://222.28.218.222:8088/wap/wapservlet</a>" method="get"><br /><postfield name="Items" value="$(Items)"/><br /></go><br /></do><br /></card><br /></wml></p> <p>用户可以从列表中选择Item,通过无线|络传输l服务器后Servlet通过request.getParameter()Ҏ得到用户的选择q发送给用户Qservlet的代码如下:</p> <p>package com.j2medev.mingjava;</p> <p>import java.io.IOException;<br />import java.io.PrintWriter;</p> <p>import javax.servlet.ServletException;<br />import javax.servlet.http.HttpServlet;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;</p> <p> <br />public class WapServlet extends HttpServlet<br />{</p> <p>protected void doGet(HttpServletRequest request,<br />HttpServletResponse response) throws<br /> ServletException, IOException<br />{<br />String select = request.getParameter("Items");<br />response.setContentType("text/vnd.wap.wml");<br />PrintWriter out = response.getWriter();<br />out.println("<?xml version=\"1.0\"?>");<br />out.println("<!DOCTYPE wml PUBLIC\"-//WAPFORUM//DTD WML 1.1//EN\"");<br />out.println("\"<a target="_blank">http://www.wapforum.org/DTD/wml_1.1.xml\</a>">");<br />out.println("<wml>");<br />out.println("<card title=\"test\">");<br />out.println(" <p align=\"center\">");<br />out.println("you selected "+select);<br />out.println("</p>");<br />out.println("</card>");<br />out.println("</wml>");</p> <p>}</p> <p>protected void doPost(HttpServletRequest request,<br />HttpServletResponse response) throws<br /> ServletException, IOException<br />{<br />doGet(request,response);<br />}<br />}</p> <p>正确部vServlet和wml文g后,在winwap下输?a target="_blank">http://222.28.218.222:8088/test2.wml</a> 认后就可以看到you selected xxxx的内容了?/p> <img src ="http://www.tkk7.com/zhangrenquan/aggbug/35802.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhangrenquan/" target="_blank">kelven</a> 2006-03-17 11:46 <a href="http://www.tkk7.com/zhangrenquan/articles/35802.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WML的表格和囑Şhttp://www.tkk7.com/zhangrenquan/articles/35801.htmlkelvenkelvenFri, 17 Mar 2006 03:45:00 GMThttp://www.tkk7.com/zhangrenquan/articles/35801.htmlhttp://www.tkk7.com/zhangrenquan/comments/35801.htmlhttp://www.tkk7.com/zhangrenquan/articles/35801.html#Feedback0http://www.tkk7.com/zhangrenquan/comments/commentRss/35801.htmlhttp://www.tkk7.com/zhangrenquan/services/trackbacks/35801.html׃览l端的限ӞWML无法也没有必要提供复杂的表格功能

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



kelven 2006-03-17 11:45 发表评论
]]>
WML语言基础http://www.tkk7.com/zhangrenquan/articles/35800.htmlkelvenkelvenFri, 17 Mar 2006 03:43:00 GMThttp://www.tkk7.com/zhangrenquan/articles/35800.htmlhttp://www.tkk7.com/zhangrenquan/comments/35800.htmlhttp://www.tkk7.com/zhangrenquan/articles/35800.html#Feedback0http://www.tkk7.com/zhangrenquan/comments/commentRss/35800.htmlhttp://www.tkk7.com/zhangrenquan/services/trackbacks/35800.html
2.1 WML的简单例子及~辑、测试方?/b>

无限标记语言WML(Wireless Markup Language)是一U基于扩展标记语aXML(Extension Markup Language)的语aQ是XML的子集。它可以昄各种文字、图像等数据Q是由WAP论坛Qhttp://www.wapforum.orgQ提出ƈ专ؓ无线讑֤用户提供交互界面而设计的Q目前版本ؓ1.1版。这些无U设备包括移动电话,呼机和个人数字助理PDA(Personal Digital Assistants){?br />
2.1.1 WML与WAP讑֤

Z更好的了解和使用WML语言Q开发h员应对WML使用的设备和支持WML的设备的特点、特征有个大概的了解?br />
一般而言QWML使用的无U设备通常h以下特点Q?br />
与普通的个h计算机相比,体积较小Q?br />讑֤的内存有限,且其CPU性能也有限;
通讯带宽较窄、时延较ѝ?br />
以移动电话、PDAZ来讲Q支持WML的设备主要具有以下特征:

有一个显C屏q,可显C?.凶址?2各字W;2.凶址型ǔQūQ舾δ馨サ囊恍?br>支持数字和字W的输入Q?br />支持操作者用箭头或数字按钮q行选择Q?br />支持ASCII的可打印码;
通常都有两个可编E功能键Q即Accpet键和Options键,一般安排在接近键盘的屏q下方;
通常有一个PrevD键?br />
我们介绍WML所使用WAP讑֤的目的,是希望读者通过WAP讑֤的特炏V特征来了解WML语言的特点,q而对WML~程所要解决的问题有个大概的认识?br />
2.1.2 使用文本~辑器面写WMLE序

使用WML语言~写WAP|页或应用时Q需要用一个编辑器q行~辑。与HTML~程一PWML~写的程序也是纯文g文本Q可以用Q意文本编辑器q行~写Q比如Windowspȝ中的“记事本QNotePadQ”等。也可以使用比如Nokia WAP Toolkie{YӞ有关此具体的用法会在以后的学习过E中提vQ。我们先介绍W一U方法,随后介绍W二U?br />
如果要?C本(NotePadQ?来编写WMLE序Q则可以在Windowspȝ中,单击“开始”按钮,然后从出现的菜单中,依次光标指向“程序”、“附件”、“记事本”,启动“记事本”程序。屏q上随后׃出现它的~辑H口Q从中就可以输入q编写WMLE序了?br />
作ؓ举例Q我们可以输入如下简单的E序?br />


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


输完后将它保存ؓhello.xml文g。保存时注意文g的扩展名应ؓxml而不是txt?br />
2.2 WMLE序l构

上一节我们降解了一个简单的WMLE序Q具有HTML~程的读者可以看出,WMLE序在结构上形式上与htmlE序有很多相g处。下面我们就Ҏ一个实例来分析一下WMLE序的结构及l成?br />
2.2.1 WML的元素和标签

分析实例之前Q我们有必要对WML的元素和标签予以单说明。与HTMLcMQWML的主要语法也是元素和标签。元素是W合DTDQ文档类似定义)的文档组成部分,如title(文档标题)、IMGQ图像)、table(表格){等Q元素名不区分大写。WML使用标签来规定元素的属性和它在文档中的位置。标{用小于号Q?lt;Q和大于P>Q括hQ即采用?lt;标签?gt;”的形式。标{ֈ单独出现的标{֒成对出现的标{两U。大多数标签是成对出现的Q由首标{֒标{成。首标签和尾标签又分别称v始标{֒l止标签。首标签的格式ؓ?lt;元素?gt;”,标{格式为?lt;/元素?gt;”。成Ҏ{于规定元素所含的范围Q比?lt;b>?lt;/b>标签用于界定黑体字的范围Q也是?lt;b>?lt;/b>之间包住的部分采用黑体字昄。单独标{格式为?lt;元素?>”,他的作用是在相应的位|插入元素。如〈br/〉标{表C在该标{所在位|插入一个换行符?br />
2.2.2 WMLE序l构形式及组成的实例分析

了解了上q知识后Q下面我们在分析一个实例程序。程序如下:

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


该程序运行后在WAP手机屏幕依次昄3屏信息。先昄"Welcome to ..."Q然后显C?The Nokia Wireless Application Protocol..."Q最后显C?Tookit!"。显C时每屏都有标题"Tookit Demo"Q相M屏之间g时ؓ50Q其单位大小?/10U,延时50?U?br />
通过以上实例我们可以了解到WMLE序的结构Ş式及l成Q?br />
1)语法。WML与HTML极ؓ怼。仍然是一U标记语aQƈ且gl了XML的语法规则,具体的语法我们会以后的学习过E中遇到?br />
2)文g声明。所有的WMLE序必须在文件的开头处声明XML文gcdQ包括XML的版本,WML的文档类型、所用规范等。声明Ş式如下:

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


3)标签。在WML语言中需要用标{(TagQ,其用Ş式与HTML和XML{标记语a中的形式是完全一致的?br />
4Q元素。WML的元素(ElementQ用于描q卡片组QDeckQ的标记信息即结构信息。一个元素通常有一个首标签、内宏V其它元素及一个尾标签l成Q具有下qCU结构之一Q?br />
<首标{?gt;内容</标{?gt;
?br /><标签/>

元素包含的内容中q可以有元素Q这些元素也是有首标{、相应内宏V其它元素及标{成。不包含内容的元素成为空元素。它Z个单独的标签。或者说Q单独的标签也是一U元素?br />
5)属性。WML与XML一P其标{֏以包含很多属性。属性用于给标签提供必要的附加信息,且属性内定w常在v始标{ֆ使用。不q,属性内容不会被览器显C,它至作ؓ参数为标{提供必要的信息?br />
指明属性值的时候,需要把该值用引号扩v来,可以是单引号或者双引号Q引号通常成对嵌套使用。属性名U必d写。例如:<card id="card 1" ontimer="#card2" title="Toolkit Demo">

而且Q单引号的属性中q可以包含双引号的属性。实体字W也可以作ؓ属性倹{实体字W是指诸?amp;?lt;?gt;??的特D字W,在WMLE序中显C着cdW需要特D处理,后面我们介绍具体Ҏ?br />
6)注释。WMLE序中也可以加入注释。注释内容用于给开发h员顺利阅L代码提供方便Q它不会被浏览器昄出来。注释内容在标签中用感叹PQ)引出Qƈ用于<!--注释内容-->的Ş式。例如:<!-- Write your card implementation here.-->。需要说明的是,XMLE序中不支持注释的嵌套?br />
7)文档l构。WML文档是由“卡片(CardQ”和“卡片组QDeckQ”构成的Q一个Deck是一个或多个Card的集合。当客户端发求之后,WML即从|络上把Deck发送到客户览器,q是用户可以浏览Deck内包含的所有CardQ而不必从|上单独下蝲每一个CardQ程序中的第一个Card是缺省得可见的Card?br />
注意QDeck是一副纸牌的意思,q里是指一叠卡片,所以我们在q里UC为它为“卡片组”。另外,Card指的是WAP手机屏幕大小的网,管有时一个Card可能需要多屏才能显C完Q但我们也可以把它翻译成“页面”,不过q样与HTML中的面Ҏ混合。因此我们在q里UC为卡片?br />
2.2.3 WMLE序的基本结?br />
以上我们单分析了WML的程序结构及l成Q由此大家可以对WMLE序有个整体上的初步认识。下面我们给出WMLE序的基本结构?br />
<?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>


该基本结构可以分Z下几个关键部分:

1Q声明。WMLE序有许多Deckl成Q对于每一个DeckQ在其文档开头必进行XML的声明和文档cdDOCTYPE的声明?br />
XML声明L在文件的W一行,注意前面最好不要有I格或者还行:

<?xml version="1.0"?>

2Q紧跟着是DOCTYPE声明Q注意声明是字母的大写不要搞错Q?br />
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1xml">

3Q?lt;xml>标签。该标签用于包含和定义WML的一个Deck。它有一个可选的xmlQlang属性来制定文档的语aQ比?lt;wml xml:lang="zh">表示文档语言Z文?br />
4Q?lt;head>标签。该标签用于包含和定义Deck的相关信息?lt;head>标签之间可以包含一?lt;access>标签和多?lt;meta>标签?br />
5Q?lt;access/>标签。它的一般Ş式是<access domain="? path="/路径"/>Q主要用于制定当前Deck的访问控制信息,有两个可选的属性。其中,domain用来制定域,默认gؓ当前域,path用来制定路径Q默认gؓ?”,卌目录。由?lt;access>单独使用Q所以要用?”结,后面我们q会pȝ的讲解WML的各U标{,q里即看不懂也没关p,主要有些感性的认识可以了?br />
6Q?lt;meta...>标签。它的一般Ş式是<meta 属?content="? scheme"格式" forua="true|false"/>Q用于提供当前Deck的meta信息Q包括内存数据处理方式,以及数据传输方式和处理方式等。有兌标签的详l内Ҏ们后面会专门l出?br />
7Q?lt;card>标签。一个Deck可以包含多个CardQ每个Card的内容可能不止一屏显C。对于每一个CardQWML均?lt;card>?lt;/card>q行包含和定义?<card>同时可以包含多个可选的属性,?lt;card id="name" title="label" newcontext="false" ordered="true" onenterforwand="url" pmemterbackward="url" ontimer="url">。至于这些属性的具体含义及功能,我们在后面介绍?br />
2.3 WML语言的基本知?/b>

上一节我们介l了WMLE序的基本结构,接下来我们介lWML语言的基本知识,主要包括WML的字W集、变量、数据类型及WMLE序的基本组成部分等?br />
2.3.1 WML的字W集及编?br />
WML使用XML的字W集Q即通用字符集ISO/IEC-1062.Q也即统一字符~码标准Unicode 2.0。同ӞWMLq支持其他系列的字符集子集,例如UTF-8、ISO-8859-1或UCS-2{。其中:

UTF-8是指通用字符集UCS(Universal Character Set)的{换格?(Transformation Format 8)Q主要传输国际字W集的{换编码。UTF-8采用了UCS字符?位编码,提供了十分安全的~码格式Q可以有效避免数据传输过E中的窃听、截取及非法解密。同ӞUTF-8?位ACSII码完全兼容,不会影响此类~码实现的程序;它的~码规则十分严格Q能够有效避免同步传输错误,而且q会支持其它字符集提供了_的空间?br />
ISO-8859-1字符集是国际标准化组lISO(International Standardization Organization)制定的ACSII字符集的扩展集,能够表示所有西Ƨ语a的字W。与ISO Latin-1一PISO-8859-1与Windows环境中普遍用的国国家标准协会ANSI(American National Standards Institute)的字W集极ؓcMQ绝大多数情况下无需区分。在不特别指明的情况下,HTTP协议均用ISOLatin-1字符集。因此,ZWML面中表C非ACSIIQnon-ACSIIQ字W,开发h员需要用相应的ISO Latin-1~码的字W?br />
UCS-2是ISO 1062.标准中自定义的通用?位编码字W集(Universal Multiple-Octer Coded Character Set)?字节Q即16位)~码标准Q其字符~码gUnicode字符的标准编码值相{?br />
WML文档可以采用HTML 2.0规范所定义的Q何字W编码标准经~码处理。一般说来,WML文档的字W编码是需要{换ؓ另外的编码格式,以与WAP用户的手机浏览器所用字W标准相适应Q否则,手机览器就无法昄WML面中的字符。然而,~码转换时可能会丢失一些字W信息,所以,如果在用Lq行WML文档的编码{换,那么可能导致某些结果信息丢p不能被用户所览。因此,如有必要Q我们应当尽量在WML面传送到用户览器之前完成编码{换?br />
Z解决q一问题Q一斚wQ我们需要ؓWeb服务器补充定义WML的数据类型,以让服务器可以准传输这些数据,另一斚wQ我们需要制订编码{换的原则?br />
2.3.2 WML字符使用基本规则

WML是一U比较严格的语言Q字W用必遵守相应的规则Q这些基本规则主要包括以下几个方面:

1Q大写敏感。在WML中,无论是标{օ素还是属性内定w是大写敏感的,q一点承了XML的严格特性,M大小写错误都可能D讉K错误?br />
一般来_WML的所有标{,属性,规定和枚丑֏它们的可接受值必d写,Card的名字和变量可大写和写Q但它是区分大小写的。包括参数的名字和参数的数值都是大写敏感的,例如variable1、Variable1和vaRiable1都是不同的参数?2Q空根{对于连l的I字W,E序q行时只需要一个空根{属性名、符P=Q和g间不能有I格?br />
3Q标{。标{ֆ属性的值必M用双引号Q?Q或单引P'Q括h。对于不成对出现的标{,必须在大于号Q?gt;Q前加上斜杠(/Q,比如换行标签必须写成<br/>才正?br />
4Q不昄的内宏V在WML中,不显C的字符主要包括换行W、回车符、空格和水^制表W,它们?位十六进制内码分别ؓ10?3?2??br />
E序执行ӞWML忽视所有的多于一个以上的不显C字W,即WML会把一个或多个q箋的换行、回车、水q_表符及空D{换成一个空个?br />
5Q保留字W。这是WML的一些特D字W,如小于号Q?lt;Q、大于号Q?gt;Q、单引号?”、双引号?”、和P&Q?br />
6Q显C汉字。如果希望WMLE序执行时能够显C汉字,则只需要程序开头用encoding指定汉字字符集即可。例如:<?xml version="1.0" encoding="gb2312">?br />
注意Q指定汉字字W集的Ş式和Ҏ可能因ؓ开发工hWAP手机的不同而不同?br />
2.3.3 变量

WML~程中可以用变量,变量使用前必进行定义。变量一旦在Deck中的某一个Card上定义过Q其他Card则可以不必重新定义就能直接调用该变量?br />
定义变量的语法格式ؓQ?br />$identifier
$(identifier)
$(identifier:conversion)

其中identifier指变量名Q或说变量标C符Qconversion指变量的替代?br />
变量名是由US-ACSII码、下划线和数字组成的Qƈ且只能以US-ACSII码开头。变量名严格区分大小写,也即Q变量名是大写敏感的?br />
定义变量的语法在WML中n有最高的解释优先U?br />
有关变量的用说明如下:

1Q在WML中,变量可以在字W串中用,q且在运行中可以更新变量的倹{?br />
2Q当变量{同于空字符串时Q变量将处于未设|状态,也就是空QNullQ?br />
3Q当变量不等同于I字W串Ӟ变量处于设|状态,也就是非I(Not NullQ状态?br />
4Q在?identifier”Ş式下QWML通常以变量名后面的一个空DC变量名的l束。如果在某些情况下空格无法表CZ个变量名的结束,或者变量名中包含有I格Q则必须使用括号变量名括v来,即采用?(identifier)”的形式?br />
WMLE序中的变量是可以替代的Q我们可以把变量的数DlCard中的某一文本。有兛_量替代说明如下:

1Q在WMLE序中,只有文本部分才可以实现替代?br />
2Q替代一般在q行期发生,而且替代不会影响变量现在的倹{?br />
3QQ何标{是按照字符串替代的方式实现的?br />
4Q替代是按照字符串替代的方式实现的?br />
׃变量在语法中有最好的优先U,包含变量声明字符的字W串被当作变量对待Q所以如果要使程序显C?”符P则需要连l用两个?”进行说明。例如:<p> Your acconut has $$15.00 in it </p>一句显C的l果为:Your account has $15.00 in it?br />
2.3.2. WML核心数据cd

WML的核心数据类型均属于字符型数据,是根据XML的数据类型定义的Q共有下q?.掷嘈?1QCDATA型。这U数据类型是WML用得最多的一U,可以是数字、字W串或包含数字的字符丌Ӏ不q定义时Q不论是数字或字W串Q都必须以文本的形式定义Q及数据用引号引h。CDATA型的数据仅用于属性倹{例?$(value)"或name="value"{。注意,q里的value指CDATA型的数据倹{?br />
2QPCDATA型。这是从CDATA中分解出来的一cL据,除了可以是文本Ş式的数字、字W串或两者的混合串外Q还可以是WML的标{。PCDATA型的数据只能用于WML的元素表C?br />
3QNMTOKEN型。这是一cȝD的数据Q凡是包含或部分包含数字、字母及标点W号的数据均属于NMTOKEN型数据。这U数据可以用标点W号开_但不用于定义变量名或元素名?br />
4Qid型。专门用于定义WML元素名称的数据类型?br />
在这2.掷嘈椭校珻DATA型用h比较灉|Q它可以使变量或数据免于语法查。这是因为,CDATA内的数据内容都会被当作文本来处理Q从而可以避免WML的语法检查,直接作ؓ文本昄出来?br />
2.3.5 WML数据值性质

除了NMTOKEN型数据外QWML其他3U数据都必须以文本Ş式即加上引号q行定义。我们关心的问题是,q些cd的数据可以表C哪些数据值呢Q或者说Q它们所表示的数据值的性质是什么呢Q?br />
事实上,WML数据只在性质上可以是长度QLengthQ、宏变量QVdataQ、流QFlowQ、内行(InlineQ、布局QLayoutQ、文本(TextQ、超链(HrefQ、布|BooleanQ、数据(NumberQ或增强方式QEmphasisQ?br />
2.3.6 卡片与卡片组

前面我们分析了WMLE序的结构时Q曾讲到WML文档的信息是通过卡片集和卡片l集的Ş式进行组l的。一个Deck是一个或多个Card的集合。当客户l端发出h之后QWML即从|络上把Deck发送到客户的浏览器QDeck是服务器发送信息的最单位。用h览器收到Deck后,可以览其中包含的所有Card。Card用于表示或描qC个或多个用户交互单位?br />
2.3.7 卡片l模?br />
同一卡片l通常会含有许多卡片,q些卡片的定义、属性或格式通常都大同小异。如果我们逐一定义各个卡片Q显然是十分ȝ的。ؓ此,WML提供了卡片组模板的功能,模板内定义了一pd标准和参敎ͼ可以应用到同一卡片l的所有卡片中去,从而能够大大地提高我们的编E效率。有兛_片组模板的内Ҏ们后面会专门介绍的?br />
2.3.8 WML与URL、程序段锚点

我们知道Q环球网WWW是各U信息和讑֤的网l,Z证全球范围内的交互,Z制定?U规?其一Q统一资源定位器URL提供所有网l资源的标准命名方式和定位方式;其二Q标准协议,如HTTP协议{,提供WWW资源的传输方式;其三。标准内容类型,如HTML、WMLQ提供WWW资源的内容Ş式及标准。WML沿用了这些规范,q扩大了URL使用的范围。在WML中,不仅连接、文件\径及文g名可以作为URL处理Q卡片名、宏变量名及各种内部资源名等也可作ؓURL处理?br />
为此QWML改进了HTML命名资源位置的方式,采用E序锚点QFragment AnchorQ的形式来处理WMLE序中某D늨序的C。程序段锚点Ҏ文档WML规则q行定义Qƈ按照E序D表C符前加井字好(#Q的方式书写。用程序段锚点QWMLE序可以在同一卡片l中定位不同的卡片。如果在E序中不指定E序D,那么E序中引用的URL名称则指整个卡片l,而且卡片l的名称同时也是本卡片组内的W一个卡片的名称?2.3.9 览器操作历?br />
Z在浏览器端管理WMLE序的执行,WML使用“浏览器前后关系”的功能保存WMLE序执行的状态及各种参数、变量等Q这样可以用来记录用L操作情况。同ӞWMLq提供了一个简单的D历史模型Q以URL地址的Ş式记录了用户览时的各种操作Qƈ把这些URL地址攑օ历史推栈。通过推栈Q用户即可实现历史浏览的回潮及其它操作?img src ="http://www.tkk7.com/zhangrenquan/aggbug/35800.html" width = "1" height = "1" />

kelven 2006-03-17 11:43 发表评论
]]>
全面了解WMLhttp://www.tkk7.com/zhangrenquan/articles/35788.htmlkelvenkelvenFri, 17 Mar 2006 02:59:00 GMThttp://www.tkk7.com/zhangrenquan/articles/35788.htmlhttp://www.tkk7.com/zhangrenquan/comments/35788.htmlhttp://www.tkk7.com/zhangrenquan/articles/35788.html#Feedback0http://www.tkk7.com/zhangrenquan/comments/commentRss/35788.htmlhttp://www.tkk7.com/zhangrenquan/services/trackbacks/35788.html学习自然语言的最好方法就是溶入相应的语言环境在交中学习Q学习一U编E语a的最好方法就是看例程。ؓ了帮助大家徏立WML应用的第一印象Q所以请大家先看W一个例?

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

WML文g的概念WML Decks

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>


d与导航-赋g数据交换

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

跌{和传递参?/strong>

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务屏?/h2>

内部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>


动作和链?/strong>

讄动作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>


 

WML的事?/h2>

内部事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>


WML文档l构解

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>



Select List 控g

对表单的控制能力可以证明一个HTML设计者是否够专业Q而且很多交互功能也必M赖表单。WML没有表单属性,但是WML可以直接使用控gQ同样可以达C用表单的效果。因此,使用控g的水q_以体C个WML设计者的制作水^?

WML控g有Select List和Input Box两个pdQ每个系列另外包含几个子pdQ基本可以满单设计的需求?

选择列表控gQSelect ListQ?

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浏览器的控件序号参数?

2、选项控g

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?



分组选择控gQOptgroupQ和复杂实例

相关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>



kelven 2006-03-17 10:59 发表评论
]]>
վ֩ģ壺 ˾ҹƷƵ| ĻƵ| ¹AVר| ȫƵѹۿ߿| ִֻˬƵ| ޱ̬һ| ߹ۿ˳Ƶ| ŮڰǿͼƬ| þþƷƵ| Сӵ߹ۿ| avƬ߲| ëƬѹۿƵ| պƷרҹ| Ļ99| JIZZձ| ĻmvֻѸ| Ļ| ޳AVƬWWWɫè| 91ƷӾʢ| ˿www| ޸߹ۿ| avר߹ۿ| ԻȫƵվ | ŷղۺ| ûվɫƵֱ| avƬvrһ | ޾ƷĻ| þѸƵ| ޿һ| ˳һ| պƵһ| պƷƵ| ɫѿ| AVר| ޼Ƶ| þþ| պӰ| hƬ߹ۿַ| һ˿wwwƵ߹ۿ| С˵ɫͼ| ۺϾƷһҳ|