Appendix C: Document Type Definition

The DTD is also available for download.

<!ENTITY % namespace
  "xmlns CDATA #FIXED 'http://www.w3.org/Graphics/SVG/SVG-19990625'">

<!ENTITY % class
  "class NMTOKENS #IMPLIED">

<!ENTITY % id
  "id ID #IMPLIED">

<!ENTITY % lang
  "xml:lang NMTOKEN #IMPLIED">

<!ENTITY % style
  "style CDATA #IMPLIED">

<!ENTITY % global
  "%class;
   %id;
   %style;">

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

<!ENTITY % global_t
  "%class;
  %id;
  %lang;
  %style;">

<!ENTITY % xmlspace
  "xml:space (default|preserve) #IMPLIED">

<!ENTITY % g_eventhandlers
  "onmousedown CDATA #IMPLIED
   onmouseup CDATA #IMPLIED
   onclick CDATA #IMPLIED
   ondblclick CDATA #IMPLIED
   onmouseover CDATA #IMPLIED
   onmousemove CDATA #IMPLIED
   onmouseout CDATA #IMPLIED
   onkeydown CDATA #IMPLIED
   onkeypress CDATA #IMPLIED
   onkeyup CDATA #IMPLIED
   onload CDATA #IMPLIED
   onselect CDATA #IMPLIED">

<!ENTITY % r_eventhandlers
  "onunload CDATA #IMPLIED
   onzoom CDATA #IMPLIED ">

<!ENTITY % system_required
  "system-required CDATA #IMPLIED">

<!ENTITY % std_g_attrs
  "%global;
   %system_required;
   %g_eventhandlers;">

<!ENTITY % std_g_attrs_t
  "%global_t;
   %system_required;
   %g_eventhandlers;">

<!ENTITY % replaced
  "xml:link CDATA #FIXED 'simple'
   show CDATA #FIXED 'embed'
   actuate CDATA #FIXED 'auto'
   href CDATA #REQUIRED ">

<!ENTITY % hyperlink
  "xml:link CDATA #FIXED 'simple'
   show CDATA #FIXED 'replace'
   actuate CDATA #FIXED 'user'
   href CDATA #REQUIRED ">

<!ENTITY % xy_attributes
  "x CDATA #IMPLIED
   y CDATA #IMPLIED">

<!ENTITY % bbox_attributes_optional
  "%xy_attributes;
   width CDATA #IMPLIED
   height CDATA #IMPLIED">

<!ENTITY % bbox_attributes_wh_required
  "%xy_attributes;
   width CDATA #REQUIRED
   height CDATA #REQUIRED">

<!ENTITY % symbol_ref_attributes
  "ref-x CDATA #IMPLIED
   ref-y CDATA #IMPLIED">

<!ENTITY % symbol_descriptor_attributes
  "%bbox_attributes_optional;
   %symbol_ref_attributes;">

<!ENTITY % fit_attributes
  "fit-box-to-viewport CDATA #IMPLIED
   preserve-aspect-ratio CDATA 'xmid-ymid meet'">

<!ENTITY % transform_attributes
  "transform CDATA #IMPLIED">

<!ENTITY % shapes
  "rect|circle|ellipse|polyline|polygon|line">

<!ENTITY % g_elements
  "(defs?,title?,desc?,(use|image|textblock|text|path|%shapes;|g|switch|svg|a)*)">

<!ENTITY % g_elements_and_foreignobject
  "(defs?,title?,desc?,(use|image|textblock|text|path|%shapes;|g|switch|svg|a|foreignobject)*)">

<!ENTITY % filter_node_attributes
  "in CDATA #IMPLIED
  nodeid CDATA #IMPLIED">

<!ENTITY % component_transfer_function_attributes
  "type CDATA #REQUIRED
  table-values CDATA #IMPLIED
  slope CDATA #IMPLIED
  intercept CDATA #IMPLIED
  amplitude CDATA #IMPLIED
  exponent CDATA #IMPLIED
  offset CDATA #IMPLIED">

