这个部分详细地说明了WML语言中各个标记的语法和使用方法。每个标记都有一个简单的例子供参考。

1. <a>

    这是短格式的锚语法。使用<a>代替<anchor>,并且只用来定义隐含的、指定了URL的<go>任务。

语法

<a href="url" <!-- required --> title="label">
...any valid combination of <text>, <br/> and <img> elements
</a>

2. <anchor>

    <anchor>标签将一个格式化的文本和一个任务捆绑在一起。经常被称作超级链接,可以使用任何的文本或图标指定超级链接。当用户选择了超级链接,并且按下ACCEPT,设备就会执行该任务。

语法

<anchor title="label">task text</anchor> 

    task 表示当用户激活超级链接以后所要执行的动作。text 是设备显示在屏幕上,用来代表超级链接的文本。
    task
必须指定下列任务中的一个:<go>、<prev>或<refresh>。
    text
设备通常将这段文字与其他的文字区别开。例如使用方括号,或者使用下划线。
    title用来标识link的标签。如果不指定title属性,设备将使用“link”作为默认的属性。设备可以以不同的方式使用这个标签。例如,在用户选择的时候可以用来显示一个帮助工具条,或者一个语音提示。为了兼容所有的设备,label最好不要超过5个字符。

例子:

<wml>
    <card>
        <p>
            Some links:<br/>
            <a title="Link1"><go href="d1.wml"/>news</a><br/>
            <a title="Link2"><go href="d2.wml"/>sports</a>
        </p>
    </card>
</wml>

3. <access>

    <access>标签用来指定WML页面的操作权限。必须在head内和其他的meta信息一起声明。每个页面只有一个<access>标签。所有WML默认的权限是public。

语法

<head>
    <access domain="domain" path="path"/>
    ...
</head> 

access的属性包括:

4. <b>

<b>指定黑色字体文本。

语法

<b>text</b> 

    text 是需要使用黑体显示的文本。

例子:

<wml>
    <card>
        <p>
            Press <b>OK</b> to go to the next screen.
        </p>
    </card>
</wml>

5. <big>

    <big>指定大字体的文本

语法

<big>text</big> 

    text 是所需要以大字体显示的文本。

6. <br/>

    <br/>标签用来指定换行。它将使得设备在新行上显示文本的图标。

语法

<br/> 

    注意:不像HTML所有的WML标签需要一个结尾标志“/”,因此在WML中插入一个新行是<br/>,而不是<br>。

7. <card>

    一个WML页面是由一个或多个卡片(card)组成。每个卡片都包含了一套用户和设备交互的操作。设备每次只能显示一个卡片——有些情况下会显示一系列的卡片。

语法

<wml>
<card id="name" title="label" newcontext="boolean"
ordered="true" onenterforward="url" onenterbackward="url"
ontimer="url">
    content
</card>
</wml> 

    content 代表了所有WML卡片的定义和操作的一系列内容:一个timer元素(或者没有)、一个或多个onevent元素、一个或多个do元素、pre元素等一系列的导航信息,此外一个card元素还可以包含一个或多个p元素。
    重点:<card>必须遵循以下顺序:<onevent>、<timer> 、<do>。
    除了以上列出的,设备将按照所指定的顺序显示元素。

