wml数据值性质
除了nmtoken型数据外,wml其他3种类型的数据都必须以文本形式即加上引号进行定义。我们关心的问题是,这些类型的数据可以表示哪些数据值呢?或者说,它们所表示的数据值的性质是什么呢?
事实上,wml数据值在性质上可以是长度(length)、宏变量(vdata)、流(flow)、内行(inline)、布局(layout)、文本(text)、超链(href)、布尔值(boolean)、数值(number)或增强方式(emphasis),下面我们就介绍一下它们的规则及使用方法。
(1) 长度(length)。wml编程中使用的长度主要用于表示屏幕像素的多少或所占屏幕水平、垂直空间的百分比。比如,“50”意为50个像素,“50%”意为屏幕水平或垂直空间长度的50%。长度属于cdata型数据,常用“%length”表示。
例如,下例中的hspace与vspace都属于%length性质的数据:
<img src="bitmaps/moon.wbmp" hspace="1" vspace="1"/>
<img src="bitmaps/moon.wbmp" hspace="2%" vspace="2%"/>
注意,本章给出的例程都或多或少地用到了wml的标签,这部分内容我们下一章介绍。如果在这里读者一时看不懂,可以先浏览下一章的内容,稍有感性认识后再学习这部分内容。
(2) 宏变量(vdata)。主要用于表示包含变量名的字符串,仅用于属性值。它属于cdata型数据,常用“%vdata”表示。例如,<card id="card1" title="$(showme)">一句中的“$(showme)”就属于%vdata性质的数据。
(3) 文本(text)。用于表示包含一定格式的文本实体,属于pcdata型数据,常用“%text”表示。例如,下例中包含有运行时显示为普通格式的文本,以及加黑显示的文本:
a line with plain text.
<em>
<strong>
a line with strong emphasis.
</strong>
</em>
(4) 流(flow)、内行(inline)和布局(layout)。流(flow)用于表示“卡片级(card-level)”的信息,内行(inline)用于表示“文本级(text-level)”的信息,布局(layout)用于表示与文本布局有关的信息,如换行符等。
一般来说,内行型(%inline)的可能是文本型(%text),也可能是布局型(%layout)的,通常是程序中的纯文本或处理的变量;而流型(%flow)的则可能包括内行型(%inline)、图像(img)、锚(anchor)及表格(table)等卡片级的所有元素。有关“锚(anchor)”的概念我们后面会讲解的。比如,下面的例程中就有换行符、文本等性质的内容,也即数据。
<em>
an emphasized line.
<big>
a big and emphasized line.
</big>
</em>
a line with no text formatting.
(5) 超链(href)。主要用于表示相对的或绝对的统一资源定位符uri(uniform resource identifier),以及url地址、文件名、文件路径等。超链(href)属于宏变量,即%vdata型性质的数据,常用“%href”表示。例如,下述例程中的超链接、文件路径及文件名、卡片名、图像的src属性文件名等均属于%href性质的数据:
<go href="http://wapforum.org/"/>
<go href="file:///d:\dir\file.wml"/>
<go href="app.wml"/>
<card onenterforward="#card2"/>
<img src="earth.wbmp"/>
(6) 布尔值(boolean)。用于表示“真(true)”或“假(false)”的逻辑值,常用“%boolean”表示。下例程序中就使用了%boolean型性质的数据:
<card newcontext="true"/>
<do optional="true" type="accept"/>
(7) 数值(number)。用于表示大于或等于零的整数,常用%number表示,属于nmtoken型的数据。例如,下例中的整数均属于%number型性质的数据:
<select tabindex="2"/>
<input name="setvar" size="4" maxlength="20" tabindex="3"/>
(8) 增强方式(emphasis)。这类性质的数据包含了wml编程中用于定义文本格式的各种标签,如<em>、<strong>、<b>、<i>、<u>、<big>、<small>等,常用“%emph”表示。这些标签可以定义文本以黑体、斜体、下划线等格式显示。下例中就包含了几个%emph型性质的数据:
<em>
an emphasized line.
<big>
a big and emphasized line.
</big>
</em>
wml核心数据类型
wml的核心数据类型均属于字符型数据,是根据xml的数据类型定义的,共有下述4种类型:
(1) cdata型。这种数据类型是wml用得最多的一种,可以是数字、字符串或包含数字的字符串。不过定义时,不论是数字或字符串,都必须以文本的形式定义,即数据用引号引起来。cdata型的数据仅用于属性值。例如"$(value)"或name="value"等。注意,这里的value指cdata型的数据值。
(2) pcdata型。这是从cdata中分解出来的一类数据,除了可以是文本形式的数字、字符串或两者的混合串外,还可以是wml的标签。pcdata型的数据只能用于wml的元素表示。例如,text written <big> in caps </big>一句中的<big>与</big>标签即属于pcdata型的数据。
(3) nmtoken型。这是一类特殊的数据,凡是包含或部分包含数字、字母及标点符号的数据均属于nmtoken型数据。这种数据可以用标点符号开头,但不用于定义变量名或元素名。例如,下述4个数据均属于nmtoken型:
"text"
_card1
a.name.token
.a-perfectly-valid.name.token
(4) id型。专门用于定义wml元素名称的数据类型。例如<card id="card1"/>中就使用id指定当前卡片的名称为card1。
在这4种类型中,cdata型用起来比较灵活,它可以使变量或数据免于语法检查。这是因为,cdata内的数据内容都会被当作文本来处理,从而可以避开wml的语法检查,直接作为文本显示出来。具体用法是,以“<! [cdata[”开头,“]]>”结尾,中间包含的数据均按cdata型处理。例如:
< ! [ cdata [ this is <b> a test ] ] >
其显示结果为:this is <b> a test。
<-- end newscontent -->