Appendix C: Document Type Definition

The DTD is also available for download.

<!ENTITY % namespace
  "xmlns CDATA #FIXED 'http://www.w3.org/Graphics/SVG/SVG-19990325'">
  
<!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 % 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 % symbol_descriptor_attributes
  "min-x CDATA #IMPLIED
   min-y CDATA #IMPLIED
   max-x CDATA #IMPLIED
   max-y CDATA #IMPLIED
   ref-x CDATA #IMPLIED
   ref-y 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)*)">

<!ELEMENT svg %g_elements; >
<!ATTLIST svg 
  %namespace;
  %std_g_attrs_t;
  %r_eventhandlers;
  %symbol_descriptor_attributes;
  width CDATA #REQUIRED
  height CDATA #REQUIRED
  allow-zoom-and-pan (true | false) "true" >

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

<!ELEMENT switch %g_elements; >
<!ATTLIST switch 
  %std_g_attrs_t;>

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

<!ELEMENT private ANY >
<!ATTLIST >

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

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

<!ELEMENT use EMPTY >
<!ATTLIST use 
  %std_g_attrs;
  x CDATA #IMPLIED
  y CDATA #IMPLIED
  width CDATA #IMPLIED
  height CDATA #IMPLIED
  %replaced;>

<!ELEMENT marker EMPTY >
<!ATTLIST marker
  %global;
  %replaced;
  width CDATA #IMPLIED
  height CDATA #IMPLIED>

<!ELEMENT image (desc?, title?) >
<!ATTLIST image
  %std_g_attrs_t;
  x CDATA #IMPLIED
  y CDATA #IMPLIED
  %replaced;>

<!ELEMENT text (#PCDATA|src|tf|textpath)* >
<!ATTLIST text
  %std_g_attrs_t;
  x CDATA "0"
  y CDATA "0">

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

<!ELEMENT path (data|marker)* >
<!ATTLIST path
  %std_g_attrs;
  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;
  x CDATA "0"
  y CDATA "0"
  width CDATA #REQUIRED
  height CDATA #REQUIRED>

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

<!ELEMENT ellipse EMPTY >
<!ATTLIST ellipse
  %std_g_attrs;
  cx CDATA "0"
  cy CDATA "0"
  major CDATA #REQUIRED
  minor CDATA #REQUIRED
  angle CDATA "0">

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

<!ELEMENT polygon EMPTY >
<!ATTLIST polygon
  %std_g_attrs;
  sides CDATA "3"
  angle CDATA "0"
  r CDATA #REQUIRED>

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

<!ELEMENT foreignobject (#PCDATA)* >
<!ATTLIST foreignobject
  %std_g_attrs_t;
  width CDATA #REQUIRED
  height CDATA #REQUIRED
  %str_text;>

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

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

<!ENTITY % gradient.attrs
  "target-type CDATA #IMPLIED
   target-left CDATA #IMPLIED
   target-top CDATA #IMPLIED
   target-right CDATA #IMPLIED
   target-bottom CDATA #IMPLIED " >

<!ELEMENT lineargradient (gradientstop)* >
<!ATTLIST lineargradient 
  id ID #IMPLIED
  vector-start-x CDATA #IMPLIED
  vector-start-y CDATA #IMPLIED
  vector-length CDATA #IMPLIED
  vector-angle CDATA #IMPLIED
  spread-method CDATA #IMPLIED
  %gradient.attrs;>

<!ELEMENT radialgradient (gradientstop)* >
<!ATTLIST radialgradient 
   id ID #IMPLIED
   innermost-x CDATA #IMPLIED
   innermost-y CDATA #IMPLIED
   outermost-x CDATA #IMPLIED
   outermost-y CDATA #IMPLIED
   outermost-radius CDATA #IMPLIED
   matrix CDATA #IMPLIED
   %gradient.attrs;>

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

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

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

<!ELEMENT textflow (t|text)* >
<!ATTLIST textflow 
  %std_g_attrs_t;
  %str_text;>

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

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

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