所有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 第二部分应用层
下载
重新显示当前卡片,但是作者不必假设这个动作一定发生。