def create_rule(self, title, symbolizer=None, MinScaleDenominator=None, MaxScaleDenominator=None):
        """
        Create a L{Rule} object on this style. A rule requires a title and
        symbolizer. If no symbolizer is specified, a PointSymbolizer will be
        assigned to the rule.

        @type       title: string
        @param      title: The name of the new L{Rule}.
        @type  symbolizer: L{Symbolizer} I{class}
        @param symbolizer: The symbolizer type. This is the class object (as
            opposed to a class instance) of the symbolizer to use.
        @rtype: L{Rule}
        @return: A newly created rule, attached to this FeatureTypeStyle.
        """
        elem = self._node.makeelement('{%s}Rule' % SLDNode._nsmap['sld'], nsmap=SLDNode._nsmap)
        self._node.append(elem)

        rule = Rule(self, len(self._node) - 1)
        rule.Title = title

        if MinScaleDenominator is not None:
            rule.MinScaleDenominator = MinScaleDenominator
        if MaxScaleDenominator is not None:
            rule.MaxScaleDenominator = MaxScaleDenominator

        if symbolizer is None:
            symbolizer = PointSymbolizer

        sym = symbolizer(rule)
        if symbolizer == PointSymbolizer:
            gph = Graphic(sym)
            mrk = Mark(gph)
            mrk.WellKnownName = 'square'
            fill = Fill(mrk)
            fill.create_cssparameter('fill', '#ff0000')

        elif symbolizer == LineSymbolizer:
            stroke = Stroke(sym)
            stroke.create_cssparameter('stroke', '#0000ff')

        elif symbolizer == PolygonSymbolizer:
            fill = Fill(sym)
            fill.create_cssparameter('fill', '#AAAAAA')
            stroke = Stroke(sym)
            stroke.create_cssparameter('stroke', '#000000')
            stroke.create_cssparameter('stroke-width', '1')

        return rule