1. 句法分析

请注意,本页目前为草稿,有待进一步更新。

映射文件使用 lark 作为解析引擎。

1.1. 关键词

1.2. MapFiles

有关映射文件结构的详细信息,请访问:http://mapserver.org/mapfile/notes

  • 映射文件不区分大小写

  • 必须引用包含非字母数字字符或mapserver关键字的字符串。建议将所有字符串放在双引号中。

  • Mapfile有一个层次结构,其中map对象是根,所有其他对象都属于这个层次结构。

  • 注释用 # 指定。

  • 最近添加了C样式的注释:https://github.com/mapserver/mapserver/pull/5362-两条单行(例如 /* foo */ )和多行注释也可以。

1.3. 等级制度

下面显示了所有主要mapfile组件的摘要。这些是 TYPE..END 形式上的指令.

_images/map_classes.png

这个 LAYER 类型因其更复杂的性质而被拆分为自己的关系图:

_images/layer_classes.png

其他层次结构和关系可以在http://www.mapserver.org/mapscript/mapscript.html mapscript classes页面上看到。

1.4. Mapfile 注释

本节详细介绍在映射文件中找到的各种类型的声明。

  • 引用字符串。用于引用的属性值,例如.

    NAME "Layer1"
    DATA "lakes.shp"
    
  • 非引用列表。例如,点块可以定义如下:

    POINTS
        0 100
        100 200
        40 90
    END
    
  • 引用列表。用于应引用的属性列表。例如,投影块的定义如下:

    PROJECTION
        'proj=utm'
        'ellps=GRS80'
        'datum=NAD83'
        'zone=15'
        'units=m'
        'north'
        'no_defs'
    END
    
  • 键值列表。

    PROCESSING "BANDS=1"
    PROCESSING "CONTOUR_ITEM=elevation"
    PROCESSING "CONTOUR_INTERVAL=20"
    
  • 键双值列表。如上所述,但每个指令有两个字符串。

    CONFIG MS_ERRORFILE "stderr"
    CONFIG "PROJ_DEBUG" "OFF"
    CONFIG "ON_MISSING_DATA" "IGNORE"
    
  • 复合类型-以关键字end结尾的容器声明。实例:

    MAP ... END
    LAYER ... END
    CLASS ... END
    STYLE ... END
    

1.5. 包括文件

解析器允许加载和解析映射文件中引用的文件(包含更多的映射文件声明)。注 INCLUDE 可在http://mapserver.org/mapfile/include.html上找到指令:

  • 包含可以嵌套,最多5个深度。

  • 文件位置可以指定为文件的完整路径,也可以指定为相对于映射文件的路径

  • 如果将字符串提供给 parse 方法,然后是可选的 root_folder 参数可用于处理相对路径

MAP
    NAME "include_mapfile"
    EXTENT 0 0 500 500
    SIZE 250 250

    INCLUDE "test_include_symbols.map"
    INCLUDE "C:\Includes\test_include_layer.map"
END