Metadata¶
One feature that appears in SLD that has no analog in CSS is the ability to provide metadata for styles and style rules. For example, this SLD embeds a title for its single rule:
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:gml="http://www.opengis.net/gml"
xsi:schemaLocation="http://www.opengis.net/sld
http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"
>
<NamedLayer>
<Name>Country Borders</Name>
<UserStyle>
<Name>borders</Name>
<Title>Country Borders</Title>
<Abstract>
Borders of countries, in an appropriately sovereign aesthetic.
</Abstract>
<FeatureTypeStyle>
<Rule>
<Title>Borders</Title>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke-width">0.2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
Software such as GeoServer can use this metadata to automatically generate nice
legend images directly from the style. You don’t have to give up this ability
when styling maps in CSS; just add comment before your rules including
lines that start with @title
and @abstract
. Here is the analogous style in
CSS:
/*
* @title This is a point layer.
* @abstract This is an abstract point layer.
*/
* {
mark: mark(circle);
}
Rules can provide either a title, an abstract, both, or neither. The SLD Name for a rule is autogenerated based on the filters from the CSS rules that combined to form it, for aid in troubleshooting.
Combined rules¶
One thing to keep in mind when dealing with CSS styles is that multiple rules may apply to the same subset of map features, especially as styles get more complicated. Metadata is inherited similarly to CSS properties, but metadata fields are combined instead of overriding less specific rules. That means that when you have a style like this:
/* @title Borders */
* {
stroke: black;
}
/* @title Parcels */
[category='parcel'] {
fill: blue;
}
The legend entry for parcels will have the title 'Parcels with Borders'
.
If you don’t like this behavior, then only provide titles for the most specific
rules in your style. (Or, suggest something better in an issue report!) Rules
that don’t provide titles are simply omitted from title aggregation.