card的属性包括:

    名字是导航时候的依据,例如,可以指定<go href="#cardname"/>来导航(参考<go>)。

    各种设备对此有不同的用途。
    注意: 生产厂家将会显示title,如果那儿有比较充分的屏幕空间。title属性应该看作是对用户的一种提示,而不是卡片所显示的内容。

    取值为true或者false,默认为false。当用户重新进入的时候 指定设备是否需要初始化卡片中所有的内容。当指定newcontext="true"那么所有的内容重新初始化,并清除历史记录。

    取值为true或者false,默认为true。它指定卡片内容的组织形式。ordered="true"将使得设备按固定的顺序显示内容。否则根据用户选择的顺序来显示内容。
    ordered属性可以指定设备在一个卡片中显示多个内容时候的顺序。true 将按线型方式显示(默认的值)。使用这个设置时,将只显示必须的属性。如果设备无法在一屏上显示所有的内容,那么它将分屏显示:

    false允许用户在各个部分之间进行任意的导航。使用这个设置,可以不必考虑他们之间的顺序。如果设备不能将所有的部分显示在屏幕上,那么它将会出现一个可供选择的卡片,用户可以导航到每一个部分(根据自己的意愿进行选择或者输入一个选择值)。

    如果用户执行<go>,那么就打开指定的URL地址。这个属性是<onevent>的一个简短格式。

    如果用户执行<prev>,那么就打开指定的URL地址。这个属性是<onevent>的一个简短格式。

    当timer过期的时候,就打开指定的URL。这个属性是<onevent>的一个简短格式。

例子:

<wml>
<card>
    <do type="accept">
        <go href="#card2"/>
    </do>
  <p>
    Press OK to display the next screen.
  </p>
</card>

<card id="card2">
 <p>
    This screen displays the content of Card 2.
 </p>
</card>
</wml>

8. <do>

    <do>将用户的交互(例如功能键、声音提示等)和一个任务联系在一起。当用户激活这些功能的时候,设备就执行和<do>相联系的任务。
    重点:<do>已经扩展了功能:可以使用图标来作为label。这个功能可以通过嵌入<img>来指定。

例如:

<do type="accept">
   <go href="/foo"/>
   <img src="img" localsrc="OK" alt="OK"/>
</do> 

    如果手机支持img、localsrc、src和alt,就应该保持这种顺序。如果不支持,就由alt指定label。如果指定了<img>,那么<do>中的label就被忽略。如果没有指定<img>,那么<do>中的<label>就被使用。

语法

<do type="type" label="label" name="name" optional="boolean">
    task
</do> 

task 代表将要执行的动作:

do元素必须绑定go、prev、noop、refresh任务中的一个任务。

do的属性包括:

    绑定特殊的用户交互事件
    可以指定以下的type属性:

    如果type 隐含了特殊的用户交互机制。有些设备将功能映射成按键,有些则映射成上下文独立的操作。因此当设计用户交互的时候,要记住不能指定设备将要使用的特别操作机制。
    注意: 如果在一个<card>中定义了多个<do>拥有同样的type,那么必须为每个<do>指定不同的name。

    label可以标识用户的交互事件。例如,如果将一个任务绑定在ACCEPT键上,那么设备就会将label的值显示在屏幕上,如果不指定,那么默认显示"OK"。为了保证屏幕有足够的宽度,label最多不超过5个字符。如果不支持动态的标签,设备将忽略label属性。

    指定<do>的名字。如果卡片级别<do>(定义在<card>中)和页面级别<do>(定义在<template>中)具有同样的名字,卡片级别将将覆盖页面级别。

    取值为true或者false,缺省为false。指定设备是否忽略这个标签。

9. <em>

    <em>指定强调文本。

语法

<em>text</em> 

    text 是需要强调的文本。

10. <fieldset>

    <fieldset>允许在一个card中,定义一组text或者输入。指定一个或多个<fieldset>可以控制设备如何显示卡片的内容,用来简化用户的输入。

语法

<fieldset title="label">content</fieldset> 

    content 表示以下内容中的一个或者多个的组合:control在一个<fieldset>组中,可以指定fieldset、input、select的内容;text也可以在<fieldset> 组中指定格式化的文本。设备对这些文本的使用是大不一样的。例如:作为用户输入的提示,或者描述选项。
    <fieldset>的属性:title指定<fieldset>组的标签。一些设备当显示<fieldset>组的时候将作为显示用的标签。其他的也许用作用户交互的提示。

11. <go>

    <go>是一个任务标签,它将指导用户去打开一个指定的URL。如果URL是一个指定的卡片,那么设备将显示那个卡片。如果URL是一个指定的页面,那么设备就显示那个页面的第一个卡片。

