previous contents properties index

# Appendix L: Change History

## Changes with the 03-March-2000 SVG Draft Specification

- Global/miscellaneous changes
  - With this public draft, there are now two variants of SVG: Stylable SVG (rendering properties assigned via a style sheet language) and Exchange SVG (rendering properties assigned via XML attributes). The differences between the two are described in Stylable SVG and Exchange SVG.
  - Moved the Error Processing section out of the Introduction chapter into the Implementation Requirements appendix. This is purely an organizational change with no impact on the language or how it is implemented.
  - Removed all old change history. These can be reviewed by looking at older versions of the specification. Only changes since the initial Last Call document of August 12, 1999 are provided.
  - Changed actuate='user|auto' to actuate='onRequest|onLoad' per the most recent XLink draft.
  - DOM: Major cleanup of the DOM interfaces. Sections that had been incompletely documented now have complete documentation. Included definitions of interfaces missing from previous specifications, such as interfaces corresponding to the filter effects elements.
  - DOM: Added three new appendices for the DOM's IDL definitions, its Java bindings and its ECMA Script bindings.
  - DOM: Per feedback from the DOM working group, changed all constants to be prefixed by "SVG_" rather than "kSVG_".
  - DOM: Changed any names that had the string 'Icc' or 'Rgb' to 'ICC' or 'RGB' to achieve a more consistent capitalization strategy across the SVG DOM.
  - DOM: Modularized the DOM interface definitions to define separate interfaces for commonly used collections of attributes, and then redefine the various element definitions such that the element is defined to support the appropriate mini-interfaces rather than having each element expand the associated properties and methods inline:
    - SVGLangSpace, corresponding to 'xml:lang' and 'xml:space'
    - SVGTests, corresponding to 'system-required' and 'system-language'
    - SVGTransformable, corresponding to 'transform'
    - SVGURIReference, corresponding to 'href' and the other associated XLink attributes
    - SVGFitToViewBox, corresponding to all elements that have attributes 'viewBox' and 'preserveAspectRatio'
    - SVGList, which is a general purpose interface for maintaining an ordered list of children.
    Note that part of the clean-up was adding SVGTests to the DOM interfaces corresponding to elements which have attributes system-required and system-language.
  - DOM: Changed all interfaces that correspond to SVG elements (e.g, 'path') which can take on event attributes (e.g., onclick) so that the DOM interfaces for the elements now explicitly implement EventTarget.
- Changes to Introduction
  - Changed the name of section 1.2 to "SVG MIME type, file name extension and Macintosh file type" and recommended that SVG files on all platforms have extension ".svg" and that the Mac file type is "svg " (space as fourth letter).
- Changes to Basic Data Types and Interfaces
  - DOM: Added exception SVG_WRONG_TYPE_ERR to some of the interfaces for the case where an invalid unit type was specified.
  - DOM: Explicitly defined the DOMException values raised for various methods.
  - DOM: Provided a more complete description of UNKNOWN and UNSPECIFIED values.
  - DOM: Removed the NUMBER value type for SVGInteger as it is the same as UNSPECIFIED.
  - DOM: For SVGLengthList, made method initialize() return the passed in parameter to make it consistent with the other methods.
  - DOM: For SVGAngle, changed attribute 'unittype' to 'unitType' and "angleInSpecifiedUnits", etc. to "valueInSpecifiedUnits", etc. to make consistent with rest of the SVG DOM.
  - DOM: Added generic base class SVGUnitTypes, which is shared by all elements which have an attribute with possible values userSpace, userSpaceOnUse and objectBoundingBox.
- Changes to Styling
  - Defined explicitly which CSS2 pseudo elements are supported: :hover, :active, :focus, :first-child, :visited, :link and :lang.
  - Reworded the description of cascading and inheritance rules to be more explicit about SVG's compatibility with CSS2. Copied a couple of sentences out of the CSS2 specification and included links to the CSS2 sections on inheritance, specified and computed values.
  - DOM: Added definitions of CSSColorProfileRule and SVGCSSRule to provide a suitable DOM interface for @color-profile.
  - DOM: Various additions and modifications to exception definitions.
  - Moved discussion of aural properties from accessibility appendix into this chapter.
  - Added 'use', 'image' and 'mask' to the list of elements in the default style sheet which have 'overflow:hidden' as these elements are potentially viewport-creating elements and the 'overflow:hidden' applies to all viewport-creating elements.
  - Changed the 'style' attribute from animatable to non-animatable as all of the properties inside the attribute are already animatable.
  - Made the 'type' attribute on the 'style' element #REQUIRED; thus, there is no longer a default of "text/css". This matches HTML.
  - Added a 'contentStyleType' attribute to the 'svg' element to correspond to the previously defined 'contentScriptType' attribute. The default value for 'contentStyleType' is "text/css"; thus, all values for 'style' attributes default to CSS.
  - Added "svg { width:attr(width); height:attr(height) }" to the default style sheet. Reworded and cleaned up the descriptions in the section on the default style sheet.