<!ELEMENT svg %g_elements; >
<!ATTLIST svg
  %namespace;
  %std_g_attrs_t;
  %xmlspace;
  %r_eventhandlers;
  %transform_attributes;
  %bbox_attributes_wh_required;
  %symbol_ref_attributes;
  %fit_attributes;
  allow-zoom-and-pan (true | false) "true" >

<!ELEMENT g %g_elements; >
<!ATTLIST g
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;>

<!ELEMENT switch %g_elements_and_foreignobject; >
<!ATTLIST switch
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;>

<!ELEMENT defs (script|style|lineargradient|radialgradient|
  symbol|image|textblock|text|textflow|path|%shapes;)* >

<!ATTLIST defs
  %global_t;
  %xmlspace;>

<!ELEMENT title (#PCDATA)* >
<!ATTLIST title
  %global_t;
  %xmlspace;
  %str_text;>

<!ELEMENT desc (#PCDATA)* >
<!ATTLIST desc
  %std_g_attrs_t;
  %xmlspace;
  %str_text;>

<!ELEMENT use EMPTY >
<!ATTLIST use
  %std_g_attrs;
  %transform_attributes;
  %bbox_attributes_optional;
  %replaced;>

<!ELEMENT marker %g_elements; >
<!ATTLIST marker
  %global_t;
  %xmlspace;
  %symbol_descriptor_attributes;
  %fit_attributes;
  marker-units (stroke-width | userspace) "stroke-width"
  marker-width  CDATA "3"
  marker-height CDATA "3"
  orient CDATA "0">

<!ELEMENT image (desc?, title?) >
<!ATTLIST image
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;
  %bbox_attributes_wh_required;
  %replaced;>

<!ELEMENT text (#PCDATA|textsrc|textpath)* >
<!ATTLIST text
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;
  %xy_attributes;>

<!ELEMENT textpath EMPTY >
<!ATTLIST textpath
  start-offset CDATA "0"
  %replaced;>

<!ELEMENT path (data)* >
<!ATTLIST path
  %std_g_attrs;
  %transform_attributes;
  d CDATA #REQUIRED
  flatness CDATA #IMPLIED
  nominal-length CDATA #IMPLIED>

<!ELEMENT data EMPTY >
<!ATTLIST data
  d CDATA #REQUIRED >

<!ELEMENT rect EMPTY >
<!ATTLIST rect
  %std_g_attrs;
  %transform_attributes;
  %bbox_attributes_wh_required;
  rx CDATA "0"
  ry CDATA "0">

<!ELEMENT circle EMPTY >
<!ATTLIST circle
  %std_g_attrs;
  %transform_attributes;
  cx CDATA "0"
  cy CDATA "0"
  r CDATA #REQUIRED>

<!ELEMENT ellipse EMPTY >
<!ATTLIST ellipse
  %std_g_attrs;
  %transform_attributes;
  cx CDATA "0"
  cy CDATA "0"
  rx CDATA #REQUIRED
  ry CDATA #REQUIRED>

<!ELEMENT polyline EMPTY >
<!ATTLIST polyline
  %std_g_attrs;
  %transform_attributes;
  points CDATA #REQUIRED>

<!ELEMENT polygon EMPTY >
<!ATTLIST polygon
  %std_g_attrs;
  %transform_attributes;
  points CDATA #REQUIRED>

<!ELEMENT line EMPTY >
<!ATTLIST line
  %std_g_attrs;
  %transform_attributes;
  x1 CDATA "0"
  x2 CDATA "0"
  y1 CDATA "0"
  y2 CDATA "0">

<!ELEMENT foreignobject (#PCDATA)* >
<!ATTLIST foreignobject
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;
  %bbox_attributes_wh_required;
  %str_text; >

<!ELEMENT script (#PCDATA)* >
<!ATTLIST script
  language CDATA "text/ecmascript"
  %replaced; >

<!ELEMENT style (#PCDATA)* >
<!ATTLIST style type CDATA #FIXED "text/css">

<!ENTITY % gradient.attrs
  "gradient-units (userspace | object-bbox) 'userspace'
   gradient-transform CDATA #IMPLIED" >

<!ELEMENT lineargradient (stop)* >
<!ATTLIST lineargradient
  id ID #IMPLIED
  %gradient.attrs;
  x1 CDATA #IMPLIED
  y1 CDATA #IMPLIED
  x2 CDATA #IMPLIED
  y2 CDATA #IMPLIED
  spread-method (stick | reflect | repeat) "stick">

<!ELEMENT radialgradient (stop)* >
<!ATTLIST radialgradient
  id ID #IMPLIED
  %gradient.attrs;
  cx CDATA #IMPLIED
  cy CDATA #IMPLIED
  r CDATA #IMPLIED
  fx CDATA #IMPLIED
  fy CDATA #IMPLIED>

<!ELEMENT stop EMPTY >
<!ATTLIST stop
  %style;
  id ID #IMPLIED
  offset CDATA #REQUIRED>

<!ELEMENT pattern %g_elements; >
<!ATTLIST pattern
  %global_t;
  %xmlspace;
  %symbol_descriptor_attributes;
  %fit_attributes;
  pattern-units (userspace | object-bbox) "userspace"
  %bbox_attributes_wh_required;
  pattern-transform CDATA #IMPLIED>

<!ELEMENT symbol %g_elements; >
<!ATTLIST symbol
  %global_t;
  %xmlspace;
  %symbol_descriptor_attributes;
  %fit_attributes;>

<!ELEMENT textsrc EMPTY >
<!ATTLIST textsrc
  %replaced;>

<!ELEMENT textblock (text)* >
<!ATTLIST textblock
  %std_g_attrs_t;
  %xmlspace;
  %transform_attributes;>

<!ELEMENT textflow (tref)* >
<!ATTLIST textflow
  id ID #IMPLIED>

<!ELEMENT tref EMPTY >
<!ATTLIST tref
  %replaced;>

<!ELEMENT a %g_elements; >
<!ATTLIST a
  %hyperlink;>

<!ELEMENT filter (ColorMatrix|ComponentTransfer|REBlend|REColor|
  REComposite|REDiffuseLighting|REDisplacementMap|
  REGaussianBlur|REImage|REMerge|
  REMorphology|REOffset|RESpecularLighting|
  RETile|RETurbulence|
  VEAdjustGraphics|VEPathTurbulence)* >
<!ATTLIST filter
  %global;
  filter-units (userspace | object-bbox) "userspace"
  %bbox_attributes_optional;
  filter-res CDATA #IMPLIED>

<!ELEMENT ColorMatrix EMPTY >
<!ATTLIST ColorMatrix
  %filter_node_attributes;
  type CDATA #REQUIRED
  values CDATA #IMPLIED>

<!ELEMENT ComponentTransfer (Fr|Fg|Fb|Fa) >
<!ATTLIST ComponentTransfer
  %filter_node_attributes;>

<!ELEMENT Fr EMPTY >
<!ATTLIST Fr
  %component_transfer_function_attributes;>

<!ELEMENT Fg EMPTY >
<!ATTLIST Fg
  %component_transfer_function_attributes;>

<!ELEMENT Fb EMPTY >
<!ATTLIST Fb
  %component_transfer_function_attributes;>

<!ELEMENT Fa EMPTY >
<!ATTLIST Fa
  %component_transfer_function_attributes;>

<!ELEMENT REBlend EMPTY >
<!ATTLIST REBlend
  %filter_node_attributes;
  mode (normal | multiple | screen | darken | lighten) "normal"
  in2 CDATA #REQUIRED>

<!ELEMENT REColor EMPTY >
<!ATTLIST REColor
  %filter_node_attributes;
  color CDATA #IMPLIED>

<!ELEMENT REComposite EMPTY >
<!ATTLIST REComposite
  %filter_node_attributes;
  operator (over | in | out | atop | xor | arithmetic) "over"
  k1 CDATA #IMPLIED
  k2 CDATA #IMPLIED
  k3 CDATA #IMPLIED
  k4 CDATA #IMPLIED
  in2 CDATA #REQUIRED>

<!ELEMENT REDiffuseLighting (distant-light|point-light|spot-light) >
<!ATTLIST REDiffuseLighting
  %filter_node_attributes;
  result-scale CDATA #IMPLIED
  surface-scale CDATA #IMPLIED
  diffuse-constant CDATA #IMPLIED
  light-color CDATA #IMPLIED>

<!ELEMENT RESpecularLighting (distant-light|point-light|spot-light) >
<!ATTLIST RESpecularLighting
  %filter_node_attributes;
  surface-scale CDATA #IMPLIED
  specular-constant CDATA #IMPLIED
  specular-exponent CDATA #IMPLIED
  light-color CDATA #IMPLIED>

<!ELEMENT distant-light EMPTY >
<!ATTLIST distant-light
  azimuth CDATA #IMPLIED
  elevation CDATA #IMPLIED>

<!ELEMENT point-light EMPTY >
<!ATTLIST point-light
  x CDATA #IMPLIED
  y CDATA #IMPLIED
  z CDATA #IMPLIED>

<!ELEMENT spot-light EMPTY >
<!ATTLIST spot-light
  x CDATA #IMPLIED
  y CDATA #IMPLIED
  z CDATA #IMPLIED
  points-at-x CDATA #IMPLIED
  points-at-y CDATA #IMPLIED
  points-at-z CDATA #IMPLIED
  specular-exponent CDATA #IMPLIED>

<!ELEMENT REDisplacementMap EMPTY >
<!ATTLIST REDisplacementMap
  %filter_node_attributes;
  scale CDATA #IMPLIED
  x-channel-selector (R | G | B | A) "A"
  y-channel-selector (R | G | B | A) "A"
  in2 CDATA #REQUIRED>

<!ELEMENT REGaussianBlur EMPTY >
<!ATTLIST REGaussianBlur
  %filter_node_attributes;
  std-deviation CDATA #IMPLIED>

<!ELEMENT REImage EMPTY >
<!ATTLIST REImage
  nodeid CDATA #IMPLIED
  %replaced;
  %transform_attributes;>

<!ELEMENT REMerge (REMergeNode)* >
<!ATTLIST REMerge
  %filter_node_attributes;>

<!ELEMENT REMergeNode EMPTY >
<!ATTLIST REMergeNode
  in CDATA #IMPLIED>

<!ELEMENT REMorphology EMPTY >
<!ATTLIST REMorphology
  %filter_node_attributes;
  operator (erode | dilate) "erode"
  radius CDATA #IMPLIED>

<!ELEMENT REOffset EMPTY >
<!ATTLIST REOffset
  %filter_node_attributes;
  dx CDATA #IMPLIED
  dy CDATA #IMPLIED>

<!ELEMENT RETile EMPTY >
<!ATTLIST RETile
  %filter_node_attributes;>

<!ELEMENT RETurbulence EMPTY >
<!ATTLIST RETurbulence
  %filter_node_attributes;
  base-frequency CDATA #IMPLIED
  num-octaves CDATA #IMPLIED
  type (fractal-noise | turbulence) "turbulence">

<!ELEMENT VEAdjustGraphics EMPTY >
<!ATTLIST VEAdjustGraphics
  %filter_node_attributes;
  transform CDATA #IMPLIED
  style CDATA #IMPLIED>

<!ELEMENT VEPathTurbulence EMPTY >
<!ATTLIST VEPathTurbulence
  %filter_node_attributes;
  base-frequency CDATA #IMPLIED
  num-octaves CDATA #IMPLIED>