IOS简介
IOS是In/Out Script(输入/输出脚本)的简称,在我的设计中,用in,out,script3个节点来描述一个服务调用。
目前的问题
目前的IOS脚本部分是用XML节点来描述的,这样做降低了脚本语法的解析难度。但是,带来的问题是,要遵循xml文档语法,在属性里编写表达式时要避开双引号,语法不够简便等导致编写服务时不方便。所以,需要抛开XML的约束,让IOS成为一种轻量级的脚本语言,编写起来要更方便。
XML脚本的问题,编写不方便…
<script>
<!--io: 输入/输出脚本,i:invoke执行,o: out输出-->
<io i="" o=""/>
<!--if: 条件脚本,i: invoke执行-->
<if i="">
<!--成功则执行if/io里的脚本-->
<io i="" o=""/>
<!--elseif: 条件脚本中的分支判断,i: invoke执行-->
<elseif i="">
<io i="" o=""/>
</elseif>
<!--else: 条件脚本中的否定-->
<else>
<io i="" o=""/>
</else>
</if>
<!--foreach: 遍历脚本,i:invoke执行获取父项,o:out输出子项-->
<foreach i="" o="">
<io i="" o=""/>
</foreach>
<!--invoke: 调用子服务,service:子服务名称-->
<invoke service="">
<in>
<!-- i:当前服务的参数,o:子服务的输入参数-->
<io i="" o=""/>
</in>
<out>
<!-- i:子服务的输出参数,o:当前服务的参数-->
<io i="" o=""/>
</out>
</invoke>
<!--throwerror: 引发异常,i:invoke执行异常信息-->
<throwerror i=""/>
<!--error: 错误处理脚本-->
<error>
<io i="" o=""/>
</error>
</script>
IOS语言的设计
【语言的命名】
输入/输出脚本语言:In/Out Script Language,简称IOSL
【语句的划分】
每个语句以换行结束,对于双引号""、单引号''、小括号()和中括号[]内的换行不算作语句结束
【注释】
双斜线//注释内容,,对于双引号""、单引号''、小括号()和中括号[]内的双斜线不算作注释
例子:
//注释...
代替XML节点:
<!---->
【赋值语句:=】
等号=分隔,执行表达式expression并把结果赋值到变量var。var为空时则不设置任何变量。var为空时可缺省等号。
例子:
var = expression
= expression
expression
代替XML节点:
<io i=""o=""/>
【条件语句:if...elseif...else...】
if关键字后面表达式expression为真时执行内部子语句,否则执行后面的else if或else语句;
else if关键字后面表达式expression为真时执行内部子语句,否则执行后面的else if或else语句;
在if和else if的判断都为假时才执行else的内部子语句;
if后允许出现0个或多个else if和0个或1个else。
例子:
if expression
//子语句
elseif expression
//子语句
end
else
//子语句
end
end
代替XML节点:
<if i="">
<--子节点-->
<elseifi="">
<--子节点-->
</elseif>
<else>
<--子节点-->
</else>
</if>
【遍历语句:foreach...in...】
遍历表达式expression的执行结果,遍历时的子项赋值到变量var
例子:
foreach var in expression
//子语句
end
代替XML节点:
<foreach i="" o="">
<--子节点-->
</foreach>
【异常语句:throwerror】
引发异常,异常消息是表达式expression的执行值。
例子:
throwerror expression
代替XML节点:
<throwerrori=""/>
【调用语句:invoke...】
调用invoke关键字后面的子服务脚本service。in子语句内部声明输入参数,out子语句内部声明输出参数
例子:
invoke service
in
//赋值子语句
end
out
//赋值子语句
end
end
代替XML节点:
<invoke service="">
<in>
<--赋值子节点-->
</in>
<out>
<--赋值子节点-->
</out>
</invoke>
【错误处理语句:error...】
当脚本发生异常时执行error内的子语句。只允许出现0个或1个error语句。
例子:
error
//子语句
end
代替XML节点:
<error>
<--子节点-->
</error>
【循环语句:while...】
当表达式expression值为真时执行内部子语句。
例子:
while expression
//子语句
end
新的IOS编辑器
支持新版本的IOSL编辑,关键字高亮显示,服务参数移到左边,增加表达式选择模块。
编写脚本时可选择或查看表达式,使用更方便。
服务脚本的script节点则改成CDATA括住的脚本语句。
相关文章