- Changes to Document Structure
  - Removed restriction on forward referencing. The restriction prevented compatibility with SMIL/Animation, was inconsistent with other web standards, did not save implementers effort because resources not being available immediately has to be dealt with already, and the restriction might prove difficult for some implementers than not having the restriction.
  - Removed restriction that all referenced elements be defined in a 'defs'. The restriction prevented compatibility with SMIL/Animation and metadata reference objectives. Furthermore, there were worthwhile cases where file size was negatively impacted by the restriction. The restriction is now an authoring guideline which recommends that referenced elements by defined inside of a 'defs', largely to promote understandability and accessibility. Now, 'defs' and 'g' have the same content model, with the important distinction that the contents of a 'defs' do not drawn when the document is rendered as SVG on visual media. As part of the effort to make 'defs' and 'g' closely aligned, added a 'transform' attribute to 'defs'. The 'defs' example in the spec was modified slightly to reflect the changes.
  - Modified features strings to be of the format "org.w3c.svg.*" per feedback from the DOM WG.
  - Added a paragraph to the description of the 'title' element stating that the 'title' subelement to an 'svg' element serves the purposes of identifying the contents of the whole document and that authors should provide such a subelement and that user agents should display that subelement. This was done to make the language definition compatible with the description of the title property description on the SVGDocument DOM interface and to provide a defined way of telling user agents what string to put in the window title for stand-alone SVG documents.
  - Clarified the wording for 'defs', 'desc' and 'title' to say that these elements do not render with the document is being rendered as SVG on visual media.
  - Explicitly indicated that a 'use' can reference another 'use'.
  - Added the same child elements to an 'svg' that had been allowed on a 'g' or 'defs'.
  - More precisely defined how property values on referenced elements operate when the referenced element is rendered via a 'use' element. Using CSS terminology, property values that result from the CSS cascade, such as inline style or style assigned via style sheet selectors, carry over into a 'use' instance.
  - Changed the description of referencing to say xpointer(id(...)) instead of xptr(id(...)) due to change in XPointer Last Call draft of 06Dec1999.
  - DOM: Added the DOM2 DocumentEvent interface to the SVGDocument object explicitly. (DOM2 says that it is expected that all environments which support events will implement the DocumentEvent interface on its document objects.) Also added the DocumentEvent interface to the SVGSVGElement interface so that the createEvent() method is inherited and doesn't need to be redefined in the SVG DOM documentation.
  - DOM: Added some hit testing methods to SVGSVGElement, as hit testing capabilities were previously incomplete.
  - DOM: Fixed bug in DOM definitions where viewBox and preserveAspectRatio had been put in the DOM definitions for 'use' and 'image' inadvertently.
  - DOM: Included more details on viewport attribute for interface SVGSVGElement.
  - DOM: Included more details on useCurrentView and currentView attributes for interface SVGSVGElement.
  - DOM: Packaged up the getSVGDocument() method in a GetSVGDocument interface to match the approach in DOM2 for packaging getComputedStyle() and getOverrideStyle(). (This change is only a documentation change and requires no implementation changes.)
  - DOM: Various additions and modifications to exception definitions.
  - Added new attribute 'externalResourcesRequired' to allow authors to control which externally-referenced files must be present for a document to be considered correct.
  - Added examples to 'use' element to show the visual effect in terms of alternative SVG code which results in the same picture but without the 'use'.
  - Cleaned up the description of the 'symbol' element to remove incorrect statements about applications of 'symbol' elements and described how a 'symbol' differs from a 'g'.
  - Changed all of the feature strings to use a period to separate the major sub-names. Thus, instead of "SVGStatic" we now have "SVG.Static".
  - Added comments to the descriptions of the 'g' and 'symbol' elements about how use of each promotes accessibility.
- Changes to Coordinate Systems, Transformations and Units
  - Changed the write-up on viewBox and preserveAspectRatio to indicate that the default value for preserveAspectRatio is "xMidYMid meet". The ViewBox example had to be changed to set preserveAspectRatio="none" to make the example correct.
  - Added paragraphs and bullets to describe explicitly the formulas for converting objectBoundingBox-relative values into corresponding values in user space after feedback from an implementer that this wasn't clear.
  - DOM: Fixed a bug in the DOM where there was no way to modify an existing SVGTransform from one type of transformation to another. Added methods setMatrix, setScale, etc. As a result of the new methods, changed attribute matrix to readonly.
  - DOM: Renamed method scaleNonOrthogonal to scaleNonUniform.
  - DOM: Additional detail for method rotateFromVector, including statement that x and y cannot be zero.
  - DOM: Various additions and modifications to exception definitions.
  - DOM: SVGTransformList now inherits from SVGList.
  - Added a sentence to the Initial Viewport section to say that unitless values for width= and height= on the outermost 'svg' element is equivalent to "px" values. Improved the clarity on the description of the example in the same section.
- Changes to Paths
  - Provided some details for animating path data.
  - DOM: Various additions and modifications to exception definitions.
  - DOM: Modified packaging of path segments to reuse the newly defined SVGList interface.
  - DOM: Provided additional details on SVGPathSeg attributes.
  - DOM: A few changes to SVGPathElement and SVGPathSeg to allow for maintenance of existing path commands. Removed readonly designations on pathSegType and pathSegTypeAsLetter, as this prevented a path segment from changing from one type to another, and as a result prevented the creation of new SVGPathSeg objects. Added a createSVGPathSeg call on SVGPathElement as there was no way to create an SVGPathSeg.
  - DOM: Renamed x0,y0,x1,y1 to x1,y1,x2,y2 on SVGPathSeg.
  - DOM: Removed attributes ownerSVGDocument, previousSibling, nextSibling and parentPath from SVGPathSeg as other interfaces which are members of lists do not have similar facilities.
- Changes to Basic shapes
  - Removed statement about negative values for rx, ry attributes being treated as zeroes, as this was inconsistent with statement earlier that the absolute value of these properties was used instead.
- Changes to Text
  - Added system-required and system-language to 'altGlyph' to be consistent with other elements that can hold text content.
  - Added 'desc' and 'title' children to 'text' element, per feedback from WAI reviewers.
  - Fixed DTD error and removed 'use' as a child of a 'text' element.
  - Changed DTD definition of 'a', 'text', 'tspan' and 'textPath' elements to allow it to be used within a 'text' element. (For details, see descriptions in other sections.)
  - Added paragraph recommending that at most one 'desc', 'title' or 'defs' be provided for each 'text'.
  - Incorporated updated descriptions on baseline-alignment operators from collaboration among the XSL, CSS and I18N groups. Renamed and re-organized the section formerly titled "Text alignment properties". Incorporated new property 'dominant-baseline'. Renamed 'glyph-anchor' to 'baseline-identifier'. Added informative references to the Open Type specification.
  - Fixed 'dominant-baseline' to say it only applies to 'text' elements. (Previously, it had said as much in the text but not in the property definition.)