语法

<go href="url" sendreferer="boolean" method="method"
accept-charset="charset"
<postfield name="data" value="value"/>
    content
</go> 

    content 代表了打开的时候用来设置变量,可以指定一个或更多的变量。
    重点:不象其他的WML标签,指定content是可选的。如果不指定content,那么必须使用<go attributes/>代替<go attributes>content</go>。

<go>的属性包括:

将要打开的URL;

    取值为true或者false,缺省为false。指定设备是否要将所发送请求的页面的URL包含在内。如果sendreferer="true" 那么设备就要发送 HTTP_REFERER 头参照请求页面的相对URL。如果将操作权限限制在可信任的设备,那么就可以指定这项为true。

    取值为get或者post,缺省为get。指定HTTP的提交方式。指定method="post" 将使得服务器将通过HTTP的头来传递变量。当变量值中有非ASCII字符,可以使用这种方式。如果不指定,那么默认地使用post方式。

    指定字符的编码方式。设备将使用这个属性来确定postfield元素传输的编码。一般来说服务器采用UTF-8作为默认的编码。

    注意:accept-charset属性将覆盖HTTP头中的任何的字符编码设置。语法格式为, accept-charset="UTF-8, US-ASCII, ISO-8859-1"。
    以下的例子解释了<go>的使用方法:

<wml>
<card title="Employee" ordered="true">
    <do type="ACCEPT" label="Find">
        <go method="post" href="?next=list"
          <postfield name="next" value="list&amp"/>
          <postfield name="L" value="$last&amp"/>
          <postfield name="F" value="$first"/>
         </go>
    </do>
    Partial First Name:
    <input title="First Name" name="first"/>
    Partial Last Name:
    <input title="Last Name" name="last"/>
</card>
</wml>

12. <head>

<head>指定整个页面的头,包括metadata和access控制信息。

语法

<head>
     content
</head> 

    content 代表的是deck-level的头信息,content可以指定仅有一个access或一个或多个meta的内容。下面的例子指定页面的最大过期时间。WML通过<meta>中定义来决定缓冲控制。

<wml>
<head>
    <meta http-equiv="Cache-Control" content="max-age=3600"     forua="true"/>
</head>

<card>
    ...
    ...
</card>

<card>
    ...
    ...
</card>
</wml>

13. <i>

<i>指定斜体字的文本。

语法

<i>text</i> 

    text 是需要按斜体显示的文本。

例子:

<wml>
    <card>
        <p>
            <i>Red</i>, <i>blue</i>, and <i>yellow</i> are primary colors.
        </p>
    </card>
</wml>

14. <img>

    <img>指导设备在格式化的文本中如何去显示一个图片。注意:不是所有的设备都可以显示图片。
    注意:不能在<do>或者<option>内指定图片。也不能将图片作为一个功能键的标题或者选项。

语法

<img alt="text" src="url" localsrc="icon" align="alignment" height="n" width="n" vspace="n" hspace="n"/> 

    <img>包括以下属性:

指定可选的文本,假如设备无法显示执行的图片。

图片的URL地址。如果指定了一个有效图标的localsrc,那么设备就会忽略这个属性。

已经知道的图标名字。如果设备在ROM中找不到,那么它将从服务器上寻找。如果指定了一个有效的图标,那么将忽略src属性。

    取值为top、middle和bottom,缺省为bottom。指定图片的垂直对齐方式。

    指定图片的高度。

    指定图片的宽度。

例子:

<wml>
<card>
  <p>
    Here's a smiley:
  </p>
    <br/><img alt=":-)" localsrc="smileyface" src=""/>
</card>
</wml>

    注意 :一些localsrc在不同的矢量字体下有不同的显示。既然控制不了显示的大小,应该记住在不同的设备上图标的显示差别很小。

15. <input>

    <input>可以让用户输入文本或者变量。

语法

