Browsable Scalable Vector Graphics (SVG) Grammar

CC-BY

Grammar extracted by Vadim Zaytsev, see the Grammar Zoo entry for details: markup/graphical/svg/furubayashi/extracted
Source used for this grammar: Yutaka Furubayashi, RELAX NG Schema on SVG 1.1, 15 March 2008

Summary

Syntax

SVG.Animation.extra.attrib ::=
	ε
SVG.Animation.attrib ::=
	SVG.XLink.attrib SVG.Animation.extra.attrib
SVG.AnimationAttribute.extra.attrib ::=
	ε
SVG.AnimationAttribute.attrib ::=
	[attributeName]::string [attributeType]::string? SVG.AnimationAttribute.extra.attrib
SVG.AnimationTiming.extra.attrib ::=
	ε
SVG.AnimationTiming.attrib ::=
	[begin]::string? [dur]::string? [end]::string? [min]::string? [max]::string? [restart]::("always" | "never" | "whenNotActive")? [repeatCount]::string? [repeatDur]::string? [fill]::("remove" | "freeze")? SVG.AnimationTiming.extra.attrib
SVG.AnimationValue.extra.attrib ::=
	ε
SVG.AnimationValue.attrib ::=
	[calcMode]::("discrete" | "linear" | "paced" | "spline")? [values]::string? [keyTimes]::string? [keySplines]::string? [from]::string? [to]::string? [by]::string? SVG.AnimationValue.extra.attrib
SVG.AnimationAddition.extra.attrib ::=
	ε
SVG.AnimationAddtion.attrib ::=
	[additive]::("replace" | "sum")? [accumulate]::("none" | "sum")? SVG.AnimationAddition.extra.attrib
SVG.Animation.extra.class ::=
	ε
SVG.Animation.class ::=
	SVG.animate
	SVG.set
	SVG.animateMotion
	SVG.animateColor
	SVG.animateTransform
	SVG.Animation.extra.class
SVG.animate ::=
	[animate]::(SVG.Description.class* SVG.Core.attrib SVG.Conditional.attrib SVG.AnimationEvents.attrib SVG.External.attrib SVG.Animation.attrib SVG.AnimationAttribute.attrib SVG.AnimationTiming.attrib SVG.AnimationValue.attrib SVG.AnimationAddtion.attrib)
SVG.set ::=
	[set]::(SVG.Description.class* SVG.Core.attrib SVG.Conditional.attrib SVG.AnimationEvents.attrib SVG.External.attrib SVG.Animation.attrib SVG.AnimationAttribute.attrib SVG.AnimationTiming.attrib [to]::string?)
SVG.animateMotion ::=
	[animateMotion]::(SVG.Description.class* SVG.mpath? SVG.Core.attrib SVG.Conditional.attrib SVG.AnimationEvents.attrib SVG.External.attrib SVG.Animation.attrib SVG.AnimationTiming.attrib SVG.AnimationAddtion.attrib [calcMode]::("discrete" | "linear" | "paced" | "spline")? [values]::string? [keyTimes]::string? [Splines]::string? [from]::string? [to]::string? [by]::string? [path]::string? [keyPoints]::string? [rotate]::string? [origin]::string?)
SVG.animateColor ::=
	[animateColor]::(SVG.Description.class* SVG.Core.attrib SVG.Conditional.attrib SVG.AnimationEvents.attrib SVG.External.attrib SVG.Animation.attrib SVG.AnimationAttribute.attrib SVG.AnimationTiming.attrib SVG.AnimationValue.attrib SVG.AnimationAddtion.attrib)
SVG.animateTransform ::=
	[animateTransform]::(SVG.Description.class* SVG.Core.attrib SVG.Conditional.attrib SVG.AnimationEvents.attrib SVG.External.attrib SVG.Animation.attrib SVG.AnimationAttribute.attrib SVG.AnimationTiming.attrib SVG.AnimationValue.attrib SVG.AnimationAddtion.attrib [type]::("translate" | "scale" | "rotate" | "skewX" | "skewY")?)
SVG.mpath ::=
	[mpath]::(SVG.Description.class* SVG.Core.attrib SVG.XLinkRequired.attrib SVG.External.attrib)
SVG.onbegin.attrib ::=
	[onbegin]::SVG.Script.datatype?
SVG.onend.attrib ::=
	[onend]::SVG.Script.datatype?
SVG.onrepeat.attrib ::=
	[onrepeat]::SVG.Script.datatype?
SVG.AnimationEvents.extra.attrib ::=
	ε
SVG.AnimationEvents.attrib ::=
	SVG.onbegin.attrib SVG.onend.attrib SVG.onrepeat.attrib SVG.AnimationEvents.extra.attrib
SVG.ClipPathValue.datatype ::=
	string
SVG.Clip.extra.class ::=
	ε
SVG.Clip.class ::=
	SVG.clipPath
	SVG.Clip.extra.class
SVG.Clip.extra.attrib ::=
	ε
SVG.Clip.attrib ::=
	[clip-path]::SVG.ClipPathValue.datatype? [clip-rule]::SVG.ClipFillRule.datatype? SVG.Clip.extra.attrib