- Changes to Painting: Filling, Stroking and Marker Symbols
  - Removed vestigial text about using percentages on the 'fill-opacity' and 'stroke-opacity' properties. (Percentages aren't allowed, only fractions from 0 to 1.)
  - Explicitly state that stroke-dasharray does not support additive animation.
  - For attribute markerUnits, changed string 'stroke-width' to 'strokeWidth' to match camel case convention for attribute values.
  - DOM: Modified packaging of colors in an SVGICCColor to reuse the newly defined SVGList interface. Added attribute colorProfile to match the corresponding recent change in the language specification.
  - DOM: Moved definitions of SVGColor and SVGICCColor into color.html.
  - Changed all of the rendering properties from non-animatable to animatable as there was recognized value for this and it appears as easy to implement as not implement.
- Changes to Color
  - In the example syntax for @color-profile, removed the colon from "@color-profile: {...}" as the colon in incorrect CSS syntax.
  - DOM: Moved definitions of SVGColor and SVGICCColor from painting.html into this file.
- Changes to Gradients and Patterns
  - Added attribute 'class' to the 'stop' element to make in consistent with all other stylable elements.
  - Added cx and cy attributes and modified the r attribute in the radial gradient example so that the example will appear in its entirety when rendered.
  - Fixed an omission in earlier specs with the 'stop-color' property. Now the spec shows that currentColor and ICC-based color can be specified for the property.
  - DOM: Added an UNKNOWN constant for spread method to make consistent with the rest of the DOM.
- Changes to Clipping, Masking and Compositing
  - Removed vestigial text about using percentages on the 'opacity' property. (Percentages aren't allowed, only fractions from 0 to 1.)
- Changes to Filter Effects
  - Major rewrite of the chapter. The chapter now uses the same formatting style as the remainder of the specification. Added many, many hyperlinks. Cleaned up many of the descriptions. Added examples.
  - On feTurbulence, consolidated attribute 'baseFrequencyX' and 'baseFrequencyY' into a single attribute 'baseFrequency' to make it consistent with other attributes on various filter effects.
  - Added attributes to 'feImage' to support requirements for Exchange SVG and its documented ability to reference files or artwork elements.
  - Added new filter effect feConvolveMatrix, which allows for arbitrary n-by-m convolutionts.
  - Fixes to definition of the 'filter' property. Previously, the 'inherit' value was omitted, and it wasn't stated that the property was animatable.
  - The stdDeviation attribute to feGaussianBlur can now take one or two values. If two values are provided, then the first value is stdDeviationX and the second is stdDeviationY.
  - Included detail algorithms in the form of C language code for feTurbulence. Added attribute seed to allow the user to provide an initial seed value for the pseudo random number generator.
  - Provided missing formulas for lighten and darken modes for feBlend. Expressed other formulas more simply.
- Changes to Interactivity
  - Fixed error in DOM interfaces were keywords "readonly" and "attribute" were left out of interface definitions.
  - Explicitly state that enable-background in not animatable.
- Changes to Linking
  - Changed the description of referencing to say xpointer(id(...)) instead of xptr(id(...)) due to change in XPointer Last Call draft of 06Dec1999.
  - Fixed error in DOM interfaces where keywords "readonly" and "attribute" were left out of interface definitions.
  - Changed DTD definition of 'a' element to allow it to be used within a 'text' element.
  - Added paragraph recommending that at most one 'desc', 'title' or 'defs' be provided for each 'a'.
  - Added standard container attributes to the 'a' element to make consistent with other container elements.
- Changes to Scripting
  - Fixed ECMA Script example to be valid ECMA Script (had been missing the string "function") and replace a call to beep(), which doesn't work on most systems, with logic that does work.
  - Fixed bug in DOM definition for interface SVGScriptElement where property target had been put in advertently.
  - Changed contentScriptType attribute on 'svg' element to have a default value of 'text/ecmascript'. Referenced RFC2045 for how to specify a value for %ContentType;. Because of these changes, eliminated discussion about HTTP header handshaking.
  - Changed attribute 'language' to attribute 'type' to fix a long-standing mistake in the SVG specification.
- Changes to Animation
  - Updated to the definition of the ElementTimeControl and TimeEvent interfaces from the latest SMIL Animation draft. There is a TimeEvent which has event names "begin", "end" and "repeat". Method beginElementAtTimeOffset is now called beginElementAt. Method beginElementAtFractionOffset has been eliminated. There is a new method endElementAt.
  - Consolidate 'end' and 'endActive' attributes into a single 'end' attribute to conform to latest SMIL Animation spec.
  - Repackaged SVGAnimationEvent to match the latest work from the SYMM working group on the intended direction for how animation events will be packaged in SMIL Animation.
  - Shifted various attributes and methods from SVGAnimationEvent to SVGAnimationElement, per feedback comments from the SYMM working group.
  - Changed name of option "auto-reflect" for the 'rotate' attribute in 'animateMotion' to "auto-reverse" because "auto-reflect" was a misnomer - it didn't reflect, it just added a supplemental 180 degree rotation.
  - For improved clarity, reworded the description of the effect of additive behavior for 'animateTransform'.
  - State explicitly that event names in animation do not include the 'on' prefix. Thus, it is 'click', not 'onclick'.
  - Fixed bug in definitions of attributes 'additive' and 'accumulate' where the spec still said true/false instead of replace/sum and none/sum.
  - Various other minor modifications to conform to latest SMIL Animation spec.
- Changes to Fonts
  - Fixed error in DOM interfaces. All occurrences of SVGBaseKernElement are now SVGKernBaseElement.
  - Added comments about how SVG fonts can promote accessibility.
- Changes to Metadata
  - Removed the section talking about an SVG-specific metadata schema. Metadata activities specific to SVG will proceed as independent activities and will not be part of the SVG language specification.
- Changes to SVG DOM
  - Included examples for defining event listeners in Java and ECMA Script and described explicitly how event attributes work as event listeners in ECMA Script (i.e., receiving an Event object named evt).
- Changes to SVG DTD
  - A large number of changes related to having having separate namespaces for Stylable SVG and Exchange SVG. There are now three DTDs, shared, stylable and Exchange, where the shared DTD is included by the stylable and Exchange DTDs.
  - A large number of DTD cleanup actions. Most uses of CDATA have been replaced by an entity reference which describes the type of content a given attribute can have, such as "%Coordinate;". Performed a degree of triage to ensure consistent content among elements of the same category, such as all "container elements" having test attributes.
  - Renamed the title from "Document Type Definition" to "DTDs" to conform to documentation approach from the XHTML 1.0 Recomendation.
  - Fixed inadvertent omission and added attribute 'id' to all elements which didn't have it before, which includes the 'style', 'script', and individual filter effects (i.e., feBlend, feComposite, etc.).
  - Add xml:lang and xml:space to 'altGlyph' since this element can have character data content, and everything else with character data content has these attributes.
  - Fixed bug where 'altGlyph' was spelled 'altglyph' in a few spots.
  - Updated the URL for the XLink namespace to conform to the 20Dec1999 draft.
  - Fixed typo in definition of feBlend where it said "multiple" instead of "multiply".
  - Made the "type" attribute in feColorMatrix an enumerated list rather than just CDATA.
  - Removed attribute "in" from feMerge to fix a bug in the DTD.
  - Changed DTD definition of 'a', 'text', 'tspan' and 'textPath' elements to allow it to be used within a 'text' element. (For details, see descriptions in other sections.)
  - Fixed errors in DTD that prevented validation. Removed one occurrence of %testAttrs; from the 'svg' element. Loosened the DTD for 'text' and 'a' to allow for any number of 'desc', 'title' (or 'defs' for 'a') child elements in any order or position; however, the spec strongly recommends that only one 'desc' 'title or 'defs' appear for any element.
  - Removed refX, refY attributes from 'svg', 'symbol' and 'pattern' as these attributes are not used by any other part of the language.
- Changes to SVG DOM
  - Removed the gainselection and loseselection events as these were dropped from DOM2.
  - Defined entities %stdAttrs; (id), %langSpaceAttrs; (xml:lang, xml:space), %testAttrs; (system-reuqired, system-language) and %stylingAttrs; (class, style) and replaced all uses of the corresponding attributes with the given entities. This was done primarily to make the DTD and the DOM have consistent approaches.
  - Removed ambiguity regarding 'relatedNode' for clientX/clientY on mouse events. Now clarifies that the 'relatedNode' is the **outermost** 'svg' element, which means clientX/clientY are values in the initial coordinate system.
  - Added exception SVG_WRONG_TYPE_ERR.
  - Added exception SVG_INVALID_VALUE_ERR.
- Changes to Java Language Binding
  - ZIP file versions of the bindings for Stylable SVG and Exchange SVG are now available.
  - Changed all occurrences of DOMString to String.
  - Removed use of 'unsigned' data types. (This was an error in the previous version.)
  - Replaced all instances of 'long' in the IDL with 'int' in the Java binding, to conform to OMG's IDL-to-Java document.
  - Added "import org.w3c.dom.Element" to SVGDocument, SVGSVGElement as they all use interface Element directly.
- Changes to ECMA Script Language Binding
  - The ECMA Script bindings are now stored in files outside of the written specification.
  - There are now separate bindings for Stylable SVG and Exchange SVG.
- Changes to Implementation Requirements
  - Changed the wording under Version Control to replace 'must' with 'should' and generally make the language more reasonable.
  - Renumbered some sections to fix an editing error (there were two F.2 sections previously).
- Changes to Conformance Criteria
  - Adding a new section on Printing implementation notes, which now includes a recommendation that, on printing, the printouts should show the same view as seen on the screen (i.e., same zoom level).
  - Removed section on undefined areferences as all of the information in this section was already present in the Document Document chapter within the section on referencing.
  - Per suggestion from Ian Jacobs and approved by the working group, this appendix is now normative rather than informative.
  - Per working group decision, added a statement indicating that a conforming viewer which supports HTTP needs to properly support Accept-Encoding: gzip.
  - Per working group decision, added a statement indicating that a conforming viewer is required to support the "data:" protocol wherever URI referencing is allowed..
  - Clean-up of the language on some of the items in this appendix.
- Changes to Accessibility Support
  - Rewrite of nearly the entire content of this appendix per coordination efforts with the WAI team. The section on aural styling has been moved into the Styling chapter. Much of the old content will be part of a new document to be published simultaneously to the SVG recommendation which provides detailed guidelines for creating accessible SVG content.
- Changes to References
  - Updated several references after comparing SVG's references to those in HTML 4.01.
  - Updated HTML reference to HTML 4.01.
  - Moved "Web Content Accessibility Guidelines" into the normative section as it is referenced by normative sections of the specification.
  - Added a normative reference for JPEG.
  - Added a normative reference for "data:" protocol.
  - Added a normative reference for Porter Duff article from 1984 SIGGraph proceedings.
  - Updated the HTTP reference to point to the 1999 W3C document. Moved the HTTP reference into the normative section as a normative section of the SVG specification references the HTTP specification.
  - Added an informative reference for OpenType.
  - Updated the reference for sRGB.

## Changes with the 03-December-1999 SVG Draft Specification

- Global/miscellaneous changes
  - Considerable miscellaneous editorial cleanup throughout, including significant rearrangement of content and reordering of chapters.
  - Provided considerable more detail about SVG's DOM interfaces. The DOM interfaces are not provided at the end of the chapters to which they most relate.
  - Added a new chapter called Basic Data Types and Interfaces which provides a single definition of things such as <number> and <length>.
  - Changed all references to element start tags such as "the <svg> element" with single-quoted references such as "the 'svg' element".
  - Added an indication for each attribute and property about whether it can be animated.
  - Added a navigation bar at the bottom of all pages.
- Changes to Introduction
  - Added a new section 1.6 Error processing which describes user agents error handling.
  - Modified the wording about relationship to SMIL to emphasize that SVG static or animated content is designed to be used as a component media for future versions of SMIL.
  - Changed the name of section 1.4 from Terminology to Definitions to match the approach taken in the CSS spec. Removed definition of "number" as this is now defined under Basic Data Types.
  - Added a new section 1.5 called Terminology to Terminology to define the terms "must", "required", etc.
- Changes to Basic Data Types and Interfaces
  - Provided more explicit range information on integers and numbers.
  - Modified all DOM interfaces to use "float" instead of "double" per decision that conforming implementations need only support single-precision floating point operations.
- Changes to SVG Rendering Model
  - Added a note about markers drawing in order according to the directionality of the shape, and added a note that marker symbols are rendered as if their graphics content were expanded into the document tree..
- Changes to Document Structure
  - Modified the wording in the section on URI references to say that invalid references are errors and handled by standard user agent error processing behavior, per decision by the working group to have consistent error handling.
  - Removed methods open, close, write, writeln from SVGSVGElement as these will be obsoleted for HTML down the road and equivalent capability is possible by manipulating the DOM tree.
  - For interface SVGDocument, added a forceRedraw() method.
  - Modified the description of SVGDocument to clarify that an SVGDocument object only exists when the 'svg' element is the root element of the document hierarchy,
  - Moved various utility functions that had been part of interface SVGDocument to interface SVGSVGElement since SVGDocument will not exist in all cases.
  - Clarified that an 'image' creates its own document tree and doesn't inherit properties.
  - Moved 'switch', 'system-required' and the new 'system-language' to Document Structure.
  - Added attribute system-language, from SMIL 1.0, for all elements that have attribute system-required to provide the mechanism for multiple localized text strings for the same document, as noted in previous draft specifications. Documented in The system-language attribute
  - Defined SVG's available feature strings for "hasFeature" method call and "system-required" attribute.
  - Modify system-required to be NMTOKEN instead of CDATA to match SMIL 1.0. Modify example to use an NMTOKEN instead of a URL.
- Changes to Styling
  - Changed the title of the chapter from "Styling and CSS" to "Styling" to re-inforce that SVG content can be styled by either CSS or XSL.
  - Added an introduction talking about styling with both XSL and CSS.
  - Modified many descriptions so that they apply to both CSS and XSL.
  - Added descriptions for the 'style' and 'class' attributes.
  - Modified the description of the 'display' property to eliminate the SVG-specific value "svg" and to say that anything other than 'none' indicates that the given element can be rendered.
  - Indicate that CSS dynamic pseudo classes :hover, :active, :focus are supported.
  - Added a bullet about aural style sheet support.
  - The 'overflow' and 'clip' properties have been moved to the Clipping and Masking chapter. (See Masking notes below.)
  - Modified the default style sheet so that the overflow property has an initial value of 'hidden' for all elements in the SVG language. This is necessary to achieve the default behavior that new viewports also establish new clipping paths.
  - Modified the default style sheet to eliminate the reference to 'display:svg'. Until CSS3, which is expected to provide general purpose methods for associating user agents with particular XML namespaces, user agents will have to have special detection for SVG documents and fragments.
  - In the default style sheet, included all methods which support the viewBox attribute to have a default value of 'hidden' for the 'overflow' property.
- Changes to Coordinate Systems, Transformations and Units
  - Major editorial cleanup. Switch to column vectors instead of row vectors. Change wording per suggestions from various members of the working group. Added many examples and supportive pictures.
  - Fix errors in Pythagorean formula examples where a comma needed to be replaced by a plus-sign.
  - Fixed a long-standing error in the section describing how to set up a new viewport where the example and some of the write-up referred to using CSS properties left/right/top/bottom/etc instead of attributes x/y/width/height. Now this chapter is correct and consistent with the descriptions of the x/y/width/height attributes for the 'svg' element.
- Changes to Paths
  - Removed the erroneous reference to the "B" and "b" commands, which don't exist in the current specification.
  - Fixed BNF to remove possibility of trailing comma at the end of a command, such as "M 100,100, L 200,200,". This is no longer valid, and instead you have to remove the extraneous commas, as in "M 100,100 L 200,200".
  - Changed the path data BNF to eliminate ambiguous productions (i.e., when two productions could satisfy a given path specification).
  - Added a note indicating that the path data parser needs to be greedy (i.e., consume all characters that continue to satisfy a production).
  - Added a comment to the distance-along-a-path chapter stating that "moveto" operations do not contribute to the distance calculations.
  - Removed "flatness" attribute due to statement in conformance criteria that rendering needs to be within a device pixel.
  - Defined animation behavior for booleans that are part of the arc command.
  - Enhanced the write-up of attribute 'length' and clarified "distance-along-a-path."
  - Fixed errors in SVG DOM where it was inconsistent with our newer arc command.
  - For interface SVGPathElement, added distance-along-a-path utiltiy functions getTotalLength(), getPointAtLength() and getPathSegAtLength().
- Changes to Basic shapes
  - Thorough editorial cleanup of this chapter, providing more precise language and illustrating with pictures.
  - Fixed BNF to remove possibility of trailing comma at the end of the points list, such as "100,100,200,200,". This is no longer valid, and instead you have to remove the extraneous ending comma, as in "100,100,200,200".
- Changes to Text
  - Major cleanup, reorganization and rewriting of sections in preparation of Proposed Recommendation. Sections have been renumbered and content has been shuffled between sections. Very detailed descriptions have been provided for all layout rules, including text on a path and text selection. Several drawings have been added.
  - Incorporation of Last Call feedback from the I18N interest group, Last Call internationalization feedback from the XSL working group, and Last Call feedback from the CSS and FP working groups. Detailed changes are listed as follows.
  - Various editorial clean-up actions, including more careful use of the terms "character" and "glyph".
  - Added a section entitled Characters and their corresponding glyphs to clearly describe the differences and relationships between XML characters and glyphs.
  - Broke up the 'tspan' element into two separate elements, 'tspan' and 'tref', per Last Call feedback from the I18N interest group. The 'href' attribute has been removed from the 'tspan' element. All referenced to non-embedded character data are done with the 'tref' element. The 'tref' element is not allowed to have embedded character data.
  - Changed the descriptions of the x,y,dx,dy and rotate attributes to the 'tspan' element to correspond to characters rather than glyphs, per Last Call feedback from the I18N interest group.
  - Wrote up how x,y,dx,dy and rotate attributes on the 'tspan' element work with the bi-directionality algorithm, reflecting Last Call feedback from the XSL and I18N working groups.
  - Substituted SVG-specific property 'text-anchor' for 'text-align' and 'glyph-anchor' for 'vertical-align', per Last Call feedback comments from the I18N interest group and the XSL working group. Both 'text-align' and 'vertical-align' are meant for block text and did not fit with SVG's single-line approach to text-at-a-point and text-on-a-path.
  - Added property 'baseline-shift' per Last Call feedback comments from the I18N interest group and the XSL working group. The XSL working group is still developing the definition of this property. The current definition in the SVG spec is a placeholder which might require modifications as the XSL definition of the property gets further formulated.
  - Allow for nested 'tspan' elements so that 'baseline-shift' properties can be nested, to allow for (as an example) exponents of exponents.
  - Replaced properties textPath-transform and orient-to-path properties with attribute 'rotate', which directly addresses the desired feature (i.e., precisely specified text-on-a-path when the SVG text-on-a-path algorithm doesn't provide sufficient precision), doesn't introduce additional unnecessary and hard-to-use capability, and which has a parallel construction with the dx and dy attributes.
  - Changed 'altglyph' from a property to an element, 'altGlyph', per Last Call feedback comments from the I18N interest group and the XSL working group. To complete the definition of the altglyph capability, other new elements include 'altGlyphDef' and 'glyphSub'. 'altGlyph' can appear within a 'text' element and refers to either a glyph defined in an SVG font or an 'altGlyphDef' element. 'altGlyphDef' is a child of 'defs'.
  - Removed the ability to include a 'use' element as a child of a 'text', 'tspan' or 'textPath' element, per discussions derivative of Last Call feedback on internationized text issues. Instead, it was felt that SVG-on-a-path was better accomplished by including the SVG-on-a-path as a glyph defined in the private section of Unicode.
  - Added a sentence in Relationship with bi-directionality indicating that the default orientation for Arabic text when rendered in a vertical text string is rotated 90 degrees counter-clockwise, which is the same as for Roman text.
  - Rephrased the description of the W3C character model in the section on Alternate glyphs to avoid the impression that normalization eliminates compatibility equivalents, per Last Call feedback comments from the I18N interest group.
  - Made clear that the x,y,dx and dy attributes on the 'tspan' element can be used for both minor and major adjustments of the current text position, per Last Call feedback comments from the I18N interest group.
  - Made clear that text selection in bi-directional situations selects text that is contiguous in lexical order, with user agents given the option of providing an alternative text selection facility in visual rendering order. This addresses Last Call feedback comments from the I18N interest group.
  - For White space, modified the rule for xml:space='default' to throw out all line breaks. This accommodates Last Call feedback comments from the I18N interest group that many languages would not want automatic generation of white space if character data were spread across multiple lines. By making this change, then Roman text will need to include explicit white space wherever word separators are needed (possibly achieved by simply indenting the text data).
  - Removed the paragraph about the "uu" suffix with the font shorthand property. This paragraph was in the previous spec only because of an editorial error.
  - Added a paragraph to Introduction recommending the use of appropriate semantic markup along with 'text' elements to make SVG documents more accessible, per Last Call feedback comments from Daniel Dardailler of the Web Accessibility Initiative (WAI).
- Changes to Painting: Filling, Stroking and Marker Symbols
  - Added definitions of properties 'color-interpolation' and 'color-rendering' to control whether color computations are performed in the sRGB or linearRGB color spaces and to provide speed/quality rendering hints to the user agent.
  - Added 'inherit' as a value for 'fill-opacity'. (It already existed for 'stroke-opacity'.)
  - Added a note to stroke properties that all stroke operations must begin at the start of the graphics element and must employ the user agent's distance-along-a-path algorithms.
  - Added a note that complex paint servers such as gradients and patterns must produce the same result as if the stroke were converted to a 'path' and then filled with the given paint server.
  - Added 'userSpaceOnUse' to markerUnits per working group decision to enhance re-usability of referenced elements used in 'defs' and to achieve consistency across all types of referenced elements.
  - Added short descriptions of the available values for 'color-interpolation', which were missing in previous drafts.
  - Added a note that ICC color values cannot be expressed as percentages and indicates that ICC color values are <number>s.
  - Reworded descriptions of 'stroke-opacity' and 'fill-opacity' about value clamping.
  - Copied explicit formulas for converting sRGB to linearRGB from http://www.w3.org/Graphics/Color/sRGB.
  - For Rendering Properties, changed attribute value 'default' to 'auto' per Last Call comments from the CSS and FP working groups.
  - When a URI is provided for 'fill' or 'stroke', there used to be an 'inherit' value available as a back-up option in case the URI were invalid. Because the 'inherit' backup option causes serious complications with regard to the DOM, this little used option has been removed.
- Changes to Color
  - Merged properties 'color-profile' and 'rendering-intent' into a "color profile description" described by an @color-profile construct. As a result, ICC color definitions now take an additional initial parameter, which is the name of the profile to use.
  - Fixed a couple of errors with the 'color' property. First, removed the reference to the 'color' property being used for gradient stops. (Actually, it is the 'stop-color' property that applies to gradient stops.) Second, removed the 'icc-color' option, as this was present only to address the needs of gradient stops. (This removal also serves to sidestep the issue of why SVG is extending this very widely used existing CSS2 property.)
- Changes to Gradients and Patterns
  - Added xlink:href attribute to gradient and pattern elements, which allows one gradient/pattern to inherit attributes and (in the case of gradients) a gradient ramp from a previously defined element of the same type. This addition promotes re-usability of gradients and patterns and thus promotes more compact files.
  - Added 'userSpaceOnUse' to gradientUnits and patternUnits per working group decision to enhance re-usability of referenced elements used in 'defs' and to achieve consistency across all types of referenced elements.
  - Fixed examples of gradient stops which erroneously used 'stop-color' instead of 'color'.
- Changes to Clipping, Masking and Compositing
  - Added 'inherit' values to 'opacity', 'mask' and 'clip-path' to correct an error in the spec.
  - Removed percentage values from the 'opacity' property per Last Call comments from the CSS and FP working groups.
  - Added a drawing which illustrates various 'opacity' settings on objects and groups. The drawing illustrates the accumulative effects of opacity, which addresses one of the Last Call comments from the CSS and FP working groups.
  - Added explicit alpha blending formulas to Simple alpha blending/compositing.
  - Removed wording about approximating sRGB with 2.2 exponent since precise formulas involve little extra computation.
  - Changed wording for the 'mask' element to clarify exactly when one-channel masking happens and when luminance-to-alpha processing happens, and changed the formulas for luminance-to-alpha to use the same formulas as the feColorMatrix filter effect.
  - The 'overflow' and 'clip' properties have been moved to this section.
  - Elaborated on the 'overflow' and 'clip' properties. In particular, the specification now states explicitly state in words that the effect of the default style sheet having svg { overflow:hidden } is that the default behavior has the SVG user agent clipping to the bounds of the initial viewport. Also, discuss the effect of these properties on embedded 'svg' elements and the difference between clipping to the viewBox versus clipping to the viewport.
  - Added clipPathUnits="userSpace|userSpaceOnUse|objectBoundingBox" and added 'userSpaceOnUse' to maskUnits per working group decision to enhance re-usability of referenced elements used in 'defs' and to achieve consistency across all types of referenced elements.
  - For 'clipPath', changed wording on invalid references to say that standard error processing would apply.
  - Added clarification for the 'clipPath' element and clipping path inheritance rules (i.e., a 'clipPath' does not inherit clipping paths from its ancestors, but it can use the 'cli-path' property to explicitly indicate that the clipping path itself must be clipped.).
  - Changed the wording for the 'mask' and 'clip-path' properties to say that invalid references are errors and handled by standard user agent error processing behavior, per decision by the working group to have consistent error handling.
  - Reworded descriptions of 'stroke-opacity' and 'fill-opacity' about value clamping.
- Changes to Filter Effects
  - Added xlink:href attribute to the 'filter' element, which allows one filter to inherit attributes and the filter effect definition from a previously defined 'filter' element. This addition promotes re-usability of filters and thus promotes more compact files.
  - Added 'userSpaceOnUse' to filterUnits per working group decision to enhance re-usability of referenced elements used in 'defs' and to achieve consistency across all types of referenced elements.
  - Replaced the old initial example with one that actually works.
  - For feColorMatrix, changed hue-rotate and luminance-to-alpha to hueRotate and luminateToAlpha to conform to camel notation conventions found in the rest of the spec.
  - Added 'inherit' values to 'enable-background' to correct an error in the spec.
  - Fixed typos in description of hueRotate in feColorMatrix to say [a00 a01 a02] [a10 a11 a12] [a20 a21 a22].
  - Added x, y, width, height attributes to all filter effects, per resolution by SVG working group to provide sufficient information for feImage and feTile to know what to do.
  - Added stitchTiles attribute and changed baseFrequency to baseFrequencyX and baseFrequencyY in feTurbulence to allow for small tiles of generated noise which can be stitched together.
  - Fixed error in example from 110% to 120%.
- Changes to Interactivity
  - Expanded the Introduction.
  - Included detailed rules for handling pointer events.
  - Added property 'pointer-events', which the working group decided to add at the Ottawa face-to-face meeting but which did not make it into the Last Call specification due to an editorial error.
  - Modified the description for 'cursor' element to explain that its primary purpose is to provide for a platform-independent cursor adding a hot spot to a PNG used as the source image per Last Call comments from the CSS and FP working groups.
  - Defined terms zoom, pan and magnify. Emphasized that zoom and pan are required for user agents in interactive environments, and that magnification is recommended. Documented that zoom does not change meaning of CSS units, per working group decision.
  - Renamed "allowZoomAndPan" to "enableZoomAndPanControls" per working group decision.
- Changes to Scripting
  - Added event attributes onfocusin, onfocusout, ongainselection, onloseselection, onactivate, onresize and onscroll to match events in DOM2.
  - In the description of Document events, modified the description of "onload" to mean that the element and its descendants are ready to be rendered but that external resources are not necessarily available yet, per working group decision.
- Changes to Animation
  - Major update to track new versions of the SMIL-Animation specification.
  - Added the 'set' element from SMIL animation
  - Dropped the 'animateFlipbook' element per request from the SYMM working group, since the same functionality will be available using other facilities and concerns about 'animateFlipbook' being too close to the SMIL 'par' element.
  - Added a type attribute to 'animateTransform' to explicitly disallow mixing of different types of transformations within the same animation element.
  - Added an "auto-reflect" option to the rotate attribute to make it easy to pick with which side of the motion path the target element will rotate.
  - Add keyPoints as an additional SVG extension to compensate for SMIL Animation's changes in semantics to 'animateMotion' since the SVG Last Call draft of 12Aug1999.
  - Added some pictures.
  - Indicated that the 'color-interpolation' property applies to color interpolations that result from 'animateColor'.
- Changes to Linking
  - Removed the #FIXED setting on 'xlink:show' on the 'a' element to allow for "new" vs. "replace" per Last Call comments from the CSS and FP working groups.
  - Changed 'parsed' to 'embed' to match upcoming expected revisions to XLink.
  - Added 'target' attribute to 'a' element.
- Changes to Fonts
  - Renamed all attributes and elements that used to use camelCaseNotation to use lowercase-separated-by-hyphens notation so that names match the corresponding CSS properties, per Last Call comments from the CSS, FP and I18N groups.
  - Renamed full-font-name to font-face-name to match CSS2. (The previous name was chosen by error.)
  - Replaced the 'kern' element with 'hkern' and 'vkern' elements to support vertical kerning, per feedback comments from the I18N and XSL working groups.
  - The value of the 'unicode' attribute on the 'glyph' element is now just a regular old Unicode character, possibly expressed as a character reference, per feedback comments from the I18N and XSL working groups. Modified the descriptions of the 'hkern' and 'vkern' elements' u1 and u2 attributes, accordingly. In the process, cleaned up the wording for the u1, g1, u2 and g2 attributes and also the introductory wording about the kerning elements.
  - Added a note that Arabic glyph widths are required to be positive, per feedback comments from the I18N and XSL working groups.
  - Added required attributes text-top, hanging, ideographic and text-bottom to the 'font' element, per feedback comments from the I18N and XSL working groups.
  - Replaced the term "standard" with "isolated" for attribute 'arabic', per feedback comments from the I18N interest group.
  - Modified the rule for prioritizing which 'glyph' is chosen to match current font practice, per feedback comments from the I18N and XSL working groups. Now, the first 'glyph' in lexical order which matches the sequence of characters to be rendered gets chosen.
  - Included a recommendation that the glyphName attribute be unique across a given SVG font.
  - Changed the glyphName attribute such that a single string rather than a list of strings is provided to better match the needs of the newly revised kerning elements.
  - Removed attribute 'bbox' per font discussion in the SVG working group with representation from the Unicode Corsortium and Apple's font group. The conclusion was that it was better for the viewing to calculate the bbox from the available graphical information. Changed horiz-adv-x to be #REQUIRED on the 'font' element, since removal of bbox removed its fallback value. Changed the default for vert-origin-x to be half of horiz-adv-x, since removal of bbox removed its fallback value. Changed the default for vert-adv-y to be the sum of attributes ascent and descent, as removal of bbox removed its fallback value.
- Changes to Extensibility
  - Updated the example. References Dublin Core 1.1 instead of 1.0.
- Changes to Extensibility
  - Moved 'switch', 'system-required' and the new 'system-language' to Document Structure.
- Changes to SVG DTD
  - Various changes to correspond to changes described above.
  - Added attribute system-language, from SMIL 1.0, for all elements that have attribute system-required to provide the mechanism for multiple localized text strings for the same document, as noted in previous draft specifications.
  - Added entities %descTitle and %descTitleDefs to remove the restriction that child elements 'desc', 'title' and 'defs' had to appear in a particular order. Now, at most one can appear, and any order is allowed.
  - Scattered null entities xxxExt (e.g., svgExt, gExt, pathExt) throughout the DTD to allow extensions to the SVG language via the internal DTD subset.
  - Removed the #FIXED attribute to xlink:show to allow for "new" vs. "replace".
  - Changed 'parsed' to 'embed' for XLink.
  - Added 'target' attribute to 'a' element.
  - Removed #FIXED from the specification for the 'type' attribute on the 'style' element. (The #FIXED was just an editorial error.)
  - Various text-related and font-related changes, described above under "Text" and "Fonts".
  - Removed graphic element events and system-required from 'desc' as it must have been an error to have these attributes in the first place.
  - Add a 'metadata' child element to the 'svg' element and defined the 'metadata' element. (This element was defined in the spec but left out of the DTD inadvertently.)
  - Added the 'view' element, which by oversight had been left out of the previous DTD. Modified 'defs' to allow 'view' as a child element.
  - Added standard attributes id, lang, class, style, etc. to <textPath>. (Previous error of omission.)
  - Make an entity for all standard XLink attributes other than xlink:href.
  - Lots of changes to which elements have which animation elements as children to match the tables in the animation chapter that show which Elements, attributes and properties that can be animated
- Changes to SVG DOM
  - Major editorial modifications, including a good deal of reorganization. Detailed descriptions of relationship to DOM2, including CSS OM and DOM2 Events.
  - Moved detailed interface definitions into chapters which describe corresponding elements and features.
  - Defined SVG's available feature strings for "hasFeature" method call and "system-required" attribute.
  - Renamed suspend_redraw, unsuspend_redraw and unsuspend_redraw_all to suspendRedraw, unsuspendRedraw and unsuspendRedrawAll per suggestion from the DOM working group.
- Changes to Implementation Requirements
  - Changed the title of the appendix to "Implementation Requirements" instead of "Implementation Notes" to emphasize the fact that this appendix is normative.
  - Added a section Version control which says that SVG user agents should only render documents which have a reference to the SVG DTD and for which the reference points to a DTD which the user agent supports.
  - Added a bullet to the implementation notes on path data on error handling stating that the rendering should continue up to and including the last correctly defined path segment, even if it is in the middle of a compound path command such as "L 100 200 100 400".
  - Modified the wording in Forward and undefined references to say that invalid references are errors and handled by standard user agent error processing behavior, per decision by the working group to have consistent error handling.
  - Added a section Clamping values which are restricted to a particular range to indicate that out-of-range values get clamped at the latest possible moment.
  - Added a section Elliptical arc implementation notes which provides the details on how to implement elliptical arcs in SVG path data.
  - Under Text selection implementation notes, added a paragraph that talks about user agents providing an ability to select text strings which might have an associated event handler or link.
  - Modified the description of the text selection algorithm for user agents to be consistent with the two-stage text layout processing model (i.e., first re-order characters into visual rendering order, and then position the characters, do ligatures, do kerning, etc.).
- Changes to Conformance Criteria
  - Now there are four types of Conforming SVG Viewers: Conforming Static SVG Viewer, Conforming Dynamic SVG Viewer, Conforming High-Quality Static SVG Viewer, Conforming High-Quality Dynamic SVG Viewer, per feedback from people within in SVG working group.
  - Reworded the reference to accessibility authoring guidelines, per Last Call feedback from WAI.
  - Added a conformance requirement for viewers that encourages conformance to the WAI user agent guidelines, per Last Call feedback from WAI.
  - Expanded the bullet point about a Conforming SVG Document needing to be validatable after removing non-SVG elements and attributes.
  - Added a comment about a conforming SVG interpreter requiring an XML Parser that supports XML 1.0 and XML Namespaces.
  - Added a bullet stating that High-Quality SVG Viewers need to support double-precision floating point operations on coordinate system transformation numerical operations
  - For Conforming SVG Viewers, added bullets stating that rendering must be accurate to within one device pixel and sRGB colors must be accurate to within one color value.
- Changes to Accessibility Support
  - General editorial cleanup.
  - Made additions and changes to Accessibility and SVG about the potential for harming the accessibility of information if representing information in pure visual, final-form SVG, per Last Call feedback comments from Daniel Dardailler of the Web Accessibility Initiative (WAI).
  - Listed the aural style sheet properties from CSS2 as the set of properties which will be available in user agents that support aural properties.
  - Transformed the various notes and comments about accessibility from the Last Call spec into a consolidated bulleted list of SVG-specific accessibility guidelines.
- Changes to References
  - Shifted some references from being informative to normative and vice versa as part of general editorial cleanup.
  - Added a normative reference to [RFC2119] for definitions of some of the terms used in this specification.
  - Added a normative reference to "SMIL Animation", which SVG will reference normatively.
  - Added an informative reference to [XSL].
  - Added many references into specific sections of referenced specs, such as references to various property definitions from the CSS2, DOM2 and SMIL-Animation spec.
  - Added a normative reference to the PNG specification.
  - Modified ACCESS to refer to ACCESS-AUTHOR/ATAG.
  - Added ACCESS-USERAGENTS/UAAG.
  - Added a normative reference to RFC1766 for language identification.

previous contents properties index