Appendix C: Document Type Definition

The DTD is also available for download.

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

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

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

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

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

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

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

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

<!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 % 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 % dxdy_attributes
  "dx CDATA '0'
   dy CDATA '0'">

<!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 % ref_xy_attributes
  "ref-x CDATA #IMPLIED
   ref-y CDATA #IMPLIED">

<!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|text|path|%shapes;|g|switch|svg|a)*)">

<!ENTITY % g_elements_and_foreignobject
  "(defs?,title?,desc?,(use|image|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;
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %r_eventhandlers;
  %transform_attributes;
  %bbox_attributes_wh_required;
  %ref_xy_attributes;
  %fit_attributes;
  allow-zoom-and-pan (true | false) "true" >

<!ELEMENT g %g_elements; >
<!ATTLIST g
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %transform_attributes;>

<!ELEMENT switch %g_elements_and_foreignobject; >
<!ATTLIST switch
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %transform_attributes;>


<!ELEMENT path (data)* >
<!ATTLIST path
  %class_id_lang;
  %system_required;
  %g_eventhandlers;
  %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
  %class_id_lang;
  %system_required;
  %g_eventhandlers;
  %transform_attributes;
  %bbox_attributes_wh_required;
  rx CDATA "#IMPLIED"
  ry CDATA "#IMPLIED">

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

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

<!ELEMENT polyline EMPTY >
<!ATTLIST polyline
  %class_id_lang;
  %system_required;
  %g_eventhandlers;
  %transform_attributes;
  points CDATA #REQUIRED>

<!ELEMENT polygon EMPTY >
<!ATTLIST polygon
  %class_id_lang;
  %system_required;
  %g_eventhandlers;
  %transform_attributes;
  points CDATA #REQUIRED>

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

<!ELEMENT text (#PCDATA|tspan|textpath)* >
<!ATTLIST text
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %transform_attributes;
  %xy_attributes;>

<!ELEMENT textpath (#PCDATA|tspan)* >
<!ATTLIST textpath
  start-offset CDATA "0"
  %replaced;>

<!ELEMENT tspan (#PCDATA)* >
<!ATTLIST tspan
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %xy_attributes;
  %dxdy_attributes;
  %replaced;>

<!ELEMENT use (desc?, title?) >
<!ATTLIST use
  %class_id_lang;
  %system_required;
  %g_eventhandlers;
  %transform_attributes;
  %bbox_attributes_optional;
  %replaced;>

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

<!ELEMENT foreignobject (#PCDATA)* >
<!ATTLIST foreignobject
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %transform_attributes;
  %bbox_attributes_wh_required;
  %structured_text; >

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

<!ELEMENT desc (#PCDATA)* >
<!ATTLIST desc
  %class_id_lang_style;
  %system_required;
  %g_eventhandlers;
  %xmlspace;
  %structured_text;>

<!ELEMENT title (#PCDATA)* >
<!ATTLIST title
  %class_id_lang_style;
  %xmlspace;
  %structured_text;>

<!ELEMENT defs (path|use|image|text|%shapes;|g|switch|svg|
  script|style|
  symbol|marker|
  lineargradient|radialgradient|pattern|
  clippath|mask|filter)* >
<!ATTLIST defs
  %class_id_lang_style;
  %xmlspace;>

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

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

<!ELEMENT symbol %g_elements; >
<!ATTLIST symbol
  %class_id_lang_style;
  %xmlspace;
  %bbox_attributes_optional;
  %ref_xy_attributes;
  %fit_attributes;>

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

<!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
  %class_id_lang_style;
  %xmlspace;
  %bbox_attributes_wh_required;
  %ref_xy_attributes;
  %fit_attributes;
  pattern-units (userspace | object-bbox) "userspace"
  pattern-transform CDATA #IMPLIED>

<!ELEMENT clippath (path|text|%shapes;|use)* >
<!ATTLIST clippath
  %class_id_lang_style;
  %xmlspace;>

<!ELEMENT mask %g_elements; >
<!ATTLIST mask
  %class_id_lang_style;
  %xmlspace;
  mask-units (userspace | object-bbox) "userspace"
  %bbox_attributes_optional;>

<!ELEMENT filter (feBlend|feColor|
  feColorMatrix|feComponentTransfer|
  feComposite|feDiffuseLighting|feDisplacementMap|
  feGaussianBlur|feImage|feMerge|
  feMorphology|feOffset|feSpecularLighting|
  feTile|feTurbulence)* >
<!ATTLIST filter
  %class_id_lang;
  filter-units (userspace | object-bbox) "userspace"
  %bbox_attributes_optional;
  filter-res CDATA #IMPLIED>

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

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

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

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

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

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

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

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

<!ELEMENT feComposite EMPTY >
<!ATTLIST feComposite
  %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 feDiffuseLighting (feDistantLight|fePointLight|feSpotLight) >
<!ATTLIST feDiffuseLighting
  %filter_node_attributes;
  result-scale CDATA #IMPLIED
  surface-scale CDATA #IMPLIED
  diffuse-constant CDATA #IMPLIED
  light-color CDATA #IMPLIED>

<!ELEMENT feDistantLight EMPTY >
<!ATTLIST feDistantLight
  azimuth CDATA #IMPLIED
  elevation CDATA #IMPLIED>

<!ELEMENT fePointLight EMPTY >
<!ATTLIST fePointLight
  x CDATA #IMPLIED
  y CDATA #IMPLIED
  z CDATA #IMPLIED>

<!ELEMENT feSpotLight EMPTY >
<!ATTLIST feSpotLight
  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 feDisplacementMap EMPTY >
<!ATTLIST feEDisplacementMap
  %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 feGaussianBlur EMPTY >
<!ATTLIST feGaussianBlur
  %filter_node_attributes;
  std-deviation CDATA #IMPLIED>

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

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

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

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

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

<!ELEMENT feSpecularLighting (feDistantLight|fePointLight|feSpotLight) >
<!ATTLIST feSpecularLighting
  %filter_node_attributes;
  surface-scale CDATA #IMPLIED
  specular-constant CDATA #IMPLIED
  specular-exponent CDATA #IMPLIED
  light-color CDATA #IMPLIED>

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

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