SVG.clipPath ::=
	[clipPath]::(SVG.Description.class* (SVG.Animation.class | SVG.Use.class | SVG.Shape.class | SVG.Text.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Text.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.Cursor.attrib SVG.External.attrib [transform]::SVG.TransformList.datatype? [clipPathUnits]::("userSpaceOnUse" | "objectBoundingBox")?)
SVG.ExtensionList.datatype ::=
	string
SVG.FeatureList.datatype ::=
	string
SVG.Conditional.extra.class ::=
	ε
SVG.Conditional.class ::=
	SVG.switch
	SVG.Conditional.extra.class
SVG.Conditional.extra.attrib ::=
	ε
SVG.Conditional.attrib ::=
	[requiredFeatures]::SVG.FeatureList.datatype? [requiredExtensions]::SVG.ExtensionList.datatype? [systemLanguage]::SVG.LanguageCodes.datatype? SVG.Conditional.extra.attrib
SVG.switch ::=
	[switch]::(SVG.Description.class* (SVG.svg | SVG.g | SVG.use | SVG.text | SVG.text | SVG.Animation.class | SVG.Conditional.class | SVG.Image.class | SVG.Shape.class | SVG.Hyperlink.class | SVG.Extensibility.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [transform]::SVG.TransformList.datatype?)
SVG.id.attrib ::=
	[id]::SVG.ID.datatype?
SVG.base.attrib ::=
	[xml:base]::SVG.URI.datatype?
SVG.lang.attrib ::=
	[xml:lang]::SVG.LanguageCode.datatype?
SVG.space.attrib ::=
	[xml:space]::("default" | "preserve")?
SVG.Core.extra.attrib ::=
	ε
SVG.Core.attrib ::=
	SVG.id.attrib SVG.base.attrib SVG.lang.attrib SVG.space.attrib SVG.Core.extra.attrib
SVG.CursorValue.datatype ::=
	string
SVG.Cursor.extra.class ::=
	ε
SVG.Cursor.class ::=
	SVG.cursor
	SVG.Cursor.extra.class
SVG.cursor ::=
	[cursor]::(SVG.Description.class* SVG.Core.attrib SVG.Conditional.attrib SVG.XLinkRequired.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype?)
SVG.ID.datatype ::=
	string
SVG.Text.datatype ::=
	string
SVG.Length.datatype ::=
	string
SVG.Lengths.datatype ::=
	string
SVG.URI.datatype ::=
	string
SVG.PreserveAspectRatioSpec.datatype ::=
	string
SVG.OpacityValue.datatype ::=
	string
SVG.Integer.datatype ::=
	integer
SVG.Coordinate.datatype ::=
	string
SVG.Coordinates.datatype ::=
	string
SVG.LanguageCode.datatype ::=
	string
SVG.LanguageCodes.datatype ::=
	string
SVG.Color.datatype ::=
	string
SVG.Script.datatype ::=
	string
SVG.ContentType.datatype ::=
	string
SVG.ViewBoxSpec.datatype ::=
	string
SVG.Boolean.datatype ::=
	string
SVG.Number.datatype ::=
	integer
SVG.Numbers.datatype ::=
	string
SVG.ClipFillRule.datatype ::=
	string
SVG.SVGColor.datatype ::=
	string
SVG.TransformList.datatype ::=
	string
SVG.PathData.datatype ::=
	string
SVG.AnimationEvents.attrib ::=
	ε
SVG.Clip.attrib ::=
	ε
SVG.Color.attrib ::=
	ε
SVG.Conditional.attrib ::=
	ε
SVG.Container.attrib ::=
	ε
SVG.Core.attrib ::=
	ε
SVG.Cursor.attrib ::=
	ε
SVG.External.attrib ::=
	ε
SVG.Filter.attrib ::=
	ε
SVG.FilterColor.attrib ::=
	ε
SVG.Font.attrib ::=
	ε
SVG.Gradient.attrib ::=
	ε
SVG.GraphicalEvents.attrib ::=
	ε
SVG.Graphics.attrib ::=
	ε
SVG.Marker.attrib ::=
	ε
SVG.Mask.attrib ::=
	ε
SVG.Opacity.attrib ::=
	ε
SVG.Paint.attrib ::=
	ε
SVG.Profile.attrib ::=
	ε
SVG.Style.attrib ::=
	ε
SVG.Text.attrib ::=
	ε
SVG.TextContent.attrib ::=
	ε
SVG.Viewport.attrib ::=
	ε
SVG.XLink.attrib ::=
	ε
XLinkEmbed.attrib ::=
	ε
XLinkRequired.attrib ::=
	ε
SVG.Presentation.extra.attrib ::=
	ε
SVG.Presentation.attrib ::=
	SVG.Container.attrib SVG.Viewport.attrib SVG.Text.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Marker.attrib SVG.Profile.attrib SVG.Gradient.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.FilterColor.attrib SVG.Cursor.attrib [flood-color]::SVG.SVGColor.datatype? [flood-opacity]::SVG.OpacityValue.datatype? [lighting-color]::SVG.SVGColor.datatype? SVG.Presentation.extra.attrib
SVG.onunload.attrib ::=
	[onunload]::SVG.Script.datatype?
SVG.onabort.attrib ::=
	[onabort]::SVG.Script.datatype?
SVG.onerror.attrib ::=
	[onerror]::SVG.Script.datatype?
SVG.onresize.attrib ::=
	[onresize]::SVG.Script.datatype?
SVG.onscroll.attrib ::=
	[onscroll]::SVG.Script.datatype?
SVG.onzoom.attrib ::=
	[onzoom]::SVG.Script.datatype?
SVG.DocumentEvents.extra.attrib ::=
	ε
SVG.DocumentEvents.attrib ::=
	SVG.onunload.attrib SVG.onabort.attrib SVG.onerror.attrib SVG.onresize.attrib SVG.onscroll.attrib SVG.onzoom.attrib SVG.DocumentEvents.extra.attrib
SVG.Extensibility.extra.class ::=
	ε
SVG.Extensibility.class ::=
	SVG.foreignObject
	SVG.Extensibility.extra.class
SVG.foreignObject ::=
	[foreignObject]::(SVG.foreignObject.content SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype [height]::SVG.Length.datatype [transform]::SVG.TransformList.datatype?)
SVG.foreignObject.content ::=
	SVG.foreignObject.class*
SVG.foreignObject.class ::=
	string
SVG.externalResourcesRequired.attrib ::=
	[externalResourcesRequired]::SVG.Boolean.datatype?
SVG.External.extra.attrib ::=
	ε
SVG.External.attrib ::=
	SVG.externalResourcesRequired.attrib SVG.External.extra.attrib
SVG.FilterValue.datatype ::=
	string
SVG.NumberOptionalNumber.datatype ::=
	string
SVG.Filter.extra.class ::=
	ε
SVG.Filter.class ::=
	SVG.filter
	SVG.Filter.extra.class
SVG.FilterPrimitive.extra.class ::=
	ε
SVG.FilterPrimitive.class ::=
	SVG.feBlend
	SVG.feColorMatrix
	SVG.feComponentTransfer
	SVG.feComposite
	SVG.feConvolveMatrix
	SVG.feDiffuseLighting
	SVG.feDisplacementMap
	SVG.feFlood
	SVG.feGaussianBlur
	SVG.feImage
	SVG.feMerge
	SVG.feMorphology
	SVG.feOffset
	SVG.feSpecularLighting
	SVG.feTile
	SVG.feTurbulence
	SVG.FilterPrimitive.extra.class
SVG.Filter.extra.attrib ::=
	ε
SVG.Filter.attrib ::=
	[filter]::SVG.FilterValue.datatype? SVG.Filter.extra.attrib
SVG.FilterColor.extra.attrib ::=
	ε
SVG.FilterColor.attrib ::=
	[color-interpolation-filters]::("auto" | "sRGB" | "linearRGB" | "inherit")? SVG.FilterColor.extra.attrib
SVG.FilterPrimitive.extra.attrib ::=
	ε
SVG.FilterPrimitive.attrib ::=
	[x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [result]::string? SVG.FilterPrimitive.extra.attrib
SVG.FilterPrimitiveWithIn.extra.attrib ::=
	ε
SVG.FilterPrimitiveWithIn.attrib ::=
	SVG.FilterPrimitive.attrib [in]::string? SVG.FilterPrimitiveWithIn.extra.attrib
SVG.filter ::=
	[filter]::(SVG.Description.class* (SVG.animate | SVG.set | SVG.FilterPrimitive.class)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.XLink.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [filterRes]::SVG.NumberOptionalNumber.datatype? [filterUnits]::("userSpaceOnUse" | "objectBoundingBox")? [primitiveUnits]::("userSpaceOnUse" | "objectBoundingBox")?)
SVG.feBlend ::=
	[feBlend]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [in2]::string [mode]::("normal" | "multiply" | "screen" | "darken" | "lighten")?)
SVG.feColorMatrix ::=
	[feColorMatrix]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [type]::("matrix" | "saturate" | "hueRotate" | "luminanceToAlpha")? [values]::string?)
SVG.feComponentTransfer ::=
	[feComponentTransfer]::(SVG.feFuncR? SVG.feFuncG? SVG.feFuncB? SVG.feFuncA? SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib)
SVG.feComposite ::=
	[feComposite]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [in2]::string [operator]::("over" | "in" | "out" | "atop" | "xor" | "arithmetic")? [k1]::SVG.Number.datatype? [k2]::SVG.Number.datatype? [k3]::SVG.Number.datatype? [k4]::SVG.Number.datatype?)
