WML 中的变量替换
所有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 第二部分应用层 下载 重新显示当前卡片,但是作者不必假设这个动作一定发生。
上一篇: 关于浏览器的url的编码
下一篇: ACCESS展示手机浏览器widgets