VALIDATION¶
介绍¶
因为 运行时替换 影响 Mapfile 的潜在敏感区域,如数据库列和文件名,必须使用模式验证(从6.0版开始)。
注解
自4.10版以来,类似的验证模式机制可用于变量替换,但随后它是可选的。然后在中提供了%myvar%的模式 METADATA 使用“myvar_验证_模式”。
模式验证使用正则表达式,这些表达式是描述如何将字符串与模式进行比较的字符串。您的系统正则表达式的确切功能可能会有所不同,但是您可以通过谷歌搜索“正则表达式教程”来找到大量的一般信息。
从MapServer 5.4.0开始,首选机制是 VALIDATION LAYER 定义。这和旧的稍有不同 METADATA VALIDATION 块可用于 CLASS , LAYER 和 WEB .
VALIDATION
# %firstname% substitutions can only have letters and hyphens
'firstname' '^[a-zA-Z\-]+$'
# %parcelid% must be numeric and between 5 and 8 characters
'parcelid' '^[0-9]{5,8)$'
# %taxid% must be two capital letters and six digits
'taxid' '^[A-Z]{2}[0-9]{6}$'
END
如果相同的键出现在多个验证块中,那么更专业的块中的键将覆盖更通用的块中的键。所以 CLASS 重写 LAYER 哪些超越 WEB .
如果URL中没有提供默认值¶
运行时替换机制通常会创建语法错误的 Mapfile ,如果调用URL中没有提供替换参数,则几乎总是语义错误的 Mapfile 。
由于版本5.6,您可以为任何替换参数提供默认值,如果在URL中找不到该参数,则将应用该值。你可以通过在里面提供特殊的条目来做到这一点。 CLASS , LAYER 或 WEB 验证块:
VALIDATION
'default_sound' 'yes'
'default_nseats' '5'
'default_multimedia' 'yes'
END
在本例中,将创建 Mapfile ,就像URL包含“&sound=yes&nseats=5&multimedia=yes”
CLASS 重写 LAYER 哪些超越 WEB.
METADATA VALIDATION 但从MapServer 5.4.0开始,这已被弃用。
在shp2img实用程序中也可以访问此行为,允许您在不使用Web服务器的情况下测试运行时替换 Mapfile 。
过滤实例¶
您可以使用运行时替换来更改过滤器中的值。例如,您的过滤器可以这样写:
FILTER ("multimedia='%multimedia%' and seats >= %nseats% and Sound= '%sound%')
然后(假设您使用的是CGI接口),您可以使用用户以HTML格式定义的值传入名为multimedia、nseats和sound的变量。
必须在这些变量上定义验证表达式,以防止无意中将SQL提交给PostGIS。在层中,您将执行以下操作:
VALIDATION
'multimedia' '^yes|no$'
'sound' '^yes|no$'
'nseats' '^[0-9]{1,2}$'
END
前两个将多媒体和声音的值限制为“是”或“否”。第三个将NSEAT的值限制为2位整数。