SVG.feConvolveMatrix ::=
	[feConvolveMatrix]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [order]::SVG.NumberOptionalNumber.datatype [kernelMatrix]::string [divisor]::SVG.Number.datatype? [bias]::SVG.Number.datatype? [targetX]::SVG.Integer.datatype? [targetY]::SVG.Integer.datatype? [edgeMode]::("duplicate" | "wrap" | "none")? [kernelUnitLength]::SVG.NumberOptionalNumber.datatype? [preserveAlpha]::SVG.Boolean.datatype?)
SVG.feDiffuseLighting ::=
	[feDiffuseLighting]::((SVG.feDistantLight | SVG.fePointLight | SVG.feSpotLight) (SVG.animate | SVG.set | SVG.animateColor)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [lighting-color]::SVG.SVGColor.datatype? [surfaceScale]::SVG.Number.datatype? [diffuseConstant]::SVG.Number.datatype? [kernelUnitLength]::SVG.NumberOptionalNumber.datatype?)
SVG.feDisplacementMap ::=
	[feDisplacementMap]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [in2]::string [scale]::SVG.Number.datatype? [xChannelSelector]::("R" | "G" | "B" | "A")? [yChannelSelector]::("R" | "G" | "B" | "A")?)
SVG.feFlood ::=
	[feFlood]::((SVG.animate | SVG.set | SVG.animateColor)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [flood-color]::SVG.SVGColor.datatype? [flood-opacity]::SVG.OpacityValue.datatype?)
SVG.feGaussianBlur ::=
	[feGaussianBlur]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [stdDeviation]::SVG.NumberOptionalNumber.datatype?)
SVG.feImage ::=
	[feImage]::((SVG.animate | SVG.set | SVG.animateTransform)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.FilterPrimitive.attrib SVG.XLinkEmbed.attrib SVG.External.attrib [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype?)
SVG.feMerge ::=
	[feMerge]::(SVG.feMergeNode* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitive.attrib)
SVG.feMergeNode ::=
	[feMergeNode]::((SVG.animate | SVG.set)* SVG.Core.attrib [in]::string?)
SVG.feMorphology ::=
	[feMorphology]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [operator]::("erode" | "dilate")? [radius]::SVG.NumberOptionalNumber.datatype?)
SVG.feOffset ::=
	[feOffset]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [dx]::SVG.Number.datatype? [dy]::SVG.Number.datatype?)
SVG.feSpecularLighting ::=
	[feSpecularLighting]::((SVG.feDistantLight | SVG.fePointLight | SVG.feSpotLight) (SVG.animate | SVG.set | SVG.animateColor)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib [lighting-color]::SVG.SVGColor.datatype? [surfaceScale]::SVG.Number.datatype? [specularConstant]::SVG.Number.datatype? [specularExponent]::SVG.Number.datatype? [kernelUnitLength]::SVG.NumberOptionalNumber.datatype?)
SVG.feTile ::=
	[feTile]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitiveWithIn.attrib)
SVG.feTurbulence ::=
	[feTurbulence]::((SVG.animate | SVG.set)* SVG.Core.attrib SVG.FilterColor.attrib SVG.FilterPrimitive.attrib [baseFrequency]::SVG.NumberOptionalNumber.datatype? [numOctaves]::SVG.Integer.datatype? [seed]::SVG.Number.datatype? [stitchTiles]::("stitch" | "noStitch")? [type]::("fractalNoise" | "turbulence")?)
SVG.feDistantLight ::=
	[feDistantLight]::((SVG.animate | SVG.set)* SVG.Core.attrib [azimuth]::SVG.Number.datatype? [elevation]::SVG.Number.datatype?)
SVG.fePointLight ::=
	[fePointLight]::((SVG.animate | SVG.set)* SVG.Core.attrib [x]::SVG.Number.datatype? [y]::SVG.Number.datatype? [z]::SVG.Number.datatype?)
SVG.feSpotLight ::=
	[feSpotLight]::((SVG.animate | SVG.set)* SVG.Core.attrib [x]::SVG.Number.datatype? [y]::SVG.Number.datatype? [z]::SVG.Number.datatype? [pointsAtX]::SVG.Number.datatype? [pointsAtY]::SVG.Number.datatype? [pointsAtZ]::SVG.Number.datatype? [specularExponent]::SVG.Number.datatype? [limitingConeAngle]::SVG.Number.datatype?)
