MS RFC 95:支持表达式分析器中的列表¶
- 日期
2013/04/04
- 作者
托马斯堡
- 联系
- 状态
采用
- 版本
MAPServer 6.4
1。概述¶
在进行类过滤时,与表达式相关的挂起性能加速相对较低。上下文关系到何时需要应用给定的 CLASS 到多个属性值。
目前,若要将单个类应用于属性的多个值,可以使用正则表达式,也可以使用 IN 操作员,如下所示:
LAYER
...
CLASSITEM "type"
CLASS
EXPRESSION /primary|secondary|tertiary/ #regular expression on CLASSITEM
EXPRESSION ("[type]" IN "primary,secondary,tertiary") #"complex" parser expression
...
END
END
这两种方法都需要相当大的开销,要么在regex系统调用中,要么在执行in-parser操作时使用相当多的malloc。
2。建议的解决方案¶
我们可以通过添加“List”表达式类型来减少这一开销,由 {{ }} 分隔符,其中先前的层定义变为:
LAYER
...
CLASSITEM "type"
CLASS
EXPRESSION {primary,secondary,tertiary}
...
END
END
在这种情况下,表达式解析是内部的简单字符串查找 msEvalExpression() 而不必进入系统正则表达式或解析器。
三。实施细节¶
对代码的修改相当简单:
支持lexer(maplexer.l)中的分隔符
新建表达式类型 MS_LIST 在mapserver.h中
支持在的给定列表中查找属性值 msEvalExpression() 在maputil.c中
在mapfile.c和mapcopy.c中加载、保存和复制表达式
第四章。限制¶
最初不会为MapScript添加setter和getter(使用 classObj.updateFromString("EXPRESSION {{foo,bar,baz}}")
不支持在列表内引用和转义,即属性值不能包含 ' , " 或 , 人物。
4。向后兼容性问题¶
无,新功能
5。性能影响¶
表达式解析器已经在6.0中通过使用预编译表达式加快了速度,对于给定的 CLASS 应匹配多个属性值
6。臭虫识别码¶
7。投票历史¶
+1:米克斯、汤克、丹尼尔、史蒂文、托马斯布