Seit Version 6.0 unterstützt der UMN MapServer neben den klassischen Mapfiles zusätzlich XML-Mapfiles. Durch das vorhandene XML-Schema können diese einfach validiert werden. Des Weiteren soll hierdurch die Erstellung von Drittsoftware (z. B. Mapfile-Editoren) erleichtert werden.
Für das einfache Lesen und Schreiben von XML-Mapfiles habe ich das Projekt Java Mapfile auf GitHub erstellt. Die Funktionsweise wird auf der Projektseite dokumentiert.
Im Folgenden noch ein Beispiel für eine XML-Mapfile und den korrespondierenden CGI-Wrapper.
Beispiel für XML-Mapfile
Hinweis: Die Reihenfolge der Elemente wird beim Export über Java Mapfile alphabetisch angeordnet.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Map xmlns="http://www.mapserver.org/mapserver" name="OGC:WMS" version="7.0.0"> <extent>4264375.0 5216375.0 4670625.0 5622625.0</extent> <Layer name="gemeinden" type="POLYGON" status="ON"> <Class name="Polygon"> <color red="232" green="232" blue="232"/> <outlineColor red="32" green="32" blue="32"/> </Class> <data>/home/wei/linux-geodatenserver-beispiele/vektordaten/verwaltungsgrenzen/gmd_ex.shp</data> <Metadata> <item name="wms_title">Gemeinden</item> <item name="wms_abstract">Gemeinden in Bayern</item> </Metadata> <projection>init=epsg:31468</projection> </Layer> <OutputFormat name="png"> <driver>AGG/PNG</driver> <extension>png</extension> <imageMode>RGB</imageMode> <mimeType>image/png</mimeType> </OutputFormat> <projection>init=epsg:31468</projection> <Web> <Metadata> <item name="wms_title">Java XML-Mapfile Demoserver</item> <item name="wms_onlineresource">http://geoserv.weichand.de/cgi-bin/test-xmlmapfile.cgi</item> <item name="wms_enable_request">*</item> <item name="wms_srs">EPSG:31468 EPSG:31467 EPSG:4326 EPSG:4258 EPSG:25832 EPSG:25833</item> <item name="wms_encoding">UTF-8</item> </Metadata> </Web> </Map>
Beispiel für CGI-Wrapper
Bei jedem Aufruf wird die XML-Mapfile über XSLT in eine klassische Mapfile übersetzt. Daher muss neben der Umgebungsvariable MS_MAPFILE noch zusätzlich die Umgebungsvariable MS_XMLMAPFILE_XSLT gesetzt werden.
#!/bin/sh MAPSERV="/usr/lib/cgi-bin/mapserv" MS_XMLMAPFILE_XSLT="/path/to/mapfile.xsl" MS_MAPFILE="/path/to/javamapfile.xml" exec ${MAPSERV}