text
<input name="variable" title="label" type="type"
value="value" format="specifier"
emptyok="boolean" size="n" maxlength="n" tabindex="n"/>

    text 代表了用来提示用户输入的文本或者图片。
    input包括以下属性:

    变量的名字,设备将用它来保存用户输入的数值。如果变量没有数值,那么设备就将它设为默认的初始状态,也就是空字符串("")。当设备显示<input> 时,变量的数值会出现在输入栏内。

    指定一个简短的输入标题。有些设备将其作为一个帮助提示,当显示输入栏的时候。其他的也许将其作为一个交互时使用的标签。

    取值为text或者password,缺省为text。指定设备如何显示用户输入的文本。指定 type="text" 使得文本可见;指定 type="password" 使得文本不可见(例如,使用*代替原文本)。注意password方式,不是指加密方式。不能指望它带来安全保障。

    该属性是确定默认的数值。

    指定用户输入的匹配模式。如果省略这个属性,那么默认的就是*M。

    下面是指定格式化掩码的标签:

    为了限制用户输入的字符个数,可以指定输入字符的限制,只需要在格式前面加上数字。例如 format="3X" 让用户最多输入3个符号、数字和大写的字符。为了不限制用户的输入,可以通过在格式前面指定“*”。例如:format="*a"可以让用户输入任意多的内容。

取值为true或者false,默认为false。指定用户是否可以空着离开哪个项。指定 emptyok="true" 表明那个项目是可选的。

    指定输入框的最大输入长度。默认的是256。

例子:

<wml>
    <card>
    <p>
        First Name:
            <input name="fname" maxlength="15" /> <br/>
        Last Name:
            <input name="lname" maxlength="15" /> <br/>
        State:
            <input name="state" maxlength="2" emptyok="true"       value="CA" /> <br/>
        Zipcode:
            <input name="zipcode" maxlength="9" /> <br/>
        Password:
            <input name="password" maxlength="8" type="password" />
    </p>
</card>
</wml>

16. <meta>

    <meta>元素为WML页面提供各种信息。这个元素是在页面的头部指定有关页面操作控制的信息。
   注意:不是所有的设备都支持附加信息。

语法

<head>
    <meta http-equiv="Cache-Control" content="max-age=time"
    forua= true />
    ...
</head> 

meta的属性包括:

    必须指定name的属性:name="name" http-equiv="name"

    指定一个和property相关的数据值。

    取值为true或者false,默认为true。指定信息是否要发往用户代理。如果为“false”,那么相关的meta信息必须清除然后再发往客户代理。如果为“true”,那么相关的meta信息就直接分发给客户代理。

17. <noop>

    <noop>是一个任务元素。它指导设备不做任何事情。这个元素在覆盖页面级别时十分有用。

语法

<noop/>

18. <onevent>

    <onevent>和状态转移与内建事件相关。当内建的事件发生,设备将指定一个与<onevent>相关的任务。

语法

<onevent type="type">task</onevent> 

    这里task 代表当内部事件发生的时候要执行的动作,可以指定go、prev、refresh、noop中的任何一个元素。
    type属性标识内建事件,激活指定的任务。如果一个卡片级别的事件和一个页面级别的时间具有同样的类型,那么卡片级别的绑定将覆盖页面级别的绑定。
    可以指定以下的类型值:

19. <optgroup>

    <optgroup>允许在一个卡片中组织多个<option>(或者嵌套的<optgroup>)。创建选择组可以指定设备如何显示一个卡片的内容。

语法

<optgroup title="label">content</optgroup> 

    这里content 代表一个或多个以下的内容,可以指定以下的元素:

    title属性指定一个简单的标签。有些设备要将这个标签做为标题来使用。有些设备可能作为导航来使用。

20. <option>

    <option>在<select>中指定一个特殊的选择项目。
    重点:<option>元素已经扩展了功能,允许在<option>文本中加入图片。

例如:

<option value="1">
    <img src="/img1" alt="Choice 1"/>
</option>

语法

<option title="label" value="value" onpick="url">
    content
