<!--
  This is the Shared DTD for SVG 1.0 (draft 20000218). It contains the
  element, attribute and entities definitions which are common to the 
  DTD for Stylable SVG and the DTD for Final Form SVG.

  The only purpose of the Shared DTD is to serve as a single definition for
  the definitions of elements, attributes and entities that are common to
  the DTD for Stylable SVG and the DTD for Final Form SVG.
  The Shared DTD should not be used directly; instead, use either the
  DTD for Stylable SVG or the DTD for Final Form SVG.

  The specification for SVG that corresponds to this DTD is available at:

    http://www.w3.org/TR/2000/WD-SVG-20000218/

  Copyright (c) 2000 W3C (MIT, INRIA, Keio), All Rights Reserved.

  For this working draft:

    Namespaces:
      Stylable SVG:     http://www.w3.org/2000/svg-20000218-stylable
      Final Form SVG:   http://www.w3.org/2000/svg-20000218-finalform  

    Public identifiers:
      PUBLIC "-//W3C//DTD SVG 20000218 Shared//EN"
      PUBLIC "-//W3C//DTD SVG 20000218 Stylable//EN"
      PUBLIC "-//W3C//DTD SVG 20000218 FinalForm//EN"

    URIs for the DTDs:
      http://www.w3.org/TR/WD-SVG-20000218/DTD/svg-20000218-shared.dtd
      http://www.w3.org/TR/WD-SVG-20000218/DTD/svg-20000218-stylable.dtd
      http://www.w3.org/TR/WD-SVG-20000218/DTD/svg-20000218-finalform.dtd
-->


<!--=================== Entity definitions ===================-->

<!ENTITY % BaselineShiftValue "CDATA">
    <!-- 'baseline-shift' property/attribute value (e.g., 'baseline', 'sub', etc.) -->

<!ENTITY % Boolean "(false | true)">
    <!-- feature specification -->

<!ENTITY % ClassList "CDATA">
    <!-- list of classes -->

<!ENTITY % ClipValue "CDATA">
    <!-- 'clip' property/attribute value (e.g., 'auto', rect(...)) -->

<!ENTITY % ClipPathValue "CDATA">
    <!-- 'clip-path' property/attribute value (e.g., 'none', %URI;) -->

<!ENTITY % ClipFillRule "(evenodd | nonzero | inherit)">
    <!-- 'clip-rule' or fill-rule property/attribute value -->

<!ENTITY % ContentType "CDATA">
    <!-- media type, as per [RFC2045] -->

<!ENTITY % Coordinate "CDATA">
    <!-- a <coordinate> -->

<!ENTITY % Coordinates "CDATA">
    <!-- a list of <coordinate>s -->

<!ENTITY % CSSColor "CDATA">
    <!-- a <color> value, as per [CSS2-color] -->

<!ENTITY % CursorValue "CDATA">
    <!-- 'cursor' property/attribute value (e.g., 'crosshair', %URI;) -->

<!ENTITY % EnableBackgroundValue "CDATA">
    <!-- 'enable-background' property/attribute value (e.g., 'new', 'accumulate') -->

<!ENTITY % Feature "CDATA">
    <!-- feature specification -->

<!ENTITY % FilterValue "CDATA">
    <!-- 'filter' property/attribute value (e.g., 'none', %URI;) -->

<!ENTITY % FontFamilyValue "CDATA">
    <!-- 'font-family' property/attribute value (i.e., list of fonts) -->

<!ENTITY % FontSizeValue "CDATA">
    <!-- 'font-size' property/attribute value -->

<!ENTITY % FontSizeAdjustValue "CDATA">
    <!-- 'font-size-adjust' property/attribute value -->

<!ENTITY % GlyphOrientationHorizontalValue "CDATA">
    <!-- 'glyph-orientation-horizontal' property/attribute value (e.g., <angle>) -->

<!ENTITY % GlyphOrientationVerticalValue "CDATA">
    <!-- 'glyph-orientation-vertical' property/attribute value (e.g., 'auto', <angle>) -->

<!ENTITY % Integer "CDATA">
    <!-- a <integer> -->

<!ENTITY % LanguageCode "NMTOKEN">
    <!-- a language code, as per [RFC1766] -->

<!ENTITY % LanguageCodes "CDATA">
    <!-- comma-separated list of language codes, as per [RFC1766] -->

<!ENTITY % Length "CDATA">
    <!-- a <length> -->

<!ENTITY % Lengths "CDATA">
    <!-- a list of <length>s -->

<!ENTITY % LinkTarget "NMTOKEN">
    <!-- link to this target -->

<!ENTITY % MarkerValue "CDATA">
    <!-- 'marker' property/attribute value (e.g., 'none', %URI;) -->

<!ENTITY % MaskValue "CDATA">
    <!-- 'mask' property/attribute value (e.g., 'none', %URI;) -->

<!ENTITY % Number "CDATA">
    <!-- a <number> -->

<!ENTITY % OpacityValue "CDATA">
    <!-- opacity value (e.g., <number>) -->

<!ENTITY % Paint "CDATA">
    <!-- a 'fill' or 'stroke' property/attribute value: <paint> -->

<!ENTITY % PathData "CDATA">
    <!-- a path data specification -->

<!ENTITY % Points "CDATA">
    <!-- a list of points -->

<!ENTITY % PreserveAspectRatioSpec "CDATA">
    <!-- 'preserveAspectRatio' attribute specification -->

<!ENTITY % Script "CDATA">
    <!-- script expression -->

<!ENTITY % SpacingValue "CDATA">
    <!-- 'letter-spacing' or 'word-spacing' property/attribute value (e.g., normal | <length>) -->

<!ENTITY % StopColorValue "CDATA">
    <!-- 'stop-color' property/attribute value  -->

<!ENTITY % StrokeDashArrayValue "CDATA">
    <!-- 'stroke-dasharray' property/attribute value (e.g., 'none', list of <number>s) -->