SVG.feFuncR ::=
	[feFuncR]::((SVG.animate | SVG.set)* SVG.Core.attrib [type]::("identity" | "table" | "discrete" | "linear" | "gamma") [tableValues]::string? [slope]::SVG.Number.datatype? [intercept]::SVG.Number.datatype? [amplitude]::SVG.Number.datatype? [exponent]::SVG.Number.datatype? [offset]::SVG.Number.datatype?)
SVG.feFuncG ::=
	[feFuncG]::((SVG.animate | SVG.set)* SVG.Core.attrib [type]::("identity" | "table" | "discrete" | "linear" | "gamma") [tableValues]::string? [slope]::SVG.Number.datatype? [intercept]::SVG.Number.datatype? [amplitude]::SVG.Number.datatype? [exponent]::SVG.Number.datatype? [offset]::SVG.Number.datatype?)
SVG.feFuncB ::=
	[feFuncB]::((SVG.animate | SVG.set)* SVG.Core.attrib [type]::("identity" | "table" | "discrete" | "linear" | "gamma") [tableValues]::string? [slope]::SVG.Number.datatype? [intercept]::SVG.Number.datatype? [amplitude]::SVG.Number.datatype? [exponent]::SVG.Number.datatype? [offset]::SVG.Number.datatype?)
SVG.feFuncA ::=
	[feFuncA]::((SVG.animate | SVG.set)* SVG.Core.attrib [type]::("identity" | "table" | "discrete" | "linear" | "gamma") [tableValues]::string? [slope]::SVG.Number.datatype? [intercept]::SVG.Number.datatype? [amplitude]::SVG.Number.datatype? [exponent]::SVG.Number.datatype? [offset]::SVG.Number.datatype?)
SVG.Font.extra.class ::=
	ε
SVG.Font.class ::=
	SVG.font
	SVG.font-face
	SVG.Font.extra.class
SVG.font ::=
	[font]::(SVG.Description.class* SVG.font-face SVG.missing-glyph (SVG.glyph | SVG.hkern | SVG.vkern)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.External.attrib [horiz-origin-x]::SVG.Number.datatype? [horiz-origin-y]::SVG.Number.datatype? [horiz-adv-x]::SVG.Number.datatype [vert-origin-x]::SVG.Number.datatype? [vert-origin-y]::SVG.Number.datatype? [vert-adv-y]::SVG.Number.datatype?)
SVG.font-face ::=
	[font-face]::(SVG.Description.class* SVG.font-face-src? SVG.definition-src? SVG.Core.attrib [font-family]::string? [font-style]::string? [font-variant]::string? [font-weight]::string? [font-stretch]::string? [font-size]::string? [unicode-range]::string? [units-per-em]::SVG.Number.datatype? [panose-1]::string? [stemv]::SVG.Number.datatype? [stemh]::SVG.Number.datatype? [slope]::SVG.Number.datatype? [cap-height]::SVG.Number.datatype? [x-height]::SVG.Number.datatype? [accent-height]::SVG.Number.datatype? [ascent]::SVG.Number.datatype? [descent]::SVG.Number.datatype? [widths]::string? [bbox]::string? [ideographic]::SVG.Number.datatype? [alphabetic]::SVG.Number.datatype? [mathematical]::SVG.Number.datatype? [hanging]::SVG.Number.datatype? [v-ideographic]::SVG.Number.datatype? [v-alphabetic]::SVG.Number.datatype? [v-mathematical]::SVG.Number.datatype? [v-hanging]::SVG.Number.datatype? [underline-position]::SVG.Number.datatype? [underline-thickness]::SVG.Number.datatype? [strikethrough-position]::SVG.Number.datatype? [strikethrough-thickness]::SVG.Number.datatype? [overline-position]::SVG.Number.datatype? [overline-thickness]::SVG.Number.datatype?)
SVG.glyph ::=
	[glyph]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib [unicode]::string? [glyph-name]::string? [d]::SVG.PathData.datatype? [orientation]::string? [arabic-form]::string? [lang]::SVG.LanguageCodes.datatype? [horiz-adv-x]::SVG.Number.datatype? [vert-origin-x]::SVG.Number.datatype? [vert-origin-y]::SVG.Number.datatype? [vert-adv-y]::SVG.Number.datatype?)
SVG.missing-glyph ::=
	[missing-glyph]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib [d]::SVG.PathData.datatype? [horiz-adv-x]::SVG.Number.datatype? [vert-origin-x]::SVG.Number.datatype? [vert-origin-y]::SVG.Number.datatype? [vert-adv-y]::SVG.Number.datatype?)
SVG.hkern ::=
	[hkern]::(ε SVG.Core.attrib [u1]::string? [g1]::string? [u2]::string? [g2]::string? [k]::SVG.Number.datatype)
SVG.vkern ::=
	[vkern]::(ε SVG.Core.attrib [u1]::string? [g1]::string? [u2]::string? [g2]::string? [k]::SVG.Number.datatype)
SVG.font-face-src ::=
	[font-face-src]::((SVG.font-face-uri | SVG.font-face-name)+ SVG.Core.attrib)
SVG.font-face-uri ::=
	[font-face-uri]::(SVG.font-face-format* SVG.Core.attrib SVG.XLinkRequired.attrib)
SVG.font-face-format ::=
	[font-face-format]::(ε SVG.Core.attrib [string]::string?)
SVG.font-face-name ::=
	[font-face-name]::(ε SVG.Core.attrib [name]::string?)
SVG.definition-src ::=
	[definition-src]::(ε SVG.Core.attrib SVG.XLinkRequired.attrib)
SVG.NumberOrPercentage.datatype ::=
	string
SVG.Gradient.extra.class ::=
	ε
SVG.Gradient.class ::=
	SVG.linearGradient
	SVG.radialGradient
	SVG.Gradient.extra.class
SVG.Gradient.extra.attrib ::=
	ε
SVG.Gradient.attrib ::=
	[stop-color]::SVG.SVGColor.datatype? [stop-opacity]::SVG.OpacityValue.datatype? SVG.Gradient.extra.attrib