</option>

    这里content 代表设备将要显示的文本内容以及当用户选中之后所要执行的动作,event可以指定onevent元素, text显示代表选择的文本。
    <option>的属性包括:

    标识选择项的标记。为了保证和大多数的设备兼容,label 应该最大不要超过5个字符。

    指定将要赋给<select>中指定变量的值。如果指定了一个参考变量,那么设备将先测试变量有效性,然后再设置变量。

    指定在用户选择或者放弃选择(如果使用了多选)的时候,将要打开的URL地址。这个是一个<onevent>的缩写。

例子:

<wml>
<card>
  <p>
    Please select your favorite color:
    <select name="color">
        <option value="1">red</option>
        <option value="2">blue</option>
        <option value="3">green</option>
        <option value="4">yellow</option>
    </select>
  </p>
</card>
</wml>

21. <p>

    指定一个具有特定对齐方式和换行方式的新段落。

语法

<p align="alignment" mode="wrapmode">
   content
</p> 

<p>的属性包括:

取值为left、right或者center。指定显示行的对齐方式。如果没有,那么将采用左对齐方式。

    取值为wrap或者nowrap,缺省为wrap。指定文本的换行方式。如果指定为nowrap,设备将使用另外的机制来显示过长的行,例如:水平滚动。设备将会使用指定的换行模式直到下一个新的指定。换句话来说:如果指定了模式属性,那么设备将应用这种模式。如果没有指定模式,那么设备将使用最后一次所指定的模式。如果以前没有指定过,那么默认采用wrap模式。

22. <postfield>

    <postfield>定义了一个将要传送给HTTP 服务器的名字数值对。

语法

<postfield name="name" value="value"/>

<postfield>的属性包括:

表明域的名字标签。

指定的数值

23. <prev>

    <prev/>是一个任务元素。它指导设备从当前的堆栈中移走URL,并打开前一个URL。如果堆栈中没有内容,那么<prev>将没有任何效果。

语法

<prev>content</prev> 

    这里content 代表在打开前一个URL时,所需要设置的变量值。可以在其中指定一个或多个变量:<setvar>。
    注意:不像其他的WML元素,<prev>的内容是可选的。如果没有指定任何内容,那么就必须使用<prev/>。

24. <refresh>

    <refresh>元素是一个任务元素。它指导设备刷新卡片中的变量。设备当然也将更新屏幕上的变量。

语法

<refresh>content</refresh> 

    这里content代表需要刷新的元素变量,必须指定至少一个变量:<setvar>。
    注意:可以使用<refresh>标签来设置变量的值,但是不可能将它们设置为NULL。

例子:

<wml>
<card title="Employee" ordered="true">
    <do type="ACCEPT" label="Find">
        <go method="post" url="?next=list">
        <postfield name="NEXT" value="list&amp"/>
        <postfield name="L" value="$last&amp"/>
        <postfield name="F" value="$first&amp"/>
        </go>
    </do>
    <do type="OPTIONS" label="Clear">
        <refresh>
            <setvar name="first" value=""/>
            <setvar name="last" value=""/>
        </refresh>
    </do>
    Partial First Name:
    <input title="First Name" name="first"/>
    Partial Last Name:
    <input title="Last Name" key="last"/>
</card>
</wml>

25. <select>

    <select>元素指定用户选择项列表。可以指定单选或者多选。

语法

text
<select title="label" multiple="boolean" name="variable"
default="default" iname="index_var" ivalue="default"
tabindex="n">
    content
</select> 

    这里text 代表用来提醒用户输入的文本或者图像。content 代表可供选择的列表。可以使用<optgroup>或<option>来定义content

26. <setvar>

    当设备执行<go>、<prev>或者<refresh>任务时,<setvar>指定变量的值。

语法

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

    setvar的属性:

    需要设置的变量名。如果找不到这个变量,设备将忽略这个<setvar>。

    指定变量的值

27. <small>

    指定小尺寸的矢量字体的文本。

语法

<small>text</small> 

    这里text表示需要显示的小字体内容。