<!ENTITY % StrokeDashOffsetValue "CDATA">
    <!-- 'stroke-dashoffset' property/attribute value (e.g., 'none', <legnth>) -->

<!ENTITY % StrokeMiterLimitValue "CDATA">
    <!-- 'stroke-miterlimit' property/attribute value (e.g., <number>) -->

<!ENTITY % StrokeWidthValue "CDATA">
    <!-- 'stroke-width' property/attribute value (e.g., <length>) -->

<!ENTITY % StructuredText
  "content CDATA #FIXED 'structured text'" >

<!ENTITY % StyleSheet "CDATA">
    <!-- style sheet data -->

<!ENTITY % SVGColor "CDATA">
    <!-- An SVG color value (RGB plus optional ICC) -->

<!ENTITY % TextDecorationValue "CDATA">
    <!-- 'text-decoration' property/attribute value (e.g., 'none', 'underline') -->

<!ENTITY % TransformList "CDATA">
    <!-- list of transforms -->

<!ENTITY % URI "CDATA">
    <!-- a Uniform Resource Identifier, see [RFC2396] -->

<!ENTITY % ViewBoxSpec "CDATA">
    <!-- 'viewBox' attribute specification -->

<!-- This entity allows for at most one of desc and title,
     supplied in any order -->
<!ENTITY % descTitle
          "((desc,title?)|(title,desc?)?)" >

<!-- This entity allows for at most one of desc, title and defs,
     supplied in any order -->
<!ENTITY % descTitleDefs
          "(((desc,((title,defs?)|(defs,title?))?)|
              (title,((desc,defs?)|(defs,desc?))?)|
              (defs,((desc,title?)|(title,desc?))?))?)" >

<!-- All elements have an ID. -->
<!ENTITY % stdAttrs
 "id ID #IMPLIED" >

<!-- Common attributes for elements that might contain character data content. -->
<!ENTITY % langSpaceAttrs
 "xml:lang %LanguageCode; #IMPLIED
  xml:space (default|preserve) #IMPLIED" >

<!-- Common attributes to check for system capabilities. -->
<!ENTITY % testAttrs
 "system-required %Feature; #IMPLIED
  system-language %LanguageCodes; #IMPLIED" >

<!-- For most uses of URI referencing:
        standard XLink attributes other than xlink:href. -->
<!ENTITY % xlinkRefAttrs
 "xmlns:xlink CDATA #FIXED 'http://www.w3.org/2000/xlink/namespace/'
  xlink:type (simple|extended|locator|arc) 'simple' 
  xlink:role CDATA #IMPLIED
  xlink:title CDATA #IMPLIED
  xlink:show (new|embed|replace) 'embed'
  xlink:actuate (onRequest|onLoad) 'onLoad'" >

<!ENTITY % graphicsElementEvents
  "onfocusin %Script; #IMPLIED
   onfocusout %Script; #IMPLIED
   onactivate %Script; #IMPLIED
   onmousedown %Script; #IMPLIED
   onmouseup %Script; #IMPLIED
   onclick %Script; #IMPLIED
   ondblclick %Script; #IMPLIED
   onmouseover %Script; #IMPLIED
   onmousemove %Script; #IMPLIED
   onmouseout %Script; #IMPLIED
   onkeydown %Script; #IMPLIED
   onkeypress %Script; #IMPLIED
   onkeyup %Script; #IMPLIED
   onload %Script; #IMPLIED
   onselect %Script; #IMPLIED" >

<!ENTITY % documentEvents
  "onresize %Script; #IMPLIED
   onscroll %Script; #IMPLIED
   onunload %Script; #IMPLIED
   onzoom %Script; #IMPLIED
   onerror %Script; #IMPLIED
   onabort %Script; #IMPLIED " >


<!-- Definitions of elements and attributes that only apply to Stylable SVG -->

<!-- Stylable SVG has a 'style' element and puts a 'style' attribute on most elements. -->
<![%StylableSVG;[
  <!ENTITY % StylableSVG-StyleElement 
    "|style" >

  <!ENTITY % StylableSVG-StyleAttribute 
    "style %StyleSheet; #IMPLIED" >
]]>

<!-- These elements and attributes are not available for Final Form SVG. -->
<![%FinalFormSVG;[
  <!-- For Final Form SVG only, the 'style' attribute and 'style' element 
       are removed from most elements. -->
  <!ENTITY % StylableSVG-StyleAttribute "" >
  <!ENTITY % StylableSVG-StyleElement "" >
]]>


<!-- Definitions of attribute collections that only apply to Final Form SVG -->