SVG.linearGradient ::=
	[linearGradient]::(SVG.Description.class* (SVG.stop | SVG.animate | SVG.set | SVG.animateTransform)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.Gradient.attrib SVG.XLink.attrib SVG.External.attrib [x1]::SVG.Coordinate.datatype? [y1]::SVG.Coordinate.datatype? [x2]::SVG.Coordinate.datatype? [y2]::SVG.Coordinate.datatype? [gradientUnits]::("userSpaceOnUse" | "objectBoundingBox")? [gradientTransform]::SVG.TransformList.datatype? [spreadMethod]::("pad" | "reflect" | "repeat")?)
SVG.radialGradient ::=
	[radialGradient]::(SVG.Description.class* (SVG.stop | SVG.animate | SVG.set | SVG.animateTransform)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.Gradient.attrib SVG.XLink.attrib SVG.External.attrib [cx]::SVG.Coordinate.datatype? [cy]::SVG.Coordinate.datatype? [r]::SVG.Length.datatype? [fx]::SVG.Coordinate.datatype? [fy]::SVG.Coordinate.datatype? [gradientUnits]::("userSpaceOnUse" | "objectBoundingBox")? [gradientTransform]::SVG.TransformList.datatype? [spreadMethod]::("pad" | "reflect" | "repeat")?)
SVG.stop ::=
	[stop]::((SVG.animate | SVG.set | SVG.animateColor)* SVG.Core.attrib SVG.Style.attrib SVG.Color.attrib SVG.Gradient.attrib [offset]::SVG.NumberOrPercentage.datatype)
SVG.onfocusin.attrib ::=
	[onfocusin]::SVG.Script.datatype?
SVG.onfocusout.attrib ::=
	[onfocusout]::SVG.Script.datatype?
SVG.onactivate.attrib ::=
	[onactivate]::SVG.Script.datatype?
SVG.onclick.attrib ::=
	[onclick]::SVG.Script.datatype?
SVG.onmousedown.attrib ::=
	[onmousedown]::SVG.Script.datatype?
SVG.onmouseup.attrib ::=
	[onmouseup]::SVG.Script.datatype?
SVG.onmouseover.attrib ::=
	[onmouseover]::SVG.Script.datatype?
SVG.onmousemove.attrib ::=
	[onmousemove]::SVG.Script.datatype?
SVG.onmouseout.attrib ::=
	[onmouseout]::SVG.Script.datatype?
SVG.onload.attrib ::=
	[onload]::SVG.Script.datatype?
SVG.GraphicalEvents.extra.attrib ::=
	ε
SVG.GraphicalEvents.attrib ::=
	SVG.onfocusin.attrib SVG.onfocusout.attrib SVG.onactivate.attrib SVG.onclick.attrib SVG.onmousedown.attrib SVG.onmouseup.attrib SVG.onmouseover.attrib SVG.onmousemove.attrib SVG.onmouseout.attrib SVG.onload.attrib SVG.GraphicalEvents.extra.attrib
SVG.display.attrib ::=
	[display]::("inline" | "block" | "list-item" | "run-in" | "compact" | "marker" | "table" | "inline-table" | "table-row-group" | "table-header-group" | "table-footer-group" | "table-row" | "table-column-group" | "table-column" | "table-cell" | "table-caption" | "none" | "inherit")?
SVG.image-rendering.attrib ::=
	[image-rendering]::("auto" | "optimizeSpeed" | "optimizeQuality" | "inherit")?
SVG.pointer-events.attrib ::=
	[pointer-events]::("visiblePainted" | "visibleFill" | "visibleStroke" | "visible" | "painted" | "fill" | "stroke" | "all" | "none" | "inherit")?
SVG.shape-rendering.attrib ::=
	[shape-rendering]::("auto" | "optimizeSpeed" | "crispEdges" | "geometricPrecision" | "inherit")?
SVG.text-rendering.attrib ::=
	[text-rendering]::("auto" | "optimizeSpeed" | "optimizeLegibility" | "geometricPrecision" | "inherit")?
SVG.visibility.attrib ::=
	[visibility]::("visible" | "hidden" | "inherit")?
SVG.Graphics.extra.attrib ::=
	ε
SVG.Graphics.attrib ::=
	SVG.display.attrib SVG.image-rendering.attrib SVG.pointer-events.attrib SVG.shape-rendering.attrib SVG.text-rendering.attrib SVG.visibility.attrib SVG.Graphics.extra.attrib
SVG.LinkTarget.datatype ::=
	string
SVG.Hyperlink.extra.class ::=
	ε
SVG.Hyperlink.class ::=
	SVG.a
	SVG.Hyperlink.extra.class
SVG.a ::=
	[a]::((string | SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.XLinkReplace.attrib SVG.External.attrib [transform]::SVG.TransformList.datatype? [target]::SVG.LinkTarget.datatype?)
SVG.Image.extra.class ::=
	ε
SVG.Image.class ::=
	SVG.image
	SVG.Image.extra.class
SVG.image ::=
	[image]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Viewport.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Profile.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.XLinkEmbed.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype [height]::SVG.Length.datatype [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype? [transform]::SVG.TransformList.datatype?)
SVG.MarkerValue.datatype ::=
	string
SVG.Marker.extra.class ::=
	ε
SVG.Marker.class ::=
	SVG.marker
	SVG.Marker.extra.class
SVG.Marker.extra.attrib ::=
	ε
SVG.Marker.attrib ::=
	[marker-start]::SVG.MarkerValue.datatype? [marker-mid]::SVG.MarkerValue.datatype? [marker-end]::SVG.MarkerValue.datatype? SVG.Marker.extra.attrib
SVG.marker ::=
	[marker]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.External.attrib [refX]::SVG.Coordinate.datatype? [refY]::SVG.Coordinate.datatype? [markerUnits]::("strokeWidth" | "userSpaceOnUse")? [markerWidth]::SVG.Length.datatype? [markerHeight]::SVG.Length.datatype? [orient]::string? [viewBox]::SVG.ViewBoxSpec.datatype? [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype?)
SVG.MaskValue.datatype ::=
	string
SVG.Mask.extra.class ::=
	ε
SVG.Mask.class ::=
	SVG.mask
	SVG.Mask.extra.class
SVG.Mask.extra.attrib ::=
	ε
SVG.Mask.attrib ::=
	[mask]::SVG.MaskValue.datatype? SVG.Mask.extra.attrib
SVG.mask ::=
	[mask]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [maskUnits]::("userSpaceOnUse" | "objectBoundingBox")? [maskContentUnits]::("userSpaceOnUse" | "objectBoundingBox")?)
