I made some initial draft XML schema (XSD) for the configuration XML files.
I'm aware that it is incomplete, and most likely it has some mistakes, but is some kind of summary of what I found out so far.
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- *********************************************************************** -->
<xs:element name="Map">
<xs:complexType>
<xs:sequence>
<xs:element ref="Style" maxOccurs="unbounded"/>
<xs:element ref="Layer" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="srs" type="xs:string" use="optional"/>
<xs:attribute name="bgcolor" type="xs:string" use="optional"/>
</xs:complexType>
</xs:element>
<!-- *********************************************************************** -->
<xs:element name="Style">
<xs:complexType>
<xs:sequence>
<xs:element ref="Rule" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Rule">
<xs:complexType>
<xs:sequence>
<xs:element ref="MaxScaleDenominator" minOccurs="0"/>
<xs:element ref="MinScaleDenominator" minOccurs="0"/>
<xs:choice minOccurs="0">
<xs:element ref="Filter" minOccurs="0"/>
<xs:element ref="ElseFilter" minOccurs="0"/>
</xs:choice>
<xs:element ref="Symbolizer" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Filter" type="xs:string"/>
<xs:element name="ElseFilter">
<xs:complexType/>
</xs:element>
<xs:element name="MinScaleDenominator" type="xs:unsignedLong"/>
<xs:element name="MaxScaleDenominator" type="xs:unsignedLong"/>
<!-- *********************************************************************** -->
<xs:element name="Symbolizer" abstract="true"/>
<xs:element name="PointSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:attribute name="file" type="xs:string" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="png"/>
<xs:enumeration value="tiff"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="width" type="xs:unsignedInt" use="optional" default="4"/>
<xs:attribute name="height" type="xs:unsignedInt" use="optional" default="4"/>
<xs:attribute name="allow_overlap" type="xs:boolean" use="optional" default="false"/>
</xs:complexType>
</xs:element>
<xs:element name="LineSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:sequence>
<xs:element ref="CssParameter" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PolygonSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:sequence>
<xs:element ref="CssParameter" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PolygonPatternSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:attribute name="width" type="xs:unsignedInt" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="png"/>
<xs:enumeration value="tiff"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="height" type="xs:unsignedInt" use="optional" default="4"/>
<xs:attribute name="file" type="xs:string" use="optional" default="4"/>
</xs:complexType>
</xs:element>
<xs:element name="TextSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="face_name" type="xs:string" use="required"/>
<xs:attribute name="size" type="xs:unsignedInt" use="required"/>
<xs:attribute name="fill" type="xs:string" use="optional"/>
<xs:attribute name="halo_radius" type="xs:unsignedInt" use="optional"/>
<xs:attribute name="halo_fill" type="xs:string" use="optional"/>
<xs:attribute name="placement" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="line"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="allow_overlap" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="min_distance" type="xs:unsignedInt" use="optional"/>
<xs:attribute name="wrap_width" type="xs:unsignedInt" use="optional"/>
<xs:attribute name="dx" type="xs:int" use="optional"/>
<xs:attribute name="dy" type="xs:int" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="ShieldSymbolizer" substitutionGroup="Symbolizer">
<xs:complexType>
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="face_name" type="xs:string" use="required"/>
<xs:attribute name="size" type="xs:unsignedInt" use="required"/>
<xs:attribute name="fill" type="xs:string" use="required"/>
<xs:attribute name="file" type="xs:string" use="required"/>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="png"/>
<xs:enumeration value="tiff"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="width" type="xs:unsignedInt" use="required"/>
<xs:attribute name="height" type="xs:unsignedInt" use="required"/>
<xs:attribute name="placement" use="optional">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="line"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="min_distance" type="xs:unsignedInt" use="optional"/>
</xs:complexType>
</xs:element>
<xs:element name="CssParameter">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="fill"/>
<xs:enumeration value="fill-opacity"/>
<xs:enumeration value="stroke"/>
<xs:enumeration value="stroke-dasharray"/>
<xs:enumeration value="stroke-linecap"/>
<xs:enumeration value="stroke-linejoin"/>
<xs:enumeration value="stroke-opacity"/>
<xs:enumeration value="stroke-width"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<!-- *********************************************************************** -->
<xs:element name="Layer">
<xs:complexType>
<xs:sequence>
<xs:element name="StyleName" type="xs:string" maxOccurs="unbounded"/>
<xs:element ref="Datasource"/>
</xs:sequence>
<xs:attribute name="status" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="on"/>
<xs:enumeration value="off"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="srs" type="xs:string" use="optional"/>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="Datasource">
<xs:complexType>
<xs:sequence>
<xs:element ref="Parameter" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Parameter">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="dbname"/>
<xs:enumeration value="estimate_extent"/>
<xs:enumeration value="extent"/>
<xs:enumeration value="file"/>
<
xs:enumeration value="host"/>
<xs:enumeration value="password"/>
<xs:enumeration value="port"/>
<xs:enumeration value="table"/>
<xs:enumeration value="type"/>
<xs:enumeration value="user"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
Kristof Vydt
_______________________________________________ Mapnik-users mailing list [email protected] https://lists.berlios.de/mailman/listinfo/mapnik-users