28. <strong>

    指定所需要特别强调的文本。

语法

<strong>text</strong> 

    这里text 代表需要特别强调的文本。

29. <table>

    <table>允许指定一个行格式化的输出,可以控制整个表格的对齐方式,但不是每个单元格的对齐方式。WML表格和HTML表格很像,但是只有少量的功能。在定义表格的时候,必须声明行数,以及后面的内容。这些内容可以是空行或者列。

语法

<table title="name" align="left|right|center" columns="number of columns">
...row and data declarations
</table>

table的属性包括:

取值为left、right或center,默认为left。指定文本的对齐方式。如果没有指定,那么默认将采用左对齐方式。

    指定表格的标签。

    指定每行的列数。指定为0是不允许的。

30. <td>

    <td>元素是一个用来装入格子内容的容器。表单的格子可以为空。用户代理必须处理由于使用图像或者链接所带来的多行数据单元格。

语法

<td>content</td>

    这里content 代表了在表单格中的文本,或者是<img>和<anchor>元素。可以指定<img>、<anchor>任何一种元素。

31. <tr>

    <tr>是一个用来装入表单行的容器。这个表单行可以为空,换句话说,所有的格子都是空的。

语法

<tr>
  <td>content</td>
</tr> 

    这里content 代表表单格子中的内容,可以是文本,或者是<img>和<anchor>。

32. <template>

    一个WML页面可能包含一个<template>元素来定义页面级别的事件捆绑。这些事件特点将对页面内的所有卡片起作用,可以通过指定卡片的同名事件捆绑来覆盖某个事件捆绑。

语法

<wml>
<template onenterforward="url" onenterbackward="url"
ontimer="url">
    content
</template>
</wml> 

    这里content 代表了当事件发生时的一般动作,可以指定<do> 、<onevent>的任何一种元素来定义。
      template元素包括以下属性:

    如果用户通过<go>任务来浏览一个卡片,那么打开指定的URL。这个属性是<onevent>的一个缩写。

    如果用户通过<prev>任务来浏览一个卡片,那么打开指定的URL。这个属性是<onevent>的一个缩写。

    如果用户通过<timer>过期,那么打开指定的URL。这个属性是<onevent>的一个缩写。

33. <timer>

    <timer>提供了在一段时间的交互之后,自动激发任务的功能。任何一种用户的动作都将激活定时器,执行任何任务都将停止定时器。只能在一个卡片中定义一个定时器。

语法

<timer name="variable" value="value"/> 

<timer>的属性包括:

    name变量用来保存定时器的值。如果变量没有指定初始值,设备将自动使用默认的指定值。如果用户退出卡片,那么这个变量将被设置为当前时间。如果在定时器过期以后,设备将这个变量设置为0。

    指定变量的关键属性。必须以1/10秒为单位指定<timer>的值,例如,100等于10秒。将值设置为0将停止timer。如果name在定时器之前已经有了一个值,那么设备将忽略默认的属性。如果变量名还没有值,那么设备将使用指定的数值设置该值。

    以下的例子解释了怎么初始化和重新使用一个计数器。当用户访问该卡片的时候,设备都将重新设置定时器的数值。如果定时器没有数值,设备将设置定时器为5秒。当定时器过期以后,设备将自动设置时间。

<wml>
<card ontimer="#card2">
    <timer name="time" value="50"/>
  <p>
    Hello, Unwired World!
  </p>
</card>

<card id="card2">
    ...
    ...
</card>
</wml>

34. <u>

<u>指定带下划线的文本。

语法

<u>text</u>

    这里text 是将要显示下划线的内容。

35. <wml>

    <wml>指定一个WML页面。

语法

<wml xml:lang="lang">
<card>
    content
</card>
</wml>

    这里content 代表定义页面动作的WML元素。
    wml的属性“Xml:lang”指定WML文档的语言。所指定的语言属性将覆盖其他任何语言指定语句的功能。

例如:

<wml xml:lang="en-us">
<card>
    ...
    ...
</card>