SVG.opacity.attrib ::=
	[opacity]::SVG.OpacityValue.datatype?
SVG.fill-opacity.attrib ::=
	[fill-opacity]::SVG.OpacityValue.datatype?
SVG.stroke-opacity.attrib ::=
	[stroke-opacity]::SVG.OpacityValue.datatype?
SVG.Opacity.extra.attrib ::=
	ε
SVG.Opacity.attrib ::=
	SVG.opacity.attrib SVG.fill-opacity.attrib SVG.stroke-opacity.attrib SVG.Opacity.extra.attrib
SVG.Paint.datatype ::=
	string
SVG.StrokeDashArrayValue.datatype ::=
	string
SVG.StrokeDashOffsetValue.datatype ::=
	string
SVG.StrokeMiterLimitValue.datatype ::=
	string
SVG.StrokeWidthValue.datatype ::=
	string
SVG.fill.attrib ::=
	[fill]::SVG.Paint.datatype?
SVG.fill-rule.attrib ::=
	[fill-rule]::SVG.ClipFillRule.datatype?
SVG.stroke.attrib ::=
	[stroke]::SVG.Paint.datatype?
SVG.stroke-dasharray.attrib ::=
	[stroke-dasharray]::SVG.StrokeDashArrayValue.datatype?
SVG.stroke-dashoffset.attrib ::=
	[stroke-dashoffset]::SVG.StrokeDashOffsetValue.datatype?
SVG.stroke-linecap.attrib ::=
	[stroke-linecap]::("butt" | "round" | "square" | "inherit")?
SVG.stroke-linejoin.attrib ::=
	[stroke-linejoin]::("miter" | "round" | "bevel" | "inherit")?
SVG.stroke-miterlimit.attrib ::=
	[stroke-miterlimit]::SVG.StrokeMiterLimitValue.datatype?
SVG.stroke-width.attrib ::=
	[stroke-width]::SVG.StrokeWidthValue.datatype?
SVG.Paint.extra.attrib ::=
	ε
SVG.Paint.attrib ::=
	SVG.fill.attrib SVG.fill-rule.attrib SVG.stroke.attrib SVG.stroke-dasharray.attrib SVG.stroke-dashoffset.attrib SVG.stroke-linecap.attrib SVG.stroke-linejoin.attrib SVG.stroke-miterlimit.attrib SVG.stroke-width.attrib SVG.Paint.extra.attrib
SVG.color.attrib ::=
	[color]::SVG.Color.datatype?
SVG.color-interpolation.attrib ::=
	[color-interpolation]::("auto" | "sRGB" | "linearRGB" | "inherit")?
SVG.color-rendering.attrib ::=
	[color-rendering]::("auto" | "optimizeSpeed" | "optimizeQuality" | "inherit")?
SVG.Color.extra.attrib ::=
	ε
SVG.Color.attrib ::=
	SVG.color.attrib SVG.color-interpolation.attrib SVG.color-rendering.attrib SVG.Color.extra.attrib
SVG.Pattern.extra.class ::=
	ε
SVG.Pattern.class ::=
	SVG.pattern
	SVG.Pattern.extra.class
SVG.pattern ::=
	[pattern]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.XLink.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [patternUnits]::("userSpaceOnUse" | "objectBoundingBox")? [patternContentUnits]::("userSpaceOnUse" | "objectBoundingBox")? [patternTransform]::SVG.TransformList.datatype? [viewBox]::SVG.ViewBoxSpec.datatype? [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype?)
SVG.Profile.extra.class ::=
	ε
SVG.Profile.class ::=
	SVG.color-profile
	SVG.Profile.extra.class
SVG.Profile.extra.attrib ::=
	ε
SVG.Profile.attrib ::=
	[color-profile]::string? SVG.Profile.extra.attrib
SVG.color-profile ::=
	[color-profile]::(SVG.Description.class* SVG.Core.attrib SVG.XLink.attrib [local]::string? [name]::string [rendering-intent]::("auto" | "perceptual" | "relative-colorimetric" | "saturation" | "absolute-colorimetric")?)
SVG.Script.extra.class ::=
	ε
SVG.Script.class ::=
	SVG.script
	SVG.Script.extra.class
SVG.script ::=
	[script]::(string SVG.Core.attrib SVG.XLink.attrib SVG.External.attrib [type]::SVG.ContentType.datatype)
SVG.Points.datatype ::=
	string
SVG.Shape.extra.class ::=
	ε
SVG.Shape.class ::=
	SVG.path
	SVG.rect
	SVG.circle
	SVG.line
	SVG.ellipse
	SVG.polyline
	SVG.polygon
	SVG.Shape.extra.class
SVG.path ::=
	[path]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Marker.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [d]::SVG.PathData.datatype [pathLength]::SVG.Number.datatype? [transform]::SVG.TransformList.datatype?)
SVG.rect ::=
	[rect]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype [height]::SVG.Length.datatype [rx]::SVG.Length.datatype? [ry]::SVG.Length.datatype? [transform]::SVG.TransformList.datatype?)
SVG.circle ::=
	[circle]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [cx]::SVG.Coordinate.datatype? [cy]::SVG.Coordinate.datatype? [r]::SVG.Length.datatype [transform]::SVG.TransformList.datatype?)
SVG.line ::=
	[line]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Marker.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [x1]::SVG.Coordinate.datatype? [y1]::SVG.Coordinate.datatype? [x2]::SVG.Coordinate.datatype? [y2]::SVG.Coordinate.datatype? [transform]::SVG.TransformList.datatype?)
SVG.ellipse ::=
	[ellipse]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [cx]::SVG.Coordinate.datatype? [cy]::SVG.Coordinate.datatype? [rx]::SVG.Length.datatype [ry]::SVG.Length.datatype [transform]::SVG.TransformList.datatype?)
SVG.polyline ::=
	[polyline]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Marker.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [points]::SVG.Points.datatype [transform]::SVG.TransformList.datatype?)
SVG.polygon ::=
	[polygon]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Marker.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [points]::SVG.Points.datatype [transform]::SVG.TransformList.datatype?)
SVG.Description.extra.class ::=
	ε
SVG.Description.class ::=
	SVG.desc
	SVG.title
	SVG.metadata
	SVG.Description.extra.class
SVG.Use.extra.class ::=
	ε
SVG.Use.class ::=
	SVG.use
	SVG.Use.extra.class
SVG.Structure.extra.class ::=
	ε
SVG.Structure.class ::=
	SVG.svg
	SVG.g
	SVG.defs
	SVG.symbol
	SVG.Use.class
	SVG.Structure.extra.class
SVG.svg ::=
	[svg]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.DocumentEvents.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [viewBox]::SVG.ViewBoxSpec.datatype? [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype? [zoomAndPan]::("disable" | "magnify")? [version]::SVG.Number.datatype [baseProfile]::SVG.Text.datatype? [contentScriptType]::SVG.ContentType.datatype? [contentStyleType]::SVG.ContentType.datatype?)
SVG.g ::=
	[g]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [transform]::SVG.TransformList.datatype?)
SVG.defs ::=
	[defs]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [transform]::SVG.TransformList.datatype?)
SVG.desc ::=
	[desc]::(string SVG.Core.attrib SVG.Style.attrib)
SVG.title ::=
	[title]::(string SVG.Core.attrib SVG.Style.attrib)
SVG.metadata ::=
	[metadata]::(string SVG.Core.attrib)
SVG.symbol ::=
	[symbol]::((SVG.Description.class | SVG.Animation.class | SVG.Structure.class | SVG.Conditional.class | SVG.Image.class | SVG.Style.class | SVG.Shape.class | SVG.Text.class | SVG.Marker.class | SVG.Profile.class | SVG.Gradient.class | SVG.Pattern.class | SVG.Clip.class | SVG.Mask.class | SVG.Filter.class | SVG.Cursor.class | SVG.Hyperlink.class | SVG.View.class | SVG.Script.class | SVG.Font.class)* SVG.Core.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.External.attrib [viewBox]::SVG.ViewBoxSpec.datatype? [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype?)
SVG.use ::=
	[use]::(SVG.Description.class* SVG.Animation.class* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Presentation.attrib SVG.GraphicalEvents.attrib SVG.XLinkEmbed.attrib SVG.External.attrib [x]::SVG.Coordinate.datatype? [y]::SVG.Coordinate.datatype? [width]::SVG.Length.datatype? [height]::SVG.Length.datatype? [transform]::SVG.TransformList.datatype?)
SVG.ClassList.datatype ::=
	string
SVG.MediaDesc.datatype ::=
	string
SVG.StyleSheet.datatype ::=
	string
SVG.Style.extra.class ::=
	ε
SVG.Style.class ::=
	SVG.style
	SVG.Style.extra.class
SVG.Style.extra.attrib ::=
	ε
SVG.Style.attrib ::=
	[style]::SVG.StyleSheet.datatype? [class]::SVG.ClassList.datatype? SVG.Style.extra.attrib
SVG.style ::=
	[style]::(string SVG.Core.attrib [type]::SVG.ContentType.datatype [media]::SVG.MediaDesc.datatype? [title]::SVG.Text.datatype?)
SVG.BaselineShiftValue.datatype ::=
	string
SVG.FontFamilyValue.datatype ::=
	string
SVG.FontSizeValue.datatype ::=
	string
SVG.FontSizeAdjustValue.datatype ::=
	string
SVG.GlyphOrientationHorizontalValue.datatype ::=
	string
SVG.GlyphOrientationVerticalValue.datatype ::=
	string
SVG.KerningValue.datatype ::=
	string
SVG.SpacingValue.datatype ::=
	string
SVG.TextDecorationValue.datatype ::=
	string
SVG.Text.extra.class ::=
	ε
SVG.Text.class ::=
	SVG.text
	SVG.altGlyphDef
	SVG.Text.extra.class
SVG.TextContent.extra.class ::=
	ε
SVG.TextContent.class ::=
	SVG.tspan
	SVG.tref
	SVG.textPath
	SVG.altGlyph
	SVG.TextContent.extra.class
SVG.Text.extra.attrib ::=
	ε
SVG.Text.attrib ::=
	[writing-mode]::("lr-tb" | "rl-tb" | "tb-rl" | "lr" | "rl" | "tb" | "inherit")? SVG.Text.extra.attrib
SVG.TextContent.extra.attrib ::=
	ε
SVG.TextContent.attrib ::=
	[alignment-baseline]::("baseline" | "top" | "before-edge" | "text-top" | "text-before-edge" | "middle" | "bottom" | "after-edge" | "text-bottom" | "text-after-edge" | "ideographic" | "lower" | "hanging" | "mathematical" | "inherit")? [baseline-shift]::SVG.BaselineShiftValue.datatype? [direction]::("ltr" | "rtl" | "inherit")? [dominant-baseline]::("auto" | "autosense-script" | "no-change" | "reset" | "ideographic" | "lower" | "hanging" | "mathematical" | "inherit")? [glyph-orientation-horizontal]::SVG.GlyphOrientationHorizontalValue.datatype? [glyph-orientation-vertical]::SVG.GlyphOrientationVerticalValue.datatype? [kerning]::SVG.KerningValue.datatype? [letter-spacing]::SVG.SpacingValue.datatype? [text-anchor]::("start" | "middle" | "end" | "inherit")? [text-decoration]::SVG.TextDecorationValue.datatype? [unicode-bidi]::("normal" | "embed" | "bidi-override" | "inherit")? [word-spacing]::SVG.SpacingValue.datatype? SVG.TextContent.extra.attrib
SVG.Font.extra.attrib ::=
	ε
SVG.Font.attrib ::=
	[font-family]::SVG.FontFamilyValue.datatype? [font-size]::SVG.FontSizeValue.datatype? [font-size-adjust]::SVG.FontSizeAdjustValue.datatype? [font-stretch]::("normal" | "wider" | "narrower" | "ultra-condensed" | "extra-condensed" | "condensed" | "semi-condensed" | "semi-expanded" | "expanded" | "extra-expanded" | "ultra-expanded" | "inherit")? [font-style]::("normal" | "italic" | "oblique" | "inherit")? [font-variant]::("normal" | "small-caps" | "inherit")? [font-weight]::("normal" | "bold" | "bolder" | "lighter" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | "inherit")? SVG.Font.extra.attrib
SVG.text ::=
	[text]::((string | SVG.Description.class | SVG.Animation.class | SVG.TextContent.class | SVG.Hyperlink.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.Text.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [x]::SVG.Coordinates.datatype? [y]::SVG.Coordinates.datatype? [dx]::SVG.Lengths.datatype? [dy]::SVG.Lengths.datatype? [rotate]::SVG.Numbers.datatype? [textLength]::SVG.Length.datatype? [lengthAdjust]::("spacing" | "spacingAndGlyphs")? [transform]::SVG.TransformList.datatype?)
SVG.tspan ::=
	[tspan]::((string | SVG.tspan | SVG.tref | SVG.altGlyph | SVG.animate | SVG.set | SVG.animateColor | SVG.Description.class | SVG.Hyperlink.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.External.attrib [x]::SVG.Coordinates.datatype? [y]::SVG.Coordinates.datatype? [dx]::SVG.Lengths.datatype? [dy]::SVG.Lengths.datatype? [rotate]::SVG.Numbers.datatype? [textLength]::SVG.Length.datatype? [lengthAdjust]::("spacing" | "spacingAndGlyphs")?)
SVG.tref ::=
	[tref]::((SVG.animate | SVG.set | SVG.animateColor | SVG.Description.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.XLinkRequired.attrib SVG.External.attrib [x]::SVG.Coordinates.datatype? [y]::SVG.Coordinates.datatype? [dx]::SVG.Lengths.datatype? [dy]::SVG.Lengths.datatype? [rotate]::SVG.Numbers.datatype? [textLength]::SVG.Length.datatype? [lengthAdjust]::("spacing" | "spacingAndGlyphs")?)
SVG.textPath ::=
	[textPath]::((string | SVG.tspan | SVG.tref | SVG.altGlyph | SVG.animate | SVG.set | SVG.animateColor | SVG.Description.class | SVG.Hyperlink.class)* SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.XLinkRequired.attrib SVG.External.attrib [startOffset]::SVG.Length.datatype? [textLength]::SVG.Length.datatype? [lengthAdjust]::("spacing" | "spacingAndGlyphs")? [method]::("align" | "stretch")? [spacing]::("auto" | "exact")?)
SVG.altGlyph ::=
	[altGlyph]::(string SVG.Core.attrib SVG.Conditional.attrib SVG.Style.attrib SVG.TextContent.attrib SVG.Font.attrib SVG.Paint.attrib SVG.Color.attrib SVG.Opacity.attrib SVG.Graphics.attrib SVG.Clip.attrib SVG.Mask.attrib SVG.Filter.attrib SVG.GraphicalEvents.attrib SVG.Cursor.attrib SVG.XLink.attrib SVG.External.attrib [x]::SVG.Coordinates.datatype? [y]::SVG.Coordinates.datatype? [dx]::SVG.Lengths.datatype? [dy]::SVG.Lengths.datatype? [glyphRef]::string? [format]::string? [rotate]::SVG.Numbers.datatype?)
SVG.altGlyphDef ::=
	[altGlyphDef]::((SVG.glyphRef+ | SVG.altGlyphItem+) SVG.Core.attrib)
SVG.altGlyphItem ::=
	[altGlyphItem]::(SVG.glyphRef+ SVG.Core.attrib)
SVG.glyphRef ::=
	[glyphRef]::(ε SVG.Core.attrib SVG.Style.attrib SVG.Font.attrib SVG.XLink.attrib [x]::SVG.Coordinates.datatype? [y]::SVG.Coordinates.datatype? [dx]::SVG.Lengths.datatype? [dy]::SVG.Lengths.datatype? [glyphRef]::string? [format]::string?)
SVG.View.extra.class ::=
	ε
SVG.View.class ::=
	SVG.view
	SVG.View.extra.class
SVG.view ::=
	[view]::(SVG.Description.class* SVG.Core.attrib SVG.External.attrib [viewBox]::SVG.ViewBoxSpec.datatype? [preserveAspectRatio]::SVG.PreserveAspectRatioSpec.datatype? [zoomAndPan]::("disable" | "magnify")? [viewTarget]::string?)
SVG.ClipValue.datatype ::=
	string
SVG.clip.attrib ::=
	[clip]::SVG.ClipValue.datatype?
SVG.overflow.attrib ::=
	[overflow]::("visible" | "hidden" | "scroll" | "auto" | "inherit")?
SVG.Viewport.extra.attrib ::=
	ε
SVG.Viewport.attrib ::=
	SVG.clip.attrib SVG.overflow.attrib SVG.Viewport.extra.attrib
SVG.XLink.extra.attrib ::=
	ε
SVG.XLink.attrib ::=
	[xlink:type]::"simple"? [xlink:href]::SVG.URI.datatype? [xlink:role]::SVG.URI.datatype? [xlink:arcrole]::SVG.URI.datatype? [xlink:title]::string? [xlink:show]::"other"? [xlink:actuate]::"onLoad"? SVG.XLink.extra.attrib
SVG.XLinkRequired.extra.attrib ::=
	ε
SVG.XLinkRequired.attrib ::=
	[xlink:type]::"simple"? [xlink:href]::SVG.URI.datatype [xlink:role]::SVG.URI.datatype? [xlink:arcrole]::SVG.URI.datatype? [xlink:title]::string? [xlink:show]::"other"? [xlink:actuate]::"onLoad"? SVG.XLinkRequired.extra.attrib
SVG.XLinkEmbed.extra.attrib ::=
	ε
SVG.XLinkEmbed.attrib ::=
	[xlink:type]::"simple"? [xlink:href]::SVG.URI.datatype [xlink:role]::SVG.URI.datatype? [xlink:arcrole]::SVG.URI.datatype? [xlink:title]::string? [xlink:show]::"embed"? [xlink:actuate]::"onLoad"? SVG.XLinkEmbed.extra.attrib
SVG.XLinkReplace.extra.attrib ::=
	ε
SVG.XLinkReplace.attrib ::=
	[xlink:type]::"simple"? [xlink:href]::SVG.URI.datatype [xlink:role]::SVG.URI.datatype? [xlink:arcrole]::SVG.URI.datatype? [xlink:title]::string? [xlink:show]::("new" | "replace")? [xlink:actuate]::"onRequest"? SVG.XLinkReplace.extra.attrib

GrammarLabMaintained by Dr. Vadim Zaytsev a.k.a. @grammarware. Last updated in September 2015. []