分享

关于WML

 财道白金 2006-08-30
  • 1. 简单说WML代表什么?

        WML代表“Wireless Markup Language”。WML就是无线标记语言(Wireless Markup Language),内置于移动设备中的微型浏览器能够解释这种标记语言。虽然它和HTML语言很相像,但WML其实是XML的一个应用子集。

  • 2. 什么是WML?

        WML代表Wireless Markup Language,就象HTML对普通的Web浏览器一样。有人说它是基于XML,但是更准确地说WML是XML的一个应用。虽然在语法上和HTML相似,但更多的是XML。如果准备从HTML到WML,但是没有任何的XML知识,将会发现WML“非常”严格。就像HTML,WML被读取并且通过WAP设备中的浏览器解释,然后显示在屏幕上。对于WAP设备,浏览器,或者用户代理,通常叫做微型浏览器。微型浏览器的功能是受到WAP设备的限制的。
        为什么使用WML而不是使用广泛的HTML原因是由于WAP的工作方式以及WAP是为一个“窄小”的无线世界工作的。在Netscape、Opera或者IE上显示HTML需要更强的计算能力。计算能力某种意义上是移动设备中的电能。由于移动设备中的电能是有限的,所以WML在发送给WAP设备之前,通常要经过转换和压缩。所以WAP使用的是WML。
        读者也许可能想到WML非常简单,甚至不能处理HTML中的多媒体类型。这个不是问题。标记语言(WML、HTML等等)没有操作设备的权限,例如播放声音或者显示动画。仔细地观察HTML,就会发现没有一个HTML标签能够显示动画或者播放音乐。限制是来自于运行标记语言的浏览器。毕竟在大多数情况下,是谈论移动电话。但是这个限制应该随着无线Internet的发展而逐渐取消。

  • 3. WML与HTML有什么区别?

        虽然WML看起来十分像HTML,但是在技术上两者的差别还是很大的。WML是为微型浏览器所设计的HTML的一个子集。WML的标准定义是基于XML的。

  • 4. Phone.com的 HDML和WML有什么区别?现在有电话支持 HDML吗?

        HDML(Hand-held Devices Markup Language)是Phone.com开发的。它使得Web页面可以在移动电话上显示,其标准的公布先于WAP标准。Motorola、 Neopoint、Qualcomm 等等公司的电话使用Phone.com的浏览器,它支持HDML。最新的UP.Browser支持HDML和WAP。

  • 5. 为什么使用WML而不是HTML?

        首先是WAP协议要求使用WML。可能已经有能够支持HTML的WAP设备,但是那不是真正的。有一些和无线设备很像的WAP设备支持HTML,但它们也不是直接使用HTML(例如:Microsoft Mobile Explorer支持HTML和WML)。MME设备只是将两个分离的部分做到了一起。当然也有HTML的变种,例如 iMode 浏览器使用Compact HTML。简单的说,如果谈论WAP设备,那么标记语言就是WML。
        有很多理由说明选择WML而不是HTML。现在最重要的一个原因就是WML与HTML相比需要很小的带宽。随着无线技术的提高,带宽会越来越宽。这个原因可能不再是主要原因,但是在达到这么高带宽之前需要许多年的时间。
        另外一个就是HTML需要相对来说比较强的处理器。处理器的能力意味着需要更强的能量。在无线设备中能量来自于电池。而一个低处理能力的处理器就意味着电池的使用时间可以更长。
        另外,HTML的确需要一个很大的显示屏幕。移动电话上的屏幕显然不能满足要求。当然也许会有一个大屏幕的移动电话,但是这样它就离移动更远(也就是说越不像移动电话)。即使iMode支持彩色和一个类似HTML的显示,它的尺寸已经是你可以方便携带的最大尺寸。

  • 6. 为什么对于无线设备要专门设计一种特别的语言才能访问Internet?

        许多年来,HTML标记越来越丰富,越来越庞大。此外,浏览器对各种HTML标记的支持也大不相同。这种状况已经与当初想建立一个简单的标准相背离。
        移动设备(例如:移动电话)具有小屏幕、内存少、缺少方便的输入设备和带宽窄的特点。这种状况驱使WAP讨论组发展一种新的为无线设备所使用的语言,WML就此诞生了。

  • 7. 无线设备也能支持HTML格式吗?

        从技术的角度上来说答案是肯定的。既然HTML是为普通PC浏览器所编写的,也可以使用微型浏览器来浏览一个HTML页面,但是可能没有效果。因为移动电话不知道如何显示该文件。这样通常导致微型浏览器出现混乱。并且HTML页面通常都比较大,它会把移动设备“撑坏”的。

  • 8. 如何将HTML转换成WML?

        当考虑转换HTML时,要想到WML是为小屏幕设计的,不可能像HTML那么丰富多采。任何转换都将忽略很多HTML标记和许多内嵌的脚本。只有一些简单的HTML页面可以被满意地转换。转换可以使用工具包如:Spyglass Prism,也可以通过在线的WAP网关过滤。

  • 9. 用什么可以浏览到WML页面?

        首先需要一个具有WAP功能的手机,例如:Nokia 71110,Ericsson R320等等。用于PC机的桌面WML浏览器也很多,例如:WinWap、WapMan等等。

  • 10. 在哪里可以学到更多的关于XML的知识?

        可以访问站点:www.w3c.org/xml。在该网站上有许多关于XML的知识有详细的讲解。

  • 11. WML的一般语法是什么?

        WML非常像XML。和HTML相比其语法规则更加严格,从而保证当微型浏览器解析和解释的时候不会有太多的错误信息。
        和HTML一样,WML使用“<”和“>”组成的格式化标签。许多标签都是以<tag>开头,以</tag>结尾。在开头或者结尾中包含的部分叫做元素。有些标签叫做空元素,只有标签,没有内容,如:<tag/>。
        许多元素有属性来描述应其中还有那些内容。属性名字必须小写,并且属性值必须使用双引号括起来。有些属性是必须的,有些是可选的。一般的属性标签格式就像:<tag attribute1="value">。
        变量可以在WML卡片中定义,它们的一般格式是 $(variablename)。
        一个WML页面有一个专门的格式,它必须以XML的文档声明为开头:

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

        所有的页面中的元素,都必须在<wml>和</wml>标签之间。

  • 12. 什么是一个“deck”?

        一个WML文档有许多卡片(cards)组成。一个卡片是一系列完整的WML代码。这些卡片被称为一个“deck”。卡片和“deck”的概念就有点像HTML中的锚标记<a name="#achor1">和一个HTML页面。也就是说卡片是“deck”中的一个组成部分。也可以把“deck”称为WML中的页面。它们之间的关系可以比做一副扑克牌。整副扑克牌就是deck,而每一张牌就是card。

  • 13. 什么是WML的“deck”?

        WML的“deck”或者WML文件是指decks。每个deck包含一个或者更多的card。每个deck都以<wml>开始和结束。并且每个card都以<card>开头或者结束。
        当WML微型浏览器处理WML文件或者deck的时候,它阅读整个deck,并且在deck内的各个card之间进行导航。当装入deck的时候,deck里面所有的card都已经装入到内存中,直到浏览器装入另外的deck。
        如果熟悉 HTML中的<a name>标签。WML的<card>标签将是非常类似的:

    <wml>

    <card id="start_menu">
    ...some code...
    </card>

    <card id="purchase">
    ...some more code...
    </card>

    </wml>

        deck和card可以按照这种方式调用:[deckname][#cardname]。如果deckname省略,那么浏览器就会查找当前内存里的cardname名字的card。如果使用了deckname和#cardname,那么浏览器将装入deckname的整个deck,然后跳入到#cardname。这个和HTML的工作方式很像。

  • 14. WML是大小写敏感的吗?

        是的!要注意WAP 1.1使用小写的标签。

  • 15. 如何显示一个美元符号?

        使用两个在一起的美元符号来表示,即“$$”。

  • 16. 想显示价格的格式该怎么办?

        “$”是一个特殊的字符,使用“$$”来显示一个“$”。

        例如:

    <p>
        The price is $$11.20
    </p>

  • 17. fieldset标签有什么作用?

        编写WML页面的时候要考虑到设备的屏幕很小。如果试图想把一个大的form在一个屏幕里面显示,就要指定那些标签保持在一个屏幕中。那么fieldset标签将这些标签捆绑在一个屏幕上。

  • 18. postfield标签有什么作用?

        postfield标签使允许提交参数到服务器端。注意有些早期的模拟器还不支持该标签,这将给开发工作带来麻烦!

  • 19. WML有类似HTML的<mailto>标签吗?

        没有。但是你可以使用WML表单和服务端脚本来得到同样的效果。

  • 20. 无法让<input/>格式正常工作是怎么回事?

        至少Nokia WML Reference没有讲清楚有关<input/>标签的用法。format参数控制着用户输入数据的类型和长度。
        注意到不是所有的WAP 1.1浏览器都接受所有的格式化代码。例如:Nokia 7110就支持得不是很好。Mitsubishi Trium在处理“*f”代码的时候有点问题,“*”必须为1或者更大。专门的格式化代码如下:

    • A

      从A到Z的任何大写字母,没有数字或其他字符。

    • a

      从a到z的任何小写字母,没有数字和其他字符。

    • N

      任何0到9的数字。

    • X

      从A到Z从0到9的任何字符。

    • x

      从a到z从0到9的任何字符。

    • M

      任何字符,输入默认从大写开始。

    • m

      任何字符,输入默认从小写开始。

    • *f

      (星号)意味着任何数字(包括0),f是格式的代码。

    • nf

      意味着恰好要输入的字符个数。n从1到9。f是格式代码。

    • 是转义输出字符。

        格式化字符可以组合使用来表示一种特定的格式输入。但是强制一定的输入应当避免在用户出错的时候没有提示信息。如果输入是不正确的,该填写的区域一般仍保持空白,直到让用户知道应该输入什么。如果只想输入数字,使用“*N”那么将直接转跳到数字输入模式。如果只想输入大写的字符,使用“*M”转跳到大写输入模式。现举一些例子:
        “N” 只接受一个数字字符。
        “*N” 接受任何数字字符。
        “NN” 只接受2个数字字符,不多不少。
        “ANN” 接受一个大写字符(没有数字),后面跟着两个数字,不多不少。
        “X*N” 表示可以接受一个字符(没有数字)后面跟着任意多的数字字符。
        “NNN\-NNN\-NNNN”表示接受美国的电话号码格式,例如:“123-456-1234”。
        “2N\:2N\:2N” 表示接受时间格式,例如:“12:02:34”。
        “NNNNNNNNN” 表示接受9个数字字符。
        “9N” 同样表示接受9个数字字符。 

        maxlength参数控制着输入字符的总个数。

  • 21. 如何防止一个空的field?

        在大多数情况下需要知道用户确实是输入了一些内容在field中,不能让这些内容为空。这个可以通过在服务端的检测来完成,也可以通过WML来完成。
        在WML中,这个检查可以通过合适的格式化代码来完成,或者使用一个在input标签中叫做emptyok="false" 的参数来实现(只有当必须要求用户输入的时候才使用)。如果使用了value="something" 或者value="" 用户仍然可以发送空的fields。
        以下的行将接收任何值到username field, 甚至用户将整个field清空。另外field中没有任何东西,也能够提交form。

            <input name="username" type="text" value="things" format="*M"/> 

        除了用户将整个field清空,以下的行将接收任何值到username field。如果field是空的,他将不能提交form,。

            <input name="username" type="text" value="things" format="M*m"/>

        以上的应用是针对大多数的浏览器。在Nokia 7110 ,emptyok参数可以有同样的效果:

            <input name="username" type="text" value="things" format="*M" emptyok="false"/>

  • 22. 使用option标签的时候,无法一屏显示完该怎么办?

        许多WAP电话的显示屏幕只能显示三到四个选项。按以下的方法分割option字段就可以输入更多的选项。

    <select title="longselectlist">
    <optgroup title="option1">
    <option>option1-1</option>
    <option>option1-2</option>
    <option>option1-3</option>
    </optgroup>
    <optgroup title="option2">
        <option>option2-1</option>
          <option>option2-2</option>
          <option>option2-3</option>
    </optgroup>
    <optgroup title="option3">
          <option>option3-1</option>
          <option>option3-2</option>
          <option>option3-3</option>
    </optgroup>
    </select>

  • 23. 想有一个永久的BACK在屏幕的右下方。有些好像是自动的,若没有,该怎么做?

        可以加入以下代码。

    <do type="prev" label="Back">
        </prev>
    </do>

        更好的是使用template。

    ……
    <template>
        <do type="prev" label="Back" name="back">
            </prev>
        </do>
    </template>
    ……

  • 24. WAP支持列表吗?

        是的,WAP1.1支持列表和相关的标记。

  • 25. 可以在WML中使用表单吗?

        可以。但是Nokia 7110在显示表单的时候有些问题。

  • 26. WML支持什么样的表单提交方式?

        WML支持GET和POST方式。但是Nokia 7110在处理GET方式的时候有些问题。

  • 27. WML中如何增加参数到URL字符串中?

        和HTML的工作方式很像,如下所示:

    ……
    www.someserver.com/someurl?parameter1=value1&parameter2=value2
    ……

        唯一的不同是将“&”变成“&”。

  • 28. 如何从WML向ASP传送数据?

        假设有一个ASP叫做“myasp.asp”,并且有一个WML变量叫做 “wmlvar”。当发出请求“myasp.asp?wmlvar=something”,可以使用下面的方法得到变量的内容。

        dim aspvar
        aspvar = Request.QueryString("wmlvar") 

        ASP变量“aspvar”将包含字符串“something”。当然ASP变量也可以与WML变量同名。

  • 29. 如何让WML页面自己更新?

        有过Web经验的人喜欢使用:

            <meta http-equiv="refresh" content="1;http:///"> 

        来强制浏览器自动更新。

        虽然在WAP中也支持一些META标签,一个更好的办法是使用<ontimer>标签。
        以下的代码显示了如何自动转跳到另外一个卡片:nextdeck.wml。

    <?xml version="1.0"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www./DTD/wml_1.1.xml">
    <wml>
        <card id="splashscreen" ontimer="nextcard.wml">
          <timer value="40"/>
          <p>Please wait for the timer to run out...</p>
        </card>
    </wml>

        下面的代码将强制浏览器在一段时间后重新装入同一个卡片。这个页面叫做loop.wml。

    <?xml version="1.0"?>
    <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www./DTD/wml_1.1.xml">
    <wml>
        <card id="loop" ontimer="loop.wml">
          <timer value="40"/>
          <p>This text will be shown over and over again...</p>
        </card>
    </wml>

        注意必须避免浏览器可能要使用的cache机制。

  • 30. WML页面的最大大小是多少?

        1397 bytes/deck

  • 31. WML页面的限制是多少?

        由于WAP设备只有很少的内存,因此就存在着一个最大的WML deck的界限。这里没有一个绝对的标准,根据浏览器的不同而不同。表10-5列出了几种浏览器的限制。
        注意WML deck的大小是指编码压缩成二进制格式下的大小,一个没有压缩的WML deck可能很大,但是压缩后可能比较小。

    表10-5 不同浏览器的限制

    浏览器

    压缩后的WML大小限制

    UP.Browser 3.2

    1492 bytes

    UP.Browser 4.x

    2048 bytes

    Ericsson R320

    大约3000 bytes

    Ericsson R380

    大约3500 bytes

    Ericsson MC218

    多于8000 bytes

    Nokia 7110

    1397 bytes


  • 32. 如何防止对WML页面的非法访问?

        WAP可以防止通过HTTP协议对文件和目录的非法操作。注意:有些WAP模拟器和虚拟的WAP浏览器可能不支持这个特点。在这个时候是不知道是否有可能使用其他类型的验证方式。
        为了使用这种方式,用户的HTTP服务器必须支持这个特点,其实大多数服务器都支持。当一个WAP浏览器请求一个URL,它将提醒用户输入用户名和密码。这些都转换成无法直接阅读的字符,但不是加密。也就是说如果网络上有人在使用合适的设备监听,那么用户名和密码将被泄露。
        这个特点在Apache文档中有详细的说明,但是文档的描述很弱,这里有如何在Apache HTTP服务器上配置的说明:

        要保证Apache已经配置过,使得一个名叫.htaccess的文件可以覆盖全局的操作配置。操作配置既可以在每个目录使用分离的文件,也可以在全局的access.conf中。但是在这个例子中,我们将集中在.htaccess文件上。并且检查AllowOverride的设置。这个必须设置到AuthConfig,那样意味着Apache在目录中寻找.htaccess文件,并且使用该文件中的规则。记住在配置后要重新启动Apache服务器。
        下一步是在目录里放置需要保护的文件叫做.htaccess。(注意点代表文件名的开头)。一个.htaccess文件的基本内容如下:

    AuthType Basic
    AuthName "WAP FAQ Authentication Demo"
    AuthUserFile /home/httpd/html/wap-faq/extras/auth/auth.passwd
    require valid-user 

        AuthType设置是指定验证的类型,AuthName指定领域,AuthUserFile指定口令文件的位置,require指定所想得到的操作。在这个例子中,任何在口令文件中的用户都有一个正确的口令。
        现在需要产生一个口令文件,Apache使用一个叫做 .htpasswd来完成这个特殊格式文件的生成。运行程序如下:

    #htpasswd /home/httpd/html/wap-faq/extras/auth/auth.passwd demo
    New password:
    Re-type password:
    Adding password for user demo

        注意:在第一次创建文件的时候,必须使用“-c”选项。
        现在加入了一个叫做“demo”的用户,并且输入了他的密码两次。考虑到安全的原因,口令文件不应该放在文件根目录下。笔者在这里只是做演示。
        现在最后就是测试,笔者建议使用HTML浏览器。输入含有想保护的URL目录的地址,一个对话框就会弹出来询问用户名和口令。如果一切顺利,就可以使用WAP浏览器来测试了。
        一个目录保护的例子在这个服务器上,用户名是demo,口令是demo。可以使用HTML或者WML浏览器来做测试。
        这个例子同样可以通过输入http://wap./demos.html来得到。
        或者只要点到保护的区域:
            http://wap./wap-faq/extras/auth/
        或者查看.htaccess文件。
        最后点击查看口令文件的内容。

  • 33. 怎么使用非拉丁字符?

        在文件开头加上:
            encoding="ISO-8859-1"?
        或者:
            encoding="UTF-8"?

        ISO-8859-1和UTF-8编码支持更多的字符。

  • 34. 一些特殊字符破坏了代码和连接该怎么办?

        锚/链接有时候包含了一些字母和数字之外的字符。典型的如:“~”(波浪号)和“&”(与号)。如果根据书编程,就应该告诉WAP浏览器使用的是什么字符集。这个在XML定义中可以完成:

        <?xml version="1.0" encoding="iso-8859-1"?> 

        “iso-8859-1”是Latin字符集。这个应该在大多数场合下能满足需要。但是,还是需要对那些转义字符进行转义。即使指定了字符集,也是没有用处的。
        字符实体是某些特殊字符的标准名字,例如:“&”就是“&”。
        大多数浏览器在反编码名字实体的时候会出现问题,例如Nokia列出了7个兼容的名字实体:“quot”、“amp”、“apos”、“lt”、“gt”、“nbsp”和“shy”。只有在使用它们的十进制代码的时候(在上述所说的Link中),浏览器可以显示几乎所有字符。如果Nokia的浏览器接收到无法支持的实体名,它就会崩溃。
        通过使用HTML或者WML浏览器(在HTML格式下,虽然不是很好),可以操作在线的实体名列表,该列表在http://wap./wap-faq/apps/charentref.html。
        这个表同样有一个例子在:http://wap./demos.html。
        第一步,选择将要使用的字符集,Latin1,Latin1 Mathematical和Greek symbols,最后是Latin1 Markup symbols。注意到列表被分割了,是由于deck的限制。真正的列表显示了实体名,实体的十进制值和真正的符号。从这里就可以看到哪个字符浏览器可以显示。
        注意上面的在线列表,不要设置为“charset=iso-8859-1”(真正的Latin1),那是个XML定义。

  • 35. 可能在WML页面上显示一个可选的Link吗?当用户选择后就可以直接拨号?

        现在不行。但是一旦支持WTAI的设备出现,那么就可能实现。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多