previous next contents properties index

# Appendix A: DTDs

### Contents

This appendix is normative.

## A.1 Overview

There are two Document Type Definitions (DTDs) for Scalable Vector Graphics (SVG) corresponding, respectively, to Stylable SVG and Exchange SVG. Each of these DTDs is based on a shared DTD which defines the common elements, attributes and entities.

For explanations of the appropriate uses of these two language versions, refer to Stylable SVG vs. Exchange SVG.

The sections below contain the shared DTD, the DTD for Stylable SVG and the DTD for Exchange SVG.

## A.2 Common definitions

The definitions of elements, attributes and entities that are common to both the DTD for Stylable SVG and the DTD for Exchange SVG are defined in this section. These definitions are also available for download.

    <!--
      This is the Shared DTD for SVG 1.0 (draft 20000303). It contains the
      element, attribute and entities definitions which are common to the
      DTD for Stylable SVG and the DTD for Exchange 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 Exchange SVG.
      The Shared DTD should not be used directly; instead, use either the
      DTD for Stylable SVG or the DTD for Exchange SVG.

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

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

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

      For this working draft:

        Namespaces:
          Stylable SVG:     http://www.w3.org/2000/svg-20000303-stylable
          Exchange SVG:   http://www.w3.org/2000/svg-20000303-exchange

        Public identifiers:
          PUBLIC "-//W3C//DTD SVG 20000303 Shared//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Exchange//EN"

        URIs for the DTDs:
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-shared.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-exchange.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 [URI] -->

    <!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 Exchange SVG. -->
    <![%ExchangeSVG;[
      <!-- For Exchange 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 Exchange SVG -->

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

      <!-- For Exchange SVG only, attributes on elements that can be filled or stroked. -->
      <!ENTITY % ExchangeSVG-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 Exchange SVG only, all gradient elements have these attributes. -->
      <!ENTITY % ExchangeSVG-GradientAttrs
        "stop-color %StopColorValue; #IMPLIED
         stop-opacity %OpacityValue; #IMPLIED " >

      <!-- For Exchange SVG only, all graphics elements have these attributes. -->
      <!ENTITY % ExchangeSVG-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 Exchange SVG only, container elements and certain graphics elements have these attributes. -->
      <!ENTITY % ExchangeSVG-MarkerAttrs
        "marker-start %MarkerValue; #IMPLIED
         marker-mid %MarkerValue; #IMPLIED
         marker-end %MarkerValue; #IMPLIED " >

      <!-- For Exchange SVG only, all text container elements have these attributes. -->
      <!ENTITY % ExchangeSVG-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 Exchange SVG only, the 'text' element has these attributes. -->
      <!ENTITY % ExchangeSVG-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 Exchange SVG only, all elements that establish viewports have these attributes. -->
      <!ENTITY % ExchangeSVG-ViewportAttrs
        "clip %ClipValue; #IMPLIED
         overflow (visible | hidden | scroll | auto | inherit) #IMPLIED " >

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

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

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

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

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

    <!-- These elements are not available for Stylable SVG. -->
    <![%StylableSVG;[
      <!ENTITY % ExchangeSVG-ColorProfileElement "" >
      <!ENTITY % ExchangeSVG-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;
                       %ExchangeSVG-ColorProfileElement;%ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
                       %ExchangeSVG-ColorProfileElement;%ExchangeSVG-FontFaceElement;
                       %ceExt;%gExt;)*) >
    <!ATTLIST g
      %stdAttrs;
      %langSpaceAttrs;
      class %ClassList; #IMPLIED
      transform %TransformList; #IMPLIED
      %graphicsElementEvents;
      %testAttrs;
      externalResourcesRequired %Boolean; #IMPLIED
      %StylableSVG-StyleAttribute;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
                       %ExchangeSVG-ColorProfileElement;%ExchangeSVG-FontFaceElement;
                       %ceExt;%defsExt;)* >
    <!ATTLIST defs
      %stdAttrs;
      %langSpaceAttrs;
      class %ClassList; #IMPLIED
      transform %TransformList; #IMPLIED
      %testAttrs;
      externalResourcesRequired %Boolean; #IMPLIED
      %StylableSVG-StyleAttribute;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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 Exchange SVG. -->
    <![%StylableSVG;[
      <!ELEMENT style (#PCDATA) >
      <!ATTLIST style
        %stdAttrs;
        type %ContentType; #REQUIRED >
    ]]>

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

    <![%ExchangeSVG;[
      <!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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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
      %ExchangeSVG-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;
      %ExchangeSVG-ContainerAttrs;
      %ExchangeSVG-FillStrokeAttrs;
      %ExchangeSVG-GradientAttrs;
      %ExchangeSVG-GraphicsAttrs;
      %ExchangeSVG-MarkerAttrs;
      %ExchangeSVG-TextContainerAttrs;
      %ExchangeSVG-TextElementAttrs;
      %ExchangeSVG-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" >

## A.3 DTD for Stylable SVG

The DTD for Stylable SVG is also available for download.

    <!--
      This is the DTD for Stylable SVG. It adds a small number of
      elements and attributes to the Shared DTD for the purposes
      of allowing SVG content to be styled.

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

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

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

      For this working draft:

        Namespaces:
          Stylable SVG:     http://www.w3.org/2000/svg-20000303-stylable
          Exchange SVG:   http://www.w3.org/2000/svg-20000303-exchange

        Public identifiers:
          PUBLIC "-//W3C//DTD SVG 20000303 Shared//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Exchange//EN"

        URIs for the DTDs:
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-shared.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-exchange.dtd

      Typical usage in the case of stand-alone Stylable SVG documents:

    <?xml version="1.0" ... ?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
      "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">
    <svg ...>
     ...
    </svg>

      Typical usage when Stylable SVG is embedded inline within a parent XML document:

    <?xml version="1.0" ... ?>
    <!DOCTYPE foo ... >
    <foo ...>
     ...
     <svg xmlns="http://www.w3.org/2000/svg-20000303-stylable" ... >
        ...
     </svg>
     ...
    </foo>
    -->

    <!ENTITY % StylableSVG "INCLUDE" >
    <!ENTITY % ExchangeSVG "IGNORE" >
    <!ENTITY % SVGNamespace "http://www.w3.org/2000/svg-20000303-stylable" >
    <!ENTITY % Shared PUBLIC "-//W3C//DTD SVG 20000303 Shared//EN" "svg-20000303-shared.dtd" >
    %Shared;

## A.4 DTD for Exchange SVG

The DTD for Exchange SVG is also available for download.

    <!--
      This is the DTD for Exchange SVG. It adds various visual rendering attributes
      to the Shared DTD.

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

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

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

      For this working draft:

        Namespaces:
          Stylable SVG:     http://www.w3.org/2000/svg-20000303-stylable
          Exchange SVG:   http://www.w3.org/2000/svg-20000303-exchange

        Public identifiers:
          PUBLIC "-//W3C//DTD SVG 20000303 Shared//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN"
          PUBLIC "-//W3C//DTD SVG 20000303 Exchange//EN"

        URIs for the DTDs:
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-shared.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd
          http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-exchange.dtd

      Typical usage in the case of stand-alone Exchange SVG documents:

    <?xml version="1.0" ... ?>
    <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Exchange//EN"
      "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-exchange.dtd">
    <svg ...>
     ...
    </svg>

      Typical usage when Exchange SVG is embedded inline within a parent XML document:

    <?xml version="1.0" ... ?>
    <!DOCTYPE foo ... >
    <foo ...>
     ...
     <svg xmlns="http://www.w3.org/2000/svg-20000303-exchange" ... >
        ...
     </svg>
     ...
    </foo>
    -->

    <!ENTITY % StylableSVG "IGNORE" >
    <!ENTITY % ExchangeSVG "INCLUDE" >
    <!ENTITY % SVGNamespace "http://www.w3.org/2000/svg-20000303-exchange" >
    <!ENTITY % Shared PUBLIC "-//W3C//DTD SVG 20000303 Shared//EN" "svg-20000303-shared.dtd" >
    %Shared;

previous next contents properties index