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}