欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WML 中的变量替换

程序员文章站 2022-03-10 10:53:16
...

所有W M L内容可以参数化,使作者具有更大的灵活性,能生成具有良好的缓存行为和感

觉上交互性更好的卡片和页面。W M L变量可以代替字符串,并且可以在运行时用它的当前值

替换。

如果变量值不为空字符串,则变量要被置初值。如果变量值等于空字符串、未知或在当

前浏览器内容中未被定义则变量值不用被设置。

1. 变量替换

变量值可以被替换成一个卡片的文本(# P C D ATA)和W M L元素的% v d a t a和% U R L属性值。

只有文本信息可以被替换,元素或属性不能被替换。在用户代理中,变量替换在运行时发生,

它被定义成一个字符串替换操作,而且不会影响变量的当前值。如果未被定义的变量被引用,

结果被替换成一个空字符串。

W M L变量名包含一个U S - A S C I I字母,或后面跟着零或多个字母、数字的下划线,或只是下划线,任何其他的字母都是非法的。变量名区分大小写。

下面是一个变量替换语法的B N F式描述。除了用字符“ |”表示可选之外,这个描述使用

[ R F C 8 2 2 ]中建立的惯例。简单地讲,用“(”和“)”来组合元素,而可选的元素括在“ [”和

“]”内。元素前可用< N > *定义,表示这个元素N次或更多次的重复(未指定时N默认为零)。

var = ( "$" varname ) |

( "$(" varname [ conv ] ")" )

conv = ":" ( escape | noesc | unesc )

escape = ("E" | "e") [ ( "S" | "s" ) ( "C" | "c" )

( "A" | "a" ) ( "P" | "p" )

( "E" | "e" ) ]

noesc = ( "N" | "n" ) [ ( "O" | "o" ) ("E" | "e")

( "S" | "s" ) ( "C" | "c" ) ]

unesc = ( "U" | "u" ) [ ( "N" | "n" ) ("E" | "e")

( "S" | "s" ) ( "C" | "c" ) ]varname = ( "_" | alpha ) *[ "_" | alpha | digit ]

alpha = lalpha | halpha

lalpha = "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" |

"j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" |

"s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"

halpha = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" |

"J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" |

"S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z"

digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" |

"8" | "9"

若从周围的上下文中不能推断出某变量,则在该变量结尾处要加上圆括号(例如,一个

如空白的非法字符)。例如:

This is a $var

This is another $(var).

This is an escaped $(var:e).

Long form of escaped $(var:escape).

Long form of unescape $(var:unesc).

Short form of no-escape $(var:N).

Other legal variable forms: $_X $X32 $Test_9A

变量值被替换时可以转换成其他不同的格式,转换可在变量引用中定义,跟在冒号后面。

表4 - 3概括了当前的转换和它们的合法缩写:

表4-3 变量扩展方式

转换作用

无扩展没有改变变量值

扩展U R L扩展变量值

未扩展U R L未扩展变量值

在变量替换时的转换不会影响变量的实际值。

[ R F C 1 7 3 8 ]中详细描述了U R L的转义。像在[ R F C 1 7 3 8 ]中规定的一样,所有在W M L中定义的词法敏感的字符必须被转义,包括所有保留的和不安全的U R L字符。

如果没有指定转换类型,将使用适合上下文的变换格式替换变量。在没有进行转换的地

方,O N E N T E R B A C K WA R D、O N E N T E R F O RWA R D、U R L和S R C属性默认为扩展转换。按

照规定,n o s c转换将使一个变量的上下文相关转义被禁止。

2. 变量替换语法分析

在所有的X M L分析完成之后,再进行变量替换语法(如$ x)分析。在X M L术语中,

X M L处理程序分析完文件并向X M L应用程序提供了分析结果报表后,再进行变量替换分析。

在该规范的上下文中, W M L语法分析程序和用户代理是X M L应用程序。

这意味着在分析了X M L结构(如标签和实体)之后,再进行所有变量语法分析。在变量

分析的上下文中,所有的X M L语法比变量语法有更高的优先权,例如,实体替换发生在变量

替换语法分析前。下面的例子等同于名为x的变量:$ x

& # x 2 4 ; x

$ & # x 5 8

& # 3 6 ; & # x 5 8

3. $符号

分析规则的一个副作用是文字中的美圆符号必须编码成一对$符号实体,单独的$实体,

甚至诸如& # x 2 4这样的定义,将导致一个变量替换。

为了在W M L页面中包括一个$符号,必须对其进行转义。这可用下面的语法实现:

一行中的两个$符号被单独的$符号代替。例如:

This is a $$ character.

这将显示为:

This is a $ charac为了使U R L扩展字符串包括$符号,可以用U R L扩展形式定义它:

% 2 4

4. 变量赋值

有多种方法为变量赋值。当为一个已经在浏览器上下文中定义的变量赋值时,这个变量

被赋予当前值。

作为导航的另一个作用, VA R元素允许作者设置变量的状态。VA R可以在任务元素中定

义,包括G O、P R E V和R E F R E S H。VA R元素指定变量名和变量值,例如:

<VAR NAME="location" VALUE="$(X)"/>

作为导航的另一个作用, N A M E属性中定义好的变量可以被赋值(如: l o c a t i o n)。有关

VA R元素的处理过程更多的信息,参见对事件处理的讨论(第4 . 6节和第4 .9 . 5节)。

输入元素建立根据用户输入信息的K E Y属性设置的变量。例如, I N P U T元素把输入的文

本分配给变量,而S E L E C T元素则负责分配所选O P T I O N元素的VA L U E属性值。

当用户把输入提交给I N P U T或S E L E C T元素时,用户的输入便被写进了变量。提交交输入是

一个与M M I有关的概念,而且W M L的作者不必依赖特定的用户接口,例如,有些实现用每个

进入I N P U T元素的字符更新变量,而其他的一些实现会推迟变量更新,直到I N P U T元素失去

焦点。在执行任何任务之前,用户代理必须更新所有的变量。在设置变量时,用户代理可能

6 4 第二部分应用层

下载

重新显示当前卡片,但是作者不必假设这个动作一定发生。