<![%FinalFormSVG;[
  <!-- For Final Form SVG only, all container elements have these attributes. -->
  <!ENTITY % FinalFormSVG-ContainerAttrs
    "enable-background %EnableBackgroundValue; #IMPLIED " >

  <!-- For Final Form SVG only, attributes on elements that can be filled or stroked. -->
  <!ENTITY % FinalFormSVG-FillStrokeAttrs
    "fill %Paint; #IMPLIED
     fill-opacity %OpacityValue; #IMPLIED
     fill-rule %ClipFillRule; #IMPLIED
     stroke %Paint; #IMPLIED
     stroke-dasharray %StrokeDashArrayValue; #IMPLIED
     stroke-dashoffset %StrokeDashOffsetValue; #IMPLIED
     stroke-linecap (butt | round | square | inherit) #IMPLIED
     stroke-linejoin (miter | round | bevel | inherit) #IMPLIED
     stroke-miterlimit %StrokeMiterLimitValue; #IMPLIED
     stroke-opacity %OpacityValue; #IMPLIED
     stroke-width %StrokeWidthValue; #IMPLIED " >

  <!-- For Final Form SVG only, all gradient elements have these attributes. -->
  <!ENTITY % FinalFormSVG-GradientAttrs
    "stop-color %StopColorValue; #IMPLIED
     stop-opacity %OpacityValue; #IMPLIED " >

  <!-- For Final Form SVG only, all graphics elements have these attributes. -->
  <!ENTITY % FinalFormSVG-GraphicsAttrs
    "clip-path %ClipPathValue; #IMPLIED
     clip-rule %ClipFillRule; #IMPLIED
     color %CSSColor; #IMPLIED
     color-interpolation (auto | sRGB | linearRGB | inherit) #IMPLIED
     color-rendering (auto | optimizeSpeed | optimizeQuality | inherit) #IMPLIED
     cursor %CursorValue; #IMPLIED
     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) #IMPLIED
     filter %FilterValue; #IMPLIED
     image-rendering (auto | optimizeSpeed | optimizeQuality | inherit) #IMPLIED
     mask %MaskValue; #IMPLIED
     opacity %OpacityValue; #IMPLIED
     pointer-events (visiblePainted | visibleFill | visibleStroke | visibleFillStroke | visible |
                     painted | fill | stroke | fillstroke | all | none | inherit) #IMPLIED
     shape-rendering (auto | optimizeSpeed | crispEdges | geometricPrecision | inherit) #IMPLIED
     text-rendering (auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit) #IMPLIED
     visibility (visible | hidden | inherit) #IMPLIED " >

  <!-- For Final Form SVG only, container elements and certain graphics elements have these attributes. -->
  <!ENTITY % FinalFormSVG-MarkerAttrs
    "marker-start %MarkerValue; #IMPLIED
     marker-mid %MarkerValue; #IMPLIED
     marker-end %MarkerValue; #IMPLIED " >

  <!-- For Final Form SVG only, all text container elements have these attributes. -->
  <!ENTITY % FinalFormSVG-TextContainerAttrs
    "baseline-identifier (baseline | top | before-edge | text-top | text-before-edge |
                          middle | bottom | after-edge | text-bottom | text-after-edge |
                          ideographic | lower | hanging | mathematical | inherit) #IMPLIED
     baseline-shift %BaselineShiftValue; #IMPLIED
     direction (ltr | rtl | inherit) #IMPLIED
     font-family %FontFamilyValue; #IMPLIED
     font-size %FontSizeValue; #IMPLIED
     font-size-adjust %FontSizeAdjustValue; #IMPLIED
     font-stretch (normal | wider | narrower | ultra-condensed | extra-condensed |
                   condensed | semi-condensed | semi-expanded | expanded |
                   extra-expanded | ultra-expanded | inherit) #IMPLIED
     font-style (normal | italic | oblique | inherit) #IMPLIED
     font-variant (normal | small-caps | inherit) #IMPLIED
     font-weight (normal | bold | bolder | lighter | 100 | 200 | 300 |
                 400 | 500 | 600 | 700 | 800 | 900 | inherit) #IMPLIED
     glyph-orientation-horizontal %GlyphOrientationHorizontalValue; #IMPLIED
     glyph-orientation-vertical %GlyphOrientationVerticalValue; #IMPLIED
     letter-spacing %SpacingValue; #IMPLIED
     text-decoration %TextDecorationValue; #IMPLIED
     unicode-bidi (normal | embed | bidi-override | inherit) #IMPLIED
     word-spacing %SpacingValue; #IMPLIED " >

  <!-- For Final Form SVG only, the 'text' element has these attributes. -->
  <!ENTITY % FinalFormSVG-TextElementAttrs
    "dominant-baseline (auto | autosense-script | no-change | reset|
                        ideographic | lower | hanging | mathematical | inherit ) #IMPLIED
     text-anchor (start | middle | end | inherit) #IMPLIED
     writing-mode (lr-tb | rl-tb | tb-rl | lr | rl | tb | inherit) #IMPLIED " >

  <!-- For Final Form SVG only, all elements that establish viewports have these attributes. -->
  <!ENTITY % FinalFormSVG-ViewportAttrs
    "clip %ClipValue; #IMPLIED
     overflow (visible | hidden | scroll | auto | inherit) #IMPLIED " >

  <!-- For Final Form SVG only, feFlood has these attributes. -->
  <!ENTITY % FinalFormSVG-feFloodAttrs
    "flood-color %SVGColor; #IMPLIED
     flood-opacity %OpacityValue; #IMPLIED " >
]]>

<!-- These above Final Form SVG attribute collections 
     are not available for Stylable SVG. -->
<![%StylableSVG;[
  <!ENTITY % FinalFormSVG-ContainerAttrs "" >
  <!ENTITY % FinalFormSVG-FillStrokeAttrs "" >
  <!ENTITY % FinalFormSVG-GradientAttrs "" >
  <!ENTITY % FinalFormSVG-GraphicsAttrs "" >
  <!ENTITY % FinalFormSVG-MarkerAttrs "" >
  <!ENTITY % FinalFormSVG-TextContainerAttrs "" >
  <!ENTITY % FinalFormSVG-TextElementAttrs "" >
  <!ENTITY % FinalFormSVG-ViewportAttrs "" >
  <!ENTITY % FinalFormSVG-feFloodAttrs "" >
]]>


<!-- Definitions of elements that only apply to Final Form SVG -->

<!-- Final Form SVG has a corresponding XML version of the 
     @font-face and @color-profile features available when SVG is styled with CSS. -->
<![%FinalFormSVG;[
  <!ENTITY % FinalFormSVG-ColorProfileElement 
    "|color-profile" >

  <!ENTITY % FinalFormSVG-FontFaceElement 
    "|font-face" >
]]>

<!-- These elements are not available for Stylable SVG. -->
<![%StylableSVG;[
  <!ENTITY % FinalFormSVG-ColorProfileElement "" >
  <!ENTITY % FinalFormSVG-FontFaceElement "" >
]]>


<!-- Allow for extending the DTD with internal subset for 
     container and graphics elements -->
<!ENTITY % ceExt "" >
<!ENTITY % geExt "" >


<!--========== Document Structure and Grouping ==========-->

<!ENTITY % svgExt "" >
<!ELEMENT svg (%descTitleDefs;,metadata?,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|view|switch|a|altGlyphDef|
                   script|symbol|marker|clipPath|mask|
                   linearGradient|radialGradient|pattern|filter|cursor|font|
                   animate|set|animateMotion|animateColor|animateTransform
                   %StylableSVG-StyleElement;
                   %FinalFormSVG-ColorProfileElement;%FinalFormSVG-FontFaceElement;
                   %ceExt;%svgExt;)*) >
<!ATTLIST svg
  xmlns CDATA #FIXED "%SVGNamespace;"
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  %graphicsElementEvents;
  %documentEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED 
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #REQUIRED
  height %Length; #REQUIRED
  viewBox %ViewBoxSpec; #IMPLIED
  preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet'
  enableZoomAndPanControls %Boolean; "true"
  contentScriptType %ContentType; "text/ecmascript"
  contentStyleType %ContentType; "text/css"
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >

<!ENTITY % gExt "" >
<!ELEMENT g (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|view|switch|a|altGlyphDef|
                   script|symbol|marker|clipPath|mask|
                   linearGradient|radialGradient|pattern|filter|cursor|font|
                   animate|set|animateMotion|animateColor|animateTransform
                   %StylableSVG-StyleElement;
                   %FinalFormSVG-ColorProfileElement;%FinalFormSVG-FontFaceElement;
                   %ceExt;%gExt;)*) >
<!ATTLIST g
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % defsExt "" >
<!ELEMENT defs (
                   path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|view|switch|a|altGlyphDef|
                   script|symbol|marker|clipPath|mask|
                   linearGradient|radialGradient|pattern|filter|cursor|font|
                   animate|set|animateMotion|animateColor|animateTransform
                   %StylableSVG-StyleElement;
                   %FinalFormSVG-ColorProfileElement;%FinalFormSVG-FontFaceElement;
                   %ceExt;%defsExt;)* >
<!ATTLIST defs
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >


<!--=================== Shapes ===================-->

<!ENTITY % pathExt "" >
<!ELEMENT path (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%pathExt;)*) >
<!ATTLIST path
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  d %PathData; #REQUIRED
  length %Number; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs; >

<!ENTITY % rectExt "" >
<!ELEMENT rect (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%rectExt;)*) >
<!ATTLIST rect
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #REQUIRED
  height %Length; #REQUIRED
  rx %Length; #IMPLIED
  ry %Length; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs; >

<!ENTITY % circleExt "" >
<!ELEMENT circle (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%circleExt;)*) >
<!ATTLIST circle
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  cx %Coordinate; "0"
  cy %Coordinate; "0"
  r %Length; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs; >

<!ENTITY % ellipseExt "" >
<!ELEMENT ellipse (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%ellipseExt;)*) >
<!ATTLIST ellipse
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  cx %Coordinate; "0"
  cy %Coordinate; "0"
  rx %Length; #REQUIRED
  ry %Length; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs; >

<!ENTITY % lineExt "" >
<!ELEMENT line (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%lineExt;)*) >
<!ATTLIST line
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x1 %Coordinate; "0"
  y1 %Coordinate; "0"
  x2 %Coordinate; "0"
  y2 %Coordinate; "0"
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs; >

<!ENTITY % polylineExt "" >
<!ELEMENT polyline (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%polylineExt;)*) >
<!ATTLIST polyline
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  points %Points; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs; >

<!ENTITY % polygonExt "" >
<!ELEMENT polygon (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                %geExt;%polygonExt;)*) >
<!ATTLIST polygon
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  points %Points; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs; >


<!--=================== Text ===================-->

<!ENTITY % textExt "" >
<!ELEMENT text (#PCDATA|desc|title|
                tspan|tref|textPath|altGlyph|a|animate|set|
                animateMotion|animateColor|animateTransform
                %geExt;%textExt;)* >
<!ATTLIST text
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % tspanExt "" >
<!ELEMENT tspan (#PCDATA|tspan|tref|altGlyph|a|animate|set|animateColor
                %tspanExt;)* >
<!ATTLIST tspan
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinates; #IMPLIED
  y %Coordinates; #IMPLIED
  dx %Lengths; #IMPLIED
  dy %Lengths; #IMPLIED
  rotate CDATA #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-TextContainerAttrs; >

<!ENTITY % trefExt "" >
<!ELEMENT tref (animate|set|animateColor
                %trefExt;)* >
<!ATTLIST tref
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinates; #IMPLIED
  y %Coordinates; #IMPLIED
  dx %Lengths; #IMPLIED
  dy %Lengths; #IMPLIED
  rotate CDATA #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-TextContainerAttrs; >

<!ENTITY % textPathExt "" >
<!ELEMENT textPath (#PCDATA|tspan|tref|altGlyph|a|animate|set|animateColor
                %textPathExt;)* >
<!ATTLIST textPath
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  startOffset CDATA "0"
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-TextContainerAttrs; >

<!ENTITY % altGlyphExt "" >
<!ELEMENT altGlyph (#PCDATA %altGlyphExt;)* >
<!ATTLIST altGlyph
  %stdAttrs;
  %langSpaceAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED >

<!ENTITY % altGlyphDefExt "" >
<!ELEMENT altGlyphDef (glyphSub %altGlyphDefExt;)* >
<!ATTLIST altGlyphDef
  %stdAttrs; >

<!ELEMENT glyphSub EMPTY >
<!ATTLIST glyphSub
  %stdAttrs;
  font CDATA #REQUIRED
  glyphRef CDATA #REQUIRED
  format CDATA #REQUIRED >

<!--=================== SVG Fonts ===================-->

<!ENTITY % fontExt "" >
<!ELEMENT font (%descTitle;,missing-glyph,(glyph|hkern|vkern
                   %fontExt;)*) >
<!ATTLIST font
  %stdAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  font-style CDATA #IMPLIED
  font-variant CDATA #IMPLIED
  font-weight CDATA #IMPLIED
  font-stretch CDATA #IMPLIED
  unicode-range CDATA #IMPLIED
  units-per-em %Number; #REQUIRED
  panose-1 CDATA #IMPLIED
  slope %Number; #IMPLIED
  cap-height %Number; #REQUIRED
  x-height %Number; #REQUIRED
  accent-height %Number; #IMPLIED
  ascent %Number; #REQUIRED
  descent %Number; #REQUIRED
  horiz-origin-x %Number; #IMPLIED
  horiz-origin-y %Number; #IMPLIED
  horiz-adv-x %Number; #REQUIRED
  vert-origin-x %Number; #IMPLIED
  vert-origin-y %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED
  text-bottom %Number; #REQUIRED
  baseline %Number; #REQUIRED
  centerline %Number; #REQUIRED
  mathline %Number; #REQUIRED
  ideographic %Number; #REQUIRED
  hanging %Number; #REQUIRED
  topline %Number; #REQUIRED
  text-top %Number; #REQUIRED
  font-face-name CDATA #IMPLIED
  underline-position %Number; #IMPLIED
  underline-thickness %Number; #IMPLIED
  strikethrough-position %Number; #IMPLIED
  strikethrough-thickness %Number; #IMPLIED
  overline-position %Number; #IMPLIED
  overline-thickness %Number; #IMPLIED >

<!ENTITY % glyphExt "" >
<!ELEMENT glyph (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|g|switch
                   %glyphExt;)*) >
<!ATTLIST glyph
  %stdAttrs;
  unicode CDATA #REQUIRED
  glyph-name CDATA #IMPLIED
  vert-text-orient CDATA #IMPLIED
  arabic CDATA #IMPLIED
  han CDATA #IMPLIED
  horiz-adv-x %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED >

<!ENTITY % missing-glyphExt "" >
<!ELEMENT missing-glyph (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|g|switch
                   %missing-glyphExt;)*) >
<!ATTLIST missing-glyph
  %stdAttrs;
  horiz-adv-x %Number; #IMPLIED
  vert-adv-y %Number; #IMPLIED >

<!ELEMENT hkern EMPTY >
<!ATTLIST hkern
  %stdAttrs;
  u1 CDATA #IMPLIED
  g1 CDATA #IMPLIED
  u2 CDATA #IMPLIED
  g2 CDATA #IMPLIED
  k %Number; #REQUIRED >

<!ELEMENT vkern EMPTY >
<!ATTLIST vkern
  %stdAttrs;
  u1 CDATA #IMPLIED
  g1 CDATA #IMPLIED
  u2 CDATA #IMPLIED
  g2 CDATA #IMPLIED
  k %Number; #REQUIRED >


<!--=================== Graphics Referencing Elements ===================-->

<!ENTITY % useExt "" >
<!ELEMENT use (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                   %geExt;%useExt;)*) >
<!ATTLIST use
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #IMPLIED
  height %Length; #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >

<!ENTITY % imageExt "" >
<!ELEMENT image (%descTitle;,(animate|set|animateMotion|animateColor|animateTransform
                   %geExt;%imageExt;)*) >
<!ATTLIST image
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #REQUIRED
  height %Length; #REQUIRED
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >


<!--=================== Symbols and Markers ===================-->

<!ENTITY % symbolExt "" >
<!ELEMENT symbol (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|switch|a
                   %ceExt;%symbolExt;)*) >
<!ATTLIST symbol
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED
  viewBox %ViewBoxSpec; #IMPLIED
  preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet'
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % markerExt "" >
<!ELEMENT marker (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|switch|a
                   %ceExt;%markerExt;)*) >
<!ATTLIST marker
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED
  refX %Coordinate; #IMPLIED
  refY %Coordinate; #IMPLIED
  viewBox %ViewBoxSpec; #IMPLIED
  preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet'
  markerUnits (strokeWidth | userSpace | userSpaceOnUse) "strokeWidth"
  markerWidth  %Length; "3"
  markerHeight %Length; "3"
  orient CDATA "0"
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >


<!--========== Descriptions and Titles ==========-->

<!ELEMENT desc (#PCDATA) >
<!ATTLIST desc
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %StructuredText; >

<!ELEMENT title (#PCDATA) >
<!ATTLIST title
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  style %StyleSheet; #IMPLIED
  %StructuredText; >


<!--=================== Clipping and Masking ===================-->

<!ENTITY % clipPathExt "" >
<!ELEMENT clipPath (%descTitle;,
                    (path|text|rect|circle|ellipse|line|polyline|polygon|
                     use|animate|set|animateMotion|animateColor|animateTransform
                     %ceExt;%clipPathExt;)*) >
<!ATTLIST clipPath
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  clipPathUnits (userSpace | userSpaceOnUse | objectBoundingBox) "userSpace"
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % maskExt "" >
<!ELEMENT mask (%descTitleDefs;,
                    (path|text|rect|circle|ellipse|line|polyline|polygon|
                     use|image|svg|g|switch|a|
                     animate|set|animateMotion|animateColor|animateTransform
                     %ceExt;%maskExt;)*) >
<!ATTLIST mask
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  maskUnits (userSpace | userSpaceOnUse | objectBoundingBox) "userSpace"
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #IMPLIED
  height %Length; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >


<!--=================== Gradients and Patterns ===================-->

<!ENTITY % linearGradientExt "" >
<!ELEMENT linearGradient (stop|animate|set|animateTransform
                   %linearGradientExt;)* >
<!ATTLIST linearGradient
  %stdAttrs;
  gradientUnits (userSpace | userSpaceOnUse | objectBoundingBox) 'userSpace'
  gradientTransform %TransformList; #IMPLIED
  x1 %Coordinate; #IMPLIED
  y1 %Coordinate; #IMPLIED
  x2 %Coordinate; #IMPLIED
  y2 %Coordinate; #IMPLIED
  spreadMethod (pad | reflect | repeat) "pad"
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED >


<!ENTITY % radialGradientExt "" >
<!ELEMENT radialGradient (stop|animate|set|animateTransform
                   %radialGradientExt;)* >
<!ATTLIST radialGradient
  %stdAttrs;
  gradientUnits (userSpace | userSpaceOnUse | objectBoundingBox) 'userSpace'
  gradientTransform %TransformList; #IMPLIED
  cx %Coordinate; #IMPLIED
  cy %Coordinate; #IMPLIED
  r %Length; #IMPLIED
  fx %Coordinate; #IMPLIED
  fy %Coordinate; #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED >


<!ENTITY % stopExt "" >
<!ELEMENT stop (animate|set|animateColor
                   %stopExt;)* >
<!ATTLIST stop
  %stdAttrs;
  class %ClassList; #IMPLIED
  offset %Length; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-GradientAttrs; >

<!ENTITY % patternExt "" >
<!ELEMENT pattern (%descTitleDefs;,
                    (path|text|rect|circle|ellipse|line|polyline|polygon|
                     use|image|svg|g|switch|a
                     %ceExt;%patternExt;)*) >
<!ATTLIST pattern
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  patternUnits (userSpace | userSpaceOnUse | objectBoundingBox) 'userSpace'
  patternTransform %TransformList; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #REQUIRED
  height %Length; #REQUIRED
  viewBox %ViewBoxSpec; #IMPLIED
  preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet'
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs; >



<!--=================== Linking ===================-->

<!ENTITY % aExt "" >
<!ELEMENT a       (#PCDATA|desc|title|defs|
                   path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|switch|a|
                   tspan|tref|textPath|altGlyph
                   %ceExt;%aExt;)* >
<!ATTLIST a
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  xmlns:xlink CDATA #FIXED "http://www.w3.org/2000/xlink/namespace/"
  xlink:type (simple|extended|locator|arc) #FIXED "simple" 
  xlink:role CDATA #IMPLIED
  xlink:title CDATA #IMPLIED
  xlink:show (new|embed|replace) 'replace'
  xlink:actuate (onRequest|onLoad) #FIXED 'onRequest'
  xlink:href %URI; #REQUIRED
  target %LinkTarget; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % viewExt "" >
<!ELEMENT view (%descTitle;%viewExt;) >
<!ATTLIST view
  %stdAttrs;
  viewBox %ViewBoxSpec; #IMPLIED
  preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet'
  enableZoomAndPanControls (true | false) "true" 
  viewTarget CDATA #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED >


<!--=================== Animation ===================-->

<!ENTITY % animTargetAttrs
 "%xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  attributeName  CDATA  #REQUIRED
  attributeType  CDATA  #IMPLIED" >

<!ENTITY % animTimingAttrs
 "begin CDATA #IMPLIED 
  dur CDATA #IMPLIED
  restart (always | never | whenNotActive) 'always'
  repeatCount CDATA #IMPLIED 
  repeatDur CDATA #IMPLIED
  end CDATA #IMPLIED
  fill (remove | freeze) 'remove'" >

<!ENTITY % animValueAttrs
 "calcMode (discrete | linear | evenPace | spline) 'linear'
  values CDATA #IMPLIED
  from CDATA #IMPLIED
  to CDATA #IMPLIED
  by CDATA #IMPLIED
  keyTimes CDATA #IMPLIED
  keySplines CDATA #IMPLIED" >

<!ENTITY % animAdditionAttrs
 "additive       (replace | sum) 'replace'
  accumulate     (none | sum) 'none'" >

<!ENTITY % animateExt "" >
<!ELEMENT animate (%descTitle;%animateExt;) >
<!ATTLIST animate
  %stdAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %animTargetAttrs;
  %animTimingAttrs;
  %animValueAttrs;
  %animAdditionAttrs; >

<!ENTITY % setExt "" >
<!ELEMENT set (%descTitle;%setExt;) >
<!ATTLIST set
  %stdAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %animTargetAttrs;
  %animTimingAttrs;
  to CDATA #IMPLIED >

<!ENTITY % animateMotionExt "" >
<!ELEMENT animateMotion (%descTitle;%animateMotionExt;) >
<!ATTLIST animateMotion
  %stdAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  %animTimingAttrs;
  %animValueAttrs;
  %animAdditionAttrs;
  path CDATA #IMPLIED
  rotate CDATA #IMPLIED
  origin CDATA #IMPLIED >

<!ENTITY % animateColorExt "" >
<!ELEMENT animateColor (%descTitle;%animateColorExt;) >
<!ATTLIST animateColor
  %stdAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %animTargetAttrs;
  %animTimingAttrs;
  %animValueAttrs;
  %animAdditionAttrs; >

<!ENTITY % animateTransformExt "" >
<!ELEMENT animateTransform (%descTitle;%animateTransformExt;) >
<!ATTLIST animateTransform
  %stdAttrs;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %animTargetAttrs;
  %animTimingAttrs;
  %animValueAttrs;
  %animAdditionAttrs;
  type (translate | scale | rotate | skewX | skewY) "translate" >


<!--========== Defining Scripts and Declaring Styles ==========-->

<!ELEMENT script (#PCDATA) >
<!ATTLIST script
  %stdAttrs;
  type %ContentType; #REQUIRED
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED >


<!-- Define the 'style' element for Stylable SVG.
     This element is not available for Final Form SVG. -->
<![%StylableSVG;[
  <!ELEMENT style (#PCDATA) >
  <!ATTLIST style 
    %stdAttrs;
    type %ContentType; #REQUIRED >
]]>


<!--==== (Final Form SVG Only) Defining color profiles and font faces ====-->

<![%FinalFormSVG;[
  <!ELEMENT color-profile (%descTitle;,color-profile-src) >
  <!ATTLIST color-profile 
    %stdAttrs;
    name CDATA #REQUIRED
    rendering-intent CDATA #IMPLIED >

  <!ELEMENT color-profile-src EMPTY >
  <!ATTLIST color-profile-src 
    %stdAttrs;
    %xlinkRefAttrs;
    xlink:href %URI; #REQUIRED >

  <!ELEMENT font-face (%descTitle;,font-face-src,(definition-src)?) >
  <!ATTLIST font-face 
    %stdAttrs;
    font-family CDATA #IMPLIED
    font-style CDATA #IMPLIED
    font-variant CDATA #IMPLIED
    font-weight CDATA #IMPLIED
    font-stretch CDATA #IMPLIED
    font-size CDATA #IMPLIED
    unicode-range CDATA #IMPLIED
    units-per-em %Number; #IMPLIED
    panose-1 CDATA #IMPLIED
    stemv %Number; #IMPLIED
    stemh %Number; #IMPLIED
    slope %Number; #IMPLIED
    cap-height %Number; #IMPLIED
    x-height %Number; #IMPLIED
    ascent %Number; #IMPLIED
    descent %Number; #IMPLIED
    widths CDATA #IMPLIED
    bbox CDATA #IMPLIED
    baseline %Number; #IMPLIED
    centerline %Number; #IMPLIED
    mathline %Number; #IMPLIED
    topline %Number; #IMPLIED >

  <!ELEMENT font-face-src (font-face-uri|font-face-name)+ >
  <!ATTLIST font-face-src 
    %stdAttrs; >

  <!ELEMENT font-face-uri (font-face-format*) >
  <!ATTLIST font-face-uri 
    %stdAttrs;
    %xlinkRefAttrs;
    xlink:href %URI; #REQUIRED >

  <!ELEMENT font-face-format EMPTY >
  <!ATTLIST font-face-format 
    %stdAttrs;
    string CDATA #IMPLIED >

  <!ELEMENT font-face-name EMPTY >
  <!ATTLIST font-face-name 
    %stdAttrs;
    name CDATA #IMPLIED >

  <!ELEMENT definition-src EMPTY >
  <!ATTLIST definition-src 
    %stdAttrs;
    %xlinkRefAttrs;
    xlink:href %URI; #REQUIRED >
]]>


<!--=================== Custom cursors ===================-->

<!ELEMENT cursor (%descTitle;) >
<!ATTLIST cursor
  %stdAttrs;
  %testAttrs;
  x %Coordinate; "0"
  y %Coordinate; "0"
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  externalResourcesRequired %Boolean; #IMPLIED >


<!--=================== Extensibility ===================-->

<!ENTITY % switchExt "" >
<!ELEMENT switch (%descTitleDefs;,
                  (path|text|rect|circle|ellipse|line|polyline|polygon|
                   use|image|svg|g|switch|a|foreignObject|
                   animate|set|animateMotion|animateColor|animateTransform
                   %ceExt;%switchExt;)*) >
<!ATTLIST switch
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs; >

<!ENTITY % foreignObjectExt "" >
<!ELEMENT foreignObject (#PCDATA %ceExt;%foreignObjectExt;)* >
<!ATTLIST foreignObject
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  %graphicsElementEvents;
  %testAttrs;
  externalResourcesRequired %Boolean; #IMPLIED
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #REQUIRED
  height %Length; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs;
  %StructuredText; >



<!--=================== Metadata ===================-->

<!ENTITY % metadataExt "" >
<!ELEMENT metadata (#PCDATA %metadataExt;)* >
<!ATTLIST metadata
  %stdAttrs; >


<!--============== Filter Effects ==============-->

<!ENTITY % filter_primitive_attributes
  "x %Coordinate; #IMPLIED
   y %Coordinate; #IMPLIED
   width %Length; #IMPLIED
   height %Length; #IMPLIED
   result CDATA #IMPLIED" >

<!ENTITY % filter_primitive_attributes_with_in
  "%filter_primitive_attributes;
   in CDATA #IMPLIED">

<!ENTITY % component_transfer_function_attributes
  "type (identity | table | linear | gamma) #REQUIRED
   tableValues CDATA #IMPLIED
   slope %Number; #IMPLIED
   intercept %Number; #IMPLIED
   amplitude %Number; #IMPLIED
   exponent %Number; #IMPLIED
   offset %Number; #IMPLIED" >

<!ENTITY % filterExt "" >
<!ELEMENT filter (feBlend|feFlood|
  feColorMatrix|feComponentTransfer|
  feComposite|feConvolveMatrix|feDiffuseLighting|feDisplacementMap|
  feGaussianBlur|feImage|feMerge|
  feMorphology|feOffset|feSpecularLighting|
  feTile|feTurbulence|
  animate|set
  %filterExt;)* >
<!ATTLIST filter
  %stdAttrs;
  %langSpaceAttrs;
  filterUnits (userSpace | userSpaceOnUse | objectBoundingBox) "userSpace"
  x %Coordinate; #IMPLIED
  y %Coordinate; #IMPLIED
  width %Length; #IMPLIED
  height %Length; #IMPLIED
  filterRes CDATA #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED >

<!ELEMENT feBlend (animate|set)* >
<!ATTLIST feBlend
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  mode (normal | multiply | screen | darken | lighten) "normal"
  in2 CDATA #REQUIRED >

<!ELEMENT feColorMatrix (animate|set)* >
<!ATTLIST feColorMatrix
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  type (matrix | saturate | hueRotate | luminanceToAlpha) "matrix"
  values CDATA #IMPLIED >

<!ELEMENT feComponentTransfer (feFuncR?,feFuncG?,feFuncB?,feFuncA?) >
<!ATTLIST feComponentTransfer
  %stdAttrs;
  %filter_primitive_attributes_with_in; >

<!ELEMENT feFuncR (animate|set)* >
<!ATTLIST feFuncR
  %stdAttrs;
  %component_transfer_function_attributes; >

<!ELEMENT feFuncG (animate|set)* >
<!ATTLIST feFuncG
  %stdAttrs;
  %component_transfer_function_attributes; >

<!ELEMENT feFuncB (animate|set)* >
<!ATTLIST feFuncB
  %stdAttrs;
  %component_transfer_function_attributes; >

<!ELEMENT feFuncA (animate|set)* >
<!ATTLIST feFuncA
  %stdAttrs;
  %component_transfer_function_attributes; >

<!ELEMENT feComposite (animate|set)* >
<!ATTLIST feComposite
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  operator (over | in | out | atop | xor | arithmetic) "over"
  k1 %Integer; #IMPLIED
  k2 %Integer; #IMPLIED
  k3 %Integer; #IMPLIED
  k4 %Integer; #IMPLIED
  in2 CDATA #REQUIRED >

<!ELEMENT feConvolveMatrix (animate|set)* >
<!ATTLIST feConvolveMatrix
  %filter_primitive_attributes_with_in;
  order CDATA #REQUIRED
  kernelMatrix CDATA #REQUIRED
  divisor %Number; #IMPLIED
  targetX %Integer; #IMPLIED
  targetY %Integer; #IMPLIED
  edgeMode (duplicate|wrap|none) "duplicate" 
  kernelUnitLength CDATA #IMPLIED >

<!ELEMENT feDiffuseLighting ((feDistantLight|fePointLight|feSpotLight),(animate|set|animateColor)*) >
<!ATTLIST feDiffuseLighting
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  resultScale %Number; #IMPLIED
  surfaceScale %Number; #IMPLIED
  diffuseConstant %Number; #IMPLIED
  lightColor %SVGColor; #IMPLIED >

<!ELEMENT feDistantLight (animate|set)* >
<!ATTLIST feDistantLight
  %stdAttrs;
  azimuth %Number; #IMPLIED
  elevation %Number; #IMPLIED >

<!ELEMENT fePointLight (animate|set)* >
<!ATTLIST fePointLight
  %stdAttrs;
  x %Number; #IMPLIED
  y %Number; #IMPLIED
  z %Number; #IMPLIED >

<!ELEMENT feSpotLight (animate|set)* >
<!ATTLIST feSpotLight
  %stdAttrs;
  x %Number; #IMPLIED
  y %Number; #IMPLIED
  z %Number; #IMPLIED
  pointsAtX %Number; #IMPLIED
  pointsAtY %Number; #IMPLIED
  pointsAtZ %Number; #IMPLIED
  specularExponent %Number; #IMPLIED >

<!ELEMENT feDisplacementMap (animate|set)* >
<!ATTLIST feDisplacementMap
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  scale %Number; #IMPLIED
  xChannelSelector (R | G | B | A) "A"
  yChannelSelector (R | G | B | A) "A"
  in2 CDATA #REQUIRED >

<!ELEMENT feFlood (animate|set|animateColor)* >
<!ATTLIST feFlood
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  style %StyleSheet; #IMPLIED
  %FinalFormSVG-feFloodAttrs; >

<!ELEMENT feGaussianBlur (animate|set)* >
<!ATTLIST feGaussianBlur
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  stdDeviation CDATA #IMPLIED >

<!ELEMENT feImage (animate|set|animateTransform)* >
<!ATTLIST feImage
  %stdAttrs;
  %langSpaceAttrs;
  class %ClassList; #IMPLIED
  transform %TransformList; #IMPLIED
  externalResourcesRequired %Boolean; #IMPLIED
  %xlinkRefAttrs;
  xlink:href %URI; #REQUIRED
  %StylableSVG-StyleAttribute;
  %FinalFormSVG-ContainerAttrs;
  %FinalFormSVG-FillStrokeAttrs;
  %FinalFormSVG-GradientAttrs;
  %FinalFormSVG-GraphicsAttrs;
  %FinalFormSVG-MarkerAttrs;
  %FinalFormSVG-TextContainerAttrs;
  %FinalFormSVG-TextElementAttrs;
  %FinalFormSVG-ViewportAttrs;
  %filter_primitive_attributes; >

<!ELEMENT feMerge (feMergeNode)* >
<!ATTLIST feMerge
  %stdAttrs;
  %filter_primitive_attributes; >

<!ELEMENT feMergeNode (animate|set)* >
<!ATTLIST feMergeNode
  %stdAttrs;
  in CDATA #IMPLIED >

<!ELEMENT feMorphology (animate|set)* >
<!ATTLIST feMorphology
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  operator (erode | dilate) "erode"
  radius %Length; #IMPLIED >

<!ELEMENT feOffset (animate|set)* >
<!ATTLIST feOffset
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  dx %Length; #IMPLIED
  dy %Length; #IMPLIED >

<!ELEMENT feSpecularLighting ((feDistantLight|fePointLight|feSpotLight),(animate|set|animateColor)*) >
<!ATTLIST feSpecularLighting
  %stdAttrs;
  %filter_primitive_attributes_with_in;
  surfaceScale %Number; #IMPLIED
  specularConstant %Number; #IMPLIED
  specularExponent %Number; #IMPLIED
  lightColor %SVGColor; #IMPLIED >

<!ELEMENT feTile (animate|set)* >
<!ATTLIST feTile
  %stdAttrs;
  %filter_primitive_attributes_with_in; >

<!ELEMENT feTurbulence (animate|set)* >
<!ATTLIST feTurbulence
  %stdAttrs;
  %filter_primitive_attributes;
  baseFrequency CDATA #IMPLIED
  numOctaves %Integer; #IMPLIED
  seed %Number; #IMPLIED
  stitchTiles (stitch | noStitch) "noStitch"
  type (fractalNoise | turbulence) "